From 6f12a19b14b5d6452a72d5a916520b581efef63e Mon Sep 17 00:00:00 2001 From: Ricki Hirner Date: Fri, 27 Sep 2013 18:19:07 +0200 Subject: [PATCH] biweekly 0.3 -> 0.3.1, incomplete time zone support for events, Android-compatible Lombok --- AndroidManifest.xml | 4 +- README.md | 1 + .../biweekly-0.3.0.jar | Bin 299206 -> 0 bytes .../jackson-core-2.1.3.jar | Bin 206797 -> 0 bytes libs/biweekly-0.3.1-javadoc.jar | Bin 0 -> 2584621 bytes .../META-INF/MANIFEST.MF | 6 + .../allclasses-frame.html | 464 ++ .../allclasses-noframe.html | 464 ++ .../Biweekly.ParserChainJsonReader.html | 351 + .../Biweekly.ParserChainJsonString.html | 337 + .../Biweekly.ParserChainTextReader.html | 374 ++ .../Biweekly.ParserChainTextString.html | 366 ++ .../Biweekly.ParserChainXmlDocument.html | 337 + .../Biweekly.ParserChainXmlReader.html | 349 + .../Biweekly.ParserChainXmlString.html | 343 + .../biweekly/Biweekly.WriterChainJson.html | 389 ++ .../biweekly/Biweekly.WriterChainText.html | 431 ++ .../biweekly/Biweekly.WriterChainXml.html | 444 ++ .../biweekly/Biweekly.html | 957 +++ .../biweekly/ICalDataType.html | 595 ++ .../biweekly/ICalException.html | 265 + .../biweekly/ICalendar.html | 1141 ++++ .../ValidationWarnings.WarningsGroup.html | 404 ++ .../biweekly/ValidationWarnings.html | 465 ++ .../Biweekly.ParserChainJsonReader.html | 221 + .../Biweekly.ParserChainJsonString.html | 205 + .../Biweekly.ParserChainTextReader.html | 229 + .../Biweekly.ParserChainTextString.html | 213 + .../Biweekly.ParserChainXmlDocument.html | 205 + .../Biweekly.ParserChainXmlReader.html | 223 + .../Biweekly.ParserChainXmlString.html | 205 + .../class-use/Biweekly.WriterChainJson.html | 197 + .../class-use/Biweekly.WriterChainText.html | 199 + .../class-use/Biweekly.WriterChainXml.html | 222 + .../biweekly/class-use/Biweekly.html | 145 + .../biweekly/class-use/ICalDataType.html | 1265 ++++ .../biweekly/class-use/ICalException.html | 254 + .../biweekly/class-use/ICalendar.html | 489 ++ .../ValidationWarnings.WarningsGroup.html | 250 + .../class-use/ValidationWarnings.html | 182 + .../component/DaylightSavingsTime.html | 287 + .../biweekly/component/ICalComponent.html | 1072 ++++ .../biweekly/component/Observance.html | 789 +++ .../biweekly/component/RawComponent.html | 289 + .../biweekly/component/StandardTime.html | 287 + .../biweekly/component/VAlarm.html | 994 +++ .../biweekly/component/VEvent.html | 2430 +++++++ .../biweekly/component/VFreeBusy.html | 1087 ++++ .../biweekly/component/VJournal.html | 1924 ++++++ .../biweekly/component/VTimezone.html | 618 ++ .../biweekly/component/VTodo.html | 2486 +++++++ .../class-use/DaylightSavingsTime.html | 226 + .../component/class-use/ICalComponent.html | 1115 ++++ .../component/class-use/Observance.html | 191 + .../component/class-use/RawComponent.html | 251 + .../component/class-use/StandardTime.html | 226 + .../biweekly/component/class-use/VAlarm.html | 298 + .../biweekly/component/class-use/VEvent.html | 226 + .../component/class-use/VFreeBusy.html | 242 + .../component/class-use/VJournal.html | 226 + .../component/class-use/VTimezone.html | 271 + .../biweekly/component/class-use/VTodo.html | 226 + .../component/doc-files/shBrushJava.js | 57 + .../biweekly/component/doc-files/shCore.js | 17 + .../DaylightSavingsTimeMarshaller.html | 292 + .../marshaller/ICalComponentMarshaller.html | 443 ++ .../marshaller/ICalendarMarshaller.html | 292 + .../marshaller/RawComponentMarshaller.html | 296 + .../marshaller/StandardTimeMarshaller.html | 292 + .../marshaller/VAlarmMarshaller.html | 292 + .../marshaller/VEventMarshaller.html | 292 + .../marshaller/VFreeBusyMarshaller.html | 319 + .../marshaller/VJournalMarshaller.html | 292 + .../marshaller/VTimezoneMarshaller.html | 292 + .../component/marshaller/VTodoMarshaller.html | 292 + .../DaylightSavingsTimeMarshaller.html | 145 + .../class-use/ICalComponentMarshaller.html | 515 ++ .../class-use/ICalendarMarshaller.html | 182 + .../class-use/RawComponentMarshaller.html | 145 + .../class-use/StandardTimeMarshaller.html | 145 + .../class-use/VAlarmMarshaller.html | 145 + .../class-use/VEventMarshaller.html | 145 + .../class-use/VFreeBusyMarshaller.html | 145 + .../class-use/VJournalMarshaller.html | 145 + .../class-use/VTimezoneMarshaller.html | 145 + .../marshaller/class-use/VTodoMarshaller.html | 145 + .../marshaller/doc-files/shBrushJava.js | 57 + .../component/marshaller/doc-files/shCore.js | 17 + .../component/marshaller/package-frame.html | 53 + .../component/marshaller/package-summary.html | 198 + .../component/marshaller/package-tree.html | 156 + .../component/marshaller/package-use.html | 272 + .../biweekly/component/package-frame.html | 53 + .../biweekly/component/package-summary.html | 207 + .../biweekly/component/package-tree.html | 158 + .../biweekly/component/package-use.html | 443 ++ .../biweekly/doc-files/shBrushJava.js | 57 + .../biweekly/doc-files/shCore.js | 17 + .../biweekly/io/CannotParseException.html | 271 + .../biweekly/io/ICalMarshallerRegistrar.html | 539 ++ .../biweekly/io/SkipMeException.html | 271 + .../io/class-use/CannotParseException.html | 192 + .../io/class-use/ICalMarshallerRegistrar.html | 319 + .../io/class-use/SkipMeException.html | 145 + .../biweekly/io/doc-files/shBrushJava.js | 57 + .../biweekly/io/doc-files/shCore.js | 17 + .../biweekly/io/json/JCalParseException.html | 310 + .../JCalRawReader.JCalDataStreamListener.html | 252 + .../biweekly/io/json/JCalRawReader.html | 374 ++ .../biweekly/io/json/JCalRawWriter.html | 486 ++ .../biweekly/io/json/JCalReader.html | 518 ++ .../biweekly/io/json/JCalValue.html | 515 ++ .../biweekly/io/json/JCalWriter.html | 622 ++ .../biweekly/io/json/JsonValue.html | 436 ++ .../io/json/class-use/JCalParseException.html | 145 + .../JCalRawReader.JCalDataStreamListener.html | 181 + .../io/json/class-use/JCalRawReader.html | 145 + .../io/json/class-use/JCalRawWriter.html | 145 + .../io/json/class-use/JCalReader.html | 145 + .../biweekly/io/json/class-use/JCalValue.html | 661 ++ .../io/json/class-use/JCalWriter.html | 145 + .../biweekly/io/json/class-use/JsonValue.html | 237 + .../biweekly/io/json/doc-files/shBrushJava.js | 57 + .../biweekly/io/json/doc-files/shCore.js | 17 + .../biweekly/io/json/package-frame.html | 65 + .../biweekly/io/json/package-summary.html | 210 + .../biweekly/io/json/package-tree.html | 172 + .../biweekly/io/json/package-use.html | 202 + .../biweekly/io/package-frame.html | 46 + .../biweekly/io/package-summary.html | 181 + .../biweekly/io/package-tree.html | 163 + .../biweekly/io/package-use.html | 233 + .../biweekly/io/text/FoldedLineReader.html | 404 ++ .../biweekly/io/text/FoldedLineWriter.html | 563 ++ .../biweekly/io/text/FoldingScheme.html | 336 + .../ICalRawReader.ICalDataStreamListener.html | 329 + .../ICalRawReader.StopReadingException.html | 253 + .../biweekly/io/text/ICalRawReader.html | 496 ++ ...wWriter.ParameterValueChangedListener.html | 231 + .../biweekly/io/text/ICalRawWriter.html | 702 ++ .../biweekly/io/text/ICalReader.html | 571 ++ .../biweekly/io/text/ICalWriter.html | 765 +++ .../io/text/class-use/FoldedLineReader.html | 145 + .../io/text/class-use/FoldedLineWriter.html | 145 + .../io/text/class-use/FoldingScheme.html | 276 + .../ICalRawReader.ICalDataStreamListener.html | 181 + .../ICalRawReader.StopReadingException.html | 145 + .../io/text/class-use/ICalRawReader.html | 145 + ...wWriter.ParameterValueChangedListener.html | 199 + .../io/text/class-use/ICalRawWriter.html | 145 + .../io/text/class-use/ICalReader.html | 145 + .../io/text/class-use/ICalWriter.html | 145 + .../biweekly/io/text/doc-files/shBrushJava.js | 57 + .../biweekly/io/text/doc-files/shCore.js | 17 + .../biweekly/io/text/package-frame.html | 69 + .../biweekly/io/text/package-summary.html | 218 + .../biweekly/io/text/package-tree.html | 180 + .../biweekly/io/text/package-use.html | 184 + .../biweekly/io/xml/XCalDocument.html | 876 +++ .../biweekly/io/xml/XCalElement.html | 540 ++ .../biweekly/io/xml/XCalNamespaceContext.html | 378 ++ .../io/xml/class-use/XCalDocument.html | 145 + .../io/xml/class-use/XCalElement.html | 588 ++ .../xml/class-use/XCalNamespaceContext.html | 145 + .../biweekly/io/xml/doc-files/shBrushJava.js | 57 + .../biweekly/io/xml/doc-files/shCore.js | 17 + .../biweekly/io/xml/package-frame.html | 37 + .../biweekly/io/xml/package-summary.html | 167 + .../biweekly/io/xml/package-tree.html | 155 + .../biweekly/io/xml/package-use.html | 190 + .../biweekly/package-frame.html | 72 + .../biweekly/package-summary.html | 232 + .../biweekly/package-tree.html | 164 + .../biweekly/package-use.html | 456 ++ .../biweekly/parameter/CalendarUserType.html | 408 ++ .../biweekly/parameter/Encoding.html | 354 + .../parameter/EnumParameterValue.html | 332 + .../biweekly/parameter/FreeBusyType.html | 390 ++ .../parameter/ICalParameterCaseClasses.html | 327 + .../biweekly/parameter/ICalParameters.html | 1758 +++++ .../parameter/ParticipationStatus.html | 444 ++ .../biweekly/parameter/Range.html | 357 ++ .../biweekly/parameter/Related.html | 354 + .../biweekly/parameter/RelationshipType.html | 373 ++ .../biweekly/parameter/Role.html | 390 ++ .../parameter/class-use/CalendarUserType.html | 328 + .../parameter/class-use/Encoding.html | 255 + .../class-use/EnumParameterValue.html | 256 + .../parameter/class-use/FreeBusyType.html | 363 ++ .../class-use/ICalParameterCaseClasses.html | 145 + .../parameter/class-use/ICalParameters.html | 1067 +++ .../class-use/ParticipationStatus.html | 340 + .../biweekly/parameter/class-use/Range.html | 304 + .../biweekly/parameter/class-use/Related.html | 326 + .../parameter/class-use/RelationshipType.html | 308 + .../biweekly/parameter/class-use/Role.html | 318 + .../parameter/doc-files/shBrushJava.js | 57 + .../biweekly/parameter/doc-files/shCore.js | 17 + .../biweekly/parameter/package-frame.html | 53 + .../biweekly/parameter/package-summary.html | 202 + .../biweekly/parameter/package-tree.html | 161 + .../biweekly/parameter/package-use.html | 367 ++ .../biweekly/property/Action.html | 480 ++ .../biweekly/property/Attachment.html | 510 ++ .../biweekly/property/Attendee.html | 868 +++ .../biweekly/property/CalendarScale.html | 392 ++ .../biweekly/property/Categories.html | 380 ++ .../biweekly/property/Classification.html | 479 ++ .../biweekly/property/Comment.html | 410 ++ .../biweekly/property/Completed.html | 296 + .../biweekly/property/Contact.html | 411 ++ .../biweekly/property/Created.html | 296 + .../biweekly/property/DateDue.html | 326 + .../biweekly/property/DateEnd.html | 326 + .../property/DateOrDateTimeProperty.html | 660 ++ .../biweekly/property/DateStart.html | 354 + .../biweekly/property/DateTimeProperty.html | 287 + .../biweekly/property/DateTimeStamp.html | 305 + .../biweekly/property/Description.html | 412 ++ .../biweekly/property/DurationProperty.html | 304 + .../biweekly/property/EnumProperty.html | 373 ++ .../biweekly/property/ExceptionDates.html | 471 ++ .../biweekly/property/ExceptionRule.html | 341 + .../biweekly/property/FreeBusy.html | 440 ++ .../biweekly/property/Geo.html | 431 ++ .../biweekly/property/ICalProperty.html | 516 ++ .../biweekly/property/IntegerProperty.html | 287 + .../biweekly/property/LastModified.html | 297 + .../biweekly/property/ListProperty.html | 387 ++ .../biweekly/property/Location.html | 410 ++ .../biweekly/property/Method.html | 296 + .../biweekly/property/Organizer.html | 543 ++ .../biweekly/property/PercentComplete.html | 338 + .../biweekly/property/Priority.html | 423 ++ .../biweekly/property/ProductId.html | 330 + .../biweekly/property/RawProperty.html | 347 + .../biweekly/property/RecurrenceDates.html | 509 ++ .../biweekly/property/RecurrenceId.html | 379 ++ .../biweekly/property/RecurrenceProperty.html | 327 + .../biweekly/property/RecurrenceRule.html | 337 + .../biweekly/property/RelatedTo.html | 350 + .../biweekly/property/Repeat.html | 303 + .../biweekly/property/RequestStatus.html | 525 ++ .../biweekly/property/Resources.html | 437 ++ .../biweekly/property/Sequence.html | 331 + .../biweekly/property/Status.html | 706 ++ .../biweekly/property/Summary.html | 415 ++ .../biweekly/property/TextProperty.html | 288 + .../biweekly/property/TimezoneId.html | 311 + .../biweekly/property/TimezoneName.html | 365 ++ .../biweekly/property/TimezoneOffsetFrom.html | 322 + .../biweekly/property/TimezoneOffsetTo.html | 323 + .../biweekly/property/TimezoneUrl.html | 302 + .../biweekly/property/Transparency.html | 444 ++ .../biweekly/property/Trigger.html | 469 ++ .../biweekly/property/Uid.html | 329 + .../biweekly/property/Url.html | 295 + .../biweekly/property/UtcOffsetProperty.html | 444 ++ .../biweekly/property/ValuedProperty.html | 381 ++ .../biweekly/property/Version.html | 484 ++ .../biweekly/property/Xml.html | 339 + .../biweekly/property/class-use/Action.html | 286 + .../property/class-use/Attachment.html | 357 ++ .../biweekly/property/class-use/Attendee.html | 353 + .../property/class-use/CalendarScale.html | 255 + .../property/class-use/Categories.html | 315 + .../property/class-use/Classification.html | 327 + .../biweekly/property/class-use/Comment.html | 338 + .../property/class-use/Completed.html | 234 + .../biweekly/property/class-use/Contact.html | 314 + .../biweekly/property/class-use/Created.html | 282 + .../biweekly/property/class-use/DateDue.html | 235 + .../biweekly/property/class-use/DateEnd.html | 259 + .../class-use/DateOrDateTimeProperty.html | 240 + .../property/class-use/DateStart.html | 333 + .../property/class-use/DateTimeProperty.html | 243 + .../property/class-use/DateTimeStamp.html | 342 + .../property/class-use/Description.html | 317 + .../property/class-use/DurationProperty.html | 339 + .../property/class-use/EnumProperty.html | 219 + .../property/class-use/ExceptionDates.html | 344 + .../property/class-use/ExceptionRule.html | 299 + .../biweekly/property/class-use/FreeBusy.html | 315 + .../biweekly/property/class-use/Geo.html | 299 + .../property/class-use/ICalProperty.html | 1280 ++++ .../property/class-use/IntegerProperty.html | 239 + .../property/class-use/LastModified.html | 306 + .../property/class-use/ListProperty.html | 238 + .../biweekly/property/class-use/Location.html | 258 + .../biweekly/property/class-use/Method.html | 237 + .../property/class-use/Organizer.html | 335 + .../property/class-use/PercentComplete.html | 234 + .../biweekly/property/class-use/Priority.html | 258 + .../property/class-use/ProductId.html | 263 + .../property/class-use/RawProperty.html | 311 + .../property/class-use/RecurrenceDates.html | 347 + .../property/class-use/RecurrenceId.html | 292 + .../class-use/RecurrenceProperty.html | 220 + .../property/class-use/RecurrenceRule.html | 306 + .../property/class-use/RelatedTo.html | 290 + .../biweekly/property/class-use/Repeat.html | 237 + .../property/class-use/RequestStatus.html | 331 + .../property/class-use/Resources.html | 283 + .../biweekly/property/class-use/Sequence.html | 282 + .../biweekly/property/class-use/Status.html | 346 + .../biweekly/property/class-use/Summary.html | 309 + .../property/class-use/TextProperty.html | 398 ++ .../property/class-use/TimezoneId.html | 234 + .../property/class-use/TimezoneName.html | 242 + .../class-use/TimezoneOffsetFrom.html | 235 + .../property/class-use/TimezoneOffsetTo.html | 235 + .../property/class-use/TimezoneUrl.html | 237 + .../property/class-use/Transparency.html | 273 + .../biweekly/property/class-use/Trigger.html | 354 + .../biweekly/property/class-use/Uid.html | 335 + .../biweekly/property/class-use/Url.html | 318 + .../property/class-use/UtcOffsetProperty.html | 221 + .../property/class-use/ValuedProperty.html | 516 ++ .../biweekly/property/class-use/Version.html | 315 + .../biweekly/property/class-use/Xml.html | 238 + .../property/doc-files/shBrushJava.js | 57 + .../biweekly/property/doc-files/shCore.js | 17 + .../property/marshaller/ActionMarshaller.html | 321 + .../marshaller/AttachmentMarshaller.html | 638 ++ .../marshaller/AttendeeMarshaller.html | 321 + .../marshaller/CalendarScaleMarshaller.html | 321 + .../marshaller/CategoriesMarshaller.html | 333 + .../marshaller/ClassificationMarshaller.html | 321 + .../marshaller/CommentMarshaller.html | 321 + .../marshaller/CompletedMarshaller.html | 321 + .../marshaller/ContactMarshaller.html | 321 + .../marshaller/CreatedMarshaller.html | 321 + .../marshaller/DateDueMarshaller.html | 323 + .../marshaller/DateEndMarshaller.html | 323 + .../DateOrDateTimePropertyMarshaller.html | 630 ++ .../marshaller/DateStartMarshaller.html | 323 + .../DateTimePropertyMarshaller.html | 594 ++ .../marshaller/DateTimeStampMarshaller.html | 321 + .../marshaller/DescriptionMarshaller.html | 321 + .../DurationPropertyMarshaller.html | 568 ++ .../marshaller/ExceptionDatesMarshaller.html | 621 ++ .../marshaller/ExceptionRuleMarshaller.html | 325 + .../marshaller/FreeBusyMarshaller.html | 568 ++ .../property/marshaller/GeoMarshaller.html | 568 ++ .../ICalPropertyMarshaller.DateParser.html | 351 + .../ICalPropertyMarshaller.DateWriter.html | 415 ++ .../ICalPropertyMarshaller.ListCallback.html | 221 + .../ICalPropertyMarshaller.Result.html | 297 + ...ertyMarshaller.SemiStructuredIterator.html | 291 + .../ICalPropertyMarshaller.Splitter.html | 336 + ...PropertyMarshaller.StructuredIterator.html | 313 + .../marshaller/ICalPropertyMarshaller.html | 1544 +++++ .../marshaller/IntegerPropertyMarshaller.html | 594 ++ .../marshaller/LastModifiedMarshaller.html | 321 + .../marshaller/ListPropertyMarshaller.html | 660 ++ .../marshaller/LocationMarshaller.html | 321 + .../property/marshaller/MethodMarshaller.html | 321 + .../marshaller/OrganizerMarshaller.html | 321 + .../marshaller/PercentCompleteMarshaller.html | 321 + .../marshaller/PriorityMarshaller.html | 321 + .../marshaller/ProductIdMarshaller.html | 321 + .../marshaller/RawPropertyMarshaller.html | 437 ++ .../marshaller/RecurrenceDatesMarshaller.html | 602 ++ .../marshaller/RecurrenceIdMarshaller.html | 323 + .../RecurrencePropertyMarshaller.html | 597 ++ .../marshaller/RecurrenceRuleMarshaller.html | 325 + .../marshaller/RelatedToMarshaller.html | 321 + .../property/marshaller/RepeatMarshaller.html | 321 + .../marshaller/RequestStatusMarshaller.html | 568 ++ .../marshaller/ResourcesMarshaller.html | 333 + .../marshaller/SequenceMarshaller.html | 321 + .../property/marshaller/StatusMarshaller.html | 321 + .../marshaller/SummaryMarshaller.html | 321 + .../TextListPropertyMarshaller.html | 358 ++ .../marshaller/TextPropertyMarshaller.html | 612 ++ .../marshaller/TimezoneIdMarshaller.html | 321 + .../marshaller/TimezoneNameMarshaller.html | 321 + .../TimezoneOffsetFromMarshaller.html | 321 + .../TimezoneOffsetToMarshaller.html | 321 + .../marshaller/TimezoneUrlMarshaller.html | 321 + .../marshaller/TransparencyMarshaller.html | 321 + .../marshaller/TriggerMarshaller.html | 602 ++ .../property/marshaller/UidMarshaller.html | 321 + .../property/marshaller/UrlMarshaller.html | 321 + .../UtcOffsetPropertyMarshaller.html | 594 ++ .../marshaller/VersionMarshaller.html | 568 ++ .../property/marshaller/XmlMarshaller.html | 568 ++ .../class-use/ActionMarshaller.html | 145 + .../class-use/AttachmentMarshaller.html | 145 + .../class-use/AttendeeMarshaller.html | 145 + .../class-use/CalendarScaleMarshaller.html | 145 + .../class-use/CategoriesMarshaller.html | 145 + .../class-use/ClassificationMarshaller.html | 145 + .../class-use/CommentMarshaller.html | 145 + .../class-use/CompletedMarshaller.html | 145 + .../class-use/ContactMarshaller.html | 145 + .../class-use/CreatedMarshaller.html | 145 + .../class-use/DateDueMarshaller.html | 145 + .../class-use/DateEndMarshaller.html | 145 + .../DateOrDateTimePropertyMarshaller.html | 205 + .../class-use/DateStartMarshaller.html | 145 + .../class-use/DateTimePropertyMarshaller.html | 205 + .../class-use/DateTimeStampMarshaller.html | 145 + .../class-use/DescriptionMarshaller.html | 145 + .../class-use/DurationPropertyMarshaller.html | 145 + .../class-use/ExceptionDatesMarshaller.html | 145 + .../class-use/ExceptionRuleMarshaller.html | 145 + .../class-use/FreeBusyMarshaller.html | 145 + .../marshaller/class-use/GeoMarshaller.html | 145 + .../ICalPropertyMarshaller.DateParser.html | 208 + .../ICalPropertyMarshaller.DateWriter.html | 232 + .../ICalPropertyMarshaller.ListCallback.html | 189 + .../ICalPropertyMarshaller.Result.html | 202 + ...ertyMarshaller.SemiStructuredIterator.html | 190 + .../ICalPropertyMarshaller.Splitter.html | 206 + ...PropertyMarshaller.StructuredIterator.html | 189 + .../class-use/ICalPropertyMarshaller.html | 899 +++ .../class-use/IntegerPropertyMarshaller.html | 205 + .../class-use/LastModifiedMarshaller.html | 145 + .../class-use/ListPropertyMarshaller.html | 205 + .../class-use/LocationMarshaller.html | 145 + .../class-use/MethodMarshaller.html | 145 + .../class-use/OrganizerMarshaller.html | 145 + .../class-use/PercentCompleteMarshaller.html | 145 + .../class-use/PriorityMarshaller.html | 145 + .../class-use/ProductIdMarshaller.html | 145 + .../class-use/RawPropertyMarshaller.html | 145 + .../class-use/RecurrenceDatesMarshaller.html | 145 + .../class-use/RecurrenceIdMarshaller.html | 145 + .../RecurrencePropertyMarshaller.html | 189 + .../class-use/RecurrenceRuleMarshaller.html | 145 + .../class-use/RelatedToMarshaller.html | 145 + .../class-use/RepeatMarshaller.html | 145 + .../class-use/RequestStatusMarshaller.html | 145 + .../class-use/ResourcesMarshaller.html | 145 + .../class-use/SequenceMarshaller.html | 145 + .../class-use/StatusMarshaller.html | 145 + .../class-use/SummaryMarshaller.html | 145 + .../class-use/TextListPropertyMarshaller.html | 189 + .../class-use/TextPropertyMarshaller.html | 333 + .../class-use/TimezoneIdMarshaller.html | 145 + .../class-use/TimezoneNameMarshaller.html | 145 + .../TimezoneOffsetFromMarshaller.html | 145 + .../class-use/TimezoneOffsetToMarshaller.html | 145 + .../class-use/TimezoneUrlMarshaller.html | 145 + .../class-use/TransparencyMarshaller.html | 145 + .../class-use/TriggerMarshaller.html | 145 + .../marshaller/class-use/UidMarshaller.html | 145 + .../marshaller/class-use/UrlMarshaller.html | 145 + .../UtcOffsetPropertyMarshaller.html | 189 + .../class-use/VersionMarshaller.html | 145 + .../marshaller/class-use/XmlMarshaller.html | 145 + .../marshaller/doc-files/shBrushJava.js | 57 + .../property/marshaller/doc-files/shCore.js | 17 + .../property/marshaller/package-frame.html | 170 + .../property/marshaller/package-summary.html | 426 ++ .../property/marshaller/package-tree.html | 177 + .../property/marshaller/package-use.html | 358 ++ .../biweekly/property/package-frame.html | 149 + .../biweekly/property/package-summary.html | 462 ++ .../biweekly/property/package-tree.html | 174 + .../biweekly/property/package-use.html | 1213 ++++ .../biweekly/util/Base64.html | 254 + .../biweekly/util/CaseClasses.html | 443 ++ .../biweekly/util/DateTimeComponents.html | 606 ++ .../biweekly/util/Duration.Builder.html | 415 ++ .../biweekly/util/Duration.html | 607 ++ .../biweekly/util/ICalDateFormatter.html | 382 ++ .../biweekly/util/ICalFloatFormatter.html | 324 + .../biweekly/util/IOUtils.html | 456 ++ .../biweekly/util/ISOFormat.html | 530 ++ .../biweekly/util/ListMultimap.html | 805 +++ .../biweekly/util/Period.html | 397 ++ .../biweekly/util/Recurrence.Builder.html | 673 ++ .../biweekly/util/Recurrence.DayOfWeek.html | 458 ++ .../biweekly/util/Recurrence.Frequency.html | 414 ++ .../biweekly/util/Recurrence.html | 679 ++ .../util/StringUtils.JoinCallback.html | 223 + .../util/StringUtils.JoinMapCallback.html | 225 + .../biweekly/util/StringUtils.html | 437 ++ .../biweekly/util/UtcOffset.html | 410 ++ .../biweekly/util/XmlUtils.html | 488 ++ .../biweekly/util/class-use/Base64.html | 145 + .../biweekly/util/class-use/CaseClasses.html | 182 + .../util/class-use/DateTimeComponents.html | 312 + .../util/class-use/Duration.Builder.html | 229 + .../biweekly/util/class-use/Duration.html | 376 ++ .../util/class-use/ICalDateFormatter.html | 145 + .../util/class-use/ICalFloatFormatter.html | 145 + .../biweekly/util/class-use/IOUtils.html | 145 + .../biweekly/util/class-use/ISOFormat.html | 217 + .../biweekly/util/class-use/ListMultimap.html | 343 + .../biweekly/util/class-use/Period.html | 230 + .../util/class-use/Recurrence.Builder.html | 312 + .../util/class-use/Recurrence.DayOfWeek.html | 255 + .../util/class-use/Recurrence.Frequency.html | 228 + .../biweekly/util/class-use/Recurrence.html | 359 ++ .../class-use/StringUtils.JoinCallback.html | 208 + .../StringUtils.JoinMapCallback.html | 190 + .../biweekly/util/class-use/StringUtils.html | 145 + .../biweekly/util/class-use/UtcOffset.html | 313 + .../biweekly/util/class-use/XmlUtils.html | 145 + .../biweekly/util/doc-files/shBrushJava.js | 57 + .../biweekly/util/doc-files/shCore.js | 17 + .../biweekly/util/package-frame.html | 89 + .../biweekly/util/package-summary.html | 261 + .../biweekly/util/package-tree.html | 177 + .../biweekly/util/package-use.html | 412 ++ .../constant-values.html | 317 + .../deprecated-list.html | 147 + libs/biweekly-0.3.1-javadoc/help-doc.html | 224 + libs/biweekly-0.3.1-javadoc/index-all.html | 5696 +++++++++++++++++ libs/biweekly-0.3.1-javadoc/index.html | 74 + .../overview-frame.html | 63 + .../overview-summary.html | 197 + .../biweekly-0.3.1-javadoc/overview-tree.html | 253 + libs/biweekly-0.3.1-javadoc/package-list | 11 + .../resources/inherit.gif | Bin 0 -> 57 bytes .../serialized-form.html | 276 + .../Biweekly.ParserChainJsonReader.html | 1542 +++++ .../Biweekly.ParserChainJsonString.html | 1542 +++++ .../Biweekly.ParserChainTextReader.html | 1542 +++++ .../Biweekly.ParserChainTextString.html | 1542 +++++ .../Biweekly.ParserChainXmlDocument.html | 1542 +++++ .../Biweekly.ParserChainXmlReader.html | 1542 +++++ .../Biweekly.ParserChainXmlString.html | 1542 +++++ .../biweekly/Biweekly.WriterChainJson.html | 1542 +++++ .../biweekly/Biweekly.WriterChainText.html | 1542 +++++ .../biweekly/Biweekly.WriterChainXml.html | 1542 +++++ .../src-html/biweekly/Biweekly.html | 1542 +++++ .../src-html/biweekly/ICalDataType.html | 179 + .../src-html/biweekly/ICalException.html | 107 + .../src-html/biweekly/ICalendar.html | 523 ++ .../ValidationWarnings.WarningsGroup.html | 359 ++ .../src-html/biweekly/ValidationWarnings.html | 359 ++ .../component/DaylightSavingsTime.html | 117 + .../biweekly/component/ICalComponent.html | 502 ++ .../biweekly/component/Observance.html | 363 ++ .../biweekly/component/RawComponent.html | 108 + .../biweekly/component/StandardTime.html | 117 + .../src-html/biweekly/component/VAlarm.html | 552 ++ .../src-html/biweekly/component/VEvent.html | 1247 ++++ .../biweekly/component/VFreeBusy.html | 570 ++ .../src-html/biweekly/component/VJournal.html | 973 +++ .../biweekly/component/VTimezone.html | 277 + .../src-html/biweekly/component/VTodo.html | 1260 ++++ .../DaylightSavingsTimeMarshaller.html | 108 + .../marshaller/ICalComponentMarshaller.html | 175 + .../marshaller/ICalendarMarshaller.html | 108 + .../marshaller/RawComponentMarshaller.html | 112 + .../marshaller/StandardTimeMarshaller.html | 108 + .../marshaller/VAlarmMarshaller.html | 108 + .../marshaller/VEventMarshaller.html | 108 + .../marshaller/VFreeBusyMarshaller.html | 175 + .../marshaller/VJournalMarshaller.html | 108 + .../marshaller/VTimezoneMarshaller.html | 108 + .../component/marshaller/VTodoMarshaller.html | 108 + .../biweekly/io/CannotParseException.html | 118 + .../biweekly/io/ICalMarshallerRegistrar.html | 468 ++ .../src-html/biweekly/io/SkipMeException.html | 119 + .../biweekly/io/json/JCalParseException.html | 134 + .../JCalRawReader.JCalDataStreamListener.html | 370 ++ .../biweekly/io/json/JCalRawReader.html | 370 ++ .../biweekly/io/json/JCalRawWriter.html | 396 ++ .../src-html/biweekly/io/json/JCalReader.html | 361 ++ .../src-html/biweekly/io/json/JCalValue.html | 419 ++ .../src-html/biweekly/io/json/JCalWriter.html | 340 + .../src-html/biweekly/io/json/JsonValue.html | 232 + .../biweekly/io/text/FoldedLineReader.html | 205 + .../biweekly/io/text/FoldedLineWriter.html | 262 + .../biweekly/io/text/FoldingScheme.html | 142 + .../ICalRawReader.ICalDataStreamListener.html | 402 ++ .../ICalRawReader.StopReadingException.html | 402 ++ .../biweekly/io/text/ICalRawReader.html | 402 ++ ...wWriter.ParameterValueChangedListener.html | 519 ++ .../biweekly/io/text/ICalRawWriter.html | 519 ++ .../src-html/biweekly/io/text/ICalReader.html | 448 ++ .../src-html/biweekly/io/text/ICalWriter.html | 411 ++ .../biweekly/io/xml/XCalDocument.html | 809 +++ .../src-html/biweekly/io/xml/XCalElement.html | 289 + .../biweekly/io/xml/XCalNamespaceContext.html | 152 + .../biweekly/parameter/CalendarUserType.html | 143 + .../src-html/biweekly/parameter/Encoding.html | 141 + .../parameter/EnumParameterValue.html | 124 + .../biweekly/parameter/FreeBusyType.html | 142 + .../parameter/ICalParameterCaseClasses.html | 125 + .../biweekly/parameter/ICalParameters.html | 691 ++ .../parameter/ParticipationStatus.html | 145 + .../src-html/biweekly/parameter/Range.html | 147 + .../src-html/biweekly/parameter/Related.html | 141 + .../biweekly/parameter/RelationshipType.html | 144 + .../src-html/biweekly/parameter/Role.html | 145 + .../src-html/biweekly/property/Action.html | 189 + .../biweekly/property/Attachment.html | 215 + .../src-html/biweekly/property/Attendee.html | 332 + .../biweekly/property/CalendarScale.html | 151 + .../biweekly/property/Categories.html | 145 + .../biweekly/property/Classification.html | 188 + .../src-html/biweekly/property/Comment.html | 137 + .../src-html/biweekly/property/Completed.html | 120 + .../src-html/biweekly/property/Contact.html | 145 + .../src-html/biweekly/property/Created.html | 120 + .../src-html/biweekly/property/DateDue.html | 140 + .../src-html/biweekly/property/DateEnd.html | 140 + .../property/DateOrDateTimeProperty.html | 224 + .../src-html/biweekly/property/DateStart.html | 160 + .../biweekly/property/DateTimeProperty.html | 108 + .../biweekly/property/DateTimeStamp.html | 129 + .../biweekly/property/Description.html | 140 + .../biweekly/property/DurationProperty.html | 132 + .../biweekly/property/EnumProperty.html | 145 + .../biweekly/property/ExceptionDates.html | 180 + .../biweekly/property/ExceptionRule.html | 134 + .../src-html/biweekly/property/FreeBusy.html | 201 + .../src-html/biweekly/property/Geo.html | 180 + .../biweekly/property/ICalProperty.html | 378 ++ .../biweekly/property/IntegerProperty.html | 106 + .../biweekly/property/LastModified.html | 121 + .../biweekly/property/ListProperty.html | 155 + .../src-html/biweekly/property/Location.html | 137 + .../src-html/biweekly/property/Method.html | 118 + .../src-html/biweekly/property/Organizer.html | 186 + .../biweekly/property/PercentComplete.html | 132 + .../src-html/biweekly/property/Priority.html | 171 + .../src-html/biweekly/property/ProductId.html | 131 + .../biweekly/property/RawProperty.html | 126 + .../biweekly/property/RecurrenceDates.html | 206 + .../biweekly/property/RecurrenceId.html | 159 + .../biweekly/property/RecurrenceProperty.html | 127 + .../biweekly/property/RecurrenceRule.html | 136 + .../src-html/biweekly/property/RelatedTo.html | 140 + .../src-html/biweekly/property/Repeat.html | 125 + .../biweekly/property/RequestStatus.html | 218 + .../src-html/biweekly/property/Resources.html | 157 + .../src-html/biweekly/property/Sequence.html | 134 + .../src-html/biweekly/property/Status.html | 277 + .../src-html/biweekly/property/Summary.html | 142 + .../biweekly/property/TextProperty.html | 107 + .../biweekly/property/TimezoneId.html | 135 + .../biweekly/property/TimezoneName.html | 137 + .../biweekly/property/TimezoneOffsetFrom.html | 136 + .../biweekly/property/TimezoneOffsetTo.html | 137 + .../biweekly/property/TimezoneUrl.html | 124 + .../biweekly/property/Transparency.html | 178 + .../src-html/biweekly/property/Trigger.html | 201 + .../src-html/biweekly/property/Uid.html | 131 + .../src-html/biweekly/property/Url.html | 117 + .../biweekly/property/UtcOffsetProperty.html | 143 + .../biweekly/property/ValuedProperty.html | 137 + .../src-html/biweekly/property/Version.html | 204 + .../src-html/biweekly/property/Xml.html | 149 + .../property/marshaller/ActionMarshaller.html | 109 + .../marshaller/AttachmentMarshaller.html | 214 + .../marshaller/AttendeeMarshaller.html | 110 + .../marshaller/CalendarScaleMarshaller.html | 109 + .../marshaller/CategoriesMarshaller.html | 111 + .../marshaller/ClassificationMarshaller.html | 109 + .../marshaller/CommentMarshaller.html | 109 + .../marshaller/CompletedMarshaller.html | 112 + .../marshaller/ContactMarshaller.html | 109 + .../marshaller/CreatedMarshaller.html | 111 + .../marshaller/DateDueMarshaller.html | 112 + .../marshaller/DateEndMarshaller.html | 112 + .../DateOrDateTimePropertyMarshaller.html | 222 + .../marshaller/DateStartMarshaller.html | 112 + .../DateTimePropertyMarshaller.html | 178 + .../marshaller/DateTimeStampMarshaller.html | 112 + .../marshaller/DescriptionMarshaller.html | 109 + .../DurationPropertyMarshaller.html | 179 + .../marshaller/ExceptionDatesMarshaller.html | 190 + .../marshaller/ExceptionRuleMarshaller.html | 110 + .../marshaller/FreeBusyMarshaller.html | 292 + .../property/marshaller/GeoMarshaller.html | 226 + .../ICalPropertyMarshaller.DateParser.html | 1330 ++++ .../ICalPropertyMarshaller.DateWriter.html | 1330 ++++ .../ICalPropertyMarshaller.ListCallback.html | 1330 ++++ .../ICalPropertyMarshaller.Result.html | 1330 ++++ ...ertyMarshaller.SemiStructuredIterator.html | 1330 ++++ .../ICalPropertyMarshaller.Splitter.html | 1330 ++++ ...PropertyMarshaller.StructuredIterator.html | 1330 ++++ .../marshaller/ICalPropertyMarshaller.html | 1330 ++++ .../marshaller/IntegerPropertyMarshaller.html | 175 + .../marshaller/LastModifiedMarshaller.html | 112 + .../marshaller/ListPropertyMarshaller.html | 180 + .../marshaller/LocationMarshaller.html | 109 + .../property/marshaller/MethodMarshaller.html | 109 + .../marshaller/OrganizerMarshaller.html | 110 + .../marshaller/PercentCompleteMarshaller.html | 109 + .../marshaller/PriorityMarshaller.html | 109 + .../marshaller/ProductIdMarshaller.html | 109 + .../marshaller/RawPropertyMarshaller.html | 155 + .../marshaller/RecurrenceDatesMarshaller.html | 379 ++ .../marshaller/RecurrenceIdMarshaller.html | 112 + .../RecurrencePropertyMarshaller.html | 524 ++ .../marshaller/RecurrenceRuleMarshaller.html | 110 + .../marshaller/RelatedToMarshaller.html | 109 + .../property/marshaller/RepeatMarshaller.html | 109 + .../marshaller/RequestStatusMarshaller.html | 171 + .../marshaller/ResourcesMarshaller.html | 111 + .../marshaller/SequenceMarshaller.html | 109 + .../property/marshaller/StatusMarshaller.html | 109 + .../marshaller/SummaryMarshaller.html | 109 + .../TextListPropertyMarshaller.html | 119 + .../marshaller/TextPropertyMarshaller.html | 158 + .../marshaller/TimezoneIdMarshaller.html | 109 + .../marshaller/TimezoneNameMarshaller.html | 109 + .../TimezoneOffsetFromMarshaller.html | 110 + .../TimezoneOffsetToMarshaller.html | 110 + .../marshaller/TimezoneUrlMarshaller.html | 110 + .../marshaller/TransparencyMarshaller.html | 109 + .../marshaller/TriggerMarshaller.html | 227 + .../property/marshaller/UidMarshaller.html | 109 + .../property/marshaller/UrlMarshaller.html | 110 + .../UtcOffsetPropertyMarshaller.html | 180 + .../marshaller/VersionMarshaller.html | 163 + .../property/marshaller/XmlMarshaller.html | 191 + .../src-html/biweekly/util/Base64.html | 145 + .../src-html/biweekly/util/CaseClasses.html | 228 + .../biweekly/util/DateTimeComponents.html | 352 + .../biweekly/util/Duration.Builder.html | 536 ++ .../src-html/biweekly/util/Duration.html | 536 ++ .../biweekly/util/ICalDateFormatter.html | 242 + .../biweekly/util/ICalFloatFormatter.html | 127 + .../src-html/biweekly/util/IOUtils.html | 238 + .../src-html/biweekly/util/ISOFormat.html | 213 + .../src-html/biweekly/util/ListMultimap.html | 361 ++ .../src-html/biweekly/util/Period.html | 202 + .../biweekly/util/Recurrence.Builder.html | 724 +++ .../biweekly/util/Recurrence.DayOfWeek.html | 724 +++ .../biweekly/util/Recurrence.Frequency.html | 724 +++ .../src-html/biweekly/util/Recurrence.html | 724 +++ .../util/StringUtils.JoinCallback.html | 204 + .../util/StringUtils.JoinMapCallback.html | 204 + .../src-html/biweekly/util/StringUtils.html | 204 + .../src-html/biweekly/util/UtcOffset.html | 229 + .../src-html/biweekly/util/XmlUtils.html | 327 + .../syntaxhighlighter.css | 352 + libs/biweekly-0.3.1.jar | Bin 0 -> 328180 bytes libs/lombok-api.jar | Bin 0 -> 17262 bytes src/at/bitfire/davdroid/resource/Event.java | 5 +- .../davdroid/resource/LocalAddressBook.java | 2 +- .../davdroid/resource/LocalCalendar.java | 58 +- .../davdroid/resource/LocalCollection.java | 1 - .../webdav/DavAddressbookMultiget.java | 4 - .../davdroid/webdav/DavCalendarMultiget.java | 4 - src/at/bitfire/davdroid/webdav/DavProp.java | 1 - .../davdroid/webdav/WebDavResource.java | 2 +- 747 files changed, 243567 insertions(+), 30 deletions(-) delete mode 100644 libs/biweekly-0.3.0-with-deps/biweekly-0.3.0.jar delete mode 100644 libs/biweekly-0.3.0-with-deps/jackson-core-2.1.3.jar create mode 100644 libs/biweekly-0.3.1-javadoc.jar create mode 100644 libs/biweekly-0.3.1-javadoc/META-INF/MANIFEST.MF create mode 100644 libs/biweekly-0.3.1-javadoc/allclasses-frame.html create mode 100644 libs/biweekly-0.3.1-javadoc/allclasses-noframe.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainJsonReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainJsonString.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainTextReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainTextString.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainXmlDocument.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainXmlReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainXmlString.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.WriterChainJson.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.WriterChainText.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.WriterChainXml.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/ICalDataType.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/ICalException.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/ICalendar.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/ValidationWarnings.WarningsGroup.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/ValidationWarnings.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainJsonReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainJsonString.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainTextReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainTextString.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainXmlDocument.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainXmlReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainXmlString.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.WriterChainJson.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.WriterChainText.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.WriterChainXml.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/ICalDataType.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/ICalException.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/ICalendar.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/ValidationWarnings.WarningsGroup.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/class-use/ValidationWarnings.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/DaylightSavingsTime.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/ICalComponent.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/Observance.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/RawComponent.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/StandardTime.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/VAlarm.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/VEvent.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/VFreeBusy.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/VJournal.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/VTimezone.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/VTodo.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/DaylightSavingsTime.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/ICalComponent.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/Observance.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/RawComponent.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/StandardTime.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VAlarm.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VEvent.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VFreeBusy.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VJournal.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VTimezone.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VTodo.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/doc-files/shBrushJava.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/doc-files/shCore.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/DaylightSavingsTimeMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/ICalComponentMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/ICalendarMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/RawComponentMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/StandardTimeMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VAlarmMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VEventMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VFreeBusyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VJournalMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VTimezoneMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VTodoMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/DaylightSavingsTimeMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/ICalComponentMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/ICalendarMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/RawComponentMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/StandardTimeMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VAlarmMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VEventMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VFreeBusyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VJournalMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VTimezoneMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VTodoMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/doc-files/shBrushJava.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/doc-files/shCore.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-frame.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-tree.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-use.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/package-frame.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/package-summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/package-tree.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/component/package-use.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/doc-files/shBrushJava.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/doc-files/shCore.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/CannotParseException.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/ICalMarshallerRegistrar.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/SkipMeException.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/class-use/CannotParseException.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/class-use/ICalMarshallerRegistrar.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/class-use/SkipMeException.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/doc-files/shBrushJava.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/doc-files/shCore.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalParseException.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalRawReader.JCalDataStreamListener.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalRawReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalRawWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalValue.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/JsonValue.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalParseException.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalRawReader.JCalDataStreamListener.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalRawReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalRawWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalValue.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JsonValue.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/doc-files/shBrushJava.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/doc-files/shCore.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-frame.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-tree.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-use.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/package-frame.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/package-summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/package-tree.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/package-use.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/FoldedLineReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/FoldedLineWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/FoldingScheme.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawReader.ICalDataStreamListener.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawReader.StopReadingException.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawWriter.ParameterValueChangedListener.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/FoldedLineReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/FoldedLineWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/FoldingScheme.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawReader.ICalDataStreamListener.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawReader.StopReadingException.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawWriter.ParameterValueChangedListener.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/doc-files/shBrushJava.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/doc-files/shCore.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-frame.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-tree.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-use.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/xml/XCalDocument.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/xml/XCalElement.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/xml/XCalNamespaceContext.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/xml/class-use/XCalDocument.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/xml/class-use/XCalElement.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/xml/class-use/XCalNamespaceContext.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/xml/doc-files/shBrushJava.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/xml/doc-files/shCore.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-frame.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-tree.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-use.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/package-frame.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/package-summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/package-tree.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/package-use.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/CalendarUserType.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/Encoding.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/EnumParameterValue.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/FreeBusyType.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/ICalParameterCaseClasses.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/ICalParameters.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/ParticipationStatus.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/Range.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/Related.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/RelationshipType.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/Role.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/CalendarUserType.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Encoding.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/EnumParameterValue.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/FreeBusyType.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/ICalParameterCaseClasses.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/ICalParameters.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/ParticipationStatus.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Range.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Related.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/RelationshipType.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Role.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/doc-files/shBrushJava.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/doc-files/shCore.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-frame.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-tree.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-use.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Action.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Attachment.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Attendee.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/CalendarScale.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Categories.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Classification.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Comment.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Completed.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Contact.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Created.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/DateDue.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/DateEnd.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/DateOrDateTimeProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/DateStart.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/DateTimeProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/DateTimeStamp.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Description.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/DurationProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/EnumProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/ExceptionDates.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/ExceptionRule.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/FreeBusy.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Geo.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/ICalProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/IntegerProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/LastModified.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/ListProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Location.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Method.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Organizer.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/PercentComplete.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Priority.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/ProductId.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/RawProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceDates.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceId.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceRule.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/RelatedTo.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Repeat.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/RequestStatus.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Resources.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Sequence.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Status.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/TextProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneId.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneName.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneOffsetFrom.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneOffsetTo.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneUrl.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Transparency.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Trigger.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Uid.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Url.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/UtcOffsetProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/ValuedProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Version.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/Xml.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Action.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Attachment.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Attendee.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/CalendarScale.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Categories.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Classification.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Comment.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Completed.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Contact.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Created.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateDue.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateEnd.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateOrDateTimeProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateStart.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateTimeProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateTimeStamp.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Description.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DurationProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/EnumProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ExceptionDates.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ExceptionRule.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/FreeBusy.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Geo.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ICalProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/IntegerProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/LastModified.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ListProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Location.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Method.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Organizer.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/PercentComplete.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Priority.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ProductId.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RawProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceDates.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceId.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceRule.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RelatedTo.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Repeat.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RequestStatus.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Resources.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Sequence.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Status.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TextProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneId.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneName.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneOffsetFrom.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneOffsetTo.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneUrl.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Transparency.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Trigger.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Uid.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Url.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/UtcOffsetProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ValuedProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Version.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Xml.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/doc-files/shBrushJava.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/doc-files/shCore.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ActionMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/AttachmentMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/AttendeeMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CalendarScaleMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CategoriesMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ClassificationMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CommentMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CompletedMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ContactMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CreatedMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateDueMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateEndMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateOrDateTimePropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateStartMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateTimePropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateTimeStampMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DescriptionMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DurationPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ExceptionDatesMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ExceptionRuleMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/FreeBusyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/GeoMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.DateParser.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.DateWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.ListCallback.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.Result.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.SemiStructuredIterator.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.Splitter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.StructuredIterator.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/IntegerPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/LastModifiedMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ListPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/LocationMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/MethodMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/OrganizerMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/PercentCompleteMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/PriorityMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ProductIdMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RawPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrenceDatesMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrenceIdMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrencePropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrenceRuleMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RelatedToMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RepeatMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RequestStatusMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ResourcesMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/SequenceMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/StatusMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/SummaryMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TextListPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TextPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneIdMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneNameMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneOffsetFromMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneOffsetToMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneUrlMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TransparencyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TriggerMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/UidMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/UrlMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/UtcOffsetPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/VersionMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/XmlMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ActionMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/AttachmentMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/AttendeeMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CalendarScaleMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CategoriesMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ClassificationMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CommentMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CompletedMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ContactMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CreatedMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateDueMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateEndMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateOrDateTimePropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateStartMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateTimePropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateTimeStampMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DescriptionMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DurationPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ExceptionDatesMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ExceptionRuleMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/FreeBusyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/GeoMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.DateParser.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.DateWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.ListCallback.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.Result.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.SemiStructuredIterator.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.Splitter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.StructuredIterator.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/IntegerPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/LastModifiedMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ListPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/LocationMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/MethodMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/OrganizerMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/PercentCompleteMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/PriorityMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ProductIdMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RawPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrenceDatesMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrenceIdMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrencePropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrenceRuleMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RelatedToMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RepeatMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RequestStatusMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ResourcesMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/SequenceMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/StatusMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/SummaryMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TextListPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TextPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneIdMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneNameMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneOffsetFromMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneOffsetToMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneUrlMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TransparencyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TriggerMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/UidMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/UrlMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/UtcOffsetPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/VersionMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/XmlMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/doc-files/shBrushJava.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/doc-files/shCore.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-frame.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-tree.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-use.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/package-frame.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/package-summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/package-tree.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/property/package-use.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/Base64.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/CaseClasses.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/DateTimeComponents.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/Duration.Builder.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/Duration.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/ICalDateFormatter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/ICalFloatFormatter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/IOUtils.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/ISOFormat.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/ListMultimap.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/Period.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.Builder.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.DayOfWeek.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.Frequency.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/StringUtils.JoinCallback.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/StringUtils.JoinMapCallback.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/StringUtils.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/UtcOffset.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/XmlUtils.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Base64.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/CaseClasses.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/DateTimeComponents.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Duration.Builder.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Duration.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ICalDateFormatter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ICalFloatFormatter.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/IOUtils.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ISOFormat.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ListMultimap.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Period.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.Builder.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.DayOfWeek.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.Frequency.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/StringUtils.JoinCallback.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/StringUtils.JoinMapCallback.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/StringUtils.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/UtcOffset.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/XmlUtils.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/doc-files/shBrushJava.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/doc-files/shCore.js create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/package-frame.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/package-summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/package-tree.html create mode 100644 libs/biweekly-0.3.1-javadoc/biweekly/util/package-use.html create mode 100644 libs/biweekly-0.3.1-javadoc/constant-values.html create mode 100644 libs/biweekly-0.3.1-javadoc/deprecated-list.html create mode 100644 libs/biweekly-0.3.1-javadoc/help-doc.html create mode 100644 libs/biweekly-0.3.1-javadoc/index-all.html create mode 100644 libs/biweekly-0.3.1-javadoc/index.html create mode 100644 libs/biweekly-0.3.1-javadoc/overview-frame.html create mode 100644 libs/biweekly-0.3.1-javadoc/overview-summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/overview-tree.html create mode 100644 libs/biweekly-0.3.1-javadoc/package-list create mode 100644 libs/biweekly-0.3.1-javadoc/resources/inherit.gif create mode 100644 libs/biweekly-0.3.1-javadoc/serialized-form.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainJsonReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainJsonString.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainTextReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainTextString.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainXmlDocument.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainXmlReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainXmlString.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.WriterChainJson.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.WriterChainText.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.WriterChainXml.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/ICalDataType.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/ICalException.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/ICalendar.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/ValidationWarnings.WarningsGroup.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/ValidationWarnings.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/DaylightSavingsTime.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/ICalComponent.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/Observance.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/RawComponent.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/StandardTime.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VAlarm.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VEvent.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VFreeBusy.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VJournal.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VTimezone.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VTodo.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/DaylightSavingsTimeMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/ICalComponentMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/ICalendarMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/RawComponentMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/StandardTimeMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VAlarmMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VEventMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VFreeBusyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VJournalMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VTimezoneMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VTodoMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/CannotParseException.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/ICalMarshallerRegistrar.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/SkipMeException.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalParseException.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalRawReader.JCalDataStreamListener.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalRawReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalRawWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalValue.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JsonValue.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/FoldedLineReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/FoldedLineWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/FoldingScheme.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawReader.ICalDataStreamListener.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawReader.StopReadingException.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawWriter.ParameterValueChangedListener.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalReader.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/xml/XCalDocument.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/xml/XCalElement.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/xml/XCalNamespaceContext.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/CalendarUserType.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Encoding.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/EnumParameterValue.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/FreeBusyType.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/ICalParameterCaseClasses.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/ICalParameters.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/ParticipationStatus.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Range.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Related.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/RelationshipType.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Role.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Action.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Attachment.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Attendee.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/CalendarScale.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Categories.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Classification.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Comment.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Completed.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Contact.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Created.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateDue.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateEnd.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateOrDateTimeProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateStart.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateTimeProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateTimeStamp.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Description.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DurationProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/EnumProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ExceptionDates.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ExceptionRule.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/FreeBusy.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Geo.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ICalProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/IntegerProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/LastModified.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ListProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Location.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Method.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Organizer.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/PercentComplete.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Priority.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ProductId.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RawProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceDates.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceId.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceRule.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RelatedTo.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Repeat.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RequestStatus.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Resources.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Sequence.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Status.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Summary.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TextProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneId.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneName.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneOffsetFrom.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneOffsetTo.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneUrl.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Transparency.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Trigger.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Uid.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Url.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/UtcOffsetProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ValuedProperty.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Version.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Xml.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ActionMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/AttachmentMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/AttendeeMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CalendarScaleMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CategoriesMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ClassificationMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CommentMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CompletedMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ContactMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CreatedMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateDueMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateEndMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateOrDateTimePropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateStartMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateTimePropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateTimeStampMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DescriptionMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DurationPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ExceptionDatesMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ExceptionRuleMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/FreeBusyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/GeoMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.DateParser.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.DateWriter.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.ListCallback.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.Result.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.SemiStructuredIterator.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.Splitter.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.StructuredIterator.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/IntegerPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/LastModifiedMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ListPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/LocationMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/MethodMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/OrganizerMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/PercentCompleteMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/PriorityMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ProductIdMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RawPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrenceDatesMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrenceIdMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrencePropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrenceRuleMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RelatedToMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RepeatMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RequestStatusMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ResourcesMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/SequenceMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/StatusMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/SummaryMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TextListPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TextPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneIdMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneNameMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneOffsetFromMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneOffsetToMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneUrlMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TransparencyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TriggerMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/UidMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/UrlMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/UtcOffsetPropertyMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/VersionMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/XmlMarshaller.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Base64.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/CaseClasses.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/DateTimeComponents.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Duration.Builder.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Duration.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ICalDateFormatter.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ICalFloatFormatter.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/IOUtils.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ISOFormat.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ListMultimap.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Period.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.Builder.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.DayOfWeek.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.Frequency.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/StringUtils.JoinCallback.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/StringUtils.JoinMapCallback.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/StringUtils.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/UtcOffset.html create mode 100644 libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/XmlUtils.html create mode 100644 libs/biweekly-0.3.1-javadoc/syntaxhighlighter.css create mode 100644 libs/biweekly-0.3.1.jar create mode 100644 libs/lombok-api.jar diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 1b001d4fe..f272b833a 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,7 +1,7 @@ - \ No newline at end of file + diff --git a/README.md b/README.md index 3d3651c82..2c88f470e 100644 --- a/README.md +++ b/README.md @@ -9,3 +9,4 @@ USED THIRD-PARTY LIBRARIES * [iCal4j](http://ical4j.sourceforge.net/) ([New BSD License](http://sourceforge.net/p/ical4j/ical4j/ci/default/tree/LICENSE)) * [biweekly](http://sourceforge.net/projects/biweekly/) ([BSD License](http://opensource.org/licenses/bsd-license.php)) * [Simple](http://simple.sourceforge.net/) ([Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)) +* [Project Lombok](http://projectlombok.org/) ([MIT License](http://opensource.org/licenses/mit-license.php)) diff --git a/libs/biweekly-0.3.0-with-deps/biweekly-0.3.0.jar b/libs/biweekly-0.3.0-with-deps/biweekly-0.3.0.jar deleted file mode 100644 index 20e98c43fedddf7b09a4d89df0bbcbb97baa822d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 299206 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

pP;$XSEt(Xn_*`cx&b{8TD+L1ik2r>rVYS95} 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⁣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�WLCvnL|OBCV^|p+byWgyw1vKjnT}5*nZTr$(Hr5*HQ7VWvyl zhH4u$FKQ=1Re;-PrK=YuK?^&-Yt|_@4VC8=Qd8Wy=Emj~#y=q@4ZO4tv~=TIHq{OL z&+(N>bV|uuX=G?e#8}$*m^~)1wQ_DTA;wwb)@Pn`X>^*dbNu||Za1K;(KN0zeSn)e zLz&1M132I!GC~U)d39P$QaP~~ts=5p9InJNTV-i2j9`RW_d}YtZw?+(ta23n9y%a7 zlI{RyDLx#2{m3u90Kus%#xw?E%FDcJIdtNWjV0_Zk@37AO>`&k=qpx-5TZ zlvGJ!*ITk9CqDRiRT(}sL$>>x`v};6+5=aFm`F+4nE~_1&W5FtvLu_8L|*YXBlOYkNzs5Ma9wS8HBFxo-1i_=V@2YILu=?iYZn;b5ao?rv;P6xeB)2GeZwnN(( zNg7>U!~hn7-|pcO9=Vmsd7dYC~wH>PZ-du5i$L;#$LGT*W{mQA=<(TWLmKQNZy;Vz$rqP%N*j9-Vp0VPfbB*P43C8?dpspEF^h z-#}3cx6ml#=FmHi>>L~OdcV`nFg6lM69Te<7O-x$UGnxuzNd8OO3-1!%M4@TH&U0ibyL>+a zg&k9U3g^z=A|B(&H31KX+F&RJ7B{T4yfEYFW(ZdFWn<`#dR9hTD;|``SHgzVL1fIl zRH=k3lg4L;T`){WdDEY}dXYc4Gy*%N;G>#S2Tq~50uly=vmcNFDqYM|hX5@qt*0Bj zCj>miqwZpc!1_LZ*(F$X!Eq+O3(~p&PF@e*)t8-M#NL><`09lVNA7f3-eh~4&|ezD zwo)ByYhvYlDv)Ttn(u5YjsQV_oY?KD>us^9%s#D@wiKH-h*+p^@w3#UM70mA(G?G9 z0o{UhfuX4cIo^lk7%uamnABySq!-M}nJ_9@up5MCml%71UZso*+Ym{ovuF38TXSHv zafEv&Z4qkD`~I+YR_9$U?-^#rTQ!X(e2DKe=)yp?h1bIkzucSTVve+)J+qE%kK_Pj zO++I(&!T7RE4~2#&d1ai-6KNh3jEI3`0)!euC0uam^bmG@Py!P5PwMaT_Q5 zc_OagK19)>v4w5$#Dy<_O|6VgtPFi{m)@X8)yTxalVb3s?#<}hB<96?S62-%Fe;+n z69fC0O+}Gf*9ggM%8>1yko$Z`<^`Kckf5>`6vUhLf@yGl;M!uwR-;Ory)qYxTDHL~ z{|4UgY5`sY^eh4zRZVAqstW&`C``b2J&M?d1PG|1;>)6nZ!CQk!PU2c1TuzdV^HiN zrr`}TeX7gpdTO`4HTw5-+7c=qkZPl%cfUZY2wpBmXQV2EHzw+>`8VZQUuKYIgs$5I zKALUH0Xwbt2!wB!Pa&-aBc=i$;XL8tb0oKNfgRRH>AJonWe6P=5+okWcSYQm+%6ooo$)9OUb9Pv@Q*NXD_k|wUBouss)YA z^yqyr)=O3tWB5ZxpstS1w`A;T}a6n7F2c$ z0m`|7wc7Rq@!2ZhHo1|jwwoYyohL-HU`%+epQ?7;F-;a7(L^tdyN4@1_lohWgj14g zM5{Sm%-m zhg!cR@waNE=uV0l#|7^}T|3eX9HPT?ia87s*%1X^G2dXzz zKHTXH0|heDFhR0{y$QRA&Y8w^kM=KVoV8_NITyWEwC9VI|LvFggT0sZ)ToEIJrBQE zw5<#}{|yoQ#m%sqM8f^(5**f z;Kcyg{7OudMp#_Rl6-YMrR()>K9MK61C@^yq=NZUb#+1!O@O0*)g4VPnfU4RnZo~2 zsVweFzkYQ>nqNkb5Vl|N*t2g^$>OZZo@R>vxVMrc${3DlgY!XA4(BSdG+XrI$FtSh zK8=Zt*9sFA38pF<X2iu;sQUPJvZlf6HN&}=c+>M9{h8AYea7{#>qj&h&$}v_(u!&b;E3k=lKR35tT0RuiLmvXEJci4w!2e!$VguS z-tmPPF^NH<3uFYPum*iTPqd7G2Cce%8%w6WCJKRrAQq&e30I+^vDEGDC-kc!=0r26 z=|8k33hY-rkJ3IO6P7w#iW=iZa#ZtDL}Y=zLQQ8k2t3voa9V=tFX14523 z#A`CeXK-7kbR)u5_QfS5mP??dRQkEAXLkp<4)P(m*E3m@#)X1NMZVI+;cprYT<}Yl zeM?U969LS=6Lu2;8*EH|kbr^7BvjeRa@V_H{HN_zg@!=xg~kWh-xznn`|~HI_>TD( znh!2|$POEjeN}kIs**N!Ph%nkA!HpAMKgYyftNVw-}**LMD?B)f3Hv_y?S;^lpUiO ztVU$}o4hy^--XU`i{lHl2`olUgOopeR*Rp3TvOEQ9?f&H`Bdd+2&7sb2f}L{71HO7 zMSTH>XMWFPEnfy;5dKVqC4d|a@a_pD1vpZ}q0{bI^*@P{<`&6Q7<}txWXrTORAmv2 z)6?d$8%~3|_d^Ar+7|jBH~XhN+TOVu@=uL;^w$pr!@qO0at;<2U!~Fid>H%#!Uni> z3lIj54{w|1saKj14;CSA5fwW1%2tipVBeL<&55V$Yqtjof!iA=^v`Y&U_$Yuu94AA z*5<_cy&Noe+nL%;vI_R%#2aoefcP~B0l*Kq)ITcc|aay!SCBu)F^$QXa)UpyD z&tP_m5*YruL*bG|3$QM{dOA<^ae*On!t$lm6ZKJquEWfei;{Vnsq-IL*btjZzwdXT z-8x*kWr@N;Zr(g#1@Vn(hcqfZkd1op1*RQ4gv+uuDjpksH16A-Pz7MMBKYoQh*ZZl7>AEsQqLR^dQ=`&*4MeDK<#2zrm~=h<}ppQ^|eN1+eVv zT|?HAxcWt7$-%PS2}HjiF!{h6yGO~yk(tIZ3K~?Dd-e@mOzwOeIL;#*C0$r=nAYi~ktWnK!$`kkgI|5Gll;;;qwxghtk0;k-IfK=1^7;KR zJ>`5#YqJwDnGY{OW&BuJS5t@?Io6qUBP!N8y&s>?si$&f1H6yFwR!B(WpcaWe66$( zBf>pQXU^{YwFv)oQ4)j^KTz2g~3pKOge zj`AYtA!*a$;v?k}`=~<8>hgA^UJL6S+g+$*-|CMg%|S7jz{=3Rs3^1-HXu4wnMMcA zdm?*bL)0g^r5Vk9i~ZbO@WK?WYx*X#P-NM(2ge9Ei6qjM$X*c5o0AjJ%5xQ>3kEWK zDk_;}a*;%SMF6T$LsV7@A|!Y2ZW3V zjWYbka?Hulp>*f*&wUk$IAO-eF>M@(gB!Hx0tMFH&`eLx{r5TMQ;8bWT8SNm(iU*GNKI$C6-N57V~9xbBwM&qK^kby9$tkny)sT`7Fwu4{-ORA)TR|V*@K7U}kZ!ke#JO&a0 zxlbXmpe#?7(Gk`Y-BF5=VTTQ^XrNJdRw1s^P+C^11DodCXrhI%TX#V-b4r1J^3dqd z55Wp1x;}?F(7&a2B)Ysh9&!iU{*wbDXM`7zeW2rId7fksxI@3xaRT4J2Kg6OnYIG8 z1HtD7#E81M6V&pC)ZIg1!76$jPw$Gpx3s21ZQid|p_4}VNPAnJGWRSWu_K~Rc){4a zA9v^-67FTbDr74f+Ddk%HWeR=N)3jmg2Yuy762#0)F*6t;#`ZsAOl@Fs>HOpFd*;2 z@R6^9#A*aOEB2=?{HRCn@f1|-6dm$R&H#?ExwKVEbZG_zb^Oh9fr^XbX(W=$cAA8k zre5zqV;tG7K$F_zYBXO-G8{qe0Q1^oT+q8_z?)lYz?<8@P&X-_zH^g5fpJqb`@$fp_r8J?TPyZ%KfqB8Z`b-# z5+mi){?yq)v$W6X1W%Oc?OeB%w%?@^r$#ygk)AcDrAxo7JbAlGRn!mC?oy;GJ@fU% zuigM!FEurMPXn}&jZiN;Jxy)F$4i3zZIycgg3B(yYf-yOX444S`kARRH%wmFJS!GmnwYMa1B0 z9lfCl$4kwbS5k9l6^)&9h}Uty1B*d`Aw4^SI;3-gWkY$*cHiwLbPeL7*P+KExo9Qp zMg1A7l3`u3fnP>=??y8^BM0CS#}Rl`0{cR6S2*~|Q|!|fw41@p{VqRf9cU-a`tTEU zU_bi@bomhe`F*vFI+G|u8tsi>nrQV(p-mtQN26aS$x)WXXT(R&mH7)TephRGAd6oU zT#w7m1N5;=Pu^tpm^ms*3|v1#z&Z)f;Zfrm_UvvBC@`HZj7|8Hj`zA?hJTgQ#Ixq!O-o zc8B!XR69SN)A>Z(m6q@~as}23;H+kM0B-~tm8Y9Uq%vh4$gl}6jA*A+7-Xw5OCy1L zOpc-4Q(=$eVS^1~KpRv zZ~|`taX}4=*+)6OkzLs;!#dyMml%g+X&Zx90Rb{4mUs5s)j!1!wVbg{?a*((1ul2U zTyS*wZ3p>msExJlX51gFQeEzG*89hbOtlbIuK=HNM5oLXQGaVwztYejUU7GEHof9(UVJmx9T_x7{}Ya|>%Qvs z2}oknTuC;nb}We9#^$rFkTw!Ne=YLWDaTKEnl@qfue=Tv%2Xe)vaOnIU~oJW4=|$B zc9t_4hQQ-;Q@Ut*m!&I07f=DlQHxcUDc@!Sp=Wjm(rZGo*{GhibI^b{I2_ z`I#pjxX{CO>BjLxln-61jgiqD*MV}D?f0K0dHM**3}}_r7$}z0IPI2xs#vWrTF?B` z5lEs)o9`E`hm$CCi)@{2&i89co>VaH8QM|3UEo9vM_1riz>nz55M6H<30zPnPoClt z)CNBEyxPSuX4L0|I)?6=7fgsL$e?z)7_O+}qs(Wpf0P0*e%I3vYZ5lLHbp)u-m_Tw?X+<9EfdxnQyEMrgPEk{8dV1-Qf-v zU&wUZA_T6hUk?b$I~**Ln4)6oUSCqspWFW>1ovi_1@1O`NxpXW_+;^tpm5DriU*y4 zaVYLywsDG%dVn)DLs_OZ#xC@#l7Fp=6Q&Zb9lt$CKRCxs(WoEj)Pc46_2`bGC&-h= zgw33aj%>pE2i??``Ulth)I=+Ez?J zYQ~`4-5gJVDqi;Izm#iSmx5#Oe2GE!ix|oMch3bWLqj_QdqG<(i@*Btf;bJUIU2-3 zt)_zG+HS$I$3r%7)uxc@wj9Yew6Ns)%HTv%>qF!!M#9Ox{P63ttw0gnYrrR&;9Z9J zPz5TGb1=I)Rb$b4Tr5nh;}Uk&qN#g zqF2E-!2<(Y<#oMK?E@@tE2T1ZInQjm`o7MGlkovSG}`$S4Hv?Gx6ftH`R$zP>lzGe zEU2&8!+E0tE?0mk0}M1ioEsY?`tAUFUpu^z8+mBU37oB0!AGRmR^^n!=DJ+XQJisT z8QcE&94Oodwm%=|4NZJuG-^6esSf2wF#6{;MAgp5k6ZkESgzaakYgs)1J&9pXO4M9 z5D08Y_1O0Hj$ie?EGn{C)xTTv{XBc-hRj1V*#X9?hzXEZj#I@ez`? zQZOBpd{Hn%N3?->)m#$fydl60RI8&QngD1I1O$f2)H|{@RKzx(y*w(alyA=Aa zb-OP<;3l^haCKm4fEwCbV@wYg2842bPqls@?@X@-#2DnUL`nXJu5jY0Mc{nnrzp)h zV?MlF-!CDcpO?;iBg}6wgIy1@S7L*F?z*1T!ZMQ(Aoj311v3XNEq)?@*q$Xc6znBT>#@kfC=MYHo}%ei03kCf#s%~7$mqtLd= zM$Yb&dEM2X8>uwq;*J)pyE-f@b&1gVCl<-OoL+@-kZ2|LX>NRQ6FeC@h4NKNtID~w zBi-sEsi~CXXXCLA*el)|WZwG-B*LDA6yJxQgaO71S(*9nzCCsN1|wZVqt)wx!CbwS?VkpX`UNDlUhT~dV23;i4A*ZR zkuEO>h8$FUQ=}1pp@V1duoNo>u?pBDd$mam`mQ8Vnen}^7e_}vXfW-d(n@D!fKE|;S$Sbj14S;`(D~^SDmU^?Xc5w` zNJjm-Qdk7zE=}J2!cs2t!v(x_xNbYqB7j50)X2@5i-&tVMMeXrTDYnch%@vK%>1Z| zMzReZverA~#Gu-Cn?96;hASrTTasarqISTUf_U`)!$7mYh$@uE2IgISx2l;Jpj(Hh zZ%q_na0;*jeYd$*JYc;7NCwA!y0nt*Ji-@-P(|Yt;MQq!7Ip~JT729X+Qo?eU18kd zwBav_PsepI+WNnJv9Z;$w6oUvL&NwN)8tLjulIz(uKz$%me!b7ES46d22|<>%oa-{ z=0t}w;O*=aLfhD9_^(8yHqBxLfOGNSh;r2ZG?^~QSr22igWh~TPv`E!@#6fZ+?O5^ z!mzWFojAX#-5l{ge#`i40U|Y6y6_ zRC#b9vxSm!sRd%O7iz62ttdqm;(TfO7$$Qb&n;e}U74?j9Ek=hO#Kn>9+w?1mluZ{ zubCS!mt|Gon?XOJaWVLR`d17GWp7`*DwFza=b`dK8u6j_v9hw@^a69h^@Hla`q6Qa z$>V_QU`mZ#>EyVwc}M-&7GQlXKI1^>uKUG-!b^~eqJsmmz5C>E{G4B|`D1GUc5$}= zmy77O$RIm)%Ku8mT{3WL>?#1a6SY5y|2)ayDHM`=>`DQxlellm;7Rb?CgheH`iWyf zEm@mb-|W$W9=iK_i+@Ru4sHS?3<^C#AriCT>>3!%o?yfsZJ+2!Q`>Q!R1r9OBXoHF zp!jXg-Lvw>=)S}l7tR=};&y$EWSSzSWkIaS9NXUcS$?ye%h)(ZqRV`Bc(_R#^8Q(b zBHW(sB_(^RZpgh8#<9tF_5q(Q#Js=;#{8Lw8TCwlr=L8PAfGA(8u@)@r7}2i^zZ?a z5h`S>;c18FP&KNZ=GZKH>5RH21Zm+=D~jZ4@@I%D)+<7}bt1^xC4KVsa>vU&rP^{b z6R?DkX_6JByC>VwQVf>NNh;G)%dvv4RSA@a$NA0Rsa+2^8kS!y@eeFpuqgLx(Xop) zEcXX9@%YZPoA%P>n!b|(k}p(K%G5)SnBDIq=jY*KRS@aV0Jc{)j{I7Pici=LGhdd# zy?$bc!x-4{ls=5LQ!{853Uo57-iQGxuEu-*G@C_AZ7nT$giLj@<)G_|~ z`$k{3hWu*9V>dD8RsF!1ufBI@rmqySmIy)25Kp0+ckmIfE*epXO@F=<9azX3P~FoH z`U-=2gf;&h{ni+Hxh4B8$-y0^4e%*5@^TlH&Gl;cn`iDWII(@ZZx+ZEJr?(nKgbcO zjx4EX&aQ$ukhR1R^)&@n)pl&KyGGyObCoHc7vE6THOBTcm0T|7ge5`R#EMYCrVA$e z?^e43d;H$GVAC(ogd@Hno-TjBiJ+~beyKrY*z)G_6K5spRbeFeRutPtuO*gOZx-X4 zYRGG+E_ntG)wb?ClcFj7H5MG)EecngVMePcJO1}Kg`v$WC#=ut;dg}3T%+6M^~oUt zs#ue#jj$kxe%f+9oK^?SAuueVYiumHYNa7)j_jQG!HrJz#&!Nk(`ES$v(`C5ozkfI zq*zxTLWwq^j?>*lbSCG$2A>)}Oo z2LbAfXHxAE)sid6b=3K!Br@j*>fH^_eh04#7G}z<>;uX177coeA$q|zs0?#^g@8>- z1Y8-{7px^sLWi;PVN&C&8WWVy24gsZhD>>2F+05e)2>92>qJ zlFxD@bqA$>Sj`@oAbtnsW8D5aUy;DRh zR^ItR++Ge3quI@8US=$G6QarbE=cyCBL-RwQ>%5JmK{d)MM4GZQ0!HGPgM`cY`QiB zO|%8}S5@SNpib$Z1@olp>8Kq-TlRIW-{l%M`z5pEX?}PXCpMa(8#_DX;$Q~W$qYCB zGw%ZF38u+{EXPuH%a$BafjQa)$%)@MtnUasK>^f}T%fE5B4f{-2dlL@t(~g{QzM~> zHOyrq_l7NT%pS=H-dCx)yeraxE&;X`Uej@)E*s8s-`=}0sH7-_jY;~&<3xPqmeRzL z>Usoff_~-&$1}vgadXv$ZB+Wg}c?ro#!Z(3XnK5L+wCGy@ zX;EbDfvw=#1{A+uCl7!?{Ib7u)da10BI>>V@Eh5SuuU*xkPBDw*%^TZfzH=cRK?10 z#(Vx9nWvG!D+hJ!(`M1mN`NPllnPeA-#p8f4>@~Kvz@ZQ$q$1osvW@>{4SuTbIJUr z1~?Vw-<|NOsMqj|m|fw-Bo{iFRStU8pa@7k+>*Ca(=~C;7%(&AK?!njLIFk(j?_?% zbLV&oTJBV=G{%p&Wsyd^74-%F4p^PUs*5XoW#9U%zFkxByup8%DSO$%Hw9gi;?44( z5)hfg@{k%;#O~rML$5-1Mj*M@8?iFchx9=v`M|*pBLe_&^!}z5rWO5!U!$K16apJU zlPwa-*tS%B<_^X+!IXZ_S1roEyLC4eu7Y9AqM37ZkOt!SJ;ze+bIeF0z#h zxPG<%Gm&C?bUA1R_XTx{jFOqQuzOD4BL;D*dM}e`!R{<{D((hYwsUy6Yj3-GrmrT0 z0<;6P18L$h9g|r0Qtk(o8w+$B%VG`Wrk2m{6(puq#gUFRwv7#ks3_UHwpdyH`Vj-6 zLugY&`8o(Egzvc2kT34-Obza^djW7fw$X<|LZ{32Y|ue`XVks4g6mjs!Q%wkI}61` z%uf$akM(ByUs ziwjRDXA^pGY=LFAQtqAY?5j0Ury9?~Ov5bLPqzO0olASsmqH)+`8GLz_V(iOh|rCm zC^0^Gz2O_e3IT~jiJHt@qpcg$vz%CY=Y*E~%C$g*qEnk^xWN=ymy|&TEUq1XC1t{D3uMdCiZ+-ax z!fXHEdR=U%j$PPtWH=nSo>_D$zbZ<2gmADCk>CL0&b37em1WJ5jf5bpg3f4ug#WD9 z?T9C@z}pC0O&Rg>WUr&=_VVBcy#g=*y#-#gu|av{K(yWj>;r^>#%5Etz6$QqjEfOp zM7!Bf0P$;>c_&0I zyd*`xf=->ID2VK<%NAaJl=PCr`>zcVNjOa5@>HQ8pW$E-qkjM5oS`#aQWX3a!rOu% zq<%kZ`;&;ay&d0FD4lRMh0mlV?hw*aqmdx3UBvmvv~3@AQtY9IF$8oN8VD71#yJpV;~)qctxUz=0V-!AH>TCY0EOht z-Jva2!&yBqygr!jFK+e#V*1p2p_E-J{P4&f5H$Z@P7Qyxq~T^~;&s*2t@jusVJ{ zwHc}`K(o^|9En3{5&gz{0Y6RZiX?vLPs|dpuezV0%)$iDWzOC4O>L)t$Z&RCP8ioq z=m+p#U8gmzIbB|UY;-(w-e!G%yk~ur+_D1$jftD~Ljq${RJk-*q$k|d5p_ldUPSC` z{w~G~#$+}MzgRt)3f0&;;%^0V-GSSQ(+fj*HVCuwMp6C@XXc67Uv~D2Zl-B8f$^&y ztzQkGb?4z(g%`Lc3{#qI};p<$i5O zhKA-(lZW)SO-xsDL?ox8v)%SF)X#B)p_dPFtqL_eu2QN?Y|1RCeLe2-!jk6>&Yn0zmI z-Kng)VJYG~^B+oR$J5U3I4TA|1~wqDB2^lG^3U04oIAinnNRoe7E&FBk2{-gT0n6G z@YYk0YC!bz&dJ`i8l#dNkoX-|;7f+PU^%q{dh$4>(Jk#dbiyP?dh*(RjZA%aU}{^afi4BJgR9OY!CAv!%z%Vz?2VXf z`Ztc?M+0|nt>GskuJ~)rPON?*I<7&IUvHv=Ro5lqQ&(xYo)o)IPaWZ3CW+3FhGJLh zsm?oZ^$-KEoQS<3)vza1FCj;8Pr6i^De=X)APOadi{$)OG=2HkL9dp+dOs1`Ar0QH z2#0`@4F>-hOB4j1aUi zjY1?R#a&k)VoAU;86b1{qi&vm=N=qIO9D8yi>i)C);wLX>dwXyEg5BS{V&z6&gVgdV z*AYx>ic`d(q@qBGJgp%VB~`dn6cWK*3SLGbC{Gnb=Aj#>4^B^fswy>rYWaC7ji?(z zZ5?eC#(u9N@gsk~Rj19ugMJuruQ|8=AiaieS-pH)W^CKE()q=~>&1iv^x6agKtX=g zt%GiIl#hd(Ec~z;cm?dhJ|k4Y55U9SN_rnDT{Q*QC&Mwi0CbHS8AHD4hWQmM7JRqt z3=YW;*>4gsgEfgcbxqM^?b*?Vv*;E z8*Fd?5`z|un|WXw0Mps8A4@jL$N~>XSGW^1)Ex@y!k@&fj*fgIZPD<))d3kzq$Q38 zuk4^MA7OqR-Uxt{_D&n3pMY&z%XNoL51u0E1nqbHr@76-M^@9KDF;izza47pe#xf! z-xEJtrME}Sj&jiX=LWqbv1SCBeEMS4z-JC2T`WZp^+l&Oj~k`j((b*SIY02;Va9kQ zC?*?)S=Rd(*UB=SneDO3^f?UI!R20AH$%%rv#1A=%9E>)U7$CKJxp#BdAYr=Ha(s# zRX-9|zOJ5HZf;yx>0ELY1nXHP>a(YBy`#7`UPX8Hn9?ZvKB5~apXUT{?iY=K2|X)3 zqQ^Jeif(OCyEm{mW$&3Jsh^iW;!}Gou*Vu1eOsxr-s%241{z_lY2x4a^GNz@wMO=I z`yeOCw{Nuwe`B1gXkcq+VrBW)r_ z?0Rh*YudZ?`h0`nf$+T6S&oXqb=+!)LGiuX8o&k8+}RkT)ZE?{xac?u!t8ep2cZqL zK^A5GspC6ffFrM%4!H$hkGnIiLg@SxtzQ9^QnsCA0>4i;bbuiY4Y`g>{dSx2yH#6h z*|DV0?A1oHH%Th05)kiuX=VCkzYvn1F!q9RVJSB)u^H`(w2Qfv>ul0OeD}wPjDxC7 zrEy(MevB}=peqx6QpCK0${ZpAyj*yE>NIG23X{*)fC--j1>dN+DlWX^_iCkv^Yg6u zqP<|^Q-qkF`kWJl`n4=Mgk@R%3LX(t`D{nH{_F74h*kdB{xM=YbWQW}Z<kCse~A??66#k5h6d4UD@+Tk zBN$UC@;pnK;?p54;S=x|2+8e)N|xlNK9Vi+WOo+-TxAFws7HfAQP8}tZE0D2P=vE{ zTY4yfmlqQXz5LBv8&{7zi?W}ZH#>F71|bZABBy!FV@V}>K8RkYB9L6g73rNUcJ>`7 zp8i#(zM2JBnY z6-cF+GXk^nTKp9<%;uoO_Zi}CllId-H~5VqP>!eRpeRE3a4ACf(5WMA^&b<-S+7?C z{?ykAFk19S%1^l7Xb&&$@U1fhIe;1Py~`BSZ`M&* zK7M7xf!!Cq6R-<=@|DvNb`t`!v^n{p^6Ox?gVkm-&ineZGef`+EoZd@6gSlQ72C!& zQ-v-rgS3}YB$P-e&^N0D6C1)Et(B;S7~q`pgX@m15M>JdmP(VPHfCP&_x;>?6eYB* zBEXwSoma!=rM4kt?pYOS+1Y}9gU;uf2?8;u`gLPu z=yjPnUw<)pK5R{XOisTo$ZVy-`1{1F9K=j}lY_-^FvG%0c4FREOV46Wt3M|MrqvsdJ`hXZ>$|EzvhbL)=)OCtzID392c%= zUUb4FEN{`P&0AFR#7rV>iM^}Z*p$~}r>nSgzsA21$oxTDaW|D0p^=ha*_@`z`Rz(U zc?VE?+UF~5QH^H$^wO73iOcVSNNViD z)Tc;J7Ze=BgvF~P2(^;Lh>e5@(!^LJ`JMP2x6B zWsPxXMSEI_42LicK3tN_9p!7TX9%o&k)up+ffg$;>a9j?YxiUQOBHA1q)dHaq;n}W ztnKWMc|FLZ0tpmpB@-9%JKq{ckS(%_JCoLp+oxT3EAhnqgpB68Xe=>3k?Cqq+)ke< z?UHr)Os4BjhCi*6-qK~div7^yc&;V=nNe1w{j<3ex6?%8)>g1_hU*j!5*zzM$hdX^ zZ$r|)Cjb%Y^#%!SA;5`sp3;jPOooEfI@rhaK!%U`}9pdI+TDU9fF zz8^`2s+qCF2pa`JOw>&92KmqF-XBnR*+--BY~XZn99W0`uWc%IoBszD(5V)#hkAtN z3n54r48jP5J&>%Ug9F8=+rnBZ0z!?ZPW`PWg)3MCAj4!phP+(R&g1H}S<<;`V|8)d zv=`^PwBl;h{NSVaA-?*Mg+&I5I`DpY{c<(wz1gvO!+UY(W2gK2(0K6abg)}k`_^D3 zmUZHhP+xU`n3wx_7=(MMe}}sxrkk5^TLSq9<`o2A`IRXC#=vxmyZZ_vv>d}w#+y6r z#@M#q&CZ#-7&`Wqtgn|E`bPAF@>ZuiKH>%D6$rlP;|=87BNFdvznHsYcv!6Jw$Wn? zeoha$$0J(5Px_s==z!T9RPD8y_oFsCZ!A5-qY2rQ$d|5x{uGZ#7(~6jEi0lfx@{cL zjHuC^I`U8xoxRr1!%^w-Q2)g) zMqq%WBQY(o(2=6{G-XXsbTLwtB|+oijF-OUs&@r>cbaQUR|ri^i}JT0F=0M4w>#&e z*Gnvb=3qg_n>e(z3~YK%76G%Std-**6yf+z>U!ss&WoJ2fgc-VHEN!MF-?}F911pO z77yJtA`JaXG3MlH%gmQT2sSk627SVqdoa^ns}a$ z+1rAKZb$hn@zJzOS*=?ahuDhzS-Ogbc(Y()cek>&QQC_1qZQ=*nJoE2*qdr!TsQlyS`1n5kk*UzyIX?uxxK z^6E}HmSz+|S0tA_ct>wYaL>+m(TcFA&22xIID&i(?)IDnpU{CL%&KX z^Gl7qRXXtr51&mZnnYP$dgK($(U(Y+R@o1Rnq4iZF$|u4tKMxZW9$f-`87RzIV$Vw4*vW1>G-f;Ih{eWgSn zHwFpKc6#uVq2xe(@Wt=;jvEf-X{nZ&3yGG13#msCUy5yTXtpb2WWMA}B447d66+JP z6fLp7X?vN0Y0_8F?!p+tiW0-}cn@|{(`IC1BO^-UV#T1m!XXo$I=hE2(A|b#x`*t9 zUsd}qF1?Wb;x5HrCHiun#sywOpg&Z4hO{X&6QdABpw|h!X5U2GHy5gj*ooBa1o7_F(gCO_iMj=rtdHBm5xk*NFa8!PWpe zauUo?JHb&nExhA>d0+T7W>?+toAq;*sFqCC2!<3w?busuOAooM)h~)CNplu3k^Up; z{Ab=qr%_ImXxA5cb<@&69_O%Se~>!W=5kIKfRqYrV8hg(644Wxro+3Tm|~ekLc8Sn9S)YwFuIwoS8;j!?Luq zIRqqC%s0!94f#K<2K!d8OJ(VfWr`bz{#r(y=@j(wbBJOuDz0N{uO#3(jWQ~P2kUK* zZopNW$~;GwFQS$>%b&Hl%WGFnU+tPz!xc-BnwE8&mVX#Q`q-u<6@>ep1G~RX}TTP9}040XK2cK5#a73Kv#* z*;g!T3G%&b4*0MnxTF=_Axy^;PnJOfHMybamaJ#$h+jH{j;|s)0z4Kolm3k9 zzrDTuWm#}Ya+GH#CECl84INIxJTH(R;%mVSX#M zEN@V-mgRD_;*eSe4wS?p6Y1F8jlAt!V_2-Gror3vOq4?Z7P#^~tpEUiy5EmJQc8^0np-W)CSLZRWJES-Gq4%&9Xt(j`T$h zqSF~z)H1p`N`v?dmUZ+Ys~NFxZ!!JuCjP4Dj5_ua42Pz5cuPVjd$(v>eY@o{gI#>! z^x;h5WKt6fv@6+L%>r;~?W@-RDtM`%S8Gh zTA0XaNH-9jk>*JD(2TyTWby?w0MyT`LEA*SWcmp7-N8frsB#xIB@4YU*&7<6^(h}t z#D`l1T3yxz+XS2ofT9PlQMreocs_h6?jv6hzW(G2MVc}UhSTSZiATHmiHpiI$I$Do zbzg1j)r@VF2!Utp{5j1BKTmnrL!0{Y@r^_TKH%&sDyuwNusf^r^LI@7UnqIfXMPx5 znwT~9>>B9lJko?|xgDtkrrIM?i=tt61$gmH+XIxEqFj{?d&WgTKJ7&u*E-j@_jYzF zw%YGIBuFV9r)_ZIW&(1faK0jRK>=K~1r$LgBe9%S*e#KjCdFbFgOO)s)QDC4j;;L$ zn*!1%sI~o9uEP=9=MScs#)*4{^!Q)Fz7P^_w}&e~!zAhUZKi~op}B_@%|rMv2L`~y0^eloDpy`^W|?xaxx~)=61$^Zo<3B$w+-> zM9XZpb#u|Op{3XsxZHP>i4%;YAZI1!a}-ObJSqH| zD+0o!jMA%rHJ~}uDQs!DjCp;@5*9s!X zNe>eg{8O#A7p(5r^)r5MjfLQ4_Y`nq^I9!koWA|Xj6$fVEztzHMLY^zg(Uo2dC57N z8Q5BQnmGO`vXFm_t+bxqaS5hj0wW0aYPakCzY&m;!KWu8dE|{Y{&7}Br@j;BPU#3I zT^tAx6~Zzb1HW26W?|!E&iXjDbG1eUG=Mpl>1ItL` zIOxNQxXf*Q^KH_IRc@Kvq&~ebo!?Q%gK8NGFtyLenUj@y;+~{UI5SpJIe7*<(EL`1 zb~sKgcg|WaQudIUFO?S1q35{fBSsz5Z_LfE>=F>}tpMbX9JSfET=^k^_tnYHdGKl; zv&>?tI#hLSYc>WHTEiugy2fz(Np4kI1OogBTuUY(?=-W_r}({uL<2GF%dE}ILixoR zr%HN$$-A3%5*^r^@~fhS28{Rm+7+k_{PRhQQ|F#|enzlIpana+<(y78plID`iRuwv zC;kUoj@iYN`#5)0G_Xk=^|1p06D=^ZV@cFX23{WmrR3f0(QCYd!(q)fnjHemzyUNk zM0Qf%7yrsIuuJZwvE%me*x~WO?STK>woK#4EK#DGpsS%j>K=~wc<4GC;FnAk1Mn$$ zRY&4x`9&DPN`YU%!qGhw_$aCi*MCMeWlI!*2_UrFt%NCP0Up*KV2M(Qg&T68@ znYQ(i1Kh7Lu0ii-*iUR_`$pY@-x~xF6c>(*B8*Z-yRp=fH&sY0A}p-M6(9=?gWJk% zD9kWRl|)1I2r7}WRher~rY`RrC6j{73$%d>{hr@20DDnNld0BWtw^HVK)pueAV$@V z2iFQ&H^rbuGj2qCq z^A{`6bdqTs#ffdxlA5*=x}~kwd^~&9y{de_(Yg9;xuWYa_e;V`T3}MPQEPRg?8B{X zKt>2NeMZTmlh1Hl#Jx@!|65(Jk49t52}kg4wc1=!E?v;hwBhExdE2UDc={pMdpu{M z0ayWc^>%uwn7RSrq#X=C_A1z*4RfcJTt=u!>@v}yc0fk%@b2>}Gkhn_;Xyot)b!yR z)9u7{9bHw#(SnIk>q2MKG{cO%^Ze(tSzira zH1rQ>@p0P5>t12UrRJ|y3_livP2!S;Kll@T@|xbQ<$Q4V^zIavY(oweQQkt78NJ^F z!wK2GE$@o(+c66HJsXtDeUjFp_{DgAy$fj$U$QUP%lq=g{woz--pZ2@dd!=&e{!HTTst60*RvOyK13l)L+kQUFGMRzi>=uw$O zt8J4O;39gb~Dz+Frj^z9*Jf)`}q+-^Dxd&-5Rkv`IF5s8I<_FsWjXm5bqx8T+iUj2nBZ z=(AXA%##p^WFOuyAqg)=g=*x*rat;F>y1>hWw!F9|ph9U#a?`o@ql?3=wV zgz4wOlEMe_G-0L#_|0gjhWSX}{tZY_pQ!^Fh?BzFXYtJg^m3#$4n5cpf1mUbSdx?e zwgm|)BR-29s+IQorS2A4@pl3_W*s8ks-gnqwj^@q1K5`~P)f0$Fu3j$fA4LfVs7JE zq3ZULj-X6S!WSVi@yFS7S)J}niCv!XMDnYiCTMX^6d~IERfGWIe<&}u(z9k ztVtNV>)2sS_W>eQywPSI_U!Y89c@e8 zpq2l9dI5wx7`qrbOZ=6Qg(&{lA(Hpvlyz5))_Ec-(7j`fK-3(PMg0MNK}FcSLg?7J z^TMd=_DQD5>mR|8>HOP>mtt7c)>8PDKRq6&d=IX(n9c4Feyjq|(io2Sf@LqeTN-T$ zU`)fPGq~1%BUOe`XEh!a7$T`+Qnynsy`}4~RQn*I149&E-jl(rsL`ru0ytg}>oG|$ zs8HaHrZh##33Cz1m3?s$ot+wSeS&1aZtc2UkQFpo2;Gg<;}DD8S%+8u}gu{gH`v z&C+{Y&TKe~xU+7ao>VJ#ymfEW!fv*el=T%p+b_7R=HZ;!Xbg#+4r$oQN0_Pp99RtX z6nzqg?E}olRg+b`%PQD8M9zvA)VsAo7SEnvNBZC-%OXO;C=x`G>(Ow`J4NZDtJVme zJi|^c@LLt%Ar@Jz`xFCyLk#j}UL+3A@?vQGrrpwBdAYLtr^f$iHX1k#B&Y#3?h4d6 z@!$G1MFY2gU|jxkYYJLYpaKA%owjNqiLz@6j`A@E9S>$Fm;eC^7A#K;>+*aX^=kR! z519DeFkgN?s%KYiDn-NJ?Kw_eX-|*dUXb>|cQnp4rf~y`#>w!N0Cf{_&kkY$OrzJv zLDP6=(>m1WqsCaQTV6M>dFd>1xzG~0qU+sdAIG{ajBYH7ZtP0Z54FGv^S#YG7M4UE4w9?8VWuHprYiMG<>r4O#H%r4`gB zIKK4e;Z9hTyM9;7#HrzMi_(Sqsp9?m%a3Xq22OQ;4nylXAXVB9H9~e3b3x>XNX-$m zV^;bkX{202zu*^Gt~pN7CpZCw26!>KJk2KcWA-BddT z-+VT^GO^yD9v=8WIwB$>ptZ3?LDdEok;dz4bWq15)OqDcU1?(wRVufM(eVoa{p3_% zwZn~MxPL^N_<*t1APZ53%76>8nBF7@UTyQ-`tC1Bt& z40hcx5$>i?5H$5`W<1liQk!tHv=(Ks^vOO2Qa=k#U9jEbuC_TRBK;IupE)B1PuR%y z_OO)_DAZqs@~bSx@viFB+FB&5_&O3#k*>11Y?w?pRn2I4aX8?YH@ws!9dB}B!sgy+ zqp?=%NZ2hhPaZ>b%ECo~`S$EHD&>I6JK4wiv33M|;hwcRE-Qsn#^I-A>NC`%8mt7I z=_K_ma_NXe3L~8MGe)3Qt+By(X`-Il2jNVVnn^Vk;kaxqavr;K?>(Ssl)2_85kXlL zB1-hOD$8jutl7l>tf|++gDg>WU3#0S?;L#qu{t!IwE%d_z*wfQ4Caju;xmmCq|q`e zyl@u9;b@O$`!9f6p>dLHEd2Vtc&8@VV#8--2+_}n*d$$L+*C!S_j3?9kv;DXgqmdt z%D^Ub(C(+~C^e8gWm2Ds8>Gh86^p5MXAPx=Z?@+O<-#6YR<)m%@@TALvs_bTaG9%d zU#P@+=KVp+l_gb8rzdOK5-G>x9U21QUAhDZ+;*OzUNQH;iy-nv|t05Nns!s84?&(*3cvqmq8YH1!kHFtCfbGA z#6I44-l8?(?~oEG5+GQUdoP%;a(Xn z7m^#OF>WbpE^{Zf(BsZ2XGCYZqGKlGvl5SRMScQ@wa!Sw3Ko@;ppeERr1t##Bd#zO znwN*} zi!kguuW)YAI-+=+yG|!5UJ^l4ort`HH}K*5bOPTY0YL5uX@>+B?6dUn0yb zf~%SU!bQtXdcVm^2nA6jw+SG*ewPA6H&W+^+vt9SQMmQR==#gYzcdv7@G~uwN78dZ z{~rN_#ghEJ|2Hvmar|SE5O^@-PbU)+zbX4)d96i?t(#8BwOXD&wIvLR?JWi3GByEe_pb}V~ka8r$gWGQ*yIFgEmql z2ZmF(V9x!lZ&dYFh2sUN)rA~pB4Rn?AVO6O-#0@Zv2{W*salaF^+Lt+xs)XbbbfNL znwFCM0h=vo+Lz35fMec)0PK@XXJMCiWv9LNKTr zBHnJYvbd+R=7&aWxsMFg6C0G`qu&f=LW-Cd zyw8x{SG|~etIDg@uD=${{KC40)(?z@ds-5WtA1_rdR^FE_}p_GEN$lSLfT`=0#IO( zJ7N*hXegGW^g*>=m9~=+iEp1M0-4~@F;$dXboY{N(C4UJ*yDbaJB9z!A;U=sS<0wIDrG*&dn7XW=$`vyn%F(y8vx#-$U*Q$6ozk4|K zTa+tT^%8nHCf4pW-DrRKq*7`{#~f(b_EWjxS{+lkhYOS`--yOKk#{%k88y}^&_3jL z=+fOTMgh68&a1E%bn)Ufet5xoI!t$%nc~jbm_{|3waZL#H)c_zaP+@c)i022GG`%N zkS0iHF)C}?oN2=Ki>x*_alW{WSERaxsiO62v`xmzyw|VH|EfD2RPA?el9}G$^@SK^ zd5{DUz-BrYEClxPDh0EYe6hGU%_-~p| zQ?^)rxn}g(K!YB3l&Ap}>LJUeW5exU){js4flEBmp7pj@Z#@n}8Vjh3S*lsI=_0I6 zsD{nd>gVp}fW>w-pv-kB{P2T;SNl1CNp^0Y+D{6P)luEESOeJx88C^`+*!0mRNBg4 zRBoV|o7EATwy_c#su8d_jvWt*#Q|UTCI8!3F(LBi0K$2D&1x6VX{kG&il4gyh&dgqE*@@7ebA7+q zH);KM8|clvIZnn4>6N;qouISiK7GqR_)MxJni~5#YC}Rlp5#NMO+OaNJ>a*`ET9@n zu8#5C4}Hn|Lj+8CfFDlr8CsB@;L5)z++Unm}CUyO^i#DdX<# z>$LnATnD)C=+>W@<`{Y)z?Ud~vG1(r6UMkp320*~NF`cevAu#alX&dQKa*3GNa1j( zYL1k^8ts*~+l_Jw$8#!0I!)VwsSOSL_B^gVCY>m16ZPE^2X_bIrkwks8uPth;k2CjV79;vQ|y2)BbbM)A`RMk5`(6Zz{L?gsE&3W_=@+U_qe)Sw8K z-M6vqh&KO=9D(wq@438}fE6J)7#H!`un=tYV<|!%OiSrf;yPd1(gHyrjh}kRmfEEU zDsL)zG0-mDR416h+25$TXC!MP1q#SqkXbDA=nO?=&JE{FDRl;-f!Rr_LgcJspF7n3 z@558!$C1=P9!>;5cuTws=+=OxV8~7<3PUEG57d7zD>P; zg#1_QBuUvyZcZNHJJ!~S^BH1?=pme7wFOSO!)9ty!PvnX8eFS&et;`+O;u;3av3IUt<`Og8jbu-LaH;4 z$;O73Jm0LjqHRXMv1gr4&#jhdb}FJtjn1a}6klxIDw@7FhQW%i(z6!1NcD{1TrtHd zBWy$)3Ov<9EySV zR~;@UpQqBaY6&#l=>$E!kI14HNv~EGf#2#WaO1D$AFkjeklk18H&rbiBbZzZrwPfb z(6F)lP^#9R0Gn)WvPw80jhb#$LlL9T@N7~C8s`Mn^+FuT!GY+|a^M3W-NHz7>hOjb zPSsdF@<{y?Q4Gvu69DF&31J43+iUrU_AC_W0vwO7r zVZ0s-kal#L6Ew55$0gKMW)K=XpSEfuiRoh6*!Q+8a0PLFaH4{u&c7+4l zljG=j;oPtUCOKhvf~~Blv20)FZRnJX58)A)gItho7a8kJwdDo`r}E?ye@eLoymLkR z8o&C2V8eXL7a{hx7zSS_OQ(y8@&W-GYfq_+T(EV5dZ!tyvhJZ_rQ=U zi}mRf+5eJj{Sj9G3Z`mS*0^fuygS3Z!{J6Htk6X?F+xixizjOMUwd87khT|PGTCLY z$&1p~@m3Qm&DPU?v5(gmfoq!QB_=n`%woRs=PPQll)>bqh&Nakscu7x6Fh>Th`;*d z6CiaXZFVwq)q5RG4L#MGO|?F(IdxxTJK?`d1RJt{27DM@{D z4(v+Fy%;`9W9Pvs!KX-ED_KCG#b3IshbeO^F4L+vnQU_5lAX?T>n_?sd2azt33Xk%jXy?2;J}Oe3GfETI%*5lI6mwb*Mr>j5Gp+h_orA8}Z(1Dm6Pn1HL-S-KJ1RT@ zVfj_7)KKOkd0sCL4_wY-`C;p#;K5&C(M(Rfqk zAnu=2GDG&BW1sWiXDuajzq+ zpmt>0HBX|s)ZhRT?@@5rh@}ShLL;hfbdE6sAk8)7!^gQn+D?833gwRL@O>B?QUla= zT%CT5b-ooy?Tw?Sx+?w1NPqsdUp&-&I@G272{bfAXu1Z+^LXz#JMzx+hNivN4u?Ay zwq&(9CUEG+CIb&4zNd>((mUlGW}%^SNNI3v#dC08hSyW5Ub3UjnT>8QGOK7&#-WEZ_?2xfP1R6f zd18S@l_#?vSb2PSbdGAs6pd8W#_np;KFUo+!HdB~a0pI@QA zjF_8JGWY1Ad``53{(D(egu^{Zw`y5`;k*}Z$ z)lU8e{1|F}ia#3Ml3N}%ARTUAIk)(;3jBQa+NH?KHI*1J-8?CSy;eQ`)K=BgjQZ$W zV3t^{zaB-DQ{3+io0X5H*^5wf$hwm2af@=-iu;>IW`HG`ncH-WZ-;TxDWm7WW#u`7 z&nAlP%eH~?QZH;ljm!zt-m&%8j;fjAA(c1KtFT_#?c}iD2T*P`fQ? zBfifKY>%e&dRJ@q!y+qWL>%D^CD?HTJ|qsh)i8*zJ+Q6--m}MItcvrsB+OEBsFo17 zb$GNAWbGXR=IVC*uV>&UE4Z!#IJa8gQy6|`=RgTdDdyiew;S94XpyX#?S=dXpM5sFRzKeN1fqGF}>2wbq)LJVhOK*l08^^~(ED^#{;NA7r%k zn`>DhOrv#?uU3{{D?a`LZIo{&{#AnVX$tBZG4NFgc~^}4x@32kOXM2y^CU6wtKhB} z*tMI)=&=S0(-%XRs&lZ{E5De%RzO?%R|t z49~(N)B2b7$mF^pnAv?n=$-m*9^|@w7XsQm`IO

sbrb8_*+ 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%0AGmLlyO5+EE?xtUH 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 N| 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 z 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ô){NQ8Eb@=H<`%eX+YWdTK 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�VVJ%vvejSji$u&Q&>E8E|ZZ@BE&6ADUCU)d{%u7 zBqWXy#*?H`=}tJLPt)BaiZ^i|H?PAesETBm#k!RYqjH#;BqCPHt9eE@Sh2n=Wx!x^VF{l}(S)hH%^Q0(RZ8QSFG8$p8UC4Ph%GuQ?2W%`KlT z!3q|61<%z6(NIBC!+yi@qa|B_qL@7)m~kSrTy#PSMsn4Y#xJp3l!blN968eo#QIz* z$rx?!t3uhoyWNCGsJ38)NRNW>)>1j|2&qX6I;rPQVYyVOh~@K+*>Q3kL5t>D{>GJb zuq)p>!7Q0&aRC*elRo*a)jVaTRHXfd9kqJmOn=_Cb(P&KzUT8@w{>ux=kR^Dmv8%} zo%r&=w3>*(;@^0>6k|5V#kezT2^=8Txm_)(T-JGwW@cj=%fyU zo$gD0AX@UuKdgeN>K-9@sz#~!T`w08|Ak4PgN9(Iiv zl0d&40V{OC)T;WT6`&J>!+Uur!*e?*K9t=I!)~+ml7@)|u%its*9(btGJj{pp>~U+ ze%AgF!tiB&;wIACy0?W&>y+OJ$u?Kn4}1hncTiBU-!~0{JIHnIi}?G#>+Kksxa&o5 zPK0IB&RddnDe#2|Fj&XboPRsxl#^;Gy-WyI#U|MHd87`-8hQgu1P%!I*QQB&Lxz^a z&HVDMy8|sOp~$rb8wO!HxcG=OV!0MT8r((77pKxq#L*lN7NtFe%Ny*g7AjpAMnv%< zJpuL5pQWt@x>f)aYs8+BGi+wn&tOLL`r6H?cwzkJcq2{t)JNJ|Ur_ng&~}_x{K9N- zISGh7`ts*jIRuR7htVV6q>~)%_bTZg8ak3C60wILDf`taJUaN_2nwwKdP~WRJpV>h zc4M>;Kh_=|FD-0b6BEx#^Vq;e_U|&G&$E|4p&W_xf7tE#$Ix)_XfjKLVd2I{d$dM` z+P?LdF-t*x$f)MaGAF{|u&_$Em- zTr^`eGbSyx1BB8kQFyf#+5_?&o{tX2XgG~QhBDh#;40E4meSRphMZ85W~@}{4}@#s zUhO!)3hxEt;?^X?0Q&g_;^0Bq&Ql-~4}mvt51RpB96%8hASum&CKzi3U0?3w@aN4m zQNB7(q?fdTNZjEQ5I|K0w;2F74o_NSt!{6}vwL(;Cn!8RzNMdzTIaOmlG1vfYx%V5 z?zrE|hCE?P!B!~2jG~}(#g0h$PB=E|W(dy^HEIJR2GBM&x5InJT2o0jBI*Ht_qPy- zAp9MC5=IDFxND0A4jMem0XIZi_-se)9NG!3=nnbC8ibm;1xBv^A}Ejx>sNZd7Gf34 zc&o5UAco4#*fDjK20D5Wy+nYrj@Lr$Ax@5kBr#+IB4XGh z%(=&}X}1jq^6B(+eLjdOQYLm=I(^lW_z4=DX88JW-ce;RDnBu73Ppon$QGf$aKDSp zp`_Jr09Q_1s5h1`X;%e*OhO)iQi26o9|b=RXr_-HpOa$6;nRTSCNR#8Lq4B57Oo_z zxK4@4@`c-}*?QD0Ft-bd6a!rIIBn2EL%Gj`G3eC#1G1nGEUX%~E9ZD-GTYW%pM0T_ z0J=G1c6cs~hMza>^j887B4WkzMctM|5+O)DkuJT~7^eHgA6Jz6MI)t@(LuS+AQ4>Bxf*@fb$-4ahdz zViHMaDDJgq|4G$k@N3BW8!rw8 zN7)(!_II#wAZ}OXAt5eNp0=t8tQwz*eo}58PB^cC$u$Ro5@pW`?i8EtJ8N(nBDQJH zKWg8IN;$z->1HnQWQ`D@=17W$9=_f@UJz*s=C^1NYqWFlV7)4m8s?zI7kOuZ%leMk%s#=}O zLkcA-M}L-bHh2E|>iFC2s5F-CmI|Q%t+DvIu zlKbd}i9%&>^nP-|Mc^}x>1G{oS~;p?XuQEPat_k#gz_(ak!gUkvwI(2_>8x#`VX_d zdF)U~>Mm)Ogv!Dgit2n7Jl071d?I{MYj~94svbMizRNNL+mibzA*3g_d-~=lC%h@R z(!t#BkKMl<19hS2{*&)uFSp>QyN9AR;A-WUM4gQ^wA1Ct_CQZwphA$8JmNu;j6RAX zB)W={Zq+4-(AGJ?#cdTD#S1u4-#AJ?^!8B~3E0EM&o^`s_vZjSCpf0C3lq`&)&Ycj?E}bF%b~=jI2ppkRHQ#ox-g#AhGnW_g|*v%K?-Y6G?Gwu98(VPR3ipb z=A`!vEd0KN0J|26qEg=i3K)bvrmsx9-b-X+)28=;p2Y>~C^i>Azz85cb_cy>`NeZj zX&m9{3I+#|F~!mYP6YSx)D~p@Tf$I9u=Xj!OHZK5{(JgjYEnbKO^4l#tJ*=>ipA?) zPNbx?q;F+qNM&im`7-`<@a4-+ryRx!l|3LMSWbu^*)5>|uk?F?a6TN`!1QNajMDhh z--*|Y?Dfng(+qn*!$uzl)ycGq@rRU7iX6NNv^In^s)G>MROUBLth^6h>f^-5FnM!# zKo|S^U8JA-WU77HpWzEn4UNUj=t!<|6Ph(Ejqxp5610gSh&Swi`dzdX{C?Sa4K&v@ z`>h^nNc3`Yd~(dd2cqCHh#u?yIOIXSIqvx7p9U)Y9S6sXR@zF&jpk|IpH1piY6&4% z)0UCtXr6g($H|86VeTpy_8`IjOpJQiHGfdHKV5{nL=}4`F0Gj-8+&pC4uhvMXQN;*9c zG;nPL7HN5Ut$H=IM-8-{j<=`eZY&>Y%iZGn->i0Do7sVjdTp2!Kqq=t8cnb}))DI)9+Mn1D{Y=_HTpg|BnzNJ8K73f}lT^BySTJ$aawCx-C z>D~RbZ)^!LGR594ZwGcrH`S9kjOF2MA@;qxs&efRsIRyDP`{aq-D{|)@8d_;L`O&g zBKZRW#*!xAj=@Y+UoMmX9ee$skqcls9A1e71T_Bz1cdQFM=ldvV*|(k2fJRAs{4Um zGl`dOa=3urvB>wMGYlWB?SLd?I@xVHj?U>PL4_v=*G^x(UN;{XK}rw?h%g3}aez!d zJUq0Er=Q+$V`q7O$7YbXUFhlMWiT|BtKvzDYJ9mW{XG=x?zPQKL5Nk@R+SNVa~W5L z)39wKBZb#-`w&d|H*aC#sZ@92)w-P=dNsn43_tE@FX{BF^vAtZscyZ08toVxDf%L% zpYWZ&2++h%sPh-CEJMbFUN-MBG>Z)<4Upqx%OU;g9j78|RK{{yZ$g>~fpT5g)Fyi8g5S{IQg2`9A|1iiX!yGrt?IS9` zD_?87w3%3NEkIY&&DWs9cR?IK#oxqF5^y%bc-JoM2|z}SPu1A2wmjgSU16^Xy*0cQs`W0P6puk3x!DPY^{f`FTE!Hz=ig$Xb~FOkf|5dTA+@s)3lg4_JqmFRHm)@--T*Zj9`4x)%i z_E5QaqL)(ill9jfM9N-WWm^_4R{ja?Yq;&jzR2~75bdQ`Rb9TxKZdN5N&h+zbW35g zc4(BN!H|B_+5!Zmwy0Z8+n5}hZn*rzyPgb7J-8J35AV9TzCNp;J$P>yE`q`U6#zo2 z_*nK>s*|D|r)DjELh~&rDV@QJOe`0?Lc)Ji{^)-Ri6fRy!RuQ1Ke(zb3Cqw(8;m;#ELPgQ9TPrHQ#37|&U02@ECB~E zgX5_NUTAZQ-I8CP`gqc6F7&gAmx^P1Val_=^%XA?`a$y>6ru@g8y2^}Cn+Sh*mF)n zJ0w`z`l~NoLFb2bEuv*g-!@rotsn-@^l4(mN}$4HN;G^YxHh@{zAMP%2y0m-5(@QN zaPq+tY}sQ?s8)MTq@2`(Q>8-Rw$sehfE1Dasl<4Rpb2Lo84Sq+Orb$Iy8#RvJZ9og z2l9)7D`QOnub;;qE0d!Hw}{&{qWD)$a=clVWpbH8E>}C1g4b(=h@D?AzeX`YN*N4; z+-3~WcdJJ z(w>y19@k}-58)mwkt(o%^(JLpiX+>$ z31@beHTEAYD;%QBosqp1@j{6Z7si>huLqo8U<0vYITBC|&jAHcS_JbQDt-dS9NL62 zp~7)Ei#gS#4xx+c5AT}OP&4|lU{2!{3A-ewBFg2h+?w*JbEEY=M&+pbn=>POQeANz zLKvnQ@&|Y=NhTl#7N&elFAaxJMp|Nh{)Teqa;|J`s^ZEMmx_C!}_>IL#%rb32k2?798skH6|5AtHvt8HEOp% znw3``W`Li`X&frb%*i?A(cxbK`*$n5=7x*|TLs8}Iu2HNGA`R`fcx+1#EP<@*sdoW z>Scn!bO0NIl1!mjc*mefH4qWJ1;lsa_tZ7@q__#|pQxAqR_|fEl~l!_sFir!S5N?l zq1UGgu#O6x@()zzjUOLrT1h}J1Cf!d?}5Rp&o}@1beasZo!1lyv5-$y>;&6L4RV!S zme9X<1eij)?XOgkK7(VmxGmlcgszhSVVlGJ0>Tctg@iplRr*j|UggNN03uF(ILa83 z5VNIcAgHb_NXqnA&&sAgLfveM_W7AYFGN}TvwsYPwFMGrNh?~em0gsIPi}n?mi{=< z`ie3W*?p_bnz`nowxIFs5DRsc36`AX@Rfhnh+=pH?gF5d>n|FJAPTX7 z8ad?{krB*NY#Y!nldxMV6IxRmm((@|oz!Y9IvrCct&SlS*rUq}Sm0ZiquGvhg*hRl z%Xp3T+OCqw8U%hzLNgoDBv|mbXa@oG$%qKj-%17J?e0t`*=#>pB!fe90~Xc{$zaM! z&%|~z<8r7mr1L(r(2*e&fdTZsW^DHrzPFSzqP3OW0 zKUpNttS$d;%=IPA^{N=)bic{sVWg;tDE9~?1XFdSr=qQ&z~={7F$ErS?m!EqK zRChA0QqjoKs0>7R7OIouv_kxjJvh1=`}kV>#%^%sW+r#aoB0LFsn)XrA<%?g!&|Tv zU$#&8t~*CrvxL$TTFpg3(#yNdn&{8jstn^2k9ymYg%3xbG)1^>A+kZ1h5$G+HMR#x z+kks*3>Dmy8X`{yK5Rzad|+AetUxlj4ND~0bgBym+fZZpJ?bd0Ln4!cxAcVYED=0T zP*BY(0vNIe3kqQ54$uEj%|>I6Ygl;>(XSA1-h|Q*{C%qLgw&!AAM6;2Kl&)2Q-G1o z9Ne2Jhx+Q+n;d~D3D<~>sGL15!#@!S797~P!IMj962?=%fj$1NSXijC((FQ*k!X{d z5wXe*@*!l_$H1lYu2&EfK00}zOR{G_@r(x2@uJbE#LGVu zpy0|R|KQNstb#Q>1M!kj6$s$b>t0A#Ig0ilcD58^{B1Nkh70-AzgUZe`yHwsLV=re z?p0qOh+BzOV@4^8TMz@LKL*v zlD{u>mtgeEU5?1syUGss`T@A%+ytyR3^9HHrf5It<^Z;m#EHjdn{7V8756Zk#|~8L z>q6U}Y1__PI-|sv2K>B}Uc+%4bPQbIG%nM)2kZ$3pfF@4%oAD&Tq1>$-N?94@;B?b zi!gveoqKtD1_!F856^wuDVeP{z2;Z;4yWXF**Khr6nxJE=^yQ58aiWuk(CJ9oQL;d zQ~k%|lK=S*UY#>8E~%Ncxql`m%bcu7Ax}Oe8~W|r0nxoNm_wiWUdu>Y)NslrGPZgX zM0cAiu&=TT6f6WvzdLb2NKo@^t#Q-b$wU>^q@*yFGrpv7Oy?WqJK4M@(82_zB|}j@4s2&ULSn7 z{uSOd+U<3a=@^+9O4l=Dq>7ERljh$y-3XjU+i=|1B|{6?G?f1U=^W{&(hl0krxwf9 zvZpH)PGV$3O{L(Z23j=~r{F%Y5Z~hyGar-Kq}Dlc&SRB%_!T14Yz*S+0z6MwDntmj zmA1^H!?hVH6in$%e&xOwsA*)96eI!GTTOv2DA5(Bo=Dp~d_hJkB-9me=Za9*3sg;k z2KR>n@%Nt#T~gnWp56NX>}5|qUtOTv)@6(78hkwO(4lJAF-nC9@gFem*)>VHo+^2M zUwD*>5r%Mto}zM}gXoY@op9~o(%6tKBt~~E97B`;c@Bo=hp*4C;jdvjeZQvSfH-dI z8mI(c0=18P5CEErF%4!rrt*iUBQgS2U2+^=1SK+z*hH_*g-=x$Z)RCrz z@QDw_4Ji7pmwN`(c!WJR9Iwq=ExzRrv7F|CTBGWMbEl+9W4?G)I7-8mARangLzA@? zcVph21L~R*A6E`q?YQPDX!z&^LWD{4i326nb&i5r zmT(ax{iE1DG5c^9nru{4&Y?MT_Mlrs-GwYKroYui6>06$=xy#tt!?~Sm!)KTYDlAO zS<@DV49cK|fWF89ltMhy0bYg!LMLKKrpX8!7;CIx_&o01)6JaH5vn(9DA5FSK+;?; z^lhJD0&S(ClTDj)TzA-{_RDXw@%+7Hy@KE`(9_y&xKKVp5jh%x6|<%NO^5 z6D#MDNCe)GCkm`yJEeJ>6s@~2R_nK9RBSD`yUjj!jc{XB3}DhAgYP1i7B?2=hL&`S zu0M?mW~LaZ|0X28D<2{p9FjWQ zhw;naH^(JRiYdN}jtaMM1BsHnAo_0&5K3TsKJ=$8x~oL6kX^?g%8aB z135Ne4{Cm=Q+Fc3MUN+SkVd$Z0@jb#)Xjnm`aVliqx`aq>>S&4xvW(X%K`s6rFz2j z3MZMS_&W*Rh^+mH+QkD++q6PJ`!nU(4#fR6rD2VL55r3CGYHazZsFUSJ*rw?GX_Be zdXI3(VaP-n(wRtU;#aQ~0_^#xk`FYdjGo^LrCfj}$L4}gmMJoJ`q@<+C7PO(m48Wo zK~OFyQv0oRiD;~eqWP^*27g7q*tFL3&f|LzHH(Rn=ttX1)=F`I*-NjirxYB84n%0SzuD?eTH4tgI_vUnV(6Bx^v&OXvjs|ff@E|~>t5Sj(0 zp{F8V9MRlf_aT2*z3?R`N_e`eB^9U_!j`v1B(m&MACb8hh=&ZmM0VO1-hoAB8i*rR zv&50shPFR7 zan_?IETtSj7_Bno8+BalW*DDrda%@uM)8mvi!R-Rim|S~5>Ez?i~yL)Dan=IYv65n zL|k=qqTcSowG=TKt^Lkaj2sXr59{uiBL~qny8IPj@&_2%?I12##)u}y_$$ZS+itbZ zFkx{tey=!e#T2mV-0}3oo3V?q`^}kC14Pd+%riznmpH9r)Z84}=OiLMJd zyh6{iYw2Frn@TNL#*V63NwSb9C9Zg+oGFzx7gOcC^h90vJyo9xGNqK*+FDSoHe$wZ zgTDQT?8N3)hq}JygYuJ77?Vb$T(jpn8$2^U5FT%x!06C7rI3!roP;lSG^Qom5wi`GysxZX=Frig;}~s(mtc-7 zNTjqo5{>C&1U4eG`ND#SXfI@=m1d*7tj*kMu41$xU1~ueg0IX9Ll&M7E=?zXny%;N zL9t--iM?D7wR#$^z?G9J{b<`n=;8>Td737I!l@fSHgY|9QXrl^p?r5CQBnxWou^tg zs#BJc>F#ibRcNy&@z#z>Q&LLgFUk7UH`K!B@RD*snf0i35w>&(&0AzpaZ(?%mEDQq zi9>p-G>Io*^olT~E9iFoMn0>{v@G$6#%}bm{O`9Z%*Rosf1hsLfTpv_pOitqWhe^yUtKujk*jcJu7-aVN^_KfDoYW`5ajcoW^R> zp>LZw+q#vtKHs36@#Pa|OrPMG18t;y1Y>=7pFR8Rk08Nrlua8mQs>{$9?D#98Qm|! z(AU-j2lCZAp<4SBqPXhW%>hx8!%@(p`j`#^A4E+Wps6N!#%K!X=K)xZc#Ja1#2#)k zr?9dg&f8$ua3KjjVaN&Q5)@K~4R&4+Uyuf=scOZZ=Uxoz?|TdZs>IrR>@XEVLd*zI zlR_LWnT#%TlwvRs4EV3*Icw0H0SH;%R!Qo!cyTN6STTuWC|#RIG}*b)U5kbRKH=l$ zQy7bPA&YYisf<-bjdIqSf;BGQb%Z3Zicp097k^dWZ>H8Q(M_~M1Fm;~@iLyI85jx|c=U%~t%An@ryyZi>yl9mY z%O+L*G|cSBSni?)6)36N6+P5^XJMi$-suiRi)~~vN*&}VkR(KiW(Z;O6Voa_AGaD{ zpG&AQ9ddbyZ5nRoTEES7m>^`dvW^NON`Gr0?g9~-y5FJp7L}8}U3mE)U@*fRvaXhm z2tH5|Sv(5`yR8VdMQGGEGg^Nn@R8Vz;_b@+E?b+JeQzz_7`33MZVtcye8x^y2My3R z0Easm_u`G36aG0DzQP{KfikTO;9Qblq0u!Q%y5Lcaf4mNbuI%v6^cVFyUejstV8KSVb3^ z?Jvs-@{b(_8VyNGaR1Z>1DNp`pBh7j#ar|{ZObO+Hm(NYI)Q5@mU>x(0}V26hDFGN zrG}QsbJf)!0J(blX_0@JZ~b}JUf=O?R*VttIzD;Txm4V-q*_sY>9g!gWArDI71_sPqbI)AcKe%xhh5f_ z^guguh|O0t2tZY_Yu<(}g#v+QWnYBmAJ+QeeE-J9oxD2tX2xk}+E#V=RkRDXk&WVh z-=QIRd8aWntC5$FYkEfK)&}v(mdy3!gRg^=UFmO4OCl;K^0#J%=w;LP04|IQS7J-$ zcNNsC%Mn`75{$FQ@=d-|mGg)9EGx#RA6b|l<_Q_UM;ZSL_5EqeQO63k=?y$~jvTU^hP^L0pdPAG+%T!UN#F(b|CRrHUHTk1g>h?Y?aQJ)H-m&tlBKM8No$^nh- zWBwNspRfcw99!9O$9@(G5}UTSc-LhVnqqU|#t4w0=^=pYvcSIa~n_**J)n5;o3 zN~~p$u9^^`#i79H{8^aYI!K}UK019Sam?c$TeIE?J?@5B%YKh_92v zem(Xt&@>?o;QZERdn}2b1LRd$_c+f;Agolb{H&2#jbwW-$&pO=gMqS1*2^Fg?fCS_nMih9psw+oGnCQvq9zwjz8q zh4z!cpywGOO3x?h-Ue=Srb6A$^|sStDws6rVC0(|K91BrkqV1exEj4YzxgOdYk#WQ zk!eOmT?h&UrD2wsd<%F9SE38yN};mhrB&I0wQ)59;1j(Y`4kHQ3YLSNvQ5BWgSlc{ zV1c(dffeBiQ&sU1zmc{Hrccs@Qy%NL9*K3^r?*Ln_OEHUZCyBLYxAi}TOkSfq=PJP1it&azyqw{>PBF_fOUYTnM{HRH3nDk8Wk z;0O7Eukwq%lomwaIVQ|-Bh~f|`OtRukSDZ6){v9^!_pr}9ZI$KDbDg|_;qnRJ-z{W z1o&CGRyugpD*`I_TMlT^%kozVt_Wv_BiICtoH^1}F4%rZqzv!Nah#w0|G%jcwi$xK z76u3?@F#uiXVC{_XyImJVrA{Y@E=p9sJoGgy|aa#?f>5LY1ugKi6MXC`VNXzjjy@H z8&8-r)B>mk42gCtgI%8;OOvcfcOD=+(*V)mI7RbIwi?)+32lh|ji zkmHb8m_^jsPk6hAgwOK#%Uh2T6&1aTvUI-`cm!DmKqqGWCuTGNXx}bhcZ;v9SamXx zSy|}P5|r2Ka%c|v)UQrgIyh2U5K&+j@;lu_QsAm`wY6dX}dEL$A#kK!@Q z7MwQaO6H5Tc0SIdQ8@7S9pFR+A2`ls$qmG1Pg)cqb@TpN zfBJe$|M8caiH5LSH@9^YuUnD`hp$A-=R*_82zuihs@tMcl~`!O3(vChwn1Zlaoi4} z5PV@m|8mfCwx$HF5<0qdrB+}u)zaPDo-0cPj zW3UU3@i{Zx637TPE)*oWt7Yf%-4&%iAtr)r@9pFCa0rA0EoH=4O6oS{0Q+ajXn9Zd z-P7VI+`1kx7BX{NdIPOZ1rPM?<~1JscE;iz|GQYB>TzOQ;nJmZ`D*n~U8?)WHtP)) ze&4doJN=8h6hSVfvw?LBe|E5dS@C;bB?!OMb% z-G)(U%A3R^FW`40-hvh3zvWPmhbGm=#CAthih7!!Wi^ftV`m7iR)iLyM&Vn3xE-#*^DXr#*1OIf;lhDAxyGd?g-WvwbdE=5!E4RpdDf)8(^GzZHmyt7 zZp-w_E2|dLZp636wikqGNIR~qvd@gXFrd2E3}~XBb?4~%MSVPt8%tIJ!FDc8OeqY# zWqWmsuIU1!$oRh`3{mP57#ddWH^qe6ri3YTNC1$yk~Q1TE9?kZr<7nAPaHptDm2*% z-hg|_4rl%W+D`J_MsajY)*Lwp_kvp)PzY8+ib6D2LZW~`$I7`#lQBKmJ8pVQ+CMAF4WP0Vj|u3nUw=4ynhc>m<5>I>=mC;Va7TUpXtEpQez ze7C{t80=z4m7e9sh0tY;c{(k%`dpWMZg6(roA&ZB9EU@-_m$%$P2@r9-^Cm$KxPi3>v9FN^9@yMr#po;C~g|M)$f#494)UCLpP;pC@8adP<44jF2YDt8_AlBtRa7{4|b$N$Rq`sntgi5W)m;d zo7@0DD3lqLHIg$-X%@x>3L`YQd8lua|6X)#iF_@NqWd)iN?9YWSwG2k*qvD(4Gj0`*Qc*O~VB)CeRWW zT(G3a*QFH*`PJSjuo@dj+?{80HTl5i8^OAt^j~)gAse7`;BTlTM)70p)7it=Q~bLk~${ff%KM4aPPY5Bekw$;!;~YNz^v#YsK!6 zL;P1=fd(Z>RjpNfSPWGAH1QEehrHGi zbZ(pQ2IsQ4Bdi|1@N}&n+xwmLfB$jMdSgWenJg@M8V#cwuaqGB{rZ`RV$gNjzzjK8 z$Vj0w#y#0cY^3Hx6}RGCD+FAicKyR+Ud|$OC0|nd8zY}&-E%8gp%NoM);6OZ$D>kr z9ok_AQwqA)LJS6q-bZ-V@XEv-d9j!GDq^Xj!v7mt)LkaqRUrX}dJ9xSO$s8RXjyE- z_D>Zp_cwy#Iv`~Ot;V9;WFzk18(&lb^Lk>RV$a6ajf%->%;6ZAM~)UM!y8RxSIHi| z%G@Zx+q}xh^FBr_`?@(0xc>?gvH^Ky-b*Vpd9tRTLWGyRBIa0;z9D=D}nlyl2{=Izc? z;^v{8eIHMcq`$g1D$E)aaDRA^Pv%zT`%MzcIeQ##EJo%vg#sBKMGEbhwk;cduf)@8 z^fhsf|0y26C=bwst8bsIAzA+S^Mj`a!)I`|1sDIyG~(x)l3T|$FZu)8i{}wQXz*H6 zo5YDEGG)VA*x{{?ugC>80DW|f8rs^CI)V#jD3He9HVUdBg^Q}Y_c<}T z4zCj+V;8pGVjx_5#T?;dUKgWixsJ_i9o`WR@^K%Io`zTJk5{@si?vc!v|6p(9EL|% zUb?U+WfV=Mz1K}Kj0U0KUaLKS9G)Fs=~camy{%REo_EJuhjyAYzbTl0xJP2?^>4lW z$!X4hTy?ah;B2aQu=jOY`nTkisY~G_VSe8GN;8I;b>-s9XZyB@pY!)6M}CGsC)bZp z@Y_4^>lLh%N05MjuyKFJ`J-Z)9rSiZ$LX@Rod|2Ubvl0=jmJzmdG#C7I2VArcwk7- zdz*R7lO`XwOY{$)5l$YP^<|DKB-U(uQ8tbDon?*h0 zJ6aq*;mk-2ulB1%Fl)+ofI6s)o4V`m^ym5{n|Jmf5nrwK7QGN#xPNLw9>mT|!8mTA zH`Lenf3>L-KSnf5d6K%;pEea#00@ZezqhFtb_~J>wzhW83I>i&CjYZx^>SL1K>qf6 zMeTIl9IA>WH8QKmz*zwyg?w^v5s;*BZal<}1pYCmEk?<7xV>I2vyj{li8Tf7)BJ`O zn{%G7CYYb+O{e-WZ!Di0cEYigs|P;5rjGVRW8Gxs$5oS^ccgvXNp?tuq#y>qZ^3{V zV3%z#3Sc|%_BKpU934o-#W7%I%!=VWAo)%{4J9fNi+yfTs=6ttYCbv0ge$4qFWRB{ zS}~F44Q^)51?)CJ{$0Ka*N)dc>H9Ldc;y|zsgCZC%(;g|f|w!0ZF7bb_ZazhygPdw zon=}{0TmB@HHw?aX!;ESEc4HAXiG)0{15Oy;N`4yro|o=HPPsK25m!La5o8JF^}6U zr{Ztn9hWn?e)_{QQYax`di*s#Z7%dW5^6i4Q?qYuglHoY#KZeH!76=nQpxX1$9Z~7 z-Xw`2%l5++x_>3mQE$6ApOn?%f1*9lb7pFB6c#YMpQvz@#(p6kNzAlHSty*Zn2Am@ z%6tr0fy#Bkb@t8-e`kvQu_k_}x76tst@~+$ADtjMq%v!exlC*iqB+@4h689!(%c0Z zGCA;{Prn4O_&IxGmqUH{ox{!b;YillYXF~fSJ&M?_~j1sU<8E&MHxL@fm$doO|kfh z=~R&tUC>L6*a1ZP)B-@0N|7tIhR>vrXc0B%3}NNd!#~dVXpFH?#}KLYH>l+1Mc0B& zD$B$?3RVILUkOilPKKjW#u_E?nh{Z&kgBa`g>P~k)&4N-9EBnrWi`gdYUB?>ejF^7 z{8V^9;jzjVG)p{GA@~r(w}7hOR~$2Zp#OYg@E^OBt_tOo%m4YJ$CXPX>)hB!@qiBTYfrIel!6#2z!F}okBk0w^m89i2vw2e*VK@e+-QGoW2qn|K@2PRpGJC7%>8<2Zs8G@a#DBeYn!8c9K@J@5A_#CzpiaP5!3 zTEzF~D;kMSy3AVOxO5n4D95id^5i??U?McVqjMy!Kb>&oSEXjUY#Vvw2rMNXtoJ6= zC&+pG;Rv|QzN{NyDfv|xy=+5B!LM&c4J7r>CC$ow)hJ)c7%Gw$e+|xnWj#S+sm4l! zw^NxfG#4gam;&5A60`xglxVqH-|Ry=c-2lYyB@>7)obPF2TuvibCR16LiM_2z9^xK zNS7i72za@mqNGZmQpbdx2)(d`MXVhPWo0JcG(Ta`>K?@n$`t>Ly?5-+H0-jqW81cq zif!ArZL?zAwr#VbiYm5kSM2Om_tU-mX^pWzzT>Sg_qcz-Tx-tjT=Q^CFzu$3kpD4R zxP^n}muT*XS(qZ-kvyvbZdOhy>vxYe)?dF6l9|4laFCzG&UGj(+FHw)XNc%gI=ad% zlqp=s!ME)D)sM%V-UMUfiSR(om@!l!S$_U1uL7^+Oa~`?_<;JESu!rWXktg5F||Bu z_>!vS49;S!$ft*aPi^bawfHUJ`?fG;n~59ln&OYo%8#sti=o|Yjfmi6P)@h=8~P6M z66NZkQQxJLaj<8og|HigWg~Q5`l5b>?nob$7}_F5+8`d-ToB*^Ov4@_S`nXEP|<3e zYFyYAla@NoayHopiKW6U_Yct>MZe0H^r0r^axGaYWMaC*KG$EGxuE18_Oc~Y(87)D z8kT@njA$m%!ojPEU*J|D<4h++ioV!lP{veSh%-^T6oLT6kfC;GuJTBSFUAW9wbAa& zy!}8tR>Ax@HXnBAa<2&)rq@jkC5%lA9iM`lOv4Y_B`qmLrYL&z-9281a)?|dyBSHQ zVTHFMO^54+OuPKG@{&Tj0-7jdbn2AB_bC6RCHsOtOO?AQ0|nLnuLKOi=5zp_d?U$( zC@(7$UuEQH-3Ni-xZUPIJ&+udSsWB84~+ew^U%d~=>d3)5Wovb^3mM-dE)@Mjf2|6LG~zc z=EC%V;r%^;n}CoIX(^oMLg_HH5&25CL+ZDHlQ3w@)!U7ZDPFys5Z?uZuDS+a3sTt; zOcA+FhzU3ltTO#D0eN}pNtBW3nEwyUDDcPnYL7-~&P;*($X8smbTtzHn zxJc&1RxN#CrzyeJ<3egvBU`;|RwL^Ylx~@HH%+xL4Noi~FGVeu`_Rs+6EK$|S@f-mn z07|Zja%S0sQn%L{Q52mVKz~13ekYSwOKx*^UBxP?<`LpEGuCp~1^I3fJ@|NxvYg9I zI11XvRiNgn{_XgS^hG)e+#dB(6aiFT>K#KC!?J>_PeOI(Vv^RM;UeAN$_b?|I-cn&{mKUOg-eeo}_4@trl5@2bNK1Zc2Hvii z1=W(`o~{bmX)A7tf1#Sft20x!^snD=McO1#cJ=l@ovwRRa-Uv~VJ$ z^{x5sLk!Gec`wQsui~8Z7rVHHazb9o^F+DBB8ptKBHxi4{0EVK%iHIMu`3&7%h8KL z93`(*KqxjRTR@@j(4g7tFWXGO>fJixHgCE(3H6qF^_g>sf)N|gqN?Y*Rk$YPFd?EA z&<92fhT;{(L4tkVPflolk$NR}ldY*3gm707M?vl!&|LE$Qsx+kU|SqrsX!CB^qV=d zRT_DE+WBg07%duka*wp!{-mvM7iYIANrx>at?6W}-wLLz3gx+Uf82NLN03`q3f+8M z0B&}5k8Qmi%Fygh{n&1j)S}(2P*c36^R!hS%viV?Rvyn>L%juAJi9VzYj+E$;Oo;2 z5Vd|Vl^2CwkV6vWPpuVS;7Nn2Jvg|_Houuwy65oTOYd<`-m-GTt6mXGvL(`7Y2{n< zP`2Qb?QCx|vAF1Y{}p#@-?Xs!UUZVU(OrAZXSeOU+56e$|LFnzc?(sA`i>Sa|GG#V=m=nvvjql{ndwBhQe1{U(Db4hinjCl5(MV^9-gh=1E2j1U z2Z-l z0Qs-Qm+n99zDCvtPEOxkoJ{_gEm+gTX?FzmU$)?k)n=V=k~%Z;6$V2oaYKR~s{Hl@ zNg0*`zzYbL6Wgfl`R|Wimnm&g44YM@rj_yrReSemZjZIOWjS+4sW5%|n#d;5xtymLVXvO2=hUMlvN20;Kzh#fc%XJMCNg24{g(P;TT>5yGtFsDl^ zJs}5aL`ce9VE~VcJK(z;RN@l?9*(q21m327Z{HclA5%o`&x&GXd_ldsdiZpgOpLN4OK{+;H>$vEU8d zdUv09<#~z~25!fN%l3ARL4_#vd>~XJo>Ak}?z$KW5F-kV(e#DtW$1V+iAfimRVJIk zBjt-m9s(`=rDJn7+DU5YAvRcPgNO)37{6xQeZnaUBOsIJzj?4U))XXuTal_v@eHNu(+mc*v7RK4W+oK~R&&O=(P_&97ma^AgDq?PCh?B#+xc=AFOF) zn3uk|z+WR@(02UU>s6j!FvdY2#Chtp8!?>;NeV~51QLCCWWP3qyVBS)oyj2sk61|x ziLa7fDPdAZojoSL1hOeKxLzf_Sp`>_yr-ta1Jwvg)*77!g zd&jZ@eO5pSi~U~~-HQ+g@0jKTo!dj-cvPMEf{j{3;h4NZR{Y26E|W zr&Y_WM|-0zTzy=(1mgh4FoH5MahbTa7NR{TWR#+}A?QH3JLBrkq2E?o0`Ok*R(R#O z9dc~k)mCHTvX5!~`e>U*F>Q>>^Ukis6gg6;C?Qnu0e*tt6nQ}ERcO}&+PI8Z#u|LV zzp-r4$6fs;4iMrxJW<4L=CR>pqCJs!3?wr^ViT-)XOb9M@-&KkC5QUe3F(c<(?3WO zDfL!3kd&5l1q!(5#=5qgFFTq}JlgX>E-FTi2Ar zBm`WTzM&8ie%h#|UGuhR>)C$eN^PrKVH0A;?0&jGb_ggFcF#gWNVw^Z4D`Khw!!l* z3|g;Z`*?UiI^eKrLgapHgoaV#{;oA;(xJmZgm$$bva2`75flp+^IZnSvot%sf6D^{ zLnKLorK8n{#=Ytds5J&69iz>uuz)0uxwl`P;#tz*m{b(0(e*M6;_j6m`!r0khhum# zNCBga#|WzRBd+t^f#6&6QHAW_gSvsRxAF}!C=_;mXb6{;Vjw*hDvcJm-JgAV&~`Kk zTc31+fsPoW$1xC*iY*8IhI`!r%Cuf6Ijc5#KL4e7@&2@Qx z1z6T7L#q(Mj8QWD>0IJQG+3j~r(r@6)*gKn-eL8t{QNsr^Yf|==@mvgV;vJW-d>t` zWbHnSWyUYnA+#MY$z>xXS1ygmqf_2}&mYL$mqJTk3iD^yc6kr31)<6ioLm){*@+(p zuQQq-N>VTL3B1ika^FtA{$gs*K65RCcjP~3E?MC{U$)!O9>DU72W%GK(%ib!t4Dk7`;BkN3{6VTf9$uPOG%`U}CxHVAEwLjcF{~gC zAhi`2586M9A16+DFPHHF{(pn4Kf~Ovqx7ixYnVHK1zC*$<1qj8@m1z4&@wl$wl;B8 zG%>Sqa(4W;V@oZouT%@|o%<~Uuh=xeN)l;#Wt>FR8j=J?LzgtkxIs&c5)hUmenHyJ zXm?}GH+O9ViOvX{d-*rJB8PD7W#uckH`Z&4k29yrr_hp!%Z~-&jn-t-!icX>Yb#e- zX6`rc{dTYd1yL>-1GI`#KgC;7Z%)E;k3jb4q zTaZMw+piEWr(lnW>f`0*=dUGl(0xu`PFfVXIFwCCZ*0h)&TqpsU3E=V;T$pTmwK}G zAz-Itv+N)J#Wkho^pF$->z-#zcUwU{J_B|g2kTlPm_)?N(Lh7;d|5_s939MphRhWL z^8pfx1QGQ2*X+hwU?|G6VEF+KhA8nHHaG{8rbKiKH8!o&KVE;QYF}Pgs)?b zEJqY>?o$?#1B&i+7p$DU2m6S_nRlF6^LCO3{AOtI!q^KvFyKem;XQ(G#o9lQ5O8)N z4u}~c1_6u&e~?oOvVEu2%H}7aYsS-}=Li~M)>O83I`cdq(_QWQ|4Patr zT#XZd&z_6tG9@9OQfSP_8bhxWB^7cDyrDi3zC3)6^Z;o>;G7g`tr+=}`zUX?(w8yz zB#>(GN5pmbVMc6ul%d@8l<|iP$vKhan4`As`GAm3Hk==}7C!}d$Va?dSI$>s=FD^Z zzPW6it*Usy271|PeOr6gw`joO`MtwmAI4yF=8joqMvK#o1!2D0om1Q#7%9nL$sQq$ zYr}A}M^O~VZ`@;Xf$F`aOk-W<-cUm%m`Bo(8Qs`Y3`ry{2*H*@K@B)?Zg&6qeptM;ewNZZL`JK$fx8ShZJ{K{4aiY29p234rXV zmXZ|~EElxmD*r33XeSSzmxF>e6(6^{7Ans$z2Wbd#i%8k`sONLv^o%x!QG;Uv6AA@6}S zr7h%ECiOWgb*vJwXS6S{`I&vT5|%5^V>YLhZPUiqdoXT!hMQ+!vp@>%`w>-A8WPzZ z=0K~TB>yl!d9$%Xb&?fcl_1Z77dBD5>DcbQ7nF_L^n|0GfrmajjUPwf@lC|OI@*Zr z=xRXz1SLCD#O+k=3nWT1ZJ%`PXc*WL^j%rf1%;wDT%&T|kyt>kcd%~>CC3PBOv^Vs zuO74Pql3j;W8z_@kh)O^B!RP{F&nNmN)^Eh$Ark_ir!-#2SvURc*s>LN3GMj8@M;s z6(Z2I@-CSK#jbGW>~+ZsRlicGVW{gT0lt109GC%jZBoR1M?s#S{t&TkE&4{QqAKr1 z6;v7rn7hc!^#VWFx2U|UfiFmBpYKKX)h=|0AuXE44y7WqZxTRiht83S>!o`pGA+Pp z=_v)4RkC>U@CwRmj|pvg>+tjvG}qf&L(wdF$RJctYmyGprnY+5@f{S3*ss4y3Pg23 zclS3hA-q&t^mMnh2>&)1n9IC>43~$#g~V(Kd=<^d`}tkeF7Zv=|B7rZb?B-TmX*|P zeIaHqg)M9%5Q`RdxhTY>7@dC}JMC4M9?MePy&}mi>}`xBf0K#8FtYV9w&~`ydA2}t z5}&jqj4rLKiR|*hBcxqjf`RB=&b?Q~GaKBYq2G|1;7ADxSc|DNNt)px^_ty9o-q>B zZTOu$8xD_PX!9ga+LQ4lPQVRl<2Fuiuywv})Xy{Zta(|$`v<*`K>yA_FO^nxA?|~? zyrs2Pxp$;IrQS@iWoYHYrV_wscH%KzphJo3)xyDk7mN=a-#Og2wMZs8nSGtw|PGi?w`NGm)29R=pEh&>J!HgkKJZm5Ey0> zcgqjfr)-`pDHqpTtk>soQkicTCvGhUYrmLQTrXyBZnq3-5#Q+7|MmC=1oL5_ENJrqo%@lsS90EUG^lb`~F^cz3e0uIBUOVcyqREhyd_d84c3 zh|lImUYHwrqhC+v#696_E#SmCQGAa_LuOwjg-#G+12hI#e4F%#!fR9$KZ&5D1HyLZ zbjV`Nw6`yP65XelG@kfqN^!4PgX193lCpI{!V~x;bLq6G8*NjnG7qjcCmQl%)UY&X zeNt>_oSXBDB}-C~l%}VqBIxw8D{Nm?+0#JS1zovKxiK7pArE*MVhG`x2$vc*11pp|-005x+AC~|nD+_y>|NKcy!^UY<6yeVstV71=-{2Bm zMHa}!oIsF5&`8AlMHZ!rh`V2JM}%F#(_C-1I^B>ktk1W}KH@N${jQ2Oy3O>O9>?1s z)}1ppLwi7NYL|jPL<-j|fE1W7yqn7{O3X~*b<2wx-OKSC<3c6Q#WGA+Kt_^oSF~ib zXj4xcD#%WRZ?$d4Y75jflSrZ}hTV$ z>_Kzig83wYDBz9^m;)MKG{1Sj)qjVQfC0`O@SDt247riB)9d!p`sQ!qDNmVPNf7-= zGX(%Bo$os}5GW!AYR6It5@20|EL+sjt+TA0tiX~$UzAD3ZpJfZh|bTh z$=X3b=snKo4unJ|i%+K=CNM51xJEOs%zRg-AqiFcV9fyrKK{L~6K7mC@?RDdj0uAZ zyRr5i7q97MAvCfS6CsPJ{jHUXD^ZOKd0sRZj3`%gJHjG&cRT|Coe#U zq^|rb_bZcWZ6fZqZM~ zc*nFhJm=XlAK(Ooqj%@*_)Ld?f7kwPv@1nqY~AgcScQ(JTaAWwj1}lFYwbI8Jx3Nz z^!wx7;bxCr8dEOuz{c)sd&6J71GK&a`s-s>z|2L~8Yg63j)mm54sU9HGSQ)buLz=D z{|}GKL{J%YLLDk=AD4qtY87W{=fdD_qa|tROstG@mQ&dpr8%tQ(zv9{o~Tf3*AUpz zH%@&fzBUw{H^i`)^f6?>v9Gecyx?%xN;_kOB~+XdR^*|z>_g}$6Ejbcmz1uDe76%I z+!2>64aKqTie>cH#ka+iJ<8(H{YjyAa+&q8Nky!%XuWX3A^1LHTjd;-^!0TVz6iL! zdBlD>C^N~z^Z>6RLi1IMS9%N?S9O^deh&J^kW98Z<+!j7AF!HR-G^PvZqxf9*#~Nt z;`YoIZ!fd%Jrk3Q-n?6IRx8k>U>Jj~=1r5rw-B56OPe?Kfj2$q^-N>TS-lpmFtW8E zMzgyd)7?_!qDYc0VeI>q$j(WE$aa6sbq9mSbN?Z0aJ-gBP_)pPT~RfJsOq$MOdYW` zE5;TB{a+}7=s$lZb~^Mmq!Q*yhbKCm>e+ON6xs?a3@uV<0dsSpa-TE#u*f(@duv8=aC->~lq+4GRKLx0s>WRqr>tAQi(X+L)R_0ISv z_TpCL`;VVTn-e{sBnNo#QF!hg*!^~8uQP2+;o%SN-E+C!DUSl<&Jn%5f#p~X9xh=A z#-oBQUfJ+hq2S<8`EpebX;KNIb#XXN24j-Q{{07OWSi)O({64Hm*FfSDvj_g# z`r+t=aZ3UZh;9$X4zX*DZN-qm;232Pa#=Ibk@FuQ z|FJM<^vmA;N2WE&e^U1U$g};6wf>8>{)@H#{|nX{|9??}zhvvbWb40V>%U~{zhvvb zWb40V>%U~{zhvvbWb40V>%U~{zhvvbWb40V>%U~{>c3>`zhvvbWb40V>%U~{zhvvb zWb40V>%U~{zhvvbWb40V>%U~{zhvvbWb40V>%U~{|4);x|FqjsT~!Jbzykmn`vCw@ z{HM1f|LZA`j+fgiJKCq$7w6imh13k3i^Q9(7pJ$#AVqAk?PC0LWvnT%xP z!flIs)Xv(FoPQQFD+NQVCVLsu`dB2}N5Wa5X#g2@MhHvw3Eosj794cNPX?ez#w!R~?JoLCu64OVx!v4u4xzHCCRLn91gds|bc89|J zLLcQ+?E9+*>T)yo5#KV|7h+E}PH=x#wk*h2s+zOaZw8AgRh8#M%h>n1X<-*qxl5S%brM{uY)X zf5y<_dN3h^mAMiN#NY7SmQasWNIxp_bC;=;_rl zCwqkn2FLH*=(zDx(f2H#X2ZPmPdQPE4e0aS3|LyhL^z%Y53HCTP=oyhRr2lfaQ@a)=z#AgK6C)%7A^5^xe@s_G3B~CeLLMi+rq`#S#xntx3Z6ISQrCHi zR8dFMNIe*`4lG8C+aTQSz*q|>4PmBH`Lf#dy+vM2?n5W7L@d1W~vcum8_b&xN}uSMvRWJ)0V4!vKznT zFYv0T?(nA2;p+BhbFXfn8!R&J?F6GcRqcnzTqB z6VUi`Z}=iw@pEBfL$~%m6U$}_A1ZdvZC9Zoh*ADWkV0)U+eqIch@oPi%W?E-IuPD; zXoNhYlOxi_{fuWv>tOt}ntcx_789C>pGq~54IR#%QExHm+g$YSFAOUHQfz#~R2V1g zopie+tmclILNedud@m1v;DM`ay#)2^L=>EwYd$mLnd1foRH&N795@kYI}!F62Vf(nAUU%A%7z=L)o)-DQJHtFG|Ng4^3`8@_m;k7_ zysXCq;qa*~V$6nY*CP`A2SkUu60^|DWH})`rexhV40!jA-_fGW)j3%>dYy=_{-B5P zk^;(;>OuRQ#^2*5lW&RLp>HFG>IsqecSDOn!Z`~nSq8O>&`tSBq&2c zN~B06IPn98gJ(!XzT5Q?7>hzi?vchY6WR*mB+gVCQXSBtAR5%(AP#merH{FxD3{VG zjK`3Q3ClT;gK4>K#FYL0xO;YrZ3EO3M34zkJxZ#c09Ki)eOmxa0IOLa?|goB@lLd2qAEb9JCCQ zU95@=r%24XWg6F}20685AIbGSSly2zsv-P$g`=L1~c?aebD4ca4V_> zLUrKgE+rk^@{?%8E;KWLE}Wemqx0P=`6pZ~wYF4&$LHt*iijjldEusTWctBjQD~R# zo8Zf=+0(qRWlshN*?88$jtit3Ewmm9nj!VGEraB3ut9GE?4LyM5F~;W=4PJPh@6o* zfWL!l@aytIS;%*1!c+>Be~6{+xHp_aQ3aYF{V@0bCg9-(t*=%AL?r6>5c|`S#(A=9l3Y*@W$a}nOF5yFN zDuaPTs0^CPMebQ|dr%6g_r`@cjkc?OdxKks&w!boCcr;!IYvV_|H`y!^>@fGKtz8 zk8j{G2JZ)lTMTsa1(FNV-> zS}xCEIFdm`&IC-`xrU9W+wVeWiRF#Nus0Pl)jv8RWg-xF8ya{7WX&5!K-o~oP3P#u z<@$0ggJiX@zlX1A0L0P%7CU-hhDoys*trKl6TDGI;bl3?R+X!v?(ZXJ8Qlai*A7uV z`elnu96K99oVgWDDVt^@EiIX#aU*m@qJ>djeMk(+^cl;8yK;7# z;^LCbXCS|#;`S@bKya65%k?3?hdeg7ni^r?Mvn6BI zj-y~**7WMP3s<;zge;G_?i8SI`l`8=;$E$hdgiuRsT!~$fefBMj#8zZ4QDL8k)Ly5 ze`VXcTxN!+Wu&d2uTN!KQ@yiSr<9bqq2Xwc4PE2o1t;2KZv%}OUtS6mnjK~W~BTW`{?ac=B zs>537Lg0N@@R`fDvxC4(?n%(|XxJ*Bb;scxc$d29pMmGN#;E3>KASHs{zv;$po>!Nh z;Pf13CbJ>Y4)*BU!vCoj5^|@RVx_U@*75pA5Day3-`RWThGK3z@%TEb8-i*v<-%1q zm?8~QU1w(*DV!B1{xttGe_Gz}FQ!2_+0O{nFq5&<9PI2bLffZy?P%mU<&`Nt^Vo8a zH9G_fQcr-D32n4*)33V%fZ2e$(laT|h$^APmHzGLT&Cx0Qn0)Cu|`-C9Iq!Z;%flM z3~$wI279gtL@Qb|oDa6bULMTq`=;kvT##+GgLs0=^ge8OhaG0ZAfYuznGS_98_Y_} z?S)a;FuG9Jw=1fUr(c&%8l|2MAcD3;ifX^CYLai>lbI&g8tIT&JN;u2~FD8e&kOw{It9Uc%ZA zO_*A`x*0v1b4qL9XSBE)3XC`ab5*MfGj;ENQ4PL@MW3|y^1AgYxN*?u@kq8p9WES>Agw+IMbByu-KilsfHl@jBa>is$YBaXpo`&$>nRJ zY$y~i1?m5+^$u8H22uU1pntcK2xBS%4nl(cbb#y3=wQ2N+b>R3Pvv#vc$6p{{81+( z#%OZ)j2L<9(kb$zZursR?G^d$f&9s);PW4UV15;H^-b|;u^s@hK7y>~f}N{x-%i)} z5;G1#Z`6N&+YUBLX_I?`uP9(xv~kQR-ZkElKTEGo2&9v0d5EsF6kDlCD}l2mR1!+N z?7ztY7dyI~;#kjhYU4Yy_nqAN$QmGsjoTH&^$eF*ltkh^t+SZ4OS2NB%Sqkp;uE=B z_C(KsG@Ln$5=mspZ5dx!u|kwRL))oV-s+3iK{ zA03UnK9p@Sj1~2-=eM?3mDL+QLo#It4dxt1BjDc+n0 z86ip*N*_+&O5GvIX-qg!tw9E)p2X3elSJzHvW7ISYALR{m#MGB=EO5pX1g|8=O?^Q_K%eWfCQzG9^Pi7o?~fMv$?X zOsAI{NO>q6#CGkkSu4wO93sRH%$A=tz@WqAlA^t5pX0lsS=d@;K9Q1nBr;^e#0b)c z5>VlrwbH-m0#EKxSf%dsP@Q7=I>9B?f7Lzq%$Fzv*1S)4RVP-gTl?)3(t8mg(bgu7 zk;_O1F`}J3O*{$N1l($Zq{Fs|?~@MY$q-FG2l5H>%Z0QIA)}@~hNWq= zU-hEW@lz|CfN5mrXw1ZW{*|~sHMY`ZV?_qPksrQ7fDDK_fI%VjcHiYJre>*41Own9E zomT8#xt7ZAm=RVhF1mU0;M{LCvX-0V8(=M*Nk6}M2gO#N@uMLav2Dh%H>L3arEm7m$A0`xq6P$amaPlB+L;$ zdjv7_fF=P(K+2HT)&HPM1rIBW^PM?^q_g)_d?!?t*<@6D;MN$O-zMpu5l_fPPpDap z#XiDRo3&LNDSAQ|-2YSd{-jWJ<3b{PSIdIRN$uPFVY%0@nSo^Bz{%R>5tb}9sG#>= zZ>^{??3`Drwg)57Tf1-9#mbdsAI_Dn7!@AoPLr3HjLf+NGb9HZYt~Ib+*x2EPv6Fm zLfEW8I@fN$KQ)ZjUh_I*#|}p9yT5{7Fvv7@7uZ=%wv00*Np$>ZWsz({Ri?rC!ii!QsC`TM|puKG@&b6FzENCVr~0S{;aH*QO1~Tq(u2fLOsJ6zRcREh<4$>|3)r#ABr?I(icL&pr`PDZZnb03CHx*aoN-Lkfi<&@N zb?rvU@WH%qme6Tw?9n3=aczaOrxbi@T&i#T7RAQi{f_75ogEf?dAgbzzF`@~tt$SW zeq)@s>D^r0{fbr3kWC)&DSE7Jtm)AI21gcU(ZBMWHX^Y-uKUSHG60SR@3Svyb;p)U zBW0VgaZXU3`W3wLNX^b4PvU`i^n)+%oTa$yXQLXk7dBV-WaEXkYxxTlx38+#^J&|Y z_g7h}(il?REF`)!iF4dGFy%0zK8^+)_6dY+4{QoSBtF##&_7o!G!auFXMBnM-B-oJ zxBnEW{x@Q;XyB%3Vqk3I_^+g!f71E?*s=iikCp|F?LRFG&fr1++On{`yxb?Vkv^^t ztWJJ$$@A*yHI-#0XH$#Wb;UIe=c#j?%hHiehA=_DsgfCD0Pgy*8>~wu6gQg|N+fNF zg&DGkM8HINSPN^^ta(ydkyE5Zd>x(M7N(1#kYHaD`!j7Gy16vtut6nPHoas=el^J# z=hvieKV_tbBq;WPJuLo7LQEneN@yfKmXL;Tc`EOlI&TO`2p}rGzEfFJ{@dIcI-Q=H z)b=u>@F5(n+lDF+#5VJS#P4mP{3K2o?2b@wcl2@z-~?xWguHf>r^q|4w_6oUYN38fg% zZWjNVnzR+Jm^rA@RFY-e`EnuG9{62=^`g+_C4H*4_;sxW)mhCG3A{oK)m_D-!5|gl`b+p-x_>F~~ z@D5v+d2#gb4`BaNwD5W?+~PMr0UFqQ1AMKC;O<@3+6wz?t7`&nqy);S184RwQ2g+Z z%(t?9$-IUG&)(6Fb|(?IM-SK&&b0@-N-%%|My^wW6}W2Q8UMho4S1j?(RGaxxJ_b` zR55Ig2 z&9t8%f64sRADMq>v_KF|!)Wlw;DRLq?w~w~x8yMRUU>HXC+b4Q<&LVQz0ZHD`{33sgxQ zjE^-FCE^6znji$wtngsV9b(xPavF6yH2Gq`xuhsT=emaTw8^zlP(N3Hs2!(fL$GPY~}$h>1=^&gpso_t`% z$dHX!PWT>bGq1&KD-lR@gI3}=9DlJ7p6j44r7v*PZaCy5jcj9AwwjV# ztq7x!f*$)Y1cvSx0kEf;C9UXLe}Na>fhvNTZS+0x_py3I6WtRF%unG5hGwl<`>AqQ zNIipA!5Wpv5GrkQuJ(K#*MqhPAKT={$^ashW-=r%vCSsxr^1&9(!Ofgxt9$bHYcGI zENmrPAm|t!&5U-fPWiJXXs?kSQWk4>f$e)&o@FVx&~Sv&p8{|6=ql0MpBDi7DPss`6GWG#puzwL|Afe@ZzL+cv=iHzmo>KL}` zOlXYVlbety6dmfzQ2dX!1wFV72&-cEE)QRi$=i`){Pw%YU&XCBH(=SDbtm4=cU0N7 zWVg+yWY=#R&j*!>=S@G*V@#7o^nWVR9;+V{^t~#^1WvKfVzDkFW^o@R6EymAy#fET z$ZN@fw#|V70NfG+00{rTi2R@ZUf96dK*`zB#K1=St6k5;_TRK$^WPhGMAHY|Ise0s zZ%3T;r(uU<+8}9!vw}-{UG~H4Q5Fd-3io_ohO>ES$a7_Ft<~$&;9ym#^$Nre9Iq+B z796Y=E4u|a!#2YX4tLHOn9b{YzD$`=T%w;Cu|8<9uM%U>QU-e_FgMq;oa%(=SV2XIQFS>EpLGn-|0|b3P>^bI=S&7r7aUu@Ob= zp#qNJg1f2mrnlY(cuH>^1jZ~Tj&lCXKxFBZE{gBUP1}fYPVJDt1#~j2d0{ZW3@NKXzylGGhsS z1X_|$*i>{F<`sujR4QD!cf&O$q(w!IHqnTDQBsyG5p9v)u{bXb)lj|ysMqu+-NN|y zl=c0bjeDAJg9PT=cV7NW&@?g~#cDZc;3_guuB+X-eUF^_7TQ_ENph5^SR*ipaM2t~ zc?VuHQcN&T&jVA)0=%+?i55{mj-&HIl0j2glRD->gof?lfe`c%UKXVr1apvRh>hAF2zP)D(`-4;~JwIulIv;4~H0ZjqVi7=$=X#lQA`B(ck)>cyLxaO)L~pMV3s55UK4gvao8D0*zxKio6ERTl6gJF*g;aP^s% zDV_F~vdpO>X>9Q9;uoa%d<_Ju&_8>>bActuF2!?i^LJ-`HcmX|m!2~Nd1|aKi%x-G zvlYo>M%oCvrA&1?ts7iJS}XVV`dp`2!J)MsI%~dG7MAxfHv>OaNK8Bzzpxy59`4MU zWqC&Mp(%^RX0QpI%rOT*YrFfM5=oBn4L?g-Q_ppn>KhDpcRIoW%t@BB9~`D;hm=!V zz-n);P&G++FU{L%c1@ntQhB%vPc($lIdgM!67JUH+(UDi5%m^XSP;<^l&Tf3j*Ki# zfpwA-#`efZ!@kmY;8I*P-+M#QVAJ9?pz6nrC z((cTgbvYaMKf`{vt}x1s<>e7#yRBD~E;qJU4O&X(_&gyoDm$jdgpH)yk64rmfsXv4qSjF?xbzh2_E( z(>IET#(H@n)$s`FE2E^4VUu(fQM6%S;c}?1Sz8+2EN>qpvzSD!S!$s>wIMs}n4zk8 zUURse3NDw^1a~cz|Hc_!6FvJau@v-MDW9+K$7m8b?h~nAS4g zMZw{qKCZ};r;;ZwO)jX_z-wb9<3qk=EKABBM(Gnj=C=IH57aR>X%^l4s(x`s>$nT7_eThIi8|+&d-ljo zXL?(Lwqw)rSXFyO-GfHHy!K-k@-Mu3S)*%iZA zzafLnaqLa9f3LjnIXayduq+&d3;gJm{ocY_Dk=@(+M(o2h5kO(QpWgt)v5fbQ}If> z;GKHfBX!^0sr<~9L5+p~oS6kKbkAASe8WlmrJ1pypEATweRtMd&$u*cacOgfI$$~D z!NSLxut>&5x5si7A-LzPLG>7|IoV|Wnv_@QQ*^ol8;>`aULK#Rx|<16x|T<%8(lVC zuFcs;bt~=tc&rU|bwK0YUu$7F~1)>`zI=d#yqJT!s$zcHl$KRF{cM+@hFn~wi*M%w?Sf9{VnYWp)C|HT=({IAYv%KE=LqsdB{ zfjVF=uiuJv$%Nt-<3fmJ4AC$H4v=x_2)Aq@^_tapDk^fb<%my1(%PbQ(G(KwbHj$x zr@^aCGEOTMa;4I9_7pZ_d@&|wbUR5uX^I1)4cbCtoh81quZRH=jOhHTAG1>UJ{0&u zNCSRQ7{@-NS(y}$a_+jW z*X!1yk3_qOxW_aE0+?Qcb06jeWV2(grR{1Xh7;wEau%Qb&5kLS)87rl~Loe(mtJt#u~39_08JeynM0Dt6g@&Jg-tw z(c_H>@8%iOmF)GbZsO!v(De?S;M9yN7R3B@g&Bfa8fJw*DjO^Ta3kqPyg7@$XThas zJHk>0-oB`~#yjT8I=pAU!|h*&pmoyH;ae>erQ#5rgpr?PZ1w;{W~ns^r9WD*HV)9Q z%?fT-_U0oC<_I|dh4}v1X!D_h_7JU6LcdiCFFrgW7F{71Q5PdKZ}uyz@*?z38@TUR z+Rew7-G_HYvJaKa$?cW4K28JO2j(VwUo~{t5B9Lbe`@I5Hci}~ftQ|HmS5`qpKHn5 z=oY9d__i#mLoD%D0~)(wLrRoLl1a7vAm|t!?aWr4Zu!GSDDTmA6c$@I!L?Tx z-fzD#-XoaqO=mI!6@KA4@Q0&|I@+9b@pz!B)|Q>?O%ft+J6j2T>txEbl~~2a`FFaFmfL2{z(6R zk6-<7E*Smq(y#wn^!3k*!|lJWI0ArCrjS-}5!#Z!c6yQljE%wBAHt^#0Db-yeHHeY z&#s)r*@xqI(yLQGZa z3GeInk#m;}xdMhhX`;dv7WB`Ku>X$)=<0e|*r~gw@nvu1cZj zI7)~cjHNiAibIdm9a{5BJ;?LO-nX&E0*i&y2$zotQ(TaHfmYjHl&i3Q@17{;&fCc_ z3$sCNcA<6YSt3DdQ}wOKP>Db{X|L2Fw%ERduZxTuNaLV@X+=QKe$GI%JvN!bi_!C; zI%Gk9`NA8L(K>_7S`bvAd;4vwWmI)Yv@+IdB!I)8v>~7ZjuXkA;1~Vb*zBXtLYdi=5Bd^%jH@k9nSztLuu-p=qIZ_KMEr z)+=TKaz}M>9o+@!T7nRMz(Re|BagLqpi^ZpRSh%)A+v8RZxoA^KU3JQEm!JOMD#T2 zpG{d-?8XHXtMPWgyYXXHQ3Y^F({oUM{!q2=Qg{L$8!1SG?6&7LTp~$zdI6{LY}@{$ z6}NOdd!xp8;B6)$tvCIlBE5e4&13 z)4Oq*Z}1pF$IjK(TDa9r<%Q<4)Cb#WSs7RhORsp%(7RNM;r?sNNteu*pR1?k+zqpp z0#9#D=Lb?`SN9|msG4gO#89*v|6^F)B_8LbIR?C9Q+OoT_Y#F)Dakt+9oE_EiCE9c zrF6Q}RGc)R+90~4arY%xG>)-J8csOL>k1TZlhqJt0;GlG*Z@sqUUIv#crC z#dMAK%jNcCT+x^`xL3_?L!dPW{V_yW;2Rx2Dm%|po5S%K(l39ly&wMyzRJq}3BH(T z|G1%N#U@H58QIsYVFB8S_3->g`{g(ky)voacKC8#Ur~3><$~PSn{?z5&e`+Nexul& zTCR1R!Nt+Zqn?#Y<8{(~w1ouM^xkTP{hXCL&KYX#8R>8!k;Gj8+8QG&z=qi3iDWNP z+V-}4(ad(M@`6;jeZ~<=IJoIFt?M?F%P%rzf z0425rmp&A8>=%tKPk~mYn{~EY00N=t}OTS z(Ej|#r=_LAgY`o^Hzk}no{I|R>R++U)r8m!nl#V&A+sWt$J|r-27?i!Ik}gG9C?r% z!T4n)7W#(^yD}BHSEWg%jCOR~v>`1{9?d?zd@CEtC%m4YcoTO~Ts!-7(y!gIp*u%& zZd^TTzTdZumUnykrsbcw7Y>9pVpN+3L6SErNZNc}h(QX<&3-sIQYLku1Pf)EXo#i8OQ@Vtw>{M_2^eMDmEyKU2^ zg8x;^e5{vyw3q!w+a(y1h^C+aM#6FF&wIIdg4|r-#;QrB5+0TUDMO z{C-DbJa(sT2`e`w`ZTthrV<)zg=mc^=aZ`saJkYIC3t2wY}F(5E#{;nOKm%Ed6u`T z`>AHHy|So{-ZhR_7*^3i*UA11!=DMCbSRClvz4^R(&88QOpa0gGJp7NvGf_vir3|m zlIG*eGn=cGdrcHWfErZ!!ex0)oEBpF_QA&7!AOSy^iC`Hmypy2nkq;-Pu4oFp$v#f z*La(TyDs21Ma@MNfuz&(A)l7W8xIqn7}-10Z;5JxrUIh-3OY5xz8}rrR788w`h*Xy zRotT?0)hL>i}Cf$gkYg4Lgl zUb`L@)~V3BV)GY&Sd0B*t6l+dmnir)+$y7u-M@KUs;|i5@kg+>Ncd}`lY^ze+{Ask z9v4OpDtk*atw&w;9+sPps*+pT{T_@&*^+vfVjhCtfodS|)k;=T@d>M98_(cUx2F`u zyr&-m!NRi1d*(&pH{@wC*Pe}LZ37Zsy7r@_#C2-9S;Kn!BRb6M-Y9@ z>UkTj$`#cN8pnf-z}2SgLn%>Ce(nb>!ft2J@~iw3ZVr2-1oR>@Zl?e6Dd3=3H;nRz$jM{){vHQHtmc7N{cXY?FQl+1n67=Ztw3fDoxCCR0yYv z*=p}Z4vexhA=Js^ZGT`M$9lOXfCUzvq|s_KiljD2n`&g%B^hJ2Y_!?ULPR!lA{b&z zn9jh)iO2C67t_(G-=a&02Kh@kS!yDbaFp9mF?sY=$E&!hH=j(BrFH{HRl%29!t_C4 z_nTi}pJ@BO6HWDH%{!iT@9!~ZpkPFO=Pp=JM)+B$s2sfs3dE1_Ug zm%}XvuYioHqs)|R<(m2M9h<9=rbVP;Cyck9MrT7m4?TM&&Zk}Fp8v{OwFXK~24<~_ zobXg4a_wME)FR3R!;vN_vU(!x9r)Q_kB8N2$t|--2H}AWABkXQFevr>o*Nd=U)>cE zW1t20Err#0A2s|88d}b-4^PL&G6h(b8Ofv1TCb*K+RlI}=v_4gToh`(>2S^zY-%(< zSV#VyAP(t7?GEw-AkuWWGy{lx9bF`7j^KDlNn!Yzh|rLZfi4(=2Lj77(FJvceD=a1 zTHHfs4!2eMb?Hsl>liLMk=NnQA%2V;6*8z(Z38X`Yb(^M)U^$`*Kj#_ zR$QfiP`1dGD&SMuvQFO+ApCII8m4WW_qlhBo{mxwf$z`VuwX;JLn2s4{)p-zz^s=Y zzjK2j#CFiYQZrtO?YDRh@+1;dSm8?D#}prNPy0>fMYrTU2>yw(sMet(ftcW{sdFS3bI z3}qymO+9bDZm4g}!dfV36xYINs?!-|{q($3nHb9F!*u$x)~g;irXEd@+^soS6*@Ph zm-@4y2mSFzDX~?bR+sRR$`BIida4oC|2U8%-E-3jChRA9YbdRgv4Obr{la0DL+<)d z#qrX5Gmza87XW2TECg&QLV;rnfwn|R3UZaAAn8Zi`A?OLG-Kmv(L7wi{ZQ0kg62Fc zVKJWUC6q`%PY>%3=; z5gZi5R>qMd;B3QvfY9=*i46$BItGeN$LwoA2%%ZE!4>pHG_1Z}PxJN}_T66+7blE_ z>Ns83X$=K;z6V!i7rXHN%45g8X7H?g=|mcX4#h(^1u@a5 zAQKf;F9ES*4jg!xF>CO{*X5ZId}9~ea07y7^k*Q_GedLoSnS+kOy;}(x3i?10hb0`JahZ%}k%J;N9fpq9HINZ9NyqIxJalK3 z6Euh&g8FtEGUfDup*Ko6{^4W#n?%om+?qlTO_N&+89Jsw2<%W!GbeWsp7m^EcFr_-?A+UGI=*JhG(g<}K8YZK6^ky*|ozgDx_2v{WZ4(}n*LkbuZJWZWw zEo4_7rH^{2^&lQxi~DH)Ks!|9Vpw0*A7Ztpg08Nr+Ky$>H=(ck;GQ-7`uErRVrOU^ z&{UgnjTQXpeFA;FYy|iF7;2+JN`>Vjiy}AI*a&CMxTfvb*8RFh*WTNsw@0gc)?YG+ zS3>M8QE)3(?N+z^{7-&y3$NiRw3IWF>YDmf?}fb~#rx`;I9_2N!_#d%43Ij{H0%x0 zPAeSr7lsIsms-IE?n^GzoG0~Gs?y1 z;BoRgc}?@bP4AaR8f{w)R-`CXmMO`Va4K4=x$mM~?wHDD=df|wI{lpH2cCIRn>g5U zo1{!rrYX~qYv?d7-QX=LkC691xSu#nUivm<-F!{r>Pj#VbVf1Ty0O4g>b zK-4n|s$5l$8fT4@7B4`JnLoPzk3Zf=|N54*rUIpxx2t^2cs^6=Kx4bA{*DA^!jr+1 z{?Iw5nl1aQJR=*2VagWqM%5-HrxfJbxUbDtF ziTCM1XiOCpE{Z(RKVw!#E0UB+%cSH|H*EDAhL9vdyOfz(ed%~F^w*msmX_MX;(TGZ z&3UOpg@3FT|B`+b_yc%N|1dLbW3>g{uAvJ%E2E#LA3oYioHznT7_gg>84LqxKqzdN)dHdq3#gqN z#YWJ%=X$-fO8x~*F2Hm*im1{9{Je@)RCL=~<*L%^3C`8(>YR0iKUM^>*y?&8mtben z>?!MRe}`-sPnbc0RUyEu0Oj>1^lc&|VxcgQ|IGnvfbuZVS2sdt==BJyH|R7>*jy4D zF4unBVI2D0V5uOw|Vr{UISWOAxJ zwSP-Mk#FHN!^~gt;3kSi`Dd>qMZNiYCZDWdFJtEd2Si2Yi+;R23=K!7v6 z>DxM5AGmU%D6c#Td2pji*svK(`4(JkyP3ESF$zzx+jAp!rHSb&@#VJZnCW&j1IQtZ zZn;oL_nUnHIov8MMwBRX2BIBf6=u|tZH^)AwK?Kw3yWEc<$gCUmZ3Az;52KjAiDzF zM&4;V@-G<4j?_ipIgHmvExT<&OLg}cNJH%^LC6e7?_`@t%H~7tt5g2(@xurBRi+Yo zG2~mOWZ-xHBDPRAir(qJ)mIS|9w)g`#Tp2w{DIP)jj-@XbnO}6%n1EV#AY+3fmBsA zAT@bu&qwp|9iY~{R}1Smy6{d|iaTIasn>WnL#_ zPIF=cZa=@V2UB?I#+?+XOMW5$MlXe8H6FR0FlvW5R5G&|bB= zb!jBl&P4xcdYO8`2lV?Slk}>|oRr7P85li#yZ>0Fz>^TE09{Z_>N@;wd4|dST1!f> znnKmmR!Wc;XL))j+wTctW5oOI=(~KsULkbzll0Tsd2uW@#Tl=Fv$X(;2&}q!Cpx8i z=n5D-2?L#;&G%d^&!U}eHR-SaqCP%Yu`;FoKhI2r^zIg^Y#mpUSzJ(DW|Ws8!3NIxFu?sTc+Zvm;_3(*et|41P4DWy<*+>x^*~ zUoMmE(2p3(ulBU$-4Nuo`WPs-uzgaWLTN5JaR&|^ksA!ESL>elo3Tm6V#t40&V^fm zQuB9uy*^siz}6stXw@zYfL?X{07c3e{nQeXPF}Yp(jaQScAABVxlNP=d80vDHO82+ z82xwUyy@SSbBf&W%6V=8uJU)~yat0ip8kPih5v?SVRwUtZ;EJuDMV{4q)~5)`nzr} zUec*JOeyfMx;e%Y$$!+%NgQh4#j4aISbn>8>k~S3eXrZ-j7QC5Ab}diK#velKz;^p zGDX&6XT$f&fPC;omo{PaMM$cLK?O>JF{Nc07=Y*cK>(o_K~SV;$2VHg%^NgIh&2w^ zM*-W0#Jj{oaF+L1v-R z`a>1ZIpc8bN^^N2lm~&iMY7vEd89G&rSuwfkxL#9djI}yy}QN*cb`Z-lzs=YzalT) zzXRDSO_Jz;0@*Q+?!31Kn+PA@0CQp*1Fl6f#I(^pX6_k`K@#^G^X>6DtZNxucQ7k6 zXg=@oJa5seHeeYdf0yY8!2hFgZqxeoT{z#J!H;!?CUfB|-VjfmWh{*ebiW8Ip}C#) z8kj5UaGQaPGJ?J4+Iz65>;yQV;5;e5hO04K3oXUxprfiRaH zoO0sagVJwr3hXzmVn&0P^yZ-WGDLU-1K%C5ITP9PG<&F4q0!^jpn+X#2Kq_xblEJ; znmE$p=i^BDX>_-zAJKMbBaX2VtTzz=5lA$)XCuv%5FeSRAiC*Ctt?X`o5&qD zhO>|RJ`KvG(`boX7oQIfg3Qu8k7%ZgLtz?mD?*pU63=JC^q-ew$x5kcRY&QQ3G?xZ z{}sr}iJv4*;RlrGckv(<%$Um}h^1g9@y1X;jw{x_c@&S6N!i`ZsNX7(JOt2aov){g z_NQe??0b);OoEw5DeCdiMGPcUY3O9TI28!F@F($46Y34XE!q=D`J#HAN*p@4D z?1rz7WAU>QVMd!{-4cHUTo&7WyTOQZg%yoHAD)nGCuos@infgl?&nv2*RfvS&by!R zPc4IT7d>Wo-_(v&TZ4q*>LdP+W9g0|-U8qF_^IhU{@Cx6#j{R-u?+Z@s8zjA(aJHR z{L@3UYl5CBr67@PXk){!0bnl@?EQ_l>PQ_uGp!$g_~PLItsQd7{1eA6JA`+1Gs?#F zq?u#OwkA;=99REER)4s4~9qOQbh!WT;ntH+6MXE|zDJ2!XVvBND%VVj2BhL7kT3!R+G|Jn_ zHYdo5b-|$r1s!)pW4v{!Rr!Qnf@^gx1eYKYEm-SLMm zge2hn(~|Q)MvM9~ovQwv{40+2mJR9oj$?cMAJk4HdH5qwt`vFfiw|i(y3^*mR8Cz# zY|8GWM~JU)MUNk{58r+L=&@!fq6ef(b>k)I zL1wXeX+i*ngz*O?Er6yY_sdlefW*0_wp$^K+)M*%5D49$!@UE6j@tLF(~g0z-ta8J zve?(Ui_5fVn5EX;y!O^@2&~r;=PDI3z@hK=cM)Wq&DJ&61V&V&$Hi9k=+G9928!(U zKzsQS(f6%5%Hv_I$V5e26+gBaI?el=kPI@G5}B8Hb?ejg(;SizLqRbMk5IlnX`Vtt zD!7wx!PoR6RMqRt`UPSE1h!rPm`QldRONGO>V#e|FC}3OV&1XBCn)7Q4t+U6Wtzl) zx=4D=!IDUVXnM~|3H&|`{u`+Zm$3bLlJeKjq z0)rOf1w&sGv4zheOQUY@5H{`vghh7uN0O^is$$J97nRCy6`4xqw$&RPV-Pj0@k>|W zI&6-xPuLedY)&wAb;f;Vp^!k62&GuzS=ie)I}~Gh4hy3$lVCkGv43K?_7u;?D1WVe*0E zK0hdkI*ZsyMwo_MeQ8V#?WqXg!{~@PBD)}(Apop+J*THz2o88A0yD3Q9`khn4Vs9X zAEA8+${!5uf%<>aKd9+*ymNV(!f63rhTyq-ObQ z5TeH+=k`NT;SPA2TUf9TUc+0t?qx%}hk*%%?Aa+|!&}gtKzTBt4YjM(%ff(nAHOKG zV-dcj0ju8`WUeR@2r#PXh?sqGL9k}$QK9FAoyWmyLcm@-w%`ooSm_L1pnJ{k$vRf7 z${Q};#e2T4qY^e3ypB6J>uZ*A`StEt95^lV_mXQ|`heHLfU6rA(9f2Ee#Xw{#<)!B z1C81OT(Mq!@fc_^^z2o;v#wGjOW~1ZS5!nGQpK8Wt}8Av2nVuh0sF;Pr<(J{b!A7$ zgRPIMi!41PH_XJ)i4%163|&no<3LjL1c6o3TtOpX$yBeF^tg(3R|eHb6*PX?FdsK4 z&59e-&KZYiMYCIOi{&+8xMGFRWKsz3!d4kPw>+NaB+MA$RI5T0>dh^qFeycMh65Sh zu9)iy()Gl+9y6&GaI;X54yKc}xI%-F-^haiuee-(#7xE{DJ=al#B`5}Rf+JN%}!Qz z%#Ju$MQYM+e9dCYNOLmlVvmaDkiPb-V``FXYMP4MEG}?z&REIKM!X}0eNSp7C&^YL z7vqet%CRa3X_-FGP1{WO9Lxsuui!`a$Ui}A40oS)PP^^}*WSDnHWMp6>mco*T5iv; zv?)i_CWdmH8&h={vH>Dl7IRzlc<&6Uu`KG=2x6?oj*xe$N;iesr8`5H0u$@6P)Yo$ zt?Ujt2)K*PIPtX^9CUI}@-Ocp0rWNH+B4@FhtNG&%hjzNtIx3aGvnssNSNPX`dVw& z$LQSLV&ASfR=6gptBH+)S1@_kNjNGBT*Z!EvAbSWCd;9sB2;w&k%K3-8q0snS8o5GPX+T(ym~@J}w^K%KbG+X51OhwbJNUt|kux{uiw?2OxRzwAIRBevRLCk*(y zrB%2@WX>Y+2YJ1CnTdYUC~iWDM@z^c{+6+-QW!{|!yotRiySfm{4fp1D_<(!wDwqu z{owkTg>F@R@C_8jgflh@y%)0Y8m80k(;_`ZaKfG=dRWejrfA*7toZP~drN}NR{*mM zTrxBccReIsMiy3B_Hs#j4`A> zLR^%!Z4IzoHBzJk`SK8(PrLNyn}!mBeDibUrgVJ2n;_^vgxH`~8FNztl z4z%&X66MI$@coFfR#%^rQiS4)Qn8-@Ct%_(wjaR{i63>?;bVNNckcihUxCV1(T8sU zH27(NGA$lZ4BH$O{TO-{3A&XX)ter-?lY}ASq=iq6cpSr$4Vg9VaJx}^Dpxlt4Os^ zLgqU(dj4vyG|&avPt!l%WN|=}t&6Q_{6~%tn1VnNY+{fa1@QZMdi4Ak~A}l0BWlNmhTnK|o>(x`OaP5T%h%UqQn< z^mAii;LYXhW9PqSxN!vh;R5^fO6J{lZKCO>bOkC{*YwFx$_*_arUK#BpnfU&^I;$@ z-{J$GS^@7reZc7jCZTEQDMKZu8Gf=Tj5N-q8f_qA9(vL|^TYC>FE3+H^(6$4a{M}S z$q)Q~D2?*jE*Jzai|3VHaVYKyTgVc|drA)(P%TP)^*Z~+Cr?6;={t_{PBbtnf3P)8rPeG zHS2|hqU*X$aU9>mFwIVw6GO4kPg2;$|oL&zn7l%lxVNvkM0U^?~ylht#2Se&RqhsBa z6z?_WO{UduTx1ZArL|p zkSDustGtbfz;Q(OT9xyVKN*6-pTq7U9Lj4~pvs%3cpKZ)@2UdVj&Bxg&^XiB7DEa5 ztQI16Tp!!$bgF^qkOM%IG&u?A-sL)CR4%b3$N7wKf_+#ndnUv180LCvYRe_JatyCZ z&p=wKN&^1P+!H_exWkYwg+i5TjD5sflD*1S8YU-QPMuc3d(rpsa%Q1l;-2bMKni~V zZ=-Nn?S{h5pVi}qh;)I3(kbdlri-KA2S3x8sz8&wJmXQQAE;Sr5QN-^IK2z%c3Ewd zJIDN<#mrb9(^`qTl9G;xof%t0=io6P!0>Rwb7(787lpRu=f0oBt#ZCpSfndP2Rguw0LARNC78f`r+$X_>7ITd>LRC-vOnty&%7 zWclOA!CRx1KNaOb5$%t;2iq;%<->4Mjf>1THr8LDdg(SLg{{Blph2EDhD$0we%Fhw zga)=$-3;xajPS&a0KbHQ2$WF%(<-ldDhfDES_srPW;WDH6xmpGZz}@%f&34)PV)6n zQsq=RF=Ct@E1u5)j4=d~MVmN68Nh6%n#D*9DKFTgBihh*{x@`&cQ~T>8`S>M^^OBU zPgoA~BokPcv4iCBQKB^fibCC6g$1xY?I(s3XZh`jcR2G(If@1Jp(U!xXMr`v;h)=s zLPBbRhQeKA{fX&*EgCEI+JPxCL|>BQ8F;HRFB=N46L4q;-SnWI~t*Z2B<8s z7T)X_x*@Wo=5;}lq;B?)B!X9S_uv*d^d@YJMtDNEz_f|TnsMviXnItjM~Xa$?^ z@FE7Nv(QNUnWlazm&cwio{IQ45OrOFev-iY&zYfRXal?wdLd~C4H6v0PQEC}mUab> zL_ca;U#=vQmCRQ%cZ^ziBnnEzNc%sss0H*21Yp8}#|cv{aB5ZKXffK6njwy>tX%yr z;X1RAc_r~BpoUBX$vwK5NU72T-E+D~Avak-E?d5u^dcPao+s> zvy?FYi~0+PeMaqdlIAYR3pgn?awzDU2g@uK3I$YmGt2WGXeFZFa6TJRKy%>~qeHE) zR|IUCVrF&0Yu!7mfJsoSOy>%pFjnQc?dPY=g*6f{wxEW&J~Spku$ zQlYFQLMj&cIcp7dj=!ma0ttu;&LfCHxcPKIA>Ba_f%L@bx?Byc4cQb@WorE<;ui?< zS*ZxURb7j(#hwCgyso3_Q$7DYH+uSTV$q+v4I~<5zF-6*imgA!;ny0InHD*bN|JD_ z6Y>^l-F2Q`L7i&8vmZi2!IGx}q=&DGsN?Y^L4xD>`OLxen0LbzV$z>6EgEkcD<5sdhzv9M;BXW*&5`CN(>3=cEI^2gUdP)8% zR7o07B$^6*dq}WOwaHk#4N{5)*TGDI;rlXMzw!8q6U#dY?r*RW(-nZ{h@`?4Q^yK9 zp4&+P__)R2H#@g2P%-VCG!#WRicFXk@fPWzvwCwh=!{E}N#{lfi<>$$F{k2;)Py_t z5b5@;R?e$G1%%3@|ERR1jBlX?orWSw%Z&<_BPA%phyOtK;{qN58;K8J{Kauz9HZyT z?I+buZUA;X^ltzHI7I?5kY;a4^~ZS^2_HEvfp?zXGo>SNn1^785KMLybrvBxgs}Hd zl-)vIzd(NAiAX6q7uehtZ%qMogf*OeUVn5hScA>HS z&RGOxc-0R;)AlhU>jV~EA%&Hqz~Zd7L(MPoRghF#|K8sRsNI%k;RTV#1vwXRjM?O& z5+wvouCEGh+-f<>g)%!xWr7`=hq_I=BVA@Ea96px+0UDNi$cKnNU~xJvt}I?adAfYEj5lUw+1Ri1=#ak|$^kxP$?5HSaLW?5t3y z<$1#Oc=)0pWUh{(49?ArFVQtPkJR+q^M(XIHAUo%+034aY=*hIF*WJEk zOT^-`1v+RhhQgwmND|od{_esjL7L7JY#1wj?%=$Rq+jIwq4cP-cSUDIyyyQlxQCde5 z=oGByCWIj>nK$@syoYiJ5=M00pO==&;l-A5HEA$yQJ=}4x!h8NC7WZItgtT6gS3NM z&D@ZlC;otYmishh;6k_TpU0fpP;;82`H0}QldH3ZTtF=e^Gj8l1n~e#bYxAY@XBhH zf>oU)Jho0&9ACdXxA($Rwr{E*)^<;-A5krhLwX9-zat@)7tG3Gg)48qWqy=JTXX{o zM{_e5N$SQxw_o$N#>gMz$UgAi@K-j`7M|XkJMrNRfBvfGxu}@?l|;k>k)Iodd{^DWSke^bEnR1)=k!VDLCz*O?ThK zkeYNX=`32oqYm2eW;;Hb-Ow$l;cp#A^l5d`NT!K2!moep^O6gIbVO}mmDk=kM4*{8 zLHT#1>-Ej!W(b&}-F5De_rwAZz~RT4$gGi(7pr3LLd&F)(Yw|va>fb$PG6b@gk{>y z!#r6qE1X}K1XO45oj&X|UhIa(_N3jf$9Zi?pZRDwUu1=3RWWz;e=t(L zSE11L@&Ua26=D(+X7$1l49V3@Q9=_sUs>4c!;$!q%(J4q*~V!6^h5p4*J#YE(lRYt zZDwxI!W%6noVF>_+8`PcJkiue)5dbk&Iz-lbLvcwbX2rZ*wNqZFF}8d6A$PX-$=JL zLu7}1PLp%G$|N~v-b>q2T8~%%__ZNqrTDOcl%_qHz1BcltkT+wOHwsa0*6;^(I4x_t=p9E+bWYu^qeBr-^)d9x6uZIVx z@MAvwC&2C>CLVGG+%6dg0N~;K@K5~TUHkXX;s3u#MmQhNKRF&xj_c+-o3xqKHxrt- zw^7ysWuSP0Fda58wzphD5cgI!s%eFq+&^}&ByZaY13?-mWHZv9g}uD4&U~c{Z;KY} zv-0V*%5C%97e?O1+LlD3DlhQmvpVfE!hCL&s8bWq4ApOpMjI7haf9+j$5cu`dKHgOFs6H(ny8#?mWaux0sv5%DInI6Z8 zt(`~ri5y!N8d+F$8!fNyS(VDyPmM=#T|i)FA%S+$5j)nG)9>ZuB9(99Fp;Y#hXPDz60C}@jGC*(IhcbmggUrGC@_8L4f+|ps;RobqWgJQrxVsU^ZRT% z@GHh6%Yrnlj!GC#LI9r)JQo_7v4AaL^yN%DugBo~>Hrs7zHkfEF5^xn+g}O)ex?-P zJ17dSg~7gHhKFgP0P$rtA0>aY7pgu2JXzm#Cy9q&XoX72P|ZaBQ_}!mqiSG__T)Xt zaZmNwjE%}3B<3pgs$W48U|OgSU-$fmbxUG^@>_*JM7HX-eeC)WRMniZnRPwqLW$pJ zlibDTt4abNf1=4Cw5mYH_NaSnB72B<1oh|$G)L9dTbYMHXhKvN(td4npLeFVNPPr| zNVwI9<+rd{1t;4;)mFm_=Ge4I+#Ly^*{;KLx zK)zI9AQbk9+w0&(Wsb$!{5Yo;v~SuuZB;1ZXVB_jP7304gK5%L{l2kVo?xlQ?y1lY zBX>vJgXAh4{h_oye01pP<^8}0*@pyL_z_im9E^jo=T&@X(V|;{2=cEt%c!r zBuBbo#5dxZlJw!O<_W2X^gGVSS{6IkfEea_cuNLzgB$>v62%K}Un(!)(<55Y4*o7; z{~NHFI7jedwDs3X*&Dc1opCyD17|Y6i+aoiX#tAUF2nD0|EMk3`V(@|pHRPOVAXWK z1?4nLY`*R%_x*uc=0P5zR>7eVxA1;qqzy(*kKqG2O;?+I+u&qGS56AELBfi4$JT+0 zA#8kyZHWb`nWfp8JDN*#~+)*HAj$YmUl?86s#*L5I8$IdKcz zMqQN0Wt+;Iyv2SPEqoH8Bw<2pH*Ee@Q$KTquG*bzHES6`%_Lzu85Vhv|YXlx%PrWSIK{5sK zpHG3{DWaL+s?-48FsQ`<4<>>0IPGpc^Kc9Hg^VKVI$aL-JxwsMTRIO5N_{Yip5G(F z6L$CeYNHt}bul{PF1h29;l3wH$Aok2N^L1wXCuc(HJYIHBNk@MIUOJ%o=+Nv51eOP z&|znb)))=VPwKB6S1n!Q2NE!lGk6h2>1ajzFyP3^d7PuY;htY1Gp8JX04n6V?5kJ8 zw=38P?9W}~-G_W-Fj{jj72!AS2YHM=hn|_S1;LpT;5M{*jeYy^LVklHo|SQp81@<< zGMy)ImvX889J@|ELWPfMQllaOQX<3P+%L$Smy3UPInzwg-S`s|&@x~8C<5pYp~;GmV^d0j3E?`!BtBJNIAE^PIJox! zJ_M86&8*K6qD>O83YqvQ?}@I$81oZX6Wpx(Od)?SQP^&dJ3FX7+@Kf)TgU~JQD~T` zks~$wc)Wp@gzy(EzDXU`*fE*>WQm&l4BH zv83D=JApOjLa?xj<^!by>W*0GWDAG9KT{s&ic*$tuxqgDq%1drv_HM4@au<}_h#_TBrJx8e4kcU?_Z!5Vnh;@;-m7b4 z2Z7wUX)&8L-}PEPg0oYO{uH>nITvLnGq1C91UE#DV|*yb$Z(b2!K2jFryQyEaKB0x z*k7$B7n7RIB2V1OS7HGqI^2QoFbO4jz6`}B(E_{Rl$?Y1X5;tlcJia6@DxbXmzyDN z8GB=Y5(@slEe=&seOR=Z_$@^kPUGh3c$S+Gx##Agd|{bR!GLXN32mR|tUx71c?bXwv+Ds(^cb_f67i7sEh$ZA zrq5_h_(ms!QhCS=AZ4#9&J$lB_XtW4>5OGA>$96s!`@kmgszpU$xY&mlvurFr? z)gYLpA?U?%8_)CJgUIRgWQ31>Cl_G}#ppt?-cFJj7yf-dYCQUn1HrsZKz;e%%aq@HK%9Kme3 zotz8AEje}&jG5~luR|C4r-qT?QCS<~`I!=N6%+8={90JydjxcOJ^P4jYfXU^SZpZ+ zeSUmMpe=qQdpj5Lfu;Rzvj#esdYR~eqs;K7@@JgUN%CFrG2>Sk84v}*c;4_1~o9lqeVJiW`VBz@kv`frr`9h`W(uiMQ1e%xoXQdVr*+ zQzKCl^XcG`jGpzo!+z(eM7EA;?%IN_k&3~P(1W4ysX@O$vh^ELWQA7j7n~Y~UmUnJ zoOrX2c_~ME9R>vnE1_e*Bk^vWti;HIx9y;fHjuS#NM@dUg6)xG)cV?r=^Mo8V3E6H zw0Dpf+qO0_rbk)b_QKlt0IkIG$UJ-8f}gW$cJ}qIwj}30f<21tvp(+bXK!1`1;tYs zxpvPPEavYQ^1xG{`EenAxsYC6Nbb)hPL~qrFXBVM_|@z8>-DaS!1!TAqgLhKdxtY* zt``kI`%t<~R8sZ!cgv}YuGlwSa_BJI^1ED(Jc?f*^F>^^cWR+Y#P={-u^{eH`>uW8 ztzqQB&GX@A`EYZ5xj5cj9Nc!n&5MRf+}+rwV^)tjCYqXLJKK@+;6C1~-(TCghZ9r!xc}=+lNX4YRsabAK*|aL!1ceLY5wovKJ9O~ zPXg()`#nmp#Lae1G^ruk#)!BTU?NZ#CPg7>N>{gJ)ChpIaaa;~xGnw5kC)jC)F#+@ zXJ)mqkuk~4EAP+QnV%NcS}*$>?a4=fP^nv+Y*rI%7c3utu8yR@{UI-uKGZv z1cLW8H1NSi=ZdmGCKDU?(!;S+1+9DwL)K|rjr>N-m(0@;L+Q_m*c7jl$DYc^Qzrp3 z71f)RsU!dDFiQJDYpnSQ2Ckqg>}Lry6O>K|57wu5M3olwpEuzrE5s1M7)W5kT*1jy zD*jyFj|abxP-vC{lMl}+A@Ep@l6&0gC{YbF(p3`%}%s22ah&>hprR zNfl)>Z$>*5^qsop#?G`JCh2JpHcc#*nFFxP*0 z=gyO0uUgLXz2jxkZ+qSDwWXM<7$YZ!c~6MBZZ3c1d;+w@iXcWOr*m0p2v;r~TT;VN zyd=(gMpIsOd8vWhjXYEnoUy=@_aDg9maJ;ARS~L1BjzhUM;| zRu?|^0@Tz=JOzd}r%0aa?_%vC)RKtzLh`>gv-*Kca>p`!5wO-1=>Txuv!`55(vvIJ zWG&capN)p~pb_YfyJU$i_3-=*?&4atiOV9>wB#L|e)QrnZxQKi!{g)ZxlzB19i`#I z_Ql}nd(FmsNRnSoj)sShPEoLl0S8+mjwXxLQhs$;(j+(mZ%iMhi9)B|qC2D=AB5}g07n>2GuP)8)_+v>@2;v70G;O4$Y-AZ?V5nf;CrHC+SjjgAr<_ zW3WyU-O;ZQW@I(v#eb%}lwD44Pr3ZT*dAqmf)PDk2f#-Bha9inJ%Bku*G<5gFizIO zrc*#ba#tG+)z)DvP5z*r;rvU~KOI{2gmI+}Qe!jYM7BHH(k+i-Shy{4-{7BBhv#j? zEYbOGb?vJ~o-ISBX1cg2*ow7N;=fROK{kkgO7V02b%6&@X$CV>;Pf)C?2FCTp3V{MZ%6+q6B+`+kY@xUjKT zoZ*`^YvZa1yuILUZlmS}Bw7Uds7pQzH2E1C1I=6m+pz7d#mrv}Z3k}&D=c7Tj8o^t z;7K)_VNh@%XJU5f+`ile4+Xm(?t7s#OB%C6j3IW+4w^LWT>Dx~WK;GB6VEdD?bX#n z)3roe+hrBwj#1vNNNso?8OfpRTQ1acE}V&xOF>L$vN+FSaivlAeW`zToN8>}qE;(} z#p!mYEDc*vmhPVl3xTI_t+HSCb}U@Fhg%ypET851!qy|24&T|2wIJas|7oA}ORk_? zvaK?=Bin@Bu7ya`J5Nz|F$7@1)__anTKP%-tk?`f-ct30O!52hjPqlt;v}OTrByRY z1Ly`(M$b7L?n#K+;e+8Z2oge^7rE9V>p?tvzC_PSPKFT^D1|`_4E}%P>z#sZ3AlC3 zGIrUvZQHhO+qSXGwr$(CZQI7KuK)DuzUOwt?TCzAnHlRTpK^{d=Qo8sd{}!Qc+d<( zNy4HCm0VT<4K<1#kvH*u0*j%RWqmyArSCJHY;Wj1CKc}J}ZHyH7}N$%|^TsB1+5S z5w)Inj%Z4##KiyR)A<*|RbE+=)7z1EOPN;ThT>lOis}xUvNTZGmw@efyvVu%mEC~y zVL;5;q_l9b$e`3PA+I5k>UWqA4C7A09FV_MG?b9#N|3gb5(^5!rF{Z$V=Pln;;Rm6 zTtI5`EJL-AA2lb$Nkv-~I@Vzww&tem=~lE$wso($|4a={PlEfvT``@0YSp!@bnh+m zC_z78N4N1QUY^P+9%i=!$0R-O#4Fu#;1Gc-I`mwA61vJLq10W$vl>$$fOTnn5>d&C zr+8a3^>ex`CPL*v6#eHCJ4ifKv)l?|BaLdL9?x#>?y7jo1{i7zFe%ueT~esN=~dUYk@y_2*d9RvmYhf z9Z+;Z9!wf&{cYn9)Q1%HmH_gM`H=06POIFba8$}r`9X*jcrn~UW7}L&BJ?C)5TB0J zJkYY%!K?)$j3V-<{@tE_T>Cxi{a&WB$Vk%=k~{sHXuz{eoJXnd%gpDQ(TZGoDi>nB)GE=@rE%Q7ES4`j)A8OyqO$vh zAfoca`ss5)>>eW7dXY{TBrvw|0DwC|LKQO1@~F-MsY!)T>HV6`y4pv6-0Pd@9F8xq zTwpP3vyFZ6vAwZau@k(#5;!dd*}H_hUx(o*x6|}?v4>dh2etxU+YXZoZW+3v_S)fV z?y>Ycc?rO61-|Ig?xYk)!GU_opk~{V^V~kvp2`!H>3T^Yr>l)Eh1RH1G{cSh|4OKE zLV9m0Ve8{mcf)DhTT`@Idn(rM76^PU>soTj{Z!_!xMY7CzG93HeG4k%>hC-&X+$Iz z`L1gSBm8>n&Hu-7CV&-{&|TMR{UGi-<;#Zbm9ZJZGfl)v>XbYDqdb-sQX!4{0|Y!W z6np;8ibLi!GI(K|joz+kbjzpg%(Y%4h5nI7_xtIGb9_hMoon~JZP&Z;{~RAtw!IUP zkj7AlS9yc9QmmLZK;@iBX&WXou^GsnH))wV_R{+&V7o5T8x=;gG>!xb|>O2I)% zKc!FqAC~>s6@$_Q768D*;{Tsz|Ia8~9iLy8jrsHWhOFu4Ds^JXMQqcW3B=_uAr#9G zw)OI2Ys(n<-!OZ<^ZVvi{DF%!03@LVY7w#S`C;*qmZyRIN8cIi#12iy*)*qhemKmt zbD94aX6MFW{Rd`u-79iY6D$ta*fC{xtj#~0iU~}l)t^Vy%$_>g_*N;{6=m}HOp(q= zZRanMZTQ0^S>}HQRk)6Q0mX(_45;mp{w!8uJdk>dX&)Gff}L3g@E%%m=b=*SPFtJ# zOKwAdB`e20YU=jI2FER(jLREwf?Qt}|{{65*kw=+f_8eh0r` z*(@t~v)+gIlZH@&KNSL)eDDFye$FUG5m|J8pVe!F_QTmMtOx!9j3bqdxS^8FWh2(S zW%I25h1uvfbC{*2b{;QD0s;F|&FpaVTdv^Fwi{Cf!$AXnP!PH=@F+Nz2Dw;h^t}UJ7#_a1*u2d!7Mhdl9IbB|TgYvsJTtt*lqYa{y~nhm#S<>+n4p+*7|cdOC& zOS6Tr%xgan!G38rhIxCSsfmtnML}=G>O|DZO7KeJEOs^`8A#cqCd``gDKuheMSe3>1vEt*Rfh5y3YQ9LS0$MSt~yxL;++qjUj zM5C^~Z<6wxRm+<)%C|4kr0~!30=b%@9;ynGVPSlM(rla8Q5gnJoVR-kUpu{JEJJSO zTR--`x|iRo3c;AqZ<&CReUr|VVhoKrEc-5=e_)!dzI{c`_bxeKFozu4Vve969L>FW zAJ4eCHb}ZC!ox7aM=io30L7K9T6bJ1BS9IZxIulOd!QB~2}d&e+Tq2HVwqEQk#09g zotATDNY}K?w=VkVW&3%HGC4pGL8g-~mu=-st5yxNx{AlQ(N(-Q$Htp+f$vn3w-e`8pI3FW&8l*4h_JevMVOURo zX^{qaDCDtgz%R}QO!xe6oLwC>9$s;UoNg~p>6+z2-|W7hJ%E8^RuKrN4nB>M)Qu5M zOI<=Mo$;nG4vdLT9Lx2u$w#pJhRi@Kw(|Idqn2n_L}p&wI70_5V|&E3nr)m{>EPe9>4j`bMuox?Z9p@NsU z{r!87_4~dv_>?jEn7F z4O2EMTM4eE!5;jf_u;t2Y;Wj!4~I^JYTh8rG{A!owK4NKGk8}SV_IR3rf5`f=-YKh z-?>767jTCUMH7C?sXz|92^1bH>-VNtDfe~-v6Ile*JrZ|2o&gh0`r773|E|hdc@m- zUKQEgG)QOwBuSel_unu(h;VE$N9=I8u^#I1K*f_E*K4*TRCP zrU+YaO(I<4YIlL%1+*t zRt`LU;k8e~#zsk;J*G&k$WWewSzx%hjLCXRd|GQ*>TCOW*w1$;=DhgS_zFc;hn9k_ zz)KWF6n{U%Lf5ZDbm2^>t<1}uzBgnNe->n-P)1v6Rf$P~VBASafk;nJFoNS-xGd$v zJPQUi&{MgL$CAvGg~o+{cV)oF&zcE%(ug9mN{lUNb8nXgt3e_H7PO=hdmf{_@7vQ=d;XbQlA7 zlvYxl8WL-%BxIJ%5s>&!fixJBD2@dhPqQ?G2iO}69erNp4eN*^BuRURCs{=`xLbC% z@coiILWn5=YiS@iq^XHMB$&9fT{Jc`_;8OIpb6BLJ+0RKMeLSZ08Jx^kVdkXC#==Hl&ydWN8+*PR5hBPcEtP&125E-6gW*KZwV-Yp&9d z5V6uBqbS3!J)j(bs;4M-icS>jo<|%wx)jy6VZ;fst10oZrn+ex&}YLII)!bw7CNm6 z;7<#H<{+}8k-L9jh-BkVQmXvrq)?;uU<59=5Cr2U{gKU$ND6<^r<(VUU!1Ac^ZLk% zSzGPfFgoipUf+4^`4R&@ zf~Kb3bJFqxAOgzUgT^Hn#zWLQTX%@oXxIs;xjq2gkF#+%|IdiXG1LVY;vk$pUV0bA zQ2jIjKZap9ntLrg(jXf=@E5?tp=AOjvEU->PCKxQK_ufs5Em|t+XgaJJ@Uh!u9;@` z9UkK$VyYj^v%%hiiaCKtE5vyUMcPwT=gd@2ZmV4uEf3Nt%i*i3ckoo&hR;_`poI!Y zQ`Fm@a7ko8tUH|a=QYgGjeo26|I4zun)3K|e4fcFO>^lb*v;AMHBnYGolbq}9a8$| z&K4z~ofcVHhjZpczc5fCe#Ob)Olojbzt9;#~t2+*gy8)5R|Y(JUSZ zO`dl!MK+i|_y}T~B%CQ9dsmbmg&!$x{hrTQ2lWbh|9XY%?~cYV+NgF7=>B1eV-2{b zT$t$5PE!3B$wlf97R0G4@~c^Sn}c1z3@zk`PJ&ketpCu+0piW=AKK83c_QnR_IgVQ zftE0Cv&>z0@)7w^Aqv1!w;gWL-p8bE zYd7x$;95*uJl9kI@^J2sj4Z3RzAqChy|3N)aC;UIU__NH8#an`(wvDzCRq64zMc&5 zC=+jp3r(=No2OEM8%&nq-$!hb+ge-LSd=2ejY6oVY2iI=ojQn0-9C`G-c=<&D|2UN z&#Ij{clf$pXmfgETsn0u&T-W!CX$sBTUjft^+nwZ`-faxalm32fLBq~9sNs+FQIRp z_wEPNw3iD#LoPT97v!ZxU6~Hurh!XLBQ*X4E`q29HE(>vgiCQ>ZQ~7@!x!v(x7t9g zwd0Ur7k-fS3j24i@^B4e7{~W}N5zB0#uF`1*k3iGY?>Pq(&YcH#)vZm zAt$QEO#{;m91bD{LtS_s0?wB>@0q#pV+6#*`UefS`Ih*yHDO{Y&Gy!;U)L# z@B*Xz&x}br;w0|I!C9enR`X+!O~E1f3by(|98kHaJrnIaf8MP-rd(fWH;vSK!`9%e zV+;e-EQ1zjJ3H@J)eg(_jmO7Q(^g_sExD0%!^-}!z&x3kZ~ag&-+;Sc@cloC!*7I< zPoii$-T`)YUB6+1#(sh?zssmyA$F-RT){T1o83P-3>A{KcX-P2T8BF|N)F6MTfVlc z5&Kljtv~n$8}ptjKNWp}zrJXV~7WYGq^@^f>Nb$=dI{~gJ{RH?u?q+i@S@?Id|3F_A;lsxWM?BgHX z;eF%%uejd-bX;u?&@edtE?U(z0|3DPKiY}^u{|5d>eoR$JU&pFCU3yhXb~Hctq%dV z&<`+hU}@(Or~a;2h51zwf`-NYLtd>v-yLR8!UJHB;*M5o2WJe6i;K587BZB47ulir z_Z1Q|eSBJ2bX3e@jX4t8^g}wi#ILud} z?68(?n>hDz_YG$-y{z|;gk98Yl0H|i2;>)l!UQR7K2MseVDxb#FPt^~HQg+u4A(fn zQ#miI(jSac{k$#O?7~+WK5b=v9F2Ae!AAnhlHOGt^Jw)@RZ&(+^!w5ZTck6xVs6=| zGs~gWjM)F}2LgmV>lSTwF@c9wg2^Lb@L6mu!N!C(i-~|HcACU!a~eEgrNTx2r-XlJ z1S2u;DiaB_R6iO@$!w^{Ie4HnNe4)M0(e@vm04d3UZhDvq91V;$)|JysH394WgUoy z9iW!%WnR{W3hvr7R7qLKgUyvT({MYEFkH?Z&-*M&bPWsFp$fADy*iz&Bk(Jnuc7)os%mV0PRJ$u8PHC zrqTsVnoVKgk@SP7xd-p-*871q(_4u=w>JMh`(Hu=f8uhzrk$qBNJyYb?vO6H8_-|> z;3G1m5Ki-CMn824QUFKF<&>dir72qHq!~xt0qEA`cEIU_PkUhX%Uz~O` zE4!Q90~S?i=f9Sekvk7j8!(f6)d0q7c0dM~N!tk+9M~iEDLHut}Pjne(WdMynCZ$J(W$$G9cBI3EOy~ zWNEIsm!3tZ^UwqUtAl1b{mxo2X3(c*)R`R!rmis6iQ;yAH8~J&&wv}K$66(yki5kA zipT-dw)98YGBQmT+5>g3@by2W?ERm) z4uqjR$=zjXb0aPL0ECp_!?+V)mTTA+%tcNff+?77t3RNjLa6F8Wgo0jFZo_(A;g;O zy+sOqUTYxL6dlLSTw&taR`$w8iwx$2N%-C(aP*&_;NA>U!rZPg`q(|In8X-bC<}o& zNeoH_$#+H|hb$_1fi?%i@h#hz=n~r6-+>DbD;By1xdRB;2V@9OQ&P9?%RU_{7I8{X zQMQ$2=~~D`BR6w&=dU-;@H!|$dO4TKLPr6@f>nZ9DVK^Yy#89^YWf(RCZ2v`e5U|}VDtoaCxTi5 zbbSOQ2JbknppJ+pum&s34QZC`2xYmFXPm}MWjNR5&XXsPD=$+Dg#K!pw(77Jp|phMES0`kK5^Hf~3YAMqsA=I2uBr zTWCeS?Cfa*@oP{#+C|YBMS~O%stW?6BtY8`Dy=N(8_?I#{+1!=pJZzx%Ff*_1lxVo zY}Tu0O?Hi8NHdNCb3*irt}X;khKz!31s40%rHwr{>B53j8BF3#QsI+`wOCr;WO1Vm z&&Nyxd(1qbsPs8ULWW7Tw0iZ*1iq?cyMGn7aH!}A&p}K=E-B6iQD||F8R!l)pxywB zN?%39`np8L>{be1P-M2CQm_9Qz8jylBMFX^nG1m>DFKD1%tKQ2T)S+5TLK133`ypx zp08%;kuRVu6~V#XwT~9HsU-8(Xk_gf&ucYjokzbC)ALtIDx>6)sM_(S&zmH(Tj#i| zHDN!kAsh?^w%h?6kY&ajBG~0CK?{T!fZ6Ox-0%5+LF}2f_}~vfGElnz6V^g%mmdPu zx5Z6-?9(8GBPL2{F$A+6;)*Y*on!}ezFS}%O0#5j!*x7N_7r9ba@M2F&$CqXw@MkY0oMhe79 z1A2xAdFPi%S8akQZ9X^|`D0*bS_&_St+AhRB%sgrhjA~C4)>)Kuw$Zs0J889CY+3- z8J@&XWQUk~wMIP&-H=I^1Yj5%`0^diFtuwNr4%uUFHM3$F`+0S*bf6YA`Z_O`RYTq zjaX0|(r*!7Q80odx@OGGZ=mgY~h) z+E_r@&2E5*$Iw?zV)WX{YRH`#jFHBp7iy>5Ag<}20Sb}5ttd;nOh`ag{WlUOY6#byt)W#TIg;|rtJ`kHV{&NHrE3|(<%GGE;Koogu}7aUl86zm&_cz*;+@w-HNj#BPambf$cZseG418$;v#QI;B$W(zO zP4{l7l!LT{QrPIYWBnn0Z4t>DDjyTtn+Y?ofg>h5S8fHH1WXKLmX<+ENkJlSgjYms zEs*5DiH+gIs(iS@T8v{py3B9}6rCJ>f{*W58!2?v2A*og-PnhV?9aeD1k9r6^#5S<-a86dpV*xNc;gjxI7hk)gwxVL`x7{Y9Yhw#vw*OXZagK z^5=(h?Z_m^DjKT>l%WRAE$X#7uwK5C#JGd)ayp?r*=dF*>mamfUIP7ClN7 zWu|S+mAhdZY}{i3oK4|I+o>e^4RU;WP z0S!tB&1D|?%Q{k|Q6$SxP;=RTUB^sT?_YC5OyGKn)Y@)d8bM^g1QWX*XH0Rjhx)t( zA7p8I<2==U^C|#Kaes`=e}dL~0K_O*dydk|mWUGR6cJDnsFlw{Ok(r~U1vRflVEnF zO*hbF$AvSH-0WydFBCcYW_|6{6zq3bg+oUkvC_tRHCJ)pZ0^oUs|sH8M|O(E-Dr57F#7UI-9^ReJ*nN~LUDMNw7 zLV>hX0Ysv)LFmz5){b81L0j%x)26zOo@6WQiQo+nz~On_cw>oFv&(KCo83%dF!!ce zQ}QisBR@lnpA)rGX9@`v6*(UynkZrfGJ#yn8tb(66c4%F7D1cYz#K-vX`gV(aTw?g z<(zOzqNB)P>%iz;%fh&6wl9Q^KakL;VZ>}Njtl}~7)g=4n=}FX@tiW#*SAY^ zgECH|mv{fNCIFUZ2F(Bm18Cwl_!~3}5*U_mamL8|n6*Y*WDic+IG(f%77kH(+wb*t z+@{dE1mIEPXO-!WAu_(XJb4CXduS~Hn}Y+zF^1(h@4;)Yr*mI1)? z|1Am<3=#C_70G^#pxDeR>Xl*K2COWuykC+Rk1QXLO0hi1{A~_<;=SdOpyxdAM|wol z)h=j=PpQ$6d{B9QdY^=OdaBPd0rr`$mRc7!F!GNd>9OmvYr#Wd4JTAW>GLo!HoWx> z;kJA|2G*LpMWY*Vrv`lA@waX)2!tW301>7edB=U>&66Z10{pj)SVt1|S*acS^2q*R zvs6|TVknhNs#OO8X`yZiubP@_3~3t!3~S}M$^Z;UO}`T;-u=sF@8PfI`xBuOwDi)f zU0Rw#Qvi}$A>QvOPhemaOo`I~eH(De+>}pTkyeeUYIJsVUP)z9#Fbo52P+8KYq|9y$sORCHfa=fUdO3BCt- zjyhh)73BV7tY3~F9&PN2L@GToOA~<9XP{yKQQ}gZ#J45)Q%J4LC&lausl=A7rt+f? z#3VwA&O3nMpPzznM^64U(}=WnS@v}EOv!;6YY3Sv)F1w2%?w{g2nRR%mMmN8eqs6G zrZv(Ix;=J1(v6)68$bmsJi-{bodF=tHnN+Lwla?hazWiXoSBu2=<(2Y(2SrXDlY1u zY&*`0^WDp*6Q~};!8KCLROV8B#h#w#p`kk6s=V8)oT6yCx6mlX89dW2iCv%I8E(0C zypdJq9Ah>A*v>Jby7%LrdAVob96hwgi*5Azy@@&eZIoL{#g@R#8u=$A2eNe

z*! zEpEp8`cpiI;U={}@|CGP9=E~k)h#(XA6Tcn|8Z>Zr7TL+CfrJ z5wSxh>qAZ#cAl>CY!{}Ke06VFnfL0lC`ff)oY3ilVX0XVU*&$> zCEM9NX)1yVgoSAN)S=l}sX{EOet&d&U?E`$%5{CiC*Qj+fD$q11(gUnqAX|)&7A-( zNW65xMn{=IO?80R-dg_ea|m0G`c1B$>QS-lGm=>!=6(hIukWX%5HkC-rcncNsFf@Q zGWxW2&|kca%$K=zE7In>d58U8P!K$);27%BISoLMgM)bJkh|ON`FW>AG*CT(wH$($FumO zpbwN(2W62xhq)mz%i9>~UqCEQ&8oJ~0gwTokv{^!)hny=w?G!%RQwC0p4GQ{C~YtI zCYNq(9bPio6iwqB{*@-hBT^7++(dd)77U889zhKLy9i&lG4JF=lTE$w~q+1;^VOJVSy=iIl0%UFI%fxlQYic@StTm+h7}L6N(`oZ-nB*KY3)n;tBm##T z*&`qTSjhIFhXUS!t6gsDyvzpak4^G+LyM6R&s~VVu&U+{qV-AYBt4Ap0;&dnCJF^~vZA12CTxOY0BVG| zUF!Qu_X|uAGr~w&${JKA-h`ExXsF<1Y*gJVkEH8ZXac`yg=C;6XvswPR}}Y8qVdWG z+&xFeOptuHSo3{vkyD-Y^&|l5$ zhn8p9~P8!-dJUxZzkAuk(*-c=l+4 z^ym*!)2!TyyDEMa@=JG5-*RSSeBD*ysRe`o%mYJzkvSKUS}%;WPPb+w^%6Xq4^S>1 zQ`p_FLnhxkA9wuIIMi*(=P=p;9~K}lt`}e!nHo5#L5j^ScUTSY)XFiJQNjK%_swbE z*7cw_cm@lEeD8J&`l4-hN18^3APe36TV6%6*_I)jeXtG)gt$5GFhwi z4ka1I$sjRh)CedL^({nLFygk z54!MtDd~?&y|Y)2L>u=4%oH@Km9Xhw@#Q^v)N6-;z=dYI z-9mw0gn3RhB(oDtc;NIGkRX(}(G&5&bf^Q}6^=E2+&L!}=|7?|;rTP7s^I}}!4oOq z%IKaio6fFA>0pS?r7Cy@^@NA)UMUbTM@-?abzg$gll46uD|u`JjzzJxyvX|iNhq{P z1jPQ*&2x^_dC9W$9f$YLOoE&r(BApwm(ul8w0*R1D-*nmsKr zk#MxiOk*LJ!{#a{mSa|r2rA8KN{9v9`Iwt@cUwKl^EG-3OgEZM2y`qoAUt36Aut{8 zG4CSU+%tTQ_EFntN_cG9Qw|^g(Ci*I+=WXDTv3vke)Td1jS(ir;V{Er4SjJ}qohls zzN2I%^f1Ad%U2$Y%GoqHOq_#@z~g4&7AM2>2uo=2rWCxHtyQSSK0Ki|#jl?Kv8=Pr zGc)+$&>eTs*v~=@wm?qBeciTa7{Uj+vpZ~`1KbJAN}G4%h1O0sTWUIj6;_@+{>N@K zh^fZu+x9}PG?)=rQ3b;*p~ajE-h+$ki@o?*`v+_{_73}?tyf-P08%2osYylZLq~2k zPsdS~)p9arxUPrTSNtv08zat$V4v)!(6?$IAG!>xu(>7(U-O=2LaCr=v^R!kar}6y z-~?ff_Lja*8*6Eu%JnCNgNZc4oO&T0b+MP7(Z==d)m+jAV6EpCdL;Uu|V%U^1 z1Y_?AZ_stA53!{cCVrQFK9EAJw;88CQJ7n2>D?|7w6)0>_#As@`q+pb_U#53;?AWn zR==H@?~YhTiz!2^DGN9^XHL8OnT4!?NGMZc0h8Tn>|DKxt zkCZ&r_F)245w^(I>MhW!@ zxQUjOh6sEPlTCqPac=WnsVo~bqX?8>;Dr?-P4tbDEY$>9r`LI>ZLy4<_e%t=R|i5W zAaIqnGRmT?i|NZjq{k{Ka=M#?*CM3WwDIOtqmZywqSf~9lPMjtke*7exri!@8uXy` zX<)Ye%6=bHFtu2mp|$&kPC?ff1mc5|w~llkEz_%X0}j?st@um<-2ksWEjb^rP`}J` z)N%U-MAhGUE3%DA)Db%Y3{Y#wViZHY+VY@B#=t|jd4 zTEV=sdZh=;lxEHlc?&UNMKO@a%DMmguhVu>W!&h*Z31)M&>;`mEt%*vkvVkMEQyAD zImn@VXuUfufm~qy4}Cw9_$U=mmR^;kEo$-6yC5`4Jux5)Wt`(B^+U9mhC%6p0SMi( z@3rwK+xqy+Cl10bPN3*RnUyuPtnzs{%mZdPSk2_DN z77zDp>ci7>psW7n&nIOJjTyfIcdBfNK9O~g0nuviYTE8;d47`+l>KAo6e6lFp&~4> z97WYrSpKt^b)}(CB7l6*9`vqbV00fOL8EO}`uJ56S0h%zI7(^}e)ImxD|~ZXP1KJ5 z@COFWhOVPD7XZf6n7=lEsOw)<*z?9}^squ}xf;2%XRM)iWzT(@5bXM1H#exW7kf~I zlsvmhgdS7npw!Vhi>h{g%LQ_Z`jR-`Gy>%`P;?_XR?Uw0hqHtR4ta^WY3CY+Hx4%X z+s$o+I8nVYiHoJpukAh_+&Hf5X3d5CH!GcIim9!>6r&N$ zJ-xSMRrGi>-=Y$3yrvqtw3w|&u_!2D8QEwbxca@B@SG%3UTAGoPi;ANkA?uF!l7N? zkx=1@P`%S|1Dl0fD+%PYLs3NZ~&$F(oeW;9836SLSLr48LBBlNmrZ z*y0%*Mk0KtM}XS1#BDzQIlnbQ{H|NyHNm~QkUj&b0C4jUC|iO(8=J;GmAf4<_Fb4a zUg7F7UST2bh5m1XpOhyImq;*M3p!StO+56JJg zs;7%nr}_ZB2b?EDjDpz-gr!jsY%T8KJZS^2J_f>J*}xz0|Gh3FW$#z^f(HOV^!oo1 zssFRr_rFEz{eMI%$SUY~Y}X1{3;kXi50*B6!*5-dj5+k5x-2;q{&xG{>tzl`cL)rt zK9`l{>by}&X{p}gw&mXmK4#A6f4|MXjvIV@L}++1vzjgi$~!6!G8ak<6TQfG?Onf7V;-t%`c$&;lN$^*tA61VZ}kwR%$TjUK9NH|#1tSU z|COn$V-~F*iu2CfaX;^Bu%)}CEAEDaKmKvFzcQ6d^S@-OXRFIR8Fop<|0`3YP5)b_ zc0BeB+o*0)e6{lLnf(?2FPZujF)GT*Y`Du=cmVa^GL`CArlN5bDH8mbOzow3_OIcj zw{?vG|COmtSmtFokN|$D|3EAyuLAyE%etEjkJ=N8l*semF#8gX-d<)m%C;6vlc6ST zxmc&d?lbeY6a5dF8V?%G_9e0Xoc0d`qTOHLLAkWC|M9w!LM@oPy*VO<~ z@qwy8_UWV9HrH8Jyw?e^;OV|?1?EO_92R6MUk`lgb7-5QPZ-_4)p|)7ih^zSi*BU} z*-8wV&C@=+&&7&*P1<_${lKcit=H9ig?KdEwh&TydwHz3TJ)!>;QIRJ9|X`gH&%xjfnrGe1C3UAbFv;eT|hzk_%n2jH(xofut?xlm$_G00g{lzwez zx+@jacffSxx0alyGY?kdKNWP<0L(;V$2xD6B#!9s7fRoadH+mZ5~3DLy- zn2wNMY!ZIguNMM9)fnUzO%o)Fw_yVmE3X@7eZhdV`d>N~BMZ|Y^{*jmN&#Z?wTZo@ z!QtNmCWDtI5U4)JwJgEk2n&YbcIIFnByboDo@AB>`*Ar;vW4p}O6W_0<}L0~-iO*V ziarrm_HJoY({?=Rywwjh^&P}4H003q2ym%3gZ2@#U6)`&pQ0CONc*}u2pOUjp+MM< zvFJI55)NI)#1(Z`k;<{rwi1!-oGvt{Yy@! z`h0Xbk(N4;ASL)H@zj+48nzvG2?myE3OZ#Ah%-#&Tvde8ny%p_9ICmL; z8^RIA!6)XpW_B$0e#T(I@3F|nsR{jz`<1Dag}6<6!5$N`U^Rvt>ndL|o~zTYM7yo3 zJ1zq3#}TseVzlDIm@MJXoi@7y_Id4 zOESUC@ES^srXASx=E_NGFj-wjM9uEf(;bihap1HRPZeDT6bEk- zSu!@ILkNrEYqD@Jk#Gwr%yq21do5h97+Ib&>}GqA3Jat#8PJpXSpQ{K@4$Z=?(c_= z%+ozH$YAu$f*l>xk_ZDU0muC2chO2!%FNFOl&=Ob`ho9^b1YQoCi<1Bt2V1<&iaj; z|0Pp_e`P9`p!u+IuzkqlfQGCY@FrtKa2kslykQD_>K6)|>2t0C^ym}YEl5D(6S8`r zdjed&!i`Q3VY%Q}m4C0BsDo1#H&iiF5=u;I9$esp#}t&u3Xm_rdAVCqCeT!+8|Jj- zT90+OQ@wF#pgQk9ZT?ZJZmCS@uS+#enU_-hg7$HJ0&0s7Pvo!SE@SOgD54}E2cX?^ ziIp&@GzXqi#XeAWsOAKg`)Qw!9jMQZeMhL5w)`v-bk+&m$;QZ?ahHoZn`!G(2w!J- zScitA8ZvlX>n42aGw}ggq75AkCm74ewh&`SMu0w7K)%O)0rA6kofY0ezUQ1;H*)l4 z_d1F;mfH%P(s#IrEf!=hdIiYvuuVsruvT;$;Vl)aSyFj9XAre)xt-88Hze;*QYTN{ zaRUV$j%_eQA{H#&{^o{@8)-P5DI^%7~~(8bgAM~q>1DD z24(h&9LKWTbOX9^fTt9NQwE0{lQcuQuO(^Y&UUdS+^?I9?@>J>!fjLE{@5BxmEp80U`r`%vstLsF~1tTkTFNb(1x${8x$ z|4@MlH6E9nLk%$T)BCy;Nh{7YDkFpB=U2$H$x@8ok>CZB`1YV7NR=X>p8Eh)lL!zF zKMzi(Fc@ch0$V~@iu_md?-K?BcEZNfxYB09>5$%}WjcuRorP0xBxJqSG+ChjJw}iR zF>;uOTu~YRYKr!;Pm}TIr4j2@j^{5({i!ZmEUi6(?KD_q#J0Rj|kkGwq8WX*)?)J;kt?WElXS+zwcX0EXu+ipMvUE!Z&xVv*bQcgyl!5I$g(V>)jxX82d1OP`9`OqyC{do|(VoOX zoR;Q1Z3xdmp(X+*I2+W4@k3%k=ulwo(OV2FgZuG*MZH+=( z#F89ilKB&Xni35{(1&#?BBT-hJW?(*k?+}mnrGWI$qJbT-D!{~g~e?nysVCd>Fgj~ zkfKc6ihO&m!@EY^(?@~mR2?ZU^>@P9XebUt%BnT!aXVu>DdOYh-h@a)TmbPg4^|i% z>%DzMsu~FQ+Q@0u@fuZFAkqw}s2w2QZvNPgPO#QYju$Ih|07e;7!J)9&GCAdn7UEw z5Vq37Xj86lg74U|wiiOI!8}=yqqF1$DJ`VTD>&yKqa=w(?y|b>4pU(NUHQD)P`D){w)H!>L!H zR0<6LdET$lD5_S8Pwr)n(w$*b8$;l{ftav$?QrKfTDgb*w2m0*WO=VLH~6wC3`2eY z7Et(#Sl?&bt)EHq_0Pc-fyjzD5d8y2}( z?ClBfH{NZ%*Y1rXpi;WqPWyeG3F>klTg7ii_HHRy=-JtkF75CDI?R?#ABL2S31#De zL>?hkL~Jz9E{rV_4Gu1l>{->|F3}#os&B2qzvDv&l%NLXC_^wdh*nbP1bwfrho56D zTN=FKN_v8_&!*BT2p`!UAWUSxrxAxoHRH{iv7W}^G$7WOS~F^YLaz~Kl6O-@dRQUu zHA(orcsU*MBq}+0STISJ!=*Rs#a=D@m^ohJ$QIv;j}1)R9kF>9L#?Q*Ya|*d=^)cj zijhL5IJfWipokqWj+6%cQk zZjc50o5b%FBEcf*LHU@4LcG$#Q@9MIYNaZni#e#}b%7NiCeKh@)Ly7(4vXCze*z7ur8qfY2;2Mvq2~-$iw0b?0nMjGC$5Dn^iY9*-<8R&%#(pMt%K ziAovS@oOyIG7TV)z&CCfxgN4ZAIL%75T{scUQr9<(I9WDQhgcJH=8>B2z;?baE10v z6v$STz1l${;Sz&DL3LeSLwe8?5Q0x7@}dyRd2O&9ak!4mE6tki2c05r3Ifr%)d)S* zX>eb~k;wTl1&Y`W2-)j~Rx~KWH`IkS>4A^jKH6hpEEI>GtpSWBZE<>+IfWRLs#UcD z|7b!CIcMac&F@po#d$|^P1c=cR2)L3DyH0pus3#-PZa+;HfDEuF+3LfO4n(AKXC>l zil;PpRtrkP1zgZJ2G->cB3Xv)< zPM^Wv@ZuJfFGcL5QKcXK``9I7b0h9eFI^D?)vD;liQL9 z4D5L%$18Wg0zEMc-~`Up5v?7jlWnDA4B97!!ze6u^;t`rSJLgoB(aCaZ8rGGX>Alw zS7`n`PD)=HL&SP5u|64jHG^p-({MDbmys@_?Vm0?PKoO|E@_B_S#@uV{l;*Z$RlV3 z0@WOjBXJ`gXS2AkmSi>A+PM)Kq2bldN&oDD*Xbe#^F)l$`Xtv3=$ETmi>gHS6I=xpwv2I)CLl9k+RK>g8v#=WwH2gyVGL6D-c) z-ME#P_{!xKX@0T8B!+-eN_6@QAHC(Ke2TN;*-*0NBA{X-pJMtbqMG1ZF)T}#($wYe>~E13Z!2c za^*Uw!{t;%(87Er(GybeNq+nN@8IGAuU+ZrH*nuw<^LpfLWfSSUbMtty(X{6I7mmQ}$I@bdcy`lD-KSbgaEdS#YqlDmKo<#W9sQ zITV)HtxKk0QATmfJ>_r~u`b1%u}6s}{9%hE^Pd{2-NvpEW5cNjX{-{zEtFY)D+8p= zwzLGmjvk@hdm3DJu#N7Vj1>TsWFwQG3l|4C4%Q2!$PeQ{*vPWClcTe@qdj;QW*nR= zG&lsiuY!Cv1R`nDUb*Sb24y#ENo&eWHzYy=p{-;R$)5jno(%dRflW*53_ z+qP}n?y_y$wr$(Cty6s_=FFUX@7##*Vej`9k^jofl_@WMPVr}G2ebA)zh zVKY`@pT~49kG_StFS3L12-^9tOR5lY1SMJxkD$1-@wMOsWFGl2dW+0OM@ESyei z`o4otmpeW=ebDvFDIU4%Sz)8md>7Q)p+H$kdW;uhj4ZNT<7zwQBxE6!?+%Xiy=nso z#-<$}lBzz5+pBT;Y^DK?>t&Bh2^=}}(rwKBLX(!GKz_g71?H5GnTZDQDM^-6A?If( zA5?hH34*moY~XsJu@w>lP^j4I&D|@B`S{%5d;UA)3z>1r|5EnLE0vki^`MqaeeaOT97{CFFWXqfyw`DIowyaz{jLevsF@|y0 z?Qa0A^9?wR=8*SAvMhWZu?29`dR!KWi8mTMj5^AB98XC6&WMUU=8k}7Vlr$Rr(nm?I$eB>3GV4hP`IeyNK+q4om zo*MnunX0Js(Vzhxm}ylaS|&-@R$*J{q3@80aQnoBAcA@3?M_=15@0)tEr@R?+YU>2 zgzCb57=Mp1vMnkdBsMhSCk$=e9RfBvg4D3khcH%xT^USt6LM02g7zQJ6BaNd;u8=0 zz4UZE;uYvv*T4d$YHov4cbG<6k(HKmjv{rZ+d1G{3#ELs$9yFS3j)mO4Vs5c2 zoU9Y;Zgv8ir(Twmz?{TL|2UE-gX1`~{2Cb`0dwf9GjeBymRjo&uS&2JAvPEv z<5vhrnM%x{uOS$$IJ~h%}o356RjfZ z<%r46As15GeRP2w&L8kW;~T7>s^6=(n2zbDC!oA2-x~}?etWt0ag<4ox6ciM6|>50 zq(M$rfF37k5ni}(`Gp(;Ap=r%?|I$qLjq3wT@u>$PAgw6j9mJ@`jl@l5;$)KhtHP$ zm8Myl?c6UqZ9Ymi;>}IxnR)&+Z}Img(qwN-4*{y`K@*jKmOaMWFaJ6>VrB!Nx{J+Z zGiG0LJ2?cIrp(-Mo1>%>{5i)IrPel}=-x+m`Ad9eE}h zV4J>Ew0GB*0Q-Y?huBv`$HsK;&1Y{~t$a3$2hxCQ1P>oO6?4I^+Eav534iVSyc2%3 zRGlR-Dw9tY@Gi($#Q;SfUB^cdlNhh^Y1F*|4q~tNw(G_E ziD@{I4$sr?n;14_iil*k@EGMF5NhSp1y0{;@@mzMG3d3SdstETT0Mk8TkAmQpY)>+<)>WV-BMTmyW+B-%hs8?i2m*jzN(C<(uFI?ay$#t@gg}Z%~PTk(GLyqD|sBqar#a%Re5!g%1{eg&}$*E zf8|!Wc=+84K!QR)IOV!&B)X!gkc5RilZM6eR{Y8q#V^{o2xo-EO?fK0QjHp?Vhm^* zArzpTWRRrTefjRaARH&^`#BCqm!`&?Pe+KZqwd&Ac*sx_4N|69Y*!B$rI1KK27mi- zP8Ki|my$3O=;O zZ*OBBBt#War4k(~sn>ZQP;`yc1e6|YO9bb7v=;}e&^kXUBigKQzMhV05V)!k9YCLB zE4aaBr008K;(p895+UfAX+LMilPO7_RTbW~L*yoV-C=%3yfZ)>Di|ii2&cM%pPMw}!tKxnx%zTRVJ4V{$*+*BFdLKnt8l&=8j=I^;*Vhi1qIS(U=`v;Z2 z2HuYIU{b1&v*4o_2+aAoXPVyFg9a=kyVnW#VXcwKn46?1zUf}2MgZ<|&OV0KN$_6ssP~cRREkqe$}oE?vAc>FOhsV1 zwRO+3O`McDIx&M3^^Wc6ZT{TjZhnjt)Mz%42YVoRpVln!=lZQ##lzR^A_Kh1Ks9P| z!utsD4vLe1!mHK9#I&#Qby)oY)Co6K@Gtkv+5tN;*uUR5U`IFBI6y*?A|%ygILB$o z%0bayAcQ6>1?MxvV?3m0ISKi{$*xiIk2p*-+AmQY8cTx~U&hK-f@6*Jm{ufiK}fB_ zpR3EwJsHPIt$|5{GgMof;Elve-OyJ9bmUhnS0Z<>*;X8zduQV|!8ADUF)K{|ZlddV z`zpUiDTOWs2S`jj83CeXtvKd@&h}R7!gdSWr@(@E;1X)UCH-Y>8~7{%^7hJz_RYR= zwDDB)B8eE-b9K(qrJu$E759{OmKyjwcq0Njahr|}c+Z)gJ`MCC4llx@X2f5+udzWM zG04Ek7|QfFm$lUwi)NQJ&(8?DMTQ6YX4z&r5-2aeoB{>TL?hYa1-11ka&juYdE+9m z|EW?MY9qWT%*zzm8swipD_(}3@&fwm)wns1O`e3N<@5#}) zN4Vf|^)pw)NmkALCOW=NG_dc>#3WeEK%A*_!2ng2f5i2}b% z->lv)$UCg?uFUwuovvU2@3OLMk8f7tqN73NRo&JOKBC)OgPI5ni)3F`r*cOyI;A zC`a4@D0)i9pV72=VZJEhFFb>;$Zag@Wzjh%G{Nuqjh@e%P`bU&Z66QyKL6o$)?!Qh#Zni)-+zkdEW{xEw#~S}AcME%2f|$}7DDol{#;bl$$p z^*wiK1<*c*7+zvc&ZrY_l5-oYs$6LIcqp`7lg1haN*&@)Sy8%A;<@C6X1+a3#_n?| zr$fp(@yhOg{@e*Dee`!FWpwT0K|U#DXHP6eWK1yQ3vf1;JmW#iloCNl-{>f!rrw(+ zh2>KiH92&OBkPQ3y@Ky9{;E^*9?5O{}U zbvMS{EtbxPl#dV^<$ricZDVNNw+8N9p}_6tKp~4Fjoz1q?^ldYyqAr3g?EYb0~)9$ zqQZ#XJDL9m{;vgL>gPms!#-NP9tZ${9^!upGP2b(u+TFx`fY5lXJtfV>S$#-nP_E` zPKO-SeXO#fwzgmnBrxx!1sw|!6CBy`wHk33rUP#G2{DVz1W{dB@HEWMkzwU z;GbMw?k1ySExMc0MY=$m(?Plp%i&nKksjBL2l`*4HEwp6>dY~5NB$Dp2aNr!7eu@c z6v-y&DoRGmQuX8}Da5WcXsh&7Vf=Isl*J{Bwp$p&*-8TJ2En<(>I&aM+BI&FXw)Vo ziI!0DOq%l=?7!t%Qz~4ULDxCyEAg@~1jy~tzVu?+Axg(QGU0L%U zA=7v3Dzy7<7p)uo#mCV)yj%Wr*{mEor*!j3o)Z^kIC?^O#DAvLA&|q?_V-%S@AwA2 zcRnYhf67fdj1;r9N3#FWx3uXr{I+Hl98r$BYIx= zl&zSH=|P@l+w3R)p{YbE%Weg!;#jP7`e|lR`jBT8X;*73>8-|dy$Ss+{}l`A*^02T31aO?k<%lbcO-oeSrO3&Wye^33T`u|yt zJH;zz2>_gvo*0^7W0&r{VGSfex8Vn z43E#ed5QP+Q(EtO7kK4P8Stk{q;xxEu-UrJR9e#|nDx_6s*}8*Z@l8bA7ctJ%k^_i z-H5`Bj+)C?PwUBP>Y?h(p61~@Qa59=2uO3GKYz>%&z_4`3-7sGi;6;%#f#pi%iC84 zS_&u*1?M1wpv$|P7F*sR# z=i|pPOm|hZWx)$m#J<@gO`>KEOAAUF0|o;z;f+KcE1$mx?5A#)1$iwX;x`|#BaB%|meM9|5RTt?AusbdEUW!=G1Sxl; z>|)3w9ey7voFct3)&m;MUjCN3TzBXgnJZSbde~^5X|a4_=h~(}+E-=EDug6L(5^~z ztNwp-6!2gc4ByHtu!|=VS16q^8jUfQH;3258U(_*J`H@HtYo9y`5~uLyPq?qxYbqksjTD_g3E^0Ak9Oq z1bz0DY;%UobXgi0+Ex4waNgrsn@gozHN(@|isWDT?@$yd7nwhUlN8q6;H)o+IdC_Z z0gW*kxCO$#jyn9&Mt4GveP$)hstln)oPuO7qjy3~^X=hcaR>03Yhf?pWei251A>e^ zg6XJpTa^)&wbM&G1u`2jP!6WM=4d)1m^U6ajN(~~Wm}1Rquflzs4mbY=^k52iN!&H z0Z-fT!crYHhnUtF+84vl6BmSDEHO}ez0caf{wLLs614Rlbg%fW?r0lS9p|4+E681r zR=cg!b#69Wr-R>hWqIb(&gBqsHx`zNk)HKd3pAb^nP5R>0PS3MIW^XBS4l213L(sU z!K(7Gnrs&C*x*KJovU>O=?)JXaY@llTK+=ll$=Fo4s;ftS^;-^I@x{Py&$T5}8qB{Wi!) z{VFi$%O_`MB|?-(H)LxC)914|T~d--I+r@%t^WxazM9+1_MVCDz=Cqj?6iy~+C#Iz$u$Yq5w+|7ERkR#;P#TwxNKTsC~FOc$|60K}kbwxKUxDKrP6;Sytj9L~uY z2?6fuN5l&iicpp$X+0sVyRi5#9^4dC(BURLuSa+CntbFS zH+HQopxq4WETH{X@ULZO(Q5-yGI!l4*o!#Kha^m{65b`XW?<|Hw)A3nDK>YB{az5Z zg;rq@6#Muhf^gG@x@JTA>3OUpgEYz|c`*D}0n1`}QoVr}*jV!;JPSeyjN`M{4Cyw7D;H@x7B0CQR`orgGU8ED`u8O-}}5zcKGkCF<#gsU*9l>_tl?I6T5e`;N4g!TIG#*N>+j* zhH0X=E&-Ax3=E#%;H-3np*hDPblNh7{Cy$xVt*KgKCl)oi$iMZlJE!c8sJIAUt3(g z-z$&ySKjO_KUtf;T!xm$mF+F;wP31ToC?e1&q>p%8S{FhWhke8*rvUS9Z*6H_>oF} zE`Q@h)pHV_Q8EGWbWUF)gi$Gry;X7(CcG=}Y5(ufRTVX~CYT@SZu^05!v8<$cC;{Eoq7f2&CIGVnb6vy`>ap9yh;@rbJ|g!~h=C+d z3C;ZRk#`M{o_U-SCu%BqVCZgAwe&)4agRqL$eDzq<~IdZ!@=wQB0xSVbO93Eb9kL8m0*Lg-L`{wYG#lOUOMw}v9 zVc^`At4>@*k40#E4C(1q_xSa*@ZI1aSz6}%z$UXMdWH)>ApV#$`>X|*sLs6OH4M8J zB}b9`9c+E&)E>}w?(A-JTkgn-y^!u65g&qfeC+fcU~r;)zZeo;n|t(-aTZyt?dsa7 zKJu?U3MXHr3X|AOeoAS@65(z?kc6M~)?Q&v!*v-yi3LBaLI8v}M)uly>j|4kkfkUT z@Vc&6xiV|-3R08JF87NtWuGcdlfI2{P@kD-w6V}0DQvbcp?0b$hyrGH0n_9&qR5y< zR+>p6{9S+%@m^s<;EKq1QtU;IRkN;qTl)ScBXM5`K0b?8H z4{eRYCEk>Vn-Bl03zJyH*0A*>9wkBb7jDvHo>J$&qU*;d>v3Lv-d*^KN}uSGE6jCl z$xl=ia!yeG9Tm`VuU}qLlLToVAtFL+Lj?@{ThS~YiXn^)GPN=#f67fgP%akO)2#xk zs`?*fm#io|S}DA7EvwOPh@Vf@APBuCb*nWPMl6*RS07tf$JSAn7KE3pBT?DQY&Mje z6s99KppeB}n%1aQm)+Hs*`hR5vCp>jjxnn$)<=Y~s4FjXwHs{fK*ALkM1+g(3)I^j z9*>4>cULzW~V2@aJR- z(k1i${FPBJV`y^pyl!nKN=Me}nLrv{-zr`-%Lirg#M5^;P~SV^oZFg|XTuz{_BJ_D zmNJkJf*5nY48;iPxYu|d2Y+pVn<>uT6`kbtayiJfVlu2^zL$<-^V}Kxy;cU)xVn3Lha)x4B-Prg(U3!#;6Oc28jTA|mu2GOwGm-9pyY9YVPC zkZQIR-Yg^hL&j+x-=M!FA+(ld%tqhD%$YGupK70J$?s9**j+N zbi4Jso7Ul_U4)RnH>X_){dO&%&T3w5PE0KKdNSthUQ&bhc9nDcyf=GG&vZbQhCGyw zrU@c8F!KYtE_Va+q^#l3HGu9d&9)+Opl~YbQ$t*j^gOAsV<0gQ1(-0o*t|5E zLry<=EQz}duPNDgrw3Umivd=#bh>0Ey(-z|C08@;bfvW7b-Nas>->EVMn+TabKRCT zTh3|G>)Q&w6pL*=R&=C2D3CBBZYa5wsAZbA2(T6Pz(K0n)Uktsw`IY_1dOKx_0;~b zaYj)FW-dgdda1k4GKb?9k%{7RErrvVPu8U|%PyM~Igx)booWxqA0j>Wz<^%HFo6;Z$6EcTJiPc39KBQzy^ z(527CgsD#|gnavv56S4Tk%mfZw83CMMM7CjL9MEl-A5@x96`ALct)@2!B0|n;n7Br zGi})kI>>7J)!A7p_FOgol2Br}&N4V%Db6YkV&#C%uqL}<_bU|ZaDOfJR-7&Pmtl?J zSq+;sG)P$FDOozh+eRwFexUiICNNP?(oI}M(<1V5N95PrMd0zJ<`yj6BrPR}B|LTQ zH@gEuF!EMOrKP~BF(Q!DrI8ApDyN8urA!5g4m|ACJg7k4{1vu^FBTvKjiApb0uDL} zxjNaA8*o|>!War5SxMk#2N?&#!AW#V91f&wX!5(t$Qnl?NYq#(Q&Z-UGv`U-&Wo&P z%dKYLJS=Tx9~MT{E;R2v@A7+dC|PATvU)HA_ydH8(b4YAKGAKv`T(h}O}a?rcy>=awcMM=WQ}!CUbL*aQRF#06U^ zZ@WZusi!9IqammV)Uy#{=gX7_->OV&iW|v01@ys_dSGH3@md)EsU*o~IQ0CRf55eT zx88mp`J&h{+cGe|m2NwLe z27ELN0T8}u&3ffAjs%uIxoTK~#CtI3{$gfw+8 zSB06I8>L0`;usuo;6;leGP*MnQ@v#DRQ`k#G3OP5m9uetbN>fGfL+g#98Hfas$~T{ zzWw4(Ew&Uzgv_o3t|$rltHO4OG3#XHIr~+()P^E}d1_eGaQ*W^7kV>O->Bf%Y#H6Tc)(&fgmUt5-j9sfm zeVJ(yc?wn~E3P8rSKV1(ove!-@^7kKHUW>p(cb*k}D73@NsI(S}dpotlB!CzL4Ps*G zBqq|B#ga~@sHr$Vl~YMd(M^eD+hd%gCPRD?x2@m-&LK#&Qc06R?|DWSC={TRh2YC% z4XJbH?B47;QiGM1Wg}Lflz*Mu`?Y69q=U~BTs2rpsWW9sQNb|%qUjfEP1k!G1a`n) z!bGQAbJsMW-*B2*^3Z>-=V-|Q{>H7ta$<~~$$d*eAG=$@35GEoBIb*Hz&fe-a*WU$%?I(J2S=6Z8R^AtHhi{DjVY zQseLW_J@p=6Oj~H+kuY0kU_pdCV2_%QFIP@iXSyuB@F2q=cX>uB%=de+tR7Z4|SVC zT54N_@*gGr-W`9-GHC3Z1)_c1ls1mN_N5a>-R2v^$LYuy(A&tsa=E|9k=aThgXT!1 z;?QR4n@YUy-ka8{^;%u~EHwP60_bj$X8?((2n!?A=vASCOnrT`4I>=G5sCK8@%#c!^YyV}t*B>F2jcc`d ze^pVGxkHVN4~#wftDtOs)>~_iQ8;be0v{$Jpnvb{Y;t+C>FDRF)Ks=stkPUqqGF}D zk99w0N|9w!BU|=G-UN`-Vbov`>ko;{Gcb?2av=P zuX_bFN7seZitaJM(ZMT*&*;uDH|`!F7QxUuIc=+* zD!lLKlxK!uk>uFVSgA!R>2!~CeS=t~)@x3=imB}JB93>`Cb_$5K77xV^44nY z`Kp`6ug1$yLR{gW3wbm=UVlHn3;KfVm#Y_*0}SW2=ZjcWYs2xS`;$pTOjRKKgdz}w ztIQmCA?K`KjX!DnJEg&9M6q4geKZ5)%e7_?*5LV7``C!8NXIuf+7T(^@WWAex2vu= zGGnHBwvEZZM@w)Z`lnNjaq^`AR;mCh!0iD;p9cU7vUNIj1U()?5zSq$6duC3mZvec zYX1rToqujP!ltf+i=_Oqs$joKE>9NOk?I)!^v87B!I7fb9sW08K{mcT-t zr&USr(bx~o_Tb@=+#A>hS)x65fqZ9*{)+Gn^NpwP4o^Y3wAR~8o91_zJk28Vr=W+G zDy?2=L6#ipa|hIS<|W32P6J5!s(kb>pW6Qx^ZIX0?*eH%VSh*w>7Nz#mRTV`DDI~Z$VF!t&I5J^~`4N%AWC2I&)<=D=fruZC zSCeegPBn+IB}hj$2Lnvd!a)_^x3F4vhjZaBYnFp{+l`y|{q@$KLL`=(I%meUJDSE& zAlSr&s11_h2AV#*0EaZk4mH-btCyGF=JY*{L;Sds!w(uW=}1dZMn_7L&9~Eyv#UZ3 zg{6?v$BN#LSvoFAH0KlS3C%$EIbI~KMF&W2xwQwyKv2#jmA)Pn4uMpmhzRurlVvM; z4`pn0y4^HBF+6Dl&0Fmu*IcLJuyTA;AF|6|hUhhu#M8tXIyB^gN!7;bi8~W9&ru|g z0--50UG&C3)OKMx^p>lWhi=p6Xh$!|-=Bx%$$jjJ$3H;7ka8zRo+%KQe~p2a-!E zar3<^v&;<0M)Kg$B^mpB)XGqnd;<%HsJI3^{OeR;r0*hM6Y34TE0Ir#;;Mu#YSRmwZ<8% z@}RcZu@(c)!5q87-=4p{glHIEM16c}S{s|6S4Ien6fJ&rM9*|MgKzTfpr5-{K$w{I zi3Uz?&T3J(7{mDPAUXa@PnkzIYaZM%%23aa9R)`(UtQJ0>6%{-2u|}PIr8C~jIUT+ z1N=n@?OEKSi_Gi~5B3`ZTmYuvc~V%mV-lzxqB>zC0`i-9714?k>!rzvhhQDk>uKu0_c9?gL2rY< zEa&R5#%%Q4m

k@js^ITfv5B`Z{WC@`ETKtrpTA`KlD^(^*AHN{8PJ*ipx+B$>Co z6n}f+2%yYhfh3)C&y*+iMuiyOf!5zkcSk?I5+lJy%}V{K7?HS8Rmm8(4ng6QkRaVi z4;UNVSV0F5#OMTLUeMTT2SSdcr-GG5#)!~vQ1~|acbB@Sj|0SF_E0%dh+odCM~rG| zDZMg&bHb~`u`BG`tLy})ShNy8ZtT0}vs=?N@G#sb6Rv92uUv)kUKUbT*6D(9%dH*) z6{x`IPG7;L^8?NlA}u^;`hZPjmbHcy##~qo@hSN-c9$lC z$S|CLZf<|ijFLAf0FATfqs4l^Kdp{`61N$k-SQ>PcU%jqf zKsH|+&w1(^Z=$pX+YS_F#Gv|Mvf?xKC zka`Z2h}py|0V|pHo%thkstG*jUt*fwN z$b@eOA~BVeFwU`3#Hxn_TjF__Xx_h_Ui`TZsdXm)<#S+_TtE>o(CD?L%Qm<;{BZTo zmSM1(&EK#$)^9JZmx#JG;Uz8qm)_D86QRqg)ewIV<4Q#?RJ2fSt%DQERv->#&{mBE z0Urikq0tA0(f^)epVwwoKXry@&tY+#QVE$NT^&Lca^V*q9qaAmptqzKRo>!M`F~L|ltLAYS8=qUeVN@%hzcDx}< zE`u%an&nYi$jB-3Q`Qa$hBJ7U&i2T%<>nGJ9hOfK(yOC;iQC!E*wXg1%k4UsrvrR& zz}8oogCiP`v3%X27}l%igG+nz^i8+ru};%H?fPr-<;VB4GdB;pw=Q@x9+?lz-0|CG zro-o7=~2qqy=yQvF=J!4PrRL;1Y&>f%sf^NvBb};V&c&iTK{{c$> zOIrBB(Y62NLxx@ghuIWmI-@kgpI8JC);NY>4&DY5}USVmt5nRgJD%^tAMDDyK74nXm)% zD=gb{oU-*wiC_l0usiQ|>B=w1^BqSIbXB}E6pl_TaBoa&z*fwd69zaFa)ptecB4*0 ziam1oUYgF-Hh%C>kGB_&o$D>tHylse7DMsAOU1I^&}CZd4KpR6pxn$-#d_p}{JUr{ zHsy1$hk?O?SvfVZYN{{U6I+-->-8I34K7|K($s?dxi zw3W;jVIcK&pZHg`spH{n(Ad#DMQBo5iBO3E&iO!F1bY&7f?QRWGg4Nawh#$u;liU4 zoo+o6HTMx*P8!0qJo1T0&*>mF+&@L3PMx@%a|-G>;)PJx^?%+_4Wi(|Y z%PTkbfCnGaV=Acs+on&Y6zKCP zTNO>IV~PY~xl!6hWfQizo~|dZ$RMj8@-0x7B6L!1_8Yu8W*(z0@Ao z!$u;5QM|Y{y{H~nIL6YTW-cR4yN(#&$g;>)pFT6uiq=AlYb>fTt;ns-B3?%fL@z@S zB%Fb7%(`HQ`E3t*tQFs!DIOenIb3u0FuY~f6EULE^6(%RCSRDj<3&|CMzOykIzQq} z=(16n7byAE@Mu)Wi9q1`7flJ)HO4hd`$vUXf;M zZL_lopV`vi?J3Gcso|E&T(h|Y4bUJ~<-j42QRgd|H6o3LR9%xFdyE%AzHwb$UEFgK zLw1;YkN%pHgg2f!qieP>?rkS6517V^k5U|f=gW6st<&Y4+Q-gYzwor77f}kHGO!1( zt&KRIe5_RLJLz%N1afF&l#R(JB5F4?)Znn))XxfP^nS8wZW ztTC`JXj&LU9AQyC7rzqdS-Fj>Z6G7JI5 zsl76s45Gr59JmDWeh>9so(eOnZVGe-M1Own&LjvNaLep^zp!A?5wd6Fz0ijpXvEh) zQ&=%dCf@l;G|YIC=pJf~uN&co#lGk|eHg@i(keKml(R^wTx68%uCAACNir)fEr?Y@ zs2XjX5}2U1yU4rTToAh>tvs#*W$`F`Q|$g6U_#t9`Ct-%RDnFjjF~mAB)>+RB>L?VMmn3AS88&5}8Lbnu7d)(Qs;>DMP8xE* z+m@_bbyJ#t90-kIN0?-i zIMO+oDw73YIrl^KIBl`WM{Hq*KG4Le^Blb|ja^uEzV&isZD>m0$Xpp=Ja`V6e9%I? zJqs#*2%2`^JSXGCoHd(FJ4Xp z=gn_`qMEKn;;G6Ju8i^IbXjCXhtjHoVk4-0#0Ku3@-OuOu7U=vQLBH+0WHQ(SNI9s z7qRg0g!%-v5{TfiM~@#)K(N6j9c9@SaTxk$$57ksymO@s9 zjE($N*4PBzn5FYPQz8Vs)pW);PcJ^W#}l)q-M(49bY6Ky)sd(T_ok$xlYg`0RIKp0 z%@!O*tK+pmPnsaP%%;V5UK%2j?+3NE_|Fe_P$%3Xv9B659wpR;C!#4jg}Pqe>E{Bh zZwI}%N-78d0=ejXuCz=qJfb@W>l&|RF>fCGmeqq2ntUV^kfJ5;jWHWUafF5zsG~uN zwu_0GLdNXGNN1EAWnVcrK9q2YNh2?I*65uLGkAd=FY`&8lU7LZ3eT#B%tM-{QS4wq zD9Ajn#lZMbYXO$6y+^#dqH#3)r{&Ltf$!ESt>23jh8;Ra7AlD4; za^6;K+Q+m@qaX`9XQwX4`s-}UBHO69e#f+!m5qDt51_qAfjkC^ao3Vs)?Ua|*SV6u+X$6KkbanY_}c5pRZ6FH!L*tStj>H5?<3PyVRT`+xFc>xk*@|U_! zzwyW!%8O+!zfN@pWk1uRYI&WYg7LfYRJxJ-NZh9Tn1>)XC4|k6EK4_CR5`VO)0LMP zGQ*T{!ng(WDt;0Ak!q4P?;61kfTvr62}bRP4)hDoL`(k0R~Rszg!fPT0^6P9%bAbb zMy}}UnYWdiCYLzfGNnt;?7ROO{$-NH-c%e3ccw1R2;}mL^Rb_Xa0P_&yiV6=257Yk3&8fO^zi|&+wPb;32e!#c9g^f^ zk5QJ=t3O{OWoh38oI=Jd|Gb+0rR<#3(2D;hCG z()Y5@J*~(S>Pu!z+s~#rm*p7|V=uZx%UE94vleRx|~x`HyDybTXdW9$=@)|9~qk&bHPRI;%i@nTdU zd4NSZpa=&~PkW!hO-r(hG{{D6_y_j%?J1Wgq+m&L=UNpJ0;JD%W)%64kgmSmYTFYk z>^G=wZykbj_3b;n>x$;jP2O(D8BLE<`~rhN(S+42%WYr( z&4>Q4o@;GYWxp2+0HBNK|IOPfSeV&L840->7}+|S*;xOF1zqF&r$HL^+wGOAVQPap zRb!pN%%dH$26%;H1nANQL~rWyzEI{G$;X!_8NU>&|LezVw)7 zE*w=qb?0fm#dzOk*~m<@HH#M?z--RYiA+N_Kz&1jwy>dDfBoDd%u04w(2OSOBwvQD z`J;HEKWABezcU1bEeWr+mfZQn6*tQ{CMD49=$MsBHby%}vh7XjGJ>)ijIKg}*zuGWieft&}XqeyRNCMB6Ou@KrtF1DBJ*d)sl3k345291^)X`mIfsdZq&UiOa;(4e|jxuniq=7cj2R*Y+L;x%uNWmM_v`GE#u z*1p(Qp{`ti4<=o@zh%@&6P;^!ZPl*j#GSyz7KMFl)XNHQ#eNuXWP-DD)7k<6T4`Rb zvc&$<7M#xx2}Cc*jPAztKr}?eKCRv!%mRAL3Vh25i$DMnT2^_KF0FQtZ!T7l>vCJ` zSZS$$384vc+xKa{GiQOQ^=?>IziQ~8k0o$`U9$^hFQ7gQT0lA@SEkffD>+)>7n@hu z@K{_kU345{TLGSvrhgqTI>5H0Ng0c6N^@X>gc+gIDji~?ij5K$LVE`Do`g<6XZLl}!CPpcy%UlPH{Ig%#58lQAJVaNHh`a95{TwIayx zDlAZJmh4)6wVND>AMn+_*NL%rVx<{?m{%r4YCct{R~zQTGMz_f4;1``!B-&2D*sFD z2!m}Y1}{%=?xu8%JnB;#P%cYM6LGuQ;Co(*W>{Ln)1KCXc{pz1ZM{qmivehl6%&wS zVXw4Fxz$$JS{+}6Jjlzg_{R#;X4>AxfsV5RHm}E5(<~t5HfA)F311J2l`gVVjnC;B zYX|y}eL>py5c7+OQ_V0(y$}6_0L>n8j>vgs^I+Q;nlj$_ zoI2YHxUUv(!(0={w$lbRm0HhE4HwhJKJ8@<$AaN9GSr6e?l55{j#`2izZ?owRlH<@ z)vsE~1;V{GE=vDHR>IdFBbc1QHg^M_9p9)@_PpgTXqL1bw#2Iz4Zc4giHSW_jZqt8 zc&5jIH0$lIg5quE;)w@QX0oi?XuM4Fr~rXjriF6=7s1RCfn41PgF!s|fjpw!_#O6) z?a}amarc%@b*|giE|%aSxH|-QcXxMp3GNQT-5r8E0fM``hu{p{-Q6K)kU7`dbIrZZ zmiPT~>Qqsqia*evyR~-p-q%F}CpESOoRP$`7%oGweo)INhI0wwC9<$N4HKs}K&=hd z+T=2_%F7POSr~KX^M%JzRX5OI9>6=B65f$*Q_ZK(W-vU(Nsq^(b*s;rZfUuNt7;U4 zCeFXlL4eRI`%Xe^L~}DE%&Af`h-7J+oG$%!Y?ztA&=gW-tZ(aBIy5KVgohan0vl|b z{ruNU6(|kHTIna2d<}<&*iXaXJLqNSIWup-*Mua^i?}ql55OYa(QUb)o?|hJJH_#B z&&&EiU6o&|U9vrc$29BuL`!)CH3}4CF=>PYG`2&C`vxIIAQ1X&&$IQ-FZVufe0<1( z@7e&aIOHTn>=ei#Vl8rv?QJ6{L{C|NrpCyLb(kSjL{|R~ZxR`jD6v5ZOGY`z3e$IV;+>kdZ=Yn! z$ShY7cfSORj)#_Ot85RmLhuktn;CJ+azl&Cas!sD$DYNqWVcqxxMcTHcA5pD)%8n*q%4vBzE@aJxDeE7RUyGj zDmWt&bzZ(m(rPyjYtL>wxo} zG)7`y&I~@;E1T-bbCv>+G;NfP^xzuOM$!oOxZ9R47*$dYtESJRPOG(q9MU zVBWId@;2ur@h7h>Y<~Yv|NOZQVTQQp$ZfzOSH}1@yhema#CI`}0eJPDovK6a_%7fX zMf?oCgQELo<3@<@!zz3U2jp{5){8(kSU^*8EmNLc2uDR(l$5isvcpH3vM7sj7YC$llAvyr`+ ze%PcNK?ErV2fgfzc!JEqrTCwJc2yp(N~&-omUp57g# zB@KF}s9S*tVAt&Qa&p`YcxJqh&Em#0*^COhfX8{Xdgwy-z6*2Hq_kl}^^}{fRefl; zcbp8i798fyt#7{{9TTaqIC5D!(2>Bt+q|RLbE=tkd2TvzZ6(&*@L5g#)kg8lUFr3z z=y^}(A)R$+urh3=#*xeW>v2eyS8ZkWrRkb4+y(Xeu`B#I`|PatIV5F1;Rg(kH4!`J zEh5WZI!^TReoiSL24p-#lqBOTk1mo!a#YUo*dI&R+18xONVw!dbB-nHv_ zdJ>kmgA(&jcMihsFQ z`}g`qceySM5!Wv;_gxsG!&Ke$FwPWcxJlUI2dIA7uhJgw!Gb$rxpk6L!L9s-cd72oj@Lr1tJej=H3UQ*!y zYR~JFe^fRrsWn^AoPO9*JbrKDl{aWU@(t}$-aHv=TxB-5jPR?XN`FZe#p^;*5?>%w z+C-!sR*xGz{&0MtImpfh5s*f;sH__aIV&5C{X|cMBkJ^_o>JMz&GGV3rX8$dN2pw} zJb;I*UiebQ@lXmaqBEV3+e#p4l&3c=9l;GP3A;44^=o)|NKnf;FIFb1r0?dr*; z*6AmCfD_nBD*gK{Gm!(4wz)iIC?Txd{6LSyKxUz?ASmU!7S(r-^IWtn*FBn` zV+@cDxqDCv%(4!0h7)+QXo56^b-ktk0ylcr? zVL*|YZp3epWq)9fD5}Ny#XiPNL5_$qB0e7v8@Z@!yAM7Xi}GG%LL*khF&ZpE1SwP) zc=E2tX-AB^XlH9`jkJp@jh{mnoCu;$LzD~)W>W67zzc-|)p`<+s&9S4A2^_C;2T~t zs?yIwhB=_u3qeQQ?+d#Xe92;1o-v}ro5E`}T?KGrmUrf@1j=GdaSXnhRE30L0Y#FYYa*6@+6 zP`OpNDPR7sz#JBEqH?G)uDV%&J3R}*2GYwll=QB_#3Q}%CSjx`MS zeO+$4B2i@}`Y};j8DKj{d;#hVd^M)128|#(9<~T&v18$IX~KbLbRb6+#SKvVT#>6x zm2_5he&X$8rl~s4(W~{~#mv0q5Z#l1)!lWyiXFZjm33cZ*9e6<_)UlOC@4y;IN<%` zu9-3U2aN{txgvXN)+szPKIy#33u>K}>sz!{+|VTKk4LQ^K|hkDzN~&VA_rAv8AEZ? z`e9;L80t)5r_i@_uD7;&5N|pfTA|#~)JC$PiTnb~bD)pEP(Rbn8j_4vUZl0pe2vyZ zNm4jSm%xyoZRl9@irv5gO)ISD1CnP@aVhTGkS!B1k*}Pxv}cMiTy0az5gSD&X>*h1 z*%k+X1lr-WT|bTK)~67V!@T2^i~X9r!y1kezof>^ym}LV<6{@j z^JUi>DL^{BCxO$YZ3)Gg4$F1==TjOnOKeEd_O+_0GIqKhsF17|R(w=8oF_G(qrvyP zoto=XCCLge2dbYZO|In8BUfjQ#92lBOHlT#$`&rp^|5xk*%;EfI;;SEGih5rDe$Yk zcM~Sua8mwDNsc{67-pVAOAXrANd_2O1zvS*f=%$oIOIwRPVsT0)(GY-W9&ama80ly z#RmN=z6|i`q$C>So3s*RB4}HrJS4dsZHq?PviHi&DPb%YYBU&~kZHUdqm*!&Gb0{u z?9b8arCVsP9I`RWU^&}qZ6;IHSyOjZRHwHB^h~wCmy9x~tqY;jW#~^ndOFny#I$SM zXEJ?PGu{c2LQRwDyV-Gj#tXSH%3UU%g zq}HyX)~uJLWz+fif+8a^d3c0wI(3VXd8ZmX9XPwJ$nIG#D6Q{A9F_r!A8bJb$Wsxq0=`OPk`V&< zeeVKsz+)J<*_dZOX1G03@$d3UKL2IO#GBIpREWAu|KBS8U)SmXC#9eIi_$Lxl^*H< zq`xNmf1&i2e<(d)Wux=TW%+YA)tl18DxzJb7764XHRSs;Zh5_`0@TWq8cHqyq4bxM za^xn$5pD&{Qc-)Qhq1HtsYriOdZqYy>U9$T3oPFEqXc<`iGvZq$@|jwIZFJFN<45G z0~9-qIF6Z8`In6o-~itdY84H>MUn+>!G+&RI)QJ=_P9tJb0Vt@heY#X<({w~eKsZx zS$0#O2iOMn5XQ#9*EIzn6t|bGwZ`;9CQ;xJe_etv1I8egAZ>g-nvx8;C2pE9$>AUc z$GD*^BZPJ+zet&-3VlfXmZA{dchm_SM}2I`z@L;8F1TwhUP6fHvm@B`sw#o{oqNw< zSu2o2240yTS&0Lw2pCmB5HOW;juvo*CYirH85|`-W}99(C9mTfP8H+`>yr~3NYT<; zc(&&v;0P&Vpa^_6KpW?Pkw!BoM}jY7kJ=xJaTgpJEbNr>Rpa(^5bWiLGOLZ0W=0{( zUY2+uH>F%8!c-0Iu6@VB`5xH1E2Wf$TjCjG_`oB#HKBmhMq-ZuLhBuf)E=}SBNfJV z`iwbGUB2l>*~bI)N+uo3?oyf*!%%s6Btcn4QsyeELM zeQeq*-3o>QK6#7asq61bpY<1|F9s@o*!16(p8ZV28z5hrG~%j$@6yS~OjEX(v03iL zi4~@hRQkvvZsJ^^(jzhbMd{y5I6!^R`si&X z%oP7ag5}jSO#qtDf zmW~ZLHVrugvlP>X==yA9ROT|01&#bDk~Opd8~9G+yAGn(DEqm#l(XF|apx~aW4TrO z^A$mbp74oSy{6^}YHfz$G=RI6?h1U*=FLUAgb^KIfLeSk7qDsD_%gz zesQbj`@<*k{xA5{o6rwkG0JoSHwhsC6K$IR{z-3c^I6Hr%;e9#LMK{(-LUc=Ac8b6 zamy-d<@b@*6@xsNB&D@Q5`Id*E{^5+hyG^kh-+t7oEsL`eDsMM0_uQ=^xgFp8%0@j&sF6?t)OfK1APU!3$K+N4Eld4 z_NgY2Dr98c_9F7+lUsY^O3wMI1Z!5-t9_g2DATTxJ?V3dgkoXoI&lH3L}m|;U!i`n zI8A|PsaiRF#syBAMH6m|2=<36n)^B^(K?d{f(~{7oPag+9=?5?zRE(p>|9FsB{I$_Kp5+od%`L{N>Y4)gj=1>#C2+yEjXdsPlQ2l{H z!thn186RkHg!x=U`uD2oPwg;kH!noLou7il^a|m&hR8X^)z~{^0mnswbVMp&z>sx0=8<5rB`7XFYpwNo2neQ3SrcK84K@U za&{pntOX}d4BFbu0M84v)B>gosqt5!8~CKy#B%-Mm8!>ScyaFlOcxY*=~7z+cWU_K z;8`(p&IJ5O#o2*zN|5y)O937LTQ{?rc+fMgsP%bJg6 ztt`gg?$^n%#MrNO3{HeEH?v*J3PzkiUwbshxtG&qj3+8?o}woS_ndol(nu&HSjivk zF&qgw(km=IC00=pr7Vf?zK28k3JR95a2~RYh7!s&gPvU)S!?nXR2QyOhVJd^{j_$G zeQ=j9E=tYFMD#YG*cOyYgCZ)+NQ1H)Dp9O-aZC%>5mT8JFTWT+;EzN={EFq8U@hGv z2Qz6)pg>35Oy;+njmbaHQ0x5o9Yp-oK6RoHJcqppv~x#ZcyK8;`P9tPClN1?=$7p| zHR+PU_3u!LQjXr1a=`wX)dtRP`O6c1o{_AO3R0>B^){;^%Pz?sO@{83bUevY=&WME znN}X6%)lpF(j_RTNTbS>!MQF=OXC@?D7X+u?XA)_^&pP()-x7id}XTDu)N_8mO|4; z{;QjJcky{oOz$4ceTah7-L!{DjvrQAt?2kBFJ2LU03lWPGUy7&`i4W>6#f3Wbpu(5 z6)5_^Y(oX}Z7Qqw#cO+s!_Uc;xm0Q>U*$Sb%Vg0j_HL7~5R&>?s&WpS4OREpKU`)d zSzJ9@jZFGVXnJ)_vZjJ8f+?p`U^_Ulip6-;CzEJ!i1kYk?0J?-KKc7JlvBmYBrT%a zG;JuCz0)&b5uD5ORHgim&c%^GdpL5$%nDF-cUGAY(dh5*Sykd1e7Y~R_f%L{ec$Hs zB`O{GIyu2CyAdq((lKy8pY5@Lw$olt1|cH|2*gv$>$BJBY5K&TMd~9MGL@=kJfKPW zB2uW>@dGxNxJ{?`x(Q(7G3HSJuHxOGqb(g(TR4oSPPPnsDQjs2jGK^(eCKwX#>^NZ z`QWsPvQ9(`w-!}a4fFY zQiCt(f8wzUT%@Qy3gALt;A!!XkYLeBe+th7saUh=@HM9vlNS|4QbbKGb(1PATC42{ z?pIyO3&;GK=abzi>9D7Y(^b038B(UKPMePU*S03$;P3d@ zRCCka3DRSzq{^+rdIE%_#}IquJPJ9q80Q$FDp^9PXxT%PqvvMAfi+Jj!I$`-J{J1N zHOk_=(4<>;0Ye_R*vQW5W$0Yr3uiN*k%jg|+}1eb)nrj;iQ!1?T<$li=)&pu)rR&E z`BFale8H?P@!m0Fpr%E#2s)DOk>Q-eDhy_li0>Tq~pP1nfaM5DLqJN-kppcO8)IY{=J?MP*K2l$iZCcV$;rRIz z$JMiy@{=gbR?P$L>lG1KwTXrw`z-vLu*i`N%B}F0e}M+D|usCEJ4k*s^!wR)KR6YzilhX%t%e$mEVJY)TXzb6VH<_(-J>&kw9_xlKD^GqCz=WpN}4 z*u?V=EV8a*uu&jMPM%=_qAF;Ld+^uAif>OLO*gB?uRzaxjq%?;g(QRwtP~Ag|NCf@ z5LyTpiFmufyf}fQ?{Cp&bwGN{TeMjvySUxl z=Insi_dg8p)U2;`N$IBiJcEnv^@rgd8!ltJfnj$6sh6z(Fy*!eE&Z`e`Eid(6DvIFQ^qH4_&LW?{?r(_plLa6 zL!KZzQAW{bd%U_?{CBH4*w-1R2N??Q4}=jh6~ZffEOfyXpd$(nUUXR92ZD5S`{8|-vUE~H+^Y;aE7#wDwBg# zOo#}!NS%)iAGA+qtH>Lk8s1J zM>G5|Ee{MfaWluhGv_ag!QJ2z0`0EO--AtD{LCTrSYWV;k?IYiiw$P$dvn`h@|fQE z0JflPAec=2&tS9RE!d>1_(!lg1o)T@&I=4SKmHkP`YjxCOk8>`b^i`F>jR?y2sRHh zb#3(*T>w12Vh?WY^fVlz8yoJOwvRx&TOp+PJl~`o7-{+2?sk{0h=TJtvNNNkP-~IY zn&CvK)C~?JB#;|%OR2H7w+FdG8t%OBd!&6M?My2@cd;ZxNoAPct)dxWYEl^DLusR2 zus#C-E-eKMjCoW^G_-UQ4RgYKf^v)V!Y(xR)!n&;qGboDobc^I6)+M97o)~~yT$Wg zk1Kmw$u@%a_YwG+hg9&OCvI!aKYAn{Iy@XR$Kvc4B?>J#00&$kV_2zD|YHK-;yd3!XWH$+56rgii!nt4NTF5&Z3!X;j ze5jmB+^uMN7=yn{&aaOG?>)7h?^VG`aR>xob5CDGMbO>@=>HBj)7CqbN58!~m6h+; zxPOBcy<^3Qmx)uR?EkQ2(ePzCKG=O*MtUcjcxf1camT~1v!2e5+X?NiD}LQ^Cu0xe z{o<;8Jq@3h2}Tz?1^!7CJS_+&=*SF7rt!AJ5|5?~Q?w(e*uwj*$!dM`?2EFa_^@Lm z3)g}TKcy3-jwzd<o=}E^HLwgDE1C^1fHutzL-)N zM*j*U<*n``OTO5^~bv^OJByd{j6u3S`_`kNh|ElqC{|Os787Ki~i43fz%^jUgY)l;ffV|%J zmHjzXlr`YS8Q)c4j!euch!l+W@lWYrr~ln*g}zPZu1fUyR!3#F*cZ>utJ5`lj(04t z_KwW%HCR5Jd46Dik;V2PyKxx>6PdknMU?_rugT)K%}AP@BO_J&LfQ)p>bSPRkR$&r z21-ax8d-76*#WXQUdK!?yQwnvMVum)a(0VkxCAOy*{c(c*y+dl8}x zR53Azc9$3q(PZ`(lg2V1y`r7kB!N!L2 zQ9Ifw=hPaGIM-)T)q?^VTaR8(X^`~jD};(+c^8YA2$!krT0cu zWX(;aA|Oh|WHy%eE81g*6Pdo=L1+yH_FT}iWQ4DIENM8vo=Z}1KOXs-rgHYmFTad2 zhzP?f6+$T*e4y5h90>$XfH@r9yGuxuoBUY?gxjA1rPoco55zitqB=NWpUhQz86h>i z#mxV!(Ydkc9YPoIdk|Zcx0xCbv6W}A{&{aR5Oyc{GL}I;diyvVHk$#f4Y(Gx(UvK$>tn=CS10 za4(cvlO?$jrJ|N!<3hbtIga5Ols3u5)JxeYZ`QOi-bB!d>E0em^Mr7_kQA1>-W&@{ z6?I;bMfpQFz?cCiRn>$s)~p^*(Wa&~0BH)KC05r}+kGw$h^)wK6`mio zN5EZ0%>3j;&K`_qc<$n7LMMWUm9b2rf)w1^Wf9hm5M?IVTN2*-gVr~V9k{-!<@<08 zb=qa0tdx`LC6a*T92J4vDVIh&Rek9+BI7}EV&Wk!?8~mMSN}xsvM+Eg3-uYLF1lhM z&$xSfmI+(SPrBEsXq?^lPfZjvQ)PU*CG3y#D4@;*`#Kf~60&h^lnYtfl`P!LeUIk+ z(vjzBU!1548VtJN!Of*nG)uo{m40290KG1Tk6A8G6DA@ayk=Zwk`zREN zUa%AHjcO_Z@A*KfKGF|1`4H@{etw>HmN0Kn=&=5smLs| zh(pJdOJdYaQ=q1`G)NB*$9{^t4?$xGAmQX3J9FBfuLN7D$&+o80GDJ-WSgWlyd=3( zbFN;Z&5IdW7k2KyKNH@|9tSqo79QyIBZ>4#iFIzf(NM-z*&j4}9bH2Evt9(u@vh}n zO~K=s$>H}FvvvXrNcW4)DGryD_!L`065uM(*y8h=dy_)1`W)K=yN2ts_9UxSMgaWv z1L9}t4ktYKEU1GO0vob*wP}6NQ|qvYPV67AR(2_FF67yL#J3+${Y1LR@~r(@K?meb z!{*QNJWIXoC7Q$PcjA7T27DZ@1SDH>X>fcU1dX?FH%hRcowE1euh1Z&Qfha>KZ9XA zWhh{1bF0)j<1djonE7&}c@Y=Feq*1SKaNAAsixcEbauCZuG=LoXN=DhYO0Qt;Kb3x z9yV^TC$b+JAxa$I1vLqpa9*d?7+vpIcEfC$mEqu?gckv)wUShTH)4-Lq z>0=?!!}2W)OIZ%SwD|ojz((Gr@^i(3yD^=8*3C|O)9y%m6C!Sc#?XQ-%-0KbnY+xj zZeIpyOrAxNbEg53ppNv9WZ+5fd=x2Mn$pE_LYi)lnGts-F9>|RA8rpyqV8q}o;vF; zl8vt=$>?mit+(pSGP$X;bcYtf>260Vb@2;-?M*-jBMS=A=PNyHGHwEgjj}KXyYk^4 z5OK|c!$u`&1k*lE_t^hBY($)=%~}GqMFT+SL-2p|$y9Q(wR>|&z|8n>RP?_u2mg&% zqW>ob;=kg-nfdsB`!@!%(%L?lcd>l?eZ9BKPj=$0d;Rq0jfl4Okwh$d?3TKkuqN9%U5 zXk7l^9LTCG*l!M`1IU3G7D5+8s|DO-P=4Gc29Dvz1IKVb{uCboj^X+@JhpdXI|XD- zQ)e=a5M=tIA`j@Jl#}zs05lUV1T~H{Np6QnijAe2tcRwX_eFnT$MPVGx_(Qjd^Di&PfOd?OI^xbXNoBVR2LT3If3M-FZAv&hPfkh#%5^Fy2Tj`+I zgajPV9dum;j^{q!_Rc|*rPP{nMqG>{e*3#~5)TrHd;d@8G?lNC7&)!-@gg-jM#?7{ zM2p$aAtPA$ttXUaM#)QA{Ra^Ohy?b8JimLwgs)}ctYny`!o7)fw89~8#)*AWO?JEO z%{U=6Pp8@emRxSict2dSXj;^9KY`cD(p2s}1lOdA5NQCnlo?0%9x-qr!ji{e1AD^0 zqFl}}dK1oc4ImLBhw+PRb9v%Q7igSZ{^$wufA@sZF|ylQWAn@y?~Cw#0l{6^>qK4v z#us2uNM)UD`rA15eax3J0MBN1Qj*-JI(^3#vwO(GK_1WE_vCw*U!slsQEZq)3Ff5B z>ITQmz2ih*o(iVzY*AqFttVt_Le2QoIQ47&(>Q4WjT1hc$f>%Xw$(D9-~fw-+OWrl zzGdSi|2WPE_3NXW`Xwz+9B7=Pgya_0HQtO9O5T4qPGss8$DJY8vOSIp zPiKB+v1QyyIVYc$2(HOzcWxg%RE8&Q=UmAnloFRq<@7G((CR(i0Lj+buDm*V0YRs@ zN|Klvs8WaZ9KQ~(FC(Xf9Dw`FjL2N1_b}n#<;!n{UI^(gXeAB4CzBIP>boGUY7xAz zMjSKaR=e=xfRKkY>5LRhnN?5OQFJ+OV@L0&MHV)0y!AV4PjPNtwPOF0o1j-%#O$iF zX`9v4h*NHjgW=-S-BYpIlt_$o|FgACZP_j}JD?mNI~5`A4gQ zLbzl*`RxjQ}3%tmh`zf(MZmiyq$HBzJ3utiw<0IEY;~y zU(}IeyX_7(U*47s%GGh$ZMyZgP>rpP-*$qB{iR_iT&&a^@%>z_pqXJL4Pkw(*>)a^@Q0Gb(CaLnc|&_bN{@4+!n$gxQrR#;}c7t}^n(-I7hc`VgFG!FWV8+L}G_ zvU+AVY8`md9DQi>Quy++OY-X_@85YR4a7I^)E0$CaD}h<3ihubf@5sUq}2aaKK9=O zA%ALq)Bj06R{uvnHhz>`vE-N8=~npf@-gSXmYH|Pr-zp3Ot_AaSauFX-c z&x6iT&T@)xeIcWN^GMkdX6EFoX?AILEb8MWUxyv402yy-&I0#VX!Tv?%r<8L(0CA8lF6%#WkiZ1F-zp!G`Um(YKOc__ zN7Km#qSX+Ta zMm)oZ%2pqu5h4Ucpv>d^mU*r}WIhJtkV_B<{U7Df}ymrX)H_5UIt zBm4hkKGtkCd1Kmp0Gs)&W+CaQw(`6i>^VBQIN)b+$9B9y87;-p<9F6JdKL~@ab;O` zV+4MsCu65qYNG7ZGOOyez&-OW-xC{dxJaBb$uPv4Wr^2DqL=&fQ<1}9+{rfNR|lS^ zwMBGxJkAJDeTnmCho6pc;MTU^7L&8fA;SNE6Oa8tgZ$scV{bIb|3N&qN=m;+09-6! zNd^KU^*?&+|0(hE25-lvoJ<^kU#1l@GqCymMt}cHN@fX6$xvQ^tB9i*!!Ddi{4$GV zBKM&rFf?_E6WKmOOkjVIiY)PLyak}D&?|EC5cR6vYxtg8@ z4qv(AzdEW}X6~1F_;_RlOv%P&ZMkQGDH+l~Q!>uqDH+`#DVY(C>_E%jAuuK5oqbEm zu9_>AVUt2i7jq-UjxsDArpd>coG_huL`+2t2w2JS9$1=C76X1u zO%kW!O=l#1WZ-pY2ic2bROrt$X|ZO~FREQlb_g%S9zqgab0hks~RZv8H zx^AEd<`-4xwxH)wqVjNCgoyBU5`tn_ta)dx`I`b=%5@^h)C2)!OdfVn!Jw3;tS6Mw z6cY42Si3$hw6aa~HspE)s3Tzz7rE!43Gt#JQn}MQS%+ngZQ^B(@+HnEZ1P<7E#(!K zW{F@Gi11lXde|Ami2(UYny*d28Ly7 z$IU7AlD#5iQxay|kk>rZH#u66l}o+hUMfs0&o-RHmz+^UUi|Tm+*x@*6L6;Lq|_ij zdWOgaTXd+&HN?0$I1b8(Fi@jR0GG#9WZceEJLixy=WGobpsBd-JbjB5tVo-Lx7B8+ zS)OISH1?CiJ5l$}vxu~^+WwbGt96SloXAfTwYCNJufplk_H~kT#E>x_xbSs9fN2@0 zu`cmjTK1zBSGEK9-S4#Q_7-UsKD3Y~bTIul7hb+=J}4iotlR`vS!0Q*xzM+Y+(f=< zau4|I!(BYgodcUR_H$gqAs6~qNbXRaDLol@sM)MUvCO5G7qvaOB0PC&iwu~S$;GxF z%k{F7_A*sdE`ur1oj8d3CRb(_^a_RdSs?Z24J7xUIVrn)QfIHVITiA2{w4(NS+FUS1(Cr)HCtG~=+nQ0GfP|wW z$sRj=b(zWg3Pc$*b`|^T1xR`DCEXaYl$q~Rr-@`PBQuy+q=I=?NQ6x*fcU zEi4n0|0pp)Zk1#eRH1T2OKbkZO!w)NNADPE-8j8`F)Sd)IbfiVe*;GAqeo3@DLK#w zG%IT#_6Bufi1r6$+V>9==Zk&C>L=b1)orOS#SGRjWOIy!3=stP?gDb*oS#!Zv=Ie0 z;#erjqOq1)TAFSP8f!_K1hdwsPglEAHA=Ul7HpTP-}m<*l0^}FC1i9`R8a*KJW^nB zIV)=duDTn76dyPZT)pzEwDOr?V^}z^h6oDaC7%hfwCpj+YJ`Z3lVhWsYLo*<=7e7a zq-Uf}>DQ5;N5T@$e3GFX!`qq-btlCV;p-mFi1xR`S znD@@SYCPoJ3Xrrd?{kfGj+%H4KO)PPTT`BeB7Op0rCFv!??07XRshvwt$$fqXI-#X z;tl)ag1#Z~K$`27d~EqlMUgC5lzJ4XoAorPg(d0D(Ad(Tv=UFfCfY}GX-%pjgNsDu z-J4Y~qj_VbjUvk}DBwaWK#(V9{98=+6jbOuqVxqWeJX6|$14B%T2%J#K})<*YaJwE_FNHHr1u@mv!p`D zgLUc2*=NaKXrS5O!Kl%x35U+Y_UD9|W59pGj@!CSKfj_pL@(PVypXbaDb2fr)T<}dV4?f@-W0Bc)s`{m{>zEF;s@w>(A@igz+r&o&Cr}AHa{i`%S;`4m{ z(*J6IoA@lC_qv%|eH#Ip9X&+7eJmIB!|i*~=(wJKS7=~l*73AG_m=-RTR>QX--y4@ zw_}$&y%hEj_U{%g3BD(78hHEMxczzs9ex3iKf3}QR?OA)5RK;}S|D`+WXGvrTnjQH za=R;g-#(MP#A#sfaOD!FPNv##I>JM^snr>+D+cFEpzs%w6}Tjqt3X%1vgqV;zh#k4oT zv{dVV2M)<8&XC|z!;Hm%{iM)Ei*3m0h zT`a9ATu?^v`Z7?tnc|UA6lr0^tD06gz@*}QV8LIctYS}Y70wrJzDKu_@rju@Bif)Y zIL26Fz#M94k|=yoepc5!34u>pj!;HloE>;N$3o@X>;3M|zXK5f|1Tgyz#kw2V%=;u z#GfF7|6f4_lRsyy-av%mR8y#WH)z!I3YBggCpjtj_9`V`hp`SLaw8`t&{0S5L3lV3 z5H+gGSxps0|MrR}s(V=k;HT7CdLdG=!gojklmpm1MW5Bd1AC{FkaA>M-m$y`>H)gq zub5XgT=j?zlpN+QEq$$OoneX)y1R(`%6AiZguAGtQ{+4;`%Y(tHFS&k;c; zA2b&a^kp607ZxIX98OP^BPz`!Xi=xNIJ z(n(BWGXLdxz%;<+`T=?0V@d0aYfM1fu4Gj5=gyG1=A9evHF?!qaS~FQ&BRE1x0O34 zg^%uDz9xj9=;3E20!tKve(7UhLmUszT4UMZa$hn3mP9juj6TCXqM5&ykNhyj zz={qBK8?_2DYOn>HNV;*?Q_Mdhn0>bJ>(!BATY zYMq>?m$cmO2vlwOzn{I`&e6YZ*{jG6R3B$nTDN9M&P^h^jq4IYwC(lzVo)rVMnl}9 zxUhK`Zfq%YO?_Pug=@T~h^>VU%plWrbEhY?_Df?E@jAstt-OP+hhI6Z9FcUxb%D@* zz(1jTu@c&p@e0pvayDn25mRK+#>X-A=UACTP~Ey6=ONf^+Q~TJcojt<+|O{D%f*ae zu2}A(2Mio=@~73v>_u0R!T!+S?ECH+s*cM?i~N$$HcG?FidN-++lNF(u$sA{Q%e6 zX#}ojuRVhJ!E4XjTaDW;bIt!PO#5Z-|D;Hh|9DlNl{dPZON-IIq5}-mh)PgAErDU0 zJrmZh0UJY%r>@oK*BV?vz>~}uKR|AJ(@hdY2-V*8z#DX*WzDfb**noM@vyD0Tyd7}_`+F0)dC=ao@-YA4Ijrk_A`Zo#z za(+D;wxNyS{PAfXp{DySN^?dbq!#YfkWJn4$qSOJI}bzSo$MjgyuYujV!v$)$V3St zUW4DkRNY&|oJ*A*BHBGh2%>f?-Q^n1*6#}Ji_F5!XV=>{1r)qUkXX5ILrxJv~A`Vj{3OIp~eq zQ4%-YNB;1IGe8n^gztB8QV#(vP70MP{Fzsse-|g-X(6ye)$ys*sb$?3qNo_AZ^a2y ziu$-dJ1Ir}auZbA;W(J>#0O5=`hXp?g5xP3-=4jDv? zS0qVI6{>&*%WO0Y4;wPboiv?6dC~nMu;jh>(byQ_AQj20-;!#GAh@jW*v>OQV8CpZ zh1O8K`J{XtV5$F3vtybW$e6L=H-vLMaKn>LLv@BqB={rwg=XWs&@a~l+jGgJ@0AlGdXTU&sxv`8MEZ*>W&=zH^vMZtTLqkw!+}?sBvLRJw;y{4Lsg^ zeHiX-c($Pk$e5LVM?a>_C}G=Wm2j9D^Dlhu;I zs63FeM^L|%EuLnwZavA`%C}lR`G5wA+{%DoyH)AHUntJt1mROF0ha?2Zm^p)qIVDf!>VsLJFak%aJo7JS*0*hn zMOes%^LqIHYk9*ym7Mz_I&~~CSSvJ~A3jNiOZ`se=r53WwZqlYv zITzj-vxf5LTN}^8$&p1r?_+-xI-!io3X{EOe zjU(T+6;^^woFvK1)_NwL*GBY(`uNkX{b0n{552}MkMpXM%5zR9l!q&+RWah5iaktH|Odo?f{Dt$)to*|7}AS*x@!}8%@;bI9yLD3(J7ISCGmv zuh{U%#pv{|3d#FwNp;{Bu zHHy9iu>Dzc^=!kQfrRCUDThHu{5DSo%kiGqWXN=1T*z*d88}b%T7CYPbC<(Fh`5~% zNofci1cU`RQ$_Lb9`44rMl`18Rwj;gj%I=m&W>i11}+A)7LJ)Jz!MLwaIe(AV76__ zNe1JVo$wosb!$vo8#G)RX`W2oT~TBtw9OQWDLU)MeCP-?qF3&3cWX@qLGXML_~~&! zK+*?3McrDxs3s@%WTPkRs;&ai%|{Z|QwDZ_TuD+R+n^mVT;9Csi@~MEx$Ifc`l?A6=7^r8T#syPyA1Ggh1CLl%aI+w z6Kk-*48FO9E!j@I<=|bYjUh9RkGtsHIj$+FZPwI&KKXEvi~k%Svvjv=mQem)ldB%| z{lm&x*EJ4s$2Xu1_n|mo^qUzonPHyWxxvQ*iUB?9$c}b=2yZ1=C1KU)S#c^u_OJZn zIYBdqcs;X-MPya=(Sm9#7*sv%?l#V#EeeMY^iYrc=k3|lB~BUNKy`Du)XZR)&GrZbl^_b`Lh0IO;8itH zzANCBMXh~O0}B*{$W4D2T91xJeD;7ES=VGw()7g;6V@a(q(_}Rij4p^7WOzdXkvA8 zYCd2BNy#9MIG>=tIJ@fI7Fc5U`+`$#m(E21PD~4w_UAq|63I_Y( zIEOX$_One&nCJ`c(m1Z+FA4#c79?xsB-PujX=-z34|slFL1KORO@~?J>Llg}hz|hS z%{lp6zrr|2FY-RIT~$T43l-e5{#_aG-_5qt2{OS{mxLZqiv^)}zY z!}=7uGFw5YHOWHG*kULN8#kfU6AVtgb=&=ev}?e7DZb7@ z|3ilvNXPOf;$q}qEOvuWzuw8#a;KSIEtn^gp7?m(*tccX)Eau-vPf!VB|BUT|A;RU zbqa+DE2bGFbcd3F(>se6OCDUfVSXag8k2>#c9It`IWE)jm$s}eyi1$QHff1j*zyW? z?&$SkJSCe1#mbys6MoogiC#>m3;JcwRh8%M&`%6CDuQu#zf4IlioGezXCl=7ull z`-$e5iC5wxOv)rQ@9<1rt+@vh=gI!#srM!a##avbXF%4J4me&3Jb?Qz7yEv1O!=!E z2-!NAyeWaFx#yx}!tLFj+7Ks414u{RK`o@u{UrJDgv7~JZqQ>s*{!AT z1~|ss&VFojLe6M8m%FMoO7HB9`cTj%#l!@dpW9^=uHgKVOJHzzDV|oySA@RYCd7^I z)yHy9;9|nMrTS&_*h!jij7*C6!QY$}XBl#MfHV6$HgPnv&mjd`KI=^j5)El%*o7btXYt(Q6kBPhxJQE zlK25P@kJuu*RDBdoHx6J2N;|zTw4aeab z?XqL;2qc;%;iC#gA3Z*Ir0=M!(;i(l1wpo-+-WLkL3!w2KmR|3okNr+(blHZwryLL zwry3~wr$(CzqD=JwpnSb@~=DUyBe#95%Y+1_I~lKM)jFYuc zYI!8u(|7+`+z+U@d`uM3x@VTWNkx?MdSY6vXV|7$NF(=SYh9$@*(Z+{Yq+u~wCz!u z?LocPY2&APp_FS0&aMF{Us0b)U*{T?Myw%13@>dYTQ3uSxds`~++GbM!6qTC6Xf0R)0OBi3e?T}HFBH^r?sNr}&w zzKTK}3b^w8Gt;gqGs<0k?fl3~ZS34;X!l+VE7$XRdLY7twL*J9cIpvuc0$c{>F(XMHuaVqzApa0?N;u5lCf$vYGWGf@zhR_V=0muy zWVA=$^1H%)i@dPK&W?hEgK(>J^(lRh(cX?OtMyF7FF>d2y>S`CS&^>LbpNw-SLd9A zW5#TR2$9X~m=@IkZ;Ro|ftNnKwF3Wd@8j;(3cCEL5Y{E#_KemYpzkVtLsf+(VCt{ zR=OX%=v1R;m|LT3fxXg?pIxc&=jw+mcFWJ7#;Sgbdc~>(`+{`3h*g0YNp>**{aRX5 zeWM+?8}2s$Ur@ckMda5Ok&&H-;jzOGqwoRH#=(46A;LOzE)VkF^$0|{Nm@$jf(Vdh zjzn=tTKA#>@e|$4krvb=t_`%WtBHj+nCxq99i*A+UM6#cG$jX zJ*`l5ad?5{!Y*2h0!DdhwS|ee@_sFe7nF*tHa>-}UN*oYGr4WF4js%f?kqw@|RW$gN&*2tVmf! zjy1+R3mNGJW(k?4vo|J~R^uEuK(8fQSL3*hjh7~4-1iiOKpwtkXFoxcty$Vev>YI0 z+zabry^UDV(rMe$iJOo~3h#~*GxF|iZ%cCCJ1p(WjjukbGLU{!!j88)R$xZZq8GZt z=`g)4Uc#KgjvrArW*f zxkDW4F3nE^fd#@AnNxL{$S4OzUw1J&$Pl6X_P5RRI6tj_D=D|aAe_C$DlaAe zG62-2xR;H^=-0{>G5RkzIp0F|xch?xN7Q&uFx9Q)H-(J|>gr7$SlmWa5vrIyn{O^d zE}f`MwVf)+*qEoZkJ1!8>d?+E#fbEqMOny<IQ~J1; zX6!a)><0rhRzt7k9-=6v8c40 zOgen4YfT}X<|Il?Vtvxs;vjH0zLh%Yv2vtRlk!SRzi*^gDHthf=#Ev0$^&(8N9gkM z643(O&*ORELPqc09@r;1U^igQNO3reemZCdi$7p!MmnMXBx#C1i=wc}oxQ3&yn#@L z0&iOkG!Ck-_|V79Vy5QM$6#4RV}rGrg2FDYMuD@`dnuG=F0*^QcT)3_+ zQFJhWt-j|0<4d&SiTN;--c;V#@y&4aib1JTGk({}891znNteS}^c5>>=qHb)U~v5nUh`+j zo^K4Ty&$+-9JQ2hG3u`~qde{KmnSyad7m=oU8A_G&*|q{=J1(3Ja*z@(om8qoHf4< z7>9)0mlp=ovxR{7q67EILWpwS;#k_XUU*{9*8vTNMVSow3vTp2NNNzn{)NbS#AA$7U z4kg?--awyZkS2~Xs&!%nFT)m$p(^*={%g5|D6PcI13|+jEv7jjBDaFd_8dcWNodz z0p<_NP{w`aX&Kuq>c1td?93);*%&SxevYqr&+o1^D#tQKEoq!b<#U)uki#v0hwk-> zc#MV;G@)?O>Av-CI1VDH#h+A5-%_g;<{C)eH1)YzC29kv;;C33+ZxU=e{!5dr~YT= zlRp*X8_EkfzCs-(w*2Ogs*0IXG>bDKK-Ggn_pyp+)W=|)F!Msj;c=+htHt5LG7F{C zw#I>W={GQ@Jpo^f;GnujK$+FB7>7xWXL;?)d%tQp%Fh z$k&e|Tg{Ytie&6A7t$5l`(sNq;b z%zo)9FF;0;NKLa&8eW<6C)=L}nP&YK~oAv>E|j0;jRT`GyApL{iptDm<=#uu#u zpci$lqACA_@Qm_G`cLhnkr1>H8uii)n(&6u+$Z<#ChDqZM${M;9fVH|jBkL|?J4M) zvNhe{FD|mP{jy2lf>|L@OYll5(IGEVnQjo4NDFPg1BZ(N0YQ(pBxJuRM)uT-DRUkC z1zgf~N2SFguws;u_-sy5^;=K^*44~t(_Bm3H3%3bZudnKms7FODX6>FNpx{>qM(SF z)?%~lc@_28pF0a(;gXm+mv4zHouK)l54JZDW&l1(K)541B$()`_0P*876J;DTlzPt z*D2vZtya|UrM_rV_&8ySvLma?6%iA9SjrqHkV=hxJYal`Txijzs&Ou6ZWikls(sQBuT2Pq1KdI+-b63rS^i5>*a9Ai z41l`6uKHyPMq1hL@O%b*Az(qX>o%kZLxuEBGa{@i7Xvpv>*jZ2oy?o<`D5p1-+~2= z*xnnZH9$+|BsHpt{mdrv3W2;vuUyw{D(f7}8Lv7_xX^Y3luEJw`mHS&NW%&@^;Qb2p}{44-qdTr;k0P&BE2ziJS{3l+r6@y&m%J~xD z*Yc*|uj=s8?bbV9RY}p$%0S`q`d*TwU0^;aLAW!hBV#{MCbepjlg7ddae6UxeZci& zXvDvSS$BuBw@C4<8|dG5r7rP0<kMrU0Qok^vGZ*)Aw?fUmsTODbnm+oqIkgdA z$g!Sk%|5;nzUQ6f2U;~iz`V;EpGXbpc+Sm@ss*5_PSZR?hq3Dn{_du#zL#D>6TIsq%Ol2{b0_@!L;mWuh9+wh6ZXSFhdsY z4|n{!r7z5Zppao#B~f~Nev0iBUFWv-$hVdo0orT!A;ILXkx6BH+M#-?%E%?Q^mmss z)BbD;pH4QrLvG`h`nK0n&HHoR$w&IkN2-3G&#dA%sAJ)>04>i;_@v!;vT~pLB_W6U zmRgRlk7i$>F6`SK2j?06;NY(HG~gRrKP)(m$D#me)Spp;4;Ef3Q#}3wui||CJL;Vq$Wd zi(M-cpbxnEMs!v^Uy^0Rd`ZZP>szC^NQnZ8=R>^Xi|ls?UDI%_JP79**^V!OSga&j zWn)<6@m8+yo>1?T{2rU=L!U2kD09TVXb;BH)>(`}7whKgOyx&U?(1`-`As1zIbD6u z=UsHF_f$;*mBtCdw^ojXr?bFy+krZ|T{^;NgH|54))En5iPmCRwYG}c=m(sqvTbzZOzI{(&<(AwirCX{m1`X_`o}^l$w+M%EtTGO{Y@axOpB12`Ubis+i17- z^pf@<2m2Q4TsYEqe%jYy67AJi(^eft;mk)IPwI-!y06Np;`y{VTrQ}Y#fJduXJ&le8Y-=#lHZ}=!#oLcRBzohF01--y=#=-P64xs?s z-w!U^>t)+FeyeGZ=cZK$%cYoi3z3r^d=D2!X$(&$4Z~Ntn~e;XE&1|b54-_EWP{i+ z2&ZGPDQ^UF5Aw&tpE~80gsDVP^=iKQXm9D8&dSce^-+J3K7tmH#Vgi2Uh(LsR3-JK%Gd|9Mi<0^3tFXs)y<@^%1` z3-?*pQVy^53IEN%is)*8jwtuZI{9LiOz03{h{k+gT*RSuEw-xG?K&RyIzb_0( z9Ucb~C{{;*|H}qm_9_98%%_~Ym#Gr^Y@++K>~guyVzQwCk%X~96itW7LA@2+Z$dB# zWVuzmDNwS0v#u) zvROK5Uux`+$j6O1#@XLKrgvjr_Lw^9=TzW%bGBc2D`3I3wK^!7Kc~-wOaE#ceQWsS zNqAZ9+OpQkaW6nOj^hi}nDehbcl*!cwBg3@nHrqs!}ksW%NJa(OC5UF8tT3Lf^{|5 zaqefp6e-|a8?pYAKpnFC-~!&`;W+Eu5`N{Wnc{(^vbxRM2U`}{oKT9aW38H2wUO_) z{}9^Qc`5f+@M)aSM}da>nMtYhCC{UVgD(u_Bk1jN_k)N}-oiKa4huI_uS#cUy8(^) zm-MW@UgYn!W$ohESTT^!&_{>qXTz7jv-A~DhA&&{eYSe3Up_*5P2n3ZZFDu}zARUJ z3C{A!1(o084RPq7J(J~jp}M?A;ReRyaM*nFH`gWwJD|35!iP2a#ABY8SFO5tYa^t( z-0cD@;2bK@1oC7 z4$T>4cUr<@5GyP;vNeNj|7w`@s=;S9;u;u@D(N;CRxSTIkq_=znSJ?{t{vjDUhsV1 z)opX(jX6ovZ?OZh7H#z!AGW^F$GN$I{vym}7fKOs1jkECk9<;(i*eK6K6ym~@4!j( zF%`gqj=fU1eCo#=7!20SMXsH2-@wo>PovbDJ&uEbL_36wfE|tW%)p!bigd;y`57$` zNhgtOMasj-ZN*--YA<3`+FcqFCEK?V`9uXdB5kl8;Qsx3!wF%h0}b>k0Lu*0>;gV@ zPlqAM8+)Cb@lNMHY)Xn=w8T>y2{=V?hWyp{%KnYhofYM3BoatmZDEYomnz)-Nf6(X ze8;^b?d%f^IJS zL~@f0G@z+IuY`};KU@bGmHq0gb}llRjFx{E>cFJF)Hd9kXH~@mE{^FE@#3Y^Oda1_eO(m;(LIIf&Cl2TtIqrC+RXiSc6Gh+Ty5A9u;y!g>c6SA5}%*T+&N zrOg*4MgfbNeR|3gO4o}a+1bp$&_;pv80}x5O5q+h<42%;JVWE#lMrUuNfZ!HdMNwC zwC#MIS;0?g0=XA*geSrGsARBC z`#3AU7dh`{&u1`UAQYE=zJ|z1CR5%=K(NVlyb(ium_@i^WpPj&6E3Zh(c(JIH{eQZ z-`{`r^!l?v@6}u){f&rQe>#2g@I137%$^-PoNE3DMetQ#fE}xx3U<-d(GzOEbxYFcV!3Gtac&}adN6n#mHhy=N)^A40agS|JAL;ykLVNf))U2N@c9WHjBcofNu_IQy8cex+XaNTo{#xw2v zy~Bvae;zZ6To_bnITdZz8( z*=E|_s#NuRG;QC1ijX+sXF}jz8zj+nxcMKONtX%3lSQ&z_g?KUnh>0sCj<9T!#ITF z15p$qZN!B~8Wgg*yAfNqi&&OyU6A8Erc%Jgga}F`Sw5K&8-aZI(irlo8_4B&@WfLH zwb+mlrHmMpy!p2YQ*MOO(1k-r_&zDlXhxn(SpgSF`h?iL0)>%qA35@uHhSVnke~hH z1cVeFMKN!7l#ml6i46;~5S~7w_kNN5=i2v+>f@;i2RTkE^q$E`EP`4!Nmh)TyoO*&nu2Q42MeO39p4Oe-VY3M z=cJV=5sXjS5>0l5kBne9`Vq)%nnI?q^?{z0 zQSY$x>wrjuDMCOxR<3a`GNRy;D!`OSFMbJ6c7B+78yxfL?`rx1z{N$f~Jb1 zXO>aAlHe-#{5iJGsBy4^@XaUi51bz;CLSX0jLi)fpye(;;yTV{gjUjvkXmYS#| zv1cgoOoDXqaq*Oqz>G6)f^^)FwoNUWLNzHdt;@`C^Gp-!aAkLog`{5s@6D4%X)d_~ z>I`E3AQMWahtKgE2qncA6vs@*+%CZ7B}NwCV|mvLQJVAtFN0mW^+bVJ*MHK5LH6&V ziVnDNqC8un@1{16AhX>o<&Dn=qfMQCk6jswBO#b0F^q=;-mp&x3M7;g;SPiC(#A+G zA&z$vg35<&tLTiM;I1l&?(bo*I<{V*1Y3@|gU&*SiXfn25Z9*9MugDWKT0(7N@ zsbjoj6H=Yz%YH9=qwRq7@84L|D7M;?YdMszsBgcs+x zMOwA|y=S2j+Ez!_@UU34IcCn}u`hBQnRjErkP_mS8u$)xBWGFd)8+ z>>@5;#0}WKe}2yl2$dpTA_AiVD)tiW+i;imc}gbmPZ%!0yM3(1oeDw<0m zuI-0`?mebdE*YdA;qE;Zq4KhgWkXoj4M;v0*~2DvC49gmVlo&x;N&t$0oh9M7guBt zWfZx&xU=!dkMYF97{jDQd{Kf~52+rV>@Bk(`{54w6r&CB0+C7lIS3Mj zM=DCjqd)(4N_7SqLI~i{SQZ$_-RR@g6tCF8nL4ZlB&4jGAh?R`)!0^(8=NyA@l`mX ze22OZ9s+n{s8DB7CLsPYK)MwY5FmfX0#2a!8L;32p^RCG9A1%Y2eCiCjwTYv_dkae z`Y9}jBLdaZ*z>s#9Ao>vknmC?9vo%WuN4ULOi2202W{mccyVpw8s2>|br|6Z$UWnh zk(QR_R92-eiA9{BQjyAEB{>`A3ADZb7#FVe`F{lRhLP+b zOuPhegTjlFiUCiEaBt0pmY(Y6Q@IXLCnm|DR=+6JAVdVb~*1`M!7p{CcJE~isTpG=T zO=?(bb`3xv!gCHE0F`#`ksl+C23Lip*R7G=?)rQCx?2l|Vt~YKaArk8fwJlAwMST0 zPVZ;hYP~x554vio%RaFZZq=kjs0hoR3ujd|BjOpeG8`Bhg&O5g}(Ydek=@p~YcnLUtbckZQ@ADc_#hmcI zRI!8IB;|NL=J=ewVGhUJ4XIrt1^=$`^ZB+th+xWhu@&lck(Gxjx!c*uZZoH}m)vO{ zpKv@#k=##rtrA9R;Qi)vxs}$6eGmE|vEPXYh~v4cFM@rOk=5Qtur_-Nid_V|=KT=d zx8SJ%`={ix)=7BFt(D_jy;4EOY(tl}?ecN0Dm;S#bbiG-iIL(E>~yJhRHru+C>AGb zb(yYct4oP|J&Xw)E5P6&*syE;kmY(Mr!)(0d$VCF)35~Bc3sFa|fg#}uiKIawxQ~HAJc;ZHF(*Y{y{->C zg-RgCJN--`zqR{1oimS(0)Hed^&$kHm%IJkrQ#j~W1JBEB<&OXx{6AZCqWKW{5wmw z@Y<__-v*HhpuqGNSsazUDF?nXKT$m@Er5PEZ!U=#yTMUP`#OzSZGB~`?yYUkxRsa4 zg)y+?y%RKfJ7kgF<4>wL1cGe?6Ejopxd(oWGgULoKko(PBG%VfR1~wkXMgcRRZI>U zydh>}LTlX@fr?VmQjHKUw$R{5H_t_`^n!$b0JJWKHB!^YtWLMwIoSI!Y~YxXA#~_* z(7A*y=Y$-t;vOR%$&#cn{V4CccoGIF@~-wEwAi*PRkK}{ZQZB2nVvOC331C@l@?*f z#`J@=*0N`+qAc09ZVxD3cY7+AkGbG({Mx&#UHlj<7c;ouOoQn6Gt@6kD5`_GeP-u? z1)CPH)0)$KHCjAly$G@eG*l%rmn^ZBXe2|HJrpJ?9Af=lVu*6tBrNsj zqsP2T=alfB%0$_oMxBG40;f?h0_lwP5B`}M@{~99SONT$j8;9KpNaVm-|skN5*P1H zPx3oy469>6l3Ks^k?xAT zG7Rhm@}rNXMRoX3-$_gRY_>8(3JYJ}o|T90+NBG*Uz$ zn_)IEbIwpSIcM0fYEQa?msknHu}NyI<6Y}Ucv!I;UIb>-VrIM(dbtY<^6XNcY!x5rh_9(h~@-qUTfQn)diPBgPAr=<#Bnet>B_`ixxo4Mdyxvblz=>6%|y)D>W zS21r*DaBg57T?6!Bd7j+vRxshwo*1K+`ezyaB|f68XgjxnJQ}Goll;7zXGU;4mXC& zQ5Vy<6NC~fv@e`bUYry1>9jh7f){TTgIE$(+&yh@$_u7TBG3df;WRv%9n>m$=Mwy; z>m+?T5dJ7DH>&NmSW$DF4zD@WGCve%EJKsy%$HfBNi*Kt3^YQh?km(dxInS9@nmbw zVLU(bp|iwOB!D{uCn--}gcsvZn%2Uv^@oY3gpO^}hP4u*jt`h#e!s_A;10GMP8YZK z@dUODVRC{34za!<5dxb!6HWXDOs%3xB|2%NWM=`DuUqv^)$`1E%{< z{keOgXD=rA)mt3N=z;=j@UDj>Vy+F5FH8m-+i@6sBaMm!Hl5M%fw5OU?~YI5&~cTN z(*7#g!#bdpr7o6vr*ebrgYqvSoJ7*2kCv)gEcM)g&nimTdr3ZXzAD%x^p-V`W+dJ> zUvtmCgPtu%zq-&mYNszI!j1sDkvXrq0u@3<0=#~90oL3GYLp1BzVC(Y@QBB3p5jxc z!zZ@0WN1NFgT@n0UK>{!lcj=qYdPf$A z0y##uoi8pM3Kia`3OxTt)kAo}|I@6zXwSE9cs8WY>n*t`JvX1oQH^Pqtal#3Wt*1q z7>C#*?ekvCe3`PoOl#(I*Xx%FDoi`Kd^O_5n)Wz8>a=`3{i;JVF zf?-_Dd{*`X(F=SFU`QB($}e6kK`brnUUmju0U`W-=mYCoZDNf>g^^-yDlrmdC&sdy z=H*+yY)y`k=tgg`nEY(^MKy>=SnO#&^mGSX|+%@e{+S0jk)Ut0VARUTNYm+aSSReB6XoFK=%w z${X-`B-0-ys#w8S3)ULm!{5yKI15gKgLzGFL4cHdGe4*Sh+}R0{4r-bK)?BAZa=-W zlluprIdSb%c24hLl+iRcSbXABO2ya%_5|HDgJZDFo|xW)y5pDD{a~74lY3&7?Ua>% znZA);C;2=)YEUf8H4Ga3w-E<~@>|~@_@_pW`Ket&MsLubKk&_N_5~JKosjG?k?ifC z+8TBo9*OIAOf;oI`fNOCbafy@btNSp-4hT1C8q5w� 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%0ASBOGj*hPXu{F;m{c>2- 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�a|b>0;~ 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 )rK51%q9rJ7t&sH_{FQN~kXR_;pc;xcUr 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

BioX3J1k+4_Wa{aLN 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

s+V2?G|jF_ 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�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�QUYz1QfP;Jf4Rde8(vmvhL^Huavs%|;fW@VZI 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 *Og1aT^~-i$BcU`AILHoYt_aBilsz!KyT^M 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

k%`g`kSp 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

CdZ^Xfm$C^qWfyv5+LVlfP>C@|ceun97Htb* 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 k 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

94h;%R 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�G-WwTT7phkUz{g1%bq!uR?d^NO*W}v@qTman|ZI(_Y_AYP4cP02&$j2 zI*`M@HeqITxH|Dr>q{$tgeg6wusY1)GTuIRUhsc28S;U9WkPzM7e{C+_y^(q(vC3OQLgdFXO<(u6~K<(LLeveSlH9|ob8aJi?D34#H;_EaPTQy&H7S$%-A0Rvx`-d{rz^&m|qh=>Q3oPd1Qp! zP@59vdL!Qom$TMqDMd{avZ2oW3J>R&7XVsEvz4_ULsMCkk2^d92`8^du zmSElPba4Hjh#q?k6XTa(q|#+MY8EHVu;AB!(0@E>(~F*oheU7%q&G2cE?UoMs@=*tTP^J4n`#&5p9%Gy(2<|>nlXU|ul@8ibJw5HlNzBR1V-aO!9ex*`n+2NSMTOuOhCbdZE}NvNQE0o^5CxAkRZk{ z7gR{+0%`vSI6h5)l=W^n`4%@%Qv7)|!|WP+6BB*67*}^-)Lo}cv;V|C+YhWNPP%Kg zt|BH|SH?p`ij;vWdZN$=pk3o@Y5sV5qqlCzXUWgaVQ{}XDvsWI6<6*J{)-8mBd8VC zoQ;&WSj6j74J$SKJ{hhyR2S=-B^&*b9+uWVZ>zu3`?W#<9kXg415)rSy@?#>2z>f52d0riC*ssN~R|v9Iva zAb*ygW$H6kxuw-c9cnOg7ZVpRu4Dc2^uWAZOpLXB4(7#Me|0fA1bmT~VCTnM$DHh1 z`EL7&+E@II-pk5(D08=g3HQ@S#p`Jj{0{+|n*3rCa!U*_-RTeDXF{BQ60H7t&{rzS zFMXa5jQ^fjMHyI&K!CjB{NEsL3QqPWuEs7>|9kH`0~dmUGQOvZCY=^SftZvSo_t2P z_xBU;BM2~vOttU->?_S{_GW?FtTW**o1&_hC%3A=;=)27UR%nj%8HKxnYZ>3R`oW% z-+Y zXa}jyVgPte?H{pYgww@60P5l#&VSkV-p@3*KRwk9QBK;I7GI~I8kb;P)cak5Kz?58 z{|pCF0EUB>=YBe#e`^?J$ku{a1c2ABW;<%dVaBL7$%SqlBPh(Ts$#^iIEEUt2}~=x zh{+S)*WLeVv^gAe2WJXt1e~fgBjQy(65pJnkQT$OIfgR*i=C)of z32GoI9BU_G?baM6N`xNoPnVbSPhoxFJ^g24#r!QSc;K18h4q+q`d@`*YZEv6UxoGb zx3K(*Ry!Avfb+zxRVwrLvy?%=!&o*8_##hA`5aENq-cFSR9@YI2gYyuag!~-UbJroC|J({uHt}M5C%^cDqe*5qu#e~-;-9MTV6WtD>SWAlgi-L57rhM^+(9J zW@S;~1=n($X08J9No&@B!gYIs#R8hNXc@r=m^t?n4^`s$8pk3*vm?%9q))!#Lv3XsURoTi77!T^Z z(O<^C!iIU-)z@3`@>d}>Q{sCs3F4Y#&Yh52(}a|J&B+%5z1Hf}Pvm~L)pf^NYb-Az zW%T4@)s1hT@k!hy>t>1=gGG`*L_!8hC||MbxmFU5=Xu5 zainav8HPsy<3aF%@gNd~E#SP)wE_{Bd1k&Oh-7S)pJ-S(IZ<L@;)Z_8hHjCR{ua3>6m$r5XBvIGZb`4wHRghVRgPCQJ9y-6JfS(7 z$oe08e76IfID!(Cnzh=jYv+YewssLpf%cd?u&l&GaRX?;RpNRucURp}A zu@C*xsSxFC;2VoQcC1=gkwbV9g+&!q#(K~PVpT$Qs_ULsma+_(-5?CX$4}@xtqRHP zcNwUQ!)jX3zJ&>ZKLe9@T9$<0r0a+J7z*A8UyeKqT3GTDSh_78*@zyIfTxWPQ-^ZF zp&~0;C*Y4!r!susqoJn3eyUr99zZ(s5sbw`mv)d&z+MP5Y>y}wG8zQog`R{n9b1Nn zoeX2y&x52PdrS3!1Ba8JFC*`&(&*$<>g3387&y$^MPJ+tZ5VVkY!4U{+3t7QD~KI$ zMy|mANb&TRodN)D>GlBDG6Jx^>OC{XMwt0coFsng2N-CdS|X+6-5;A)uuiKkB8K%s zH|z(udY#e%bgsp`*zwE^mNkkO?4=#Zm!B>^H;VxXF5GmS71%0%qxq$slR2vcx$Td=?fYc+EyVKUc}vA#W{Q6mkjuwY(q zadeZY;-^$tJuR?~a<9mt{1bC~i7mQgoap7 z4t7eFFLX*ZEygCBC8{(7=Sxyoo^zo0_P_TxOTdpg>8R}w&cf00k}5H7lG7EV`Tw|w zik-s};N=$cosp*{TBc7k3M0JJK$j|II`%8>OxR&zrNC4VLe8)3N&qfo zM&h@tf&1zv@_C}1ej+RcQtTL6R3~rAV?i7#fw`OsV^XDfjp{A>nKUL@m9mYo83$yo z^(pBs;9T9kOxw^Z7vGP1DbCS5JP+86$wiXb+%co=Li`746Zj9HO|Bp4Dn3y2XG?fb zrdZ>Z|Bg}XzfP^X8x!z0$RncIGx#+kRwg>T-aU+-H3#{e?+e7vsw^m!9{{ITB~&kE zX;RE?+z{v1C$2QCFItQ#g|Q3hD$`Dr9Ft0kOTE|MNw22+0HBR;gd6``j6ram z^0|J}uKRZ;2mbpPvvr)1*i$-2y>0e8!&fhGVxco(#+dQLe!@l%f??>b7hfcMGM^gv zDs7f-d2e0DKHYzSws3-BN0x1oZ*A%B;Qr#@+QJ%wFR601yid8@>L=9M@!nXr5_W}< z9s;f2qZ4$o*ItD*j@%eA2AskFOn48}ScuC;PoD&ognx67s%B>qk)iF#z||;laWdLp z9FB4wYl|fF2kZyIE|#zY_Jici5wqy74W)|}g$GQ(r)VICr~EpHT4BA0q9eXJ?uAl- z8nBByVYxewXCvCpX86-LHC_ifSmn5hd6Y_{FRv@x79X-hZbnk2gW@a{&DNC96){1` zfjlQC689K--%xeGj5wbmJNhdbq2rs4l}3m4aIk0BBQ;e)0JZ_7BkZ zi831dFQARboDAnL(B>%d>tiVaaz^wYpv_GVWEB9k!TeiOrTlFwqg^1qIn5D1KvMzz zTT?CnTT{LKtEtSNFaD#cLS{ctyxA9^OTBM6Hk%Uvt*Oxeqp5gva(VZ^a&645os6#f z>v6MBtSYcf(9o}l7#vzXJc zjC1qanAfDE{$6j!GeWp+1s=D)LeraWYy|*q&tOTMyjE)vMf&FQNT=MQ?b`iC$1l+E zy!U5;L#RK;R{*D0ipDto2il26G|R8O7p$<$AJg;k29}DJ58Q02j!l*oc9fB5G-HK> zl=?a3_}*%2XP~{AT31_Bma`{Sa^CFcR_whMDYxpyyE2n)!KUW0oefs=>xb%a4JS6* zxohvw&a(cNbczs@C{UJa_pPl@hRQQ0T!ha^j=m!NP)#20Mq~iFWNhSQm;BJ8o1e6sG z1jOc`!4yI23|3fQ2Yxe{3#{6{s`6{k1<9s|)0di-1vjAK{57`xVy*b&W z?WQq_G;9TNNm05fPVa|Zd)2m`?hrcUoX}(s!He2Tz)!l?c8fq&PwVrdZMcrrs`}Bh z@@3^Fxss})AE!MHpsEf=wcn0XEb?v`C);!++R#dzNsukCelNa6G3U=7zja)Bk%(Q= z82cObsoJcXs<8ViTd7$2*Q(i{eW(%4TcP<8%YKwCs*K3}O5|Qz^tDR*E%B@At022p zDDK8Q%{EE-E!W5CW%``S5s!J!m$^XM$xZtEpVQAx_uJW>#JI}DzktwSpuT%ExzJ$c zV|wP3Li$GSq4HRrRlG7avdBlJ4FBhavz7poakY2M`;+{J*pq*vUQLy*D|Tuxf8Wy< z)zinAwFT3PZMK(S8e7?8^rz(aBj>jiR{O58)GU-oXsC8eJ@<A_P>`CV=d23FKb$}~k-9}q{xh1a1Gm*U5H(LeYBcW2iKzZQWYSUA%l*g=cUPDe8AtxnZiy&Byfy zd**g}anV{)xt$&FAoYR2#lHE$!HVzG*=zUgUn%3G^>iN(g9@^_wKQvF*mKc;dH@2X z!v-1L=~5)n>{2IZi*q`WB(wuh7yp*WGaKg?xbrQN0t;n!krV|)H0eb3JJfWBV?I76#y9`=1H z1w95;``7;0a)8{w&%%X&~2?3bpvTs}XLkkBrgq$f`QW~=Kc ziUurJU!Y(Wi+E}YIyIsIe}k<@LyL(|`~t6u#at~MH}Nvt`BD)C_eG^GlK`Te)l!Md zM0;>$Q2(#FrIFE+B$m?WW|&?=M7H!fH$Enqwj3A^+mC2!I7@>JUO2D?x2Q*N0S6rK zopRUOhWOV>ZzqQat{JbXP{q7ZP)wIU(BkbdeKf$Ku%L)N9nA3LNz9RENg&CSIaq$H zQ!}-5sP`3;wBaEJM@TWa!N}<4yKl6VXw|Tu&#Z&*OBtR>&6q0Sa;CEsx1|q7Y2*w^ zc9h)|4ZbB8&cc1#0^`dov9FyRK~Nen2jOamg@_0o#CZwFTiY;4a`DySokS*~4Z&q~ z1|D9dg&kga2H}b3-|S}i_R6ktd-P1u=Eh7VHJ2U3^Y|mDtg7alZ5PlvL_qWjj0xXy zKI$lW*R;@M0FS|>c`N|ilGRWf{R&TJWBZAra^h1l0fs#DJLXQ0DYcIKS0k`RP&|Rc$edR+lB;5M2=XB=$!z;H)qXAxp|UcK5Ii|A1Rv3^@K1< z8)#0HSWyVV6s(eo!0iTN$PcJ*b@rP)T}tNNMLnTkHQby%Za{UKmdRU^bUA1j{|YZq zy5}WtTZwlIMQC;CgvL8+5*d-sfO$Z!lQVy5HAP~|5({ITEkCH|7-pvN{Y4{rRq^qh zgW8wGZ$}zH%(P|dawVPpEMaH`lb(!(yOtnMRuG<8kS~UHKh}w82<51gAM*q$?Sg_B z4kWx82t!4=gebi$VN z_Ggs@uEN9~j5=<{CLt0b77L!LI?BD^)#FO4`uEk;;2DmzU=%7f9RA2}GK;siUQ(`$ zPU5z!ZhSlY%u^mV+>a&Yaipfi$9+G%M*@=LCBU>z2uG8po0})WF)-ie#nQfE6JLi_ zWe%r0yE1m|_OFRgbs6kQAN4vcfbkNJ2ls2#91rkoA^m`a2ABLrmz(HV`?T#jMc<-m z{j&63C=OkDM%xEO@dy)D!Li*QhWQZc2{OfRzZs@nY{AQviQs1KrSqOl&XyX}8)Zal zZIiS3R3X-riC;U=24!4g!8srSTkC8%>cBd`G4mRO${)BvgP*>LnFCVnG{D^?Tapr* z5pck8rP|yM;bH{u@x}R2zW#JCRHc3Ps2lfVyn;7lBTc`49@-FH+PuR@Z{jeE*k`^m zgulG51l2v_w?~H|5w1=QlxOZqJQ9rFo?sp(D7s!X0Q-+;xkNfc!#}&n#f5mhtWyg9 zqg;Hx-!I3#G~g)2Tk>#BA3GH~h#Yop-(MmfdsH{5_<7)f`;lL^#z$;bn!lk{*GGk_ zr$z7Au~LVJXr2u3vv6f$%OkY1RGzlO9W`0J2NsAnwonO@mT@m3rs4r!d8+0Cp3<(8 zpF=tph@vj~q{ZqnvrAV9M4ShG6ams0FQj)P+I~Vp<$_S{4MpH|z>qm6;3J2M!Alt| z5C7PJldoN53wQkrK|u9kxNs&h%KW)j83XNO4&f1xuIpBaGqqQKd{9l-Rhpd@2|hCj zqsY{fqk&KdsT?G7B;Op#L+YhL=Lg1|S;qsB$|CRiqWAz~`bp2`81=*efAt*n#{*S4 zD~CFAQZZ97hHthxZIxO34Myz50Z#N zV`ZJhC)_HSf(KE^v??GavOpKq7qCnvl6kUL7*;}`OsO>)9@ly$Z-WwQliXaV@%UBs zd1^7IM>JC3ZvR%x_>dMEo>7e0UkZ-KD=2KAhsAWO(OSQ=knyQecFDGq3oTYtFqoHv z{*-!klvCrvoE(3f62raYbIw(Xxo6Qy=nMDD_Y_w4;Sa}zWiZ;6mIj#>39<68MdLJ2QDkO#ijrP?*S*dWSH`A1tyu;fo(im~5h!#{Q zuXHKt{$`Sb_3lE&?O5gzLUK`cUZyD#U~_MU6)~jkLuDAi?ph;T{8~U5+>`=o1N4Ug zFjYhe4&BS1k%6$sWiz2K3R&!yz_BGN-?X+Ba=ld(quH@`sInDNO% zz`{FB?!k;hj=e}c{p`j|c@iHmj)XTRpt{qB`y*-}U(*yb2IsLmO}+B%8mvKf4CG88 zRrUtQ$i~y}L9@~21*d|R-GCa>$Ae9kB)Kfga&8 zKm4FQIAdVhHiK<-g|z|?!As<6-m7}LRJ(%veH8(iN*cNlu|pZ+=OK2iK0L8JQPcV7 z`q)#={vkV96h04Go#p1HGE}acXz^`SxgierKYv>*64C|kx#pK%97u+L&E+Y?+{hN| znRfi(zO$GeNs4hAovZk(dK$5f!xNY$NuGmYTK&y}y(jmZGx3Yk8>zQd`YDYYdkvL` zj7;^(wWEKA#o@^bPx}`M1?L zz)d_OCQsqmB2{`*I$JvXD4)qPNh6JQ%ZAGla%eVn)rOX$wQTs87`Cm7)QS6@^UA=n?BAyVJn#D!`zmJk%){RA+g(;wn^S+Z-RWY%yJidy@I2d zZPf^F)BV0F%CJ^Q`eKBvqXwDYi>dKp*Lzwl9ezlrGhWq3;6Kin3(l z8@RQc4=CKE{)q7~grVE8!F7N9zENl@$7{92EJ&}SR-!rS9@ruq<9v(y)0N@ydOF(E z`_He*ebtOXz0kMM&);!ZhiQRB4|;+hd_$4D=Xhr#IZDDgC?S|X3B`tMxk(Bv$Q{E) z{9NrkS#QwGHh$(+97r(lNTm^?DE>MHuj<_wE6>n)A>ge=wBt0;xW3D$}OWj0LTy~Z94dj51a>{I>pOqhTONq#xDgjJ8#%8kwcT*0!RQ{QIho8A@A%*kRR?tg>mw-oQckio z1C&*!@;#Z(jUhuXmoqO$L%BUlJ8s$l90#tcO)((OdJMD9S`MqO{YtXU2EU+*0wE%4W=IG?Yi4w3 z2?P$#?fG>aD);<+Cg-k=kqEOxH)*>d1R91&PvC4bkxpov7ufYcQXouibYJn^1p`a4 zQdm+Lj<-+I=6Up09>?Hz`sBcFeKN9X@OXSqe}|6rhaFujAbXMZ0cQh^GZdC(vo9`RkCbCSI=d$kM%kq-r9;oAtyA0ltBBg_u!grXH9 ziGaNmKYI5VE@}$hBZ@0^5sXB1^593p<-m5$KR}XGky8)w2>j8j@QRjl6%wI^?sCYv zpzok04C--rUI2l0C^#fM5S#|LooOs?NKpe8o<=_0tLO(gkH)~A!J8`UhSG>nAo95r z&*0z)w*f4!hWnPn4`c%6( zRz%0w`nL1r>z;IZbW(60&DX6t=g-;4_5B**l!IW#oThqKRf`)#@qtl`2&=NH92 z7Oyb-#}mrlIuvS(fMnWwAF1z2m+C&=m)wO36g1ywLfN53*jTa6`p?zds;T$XUv}ni zo$a;o2*en~c>0OZx2xXI9*ABrs zXws+io^@V-C+MJ{@b`6nzu81Qx;lEyF`2bVg`SDwZ#6EKCt~m`D1{qt@w$+gJSuU6 zmpc1*?CkHWontGXpF0>pKp}1ai&s09OpRTgoJ{SEO+^h|Or8JdQ^)`P2F@w=&v@Bq zGq|gP0Aq98JCKKQIVT^J3Z^V%l*AA$3Z6foYOZa0Pzg5Bo0^;~;*#6C%c{$O&vwa% z{$|h0U0D?Z7ml7@LX|rO#wi`KD%$aoqKx9k5WD|fO}D>bSe#WynE6_o6}5C34d51z z=VIHxZs8=_@U%_T*TwWizSS6Qw91%nFP4axJg-`{$egNQ(AB8zQ?y3v=bB{;kP0Y7 zb5}~ZIyuYpSGZT&S(}`inPqTuCG;h~)a~M4p==U^E|Y+AlZ8Vb?Gf1becoK}yB9Cw zCk=fDlMG__UBP98Ay+NznvLq}TCJx^(A9Bw=PN~8e5mXGI>U(H_mXXHxM*Lh>ch!X z`-5?hmxsu}9V?x0#WMCIO?)#T+Z(!Mw9--uQi0_p#gF~=XRi+_LBh%Mn_Wq1gcnGp z-9w{tx=T5AqFNo#l}orQG;+<2zdj#tLjB%|=Zk*vZU>?3&!-!?i#Vz$(jZ=BN~>C$ z#3sMfX8NCvgMT_+(#rg>aN3Mfzr2?cHK`za>EY{%R^AJi1^Td25WVQNL^e9JjAi*K z8M8F8ertrgA=O3YSHOfknCu!trnRN*$e_N@VocKwh}eCiPau;HNsvoS4U|HpH7ZO z;5vWW#3Q`u73I%q3paN?H}L;sPq>>K9bIMC<-79DwD9vXalbv!cs995x1S^I zzz<}kh%+h#D5==f@k^wQ-jc9yDRJEUK07fD&C*;HHubHU^*vgA;`>%A~vsFS^0ZGzDAPk%k4@m4<7{hk{_6nvg+>`YHmnw^=@ed zoA2us@Y(!5pdq5$WP+Ml0h`RKtFeM~#ecBbwQ@UDG%HIQ=ZLfnb z1?gNZMQo{M61x8x$*UKJ?Lyt1zGB99s#$tz135)byRCL)G~6oiS4M2?6ZkxrG#Z}a zRks}DU8_ zG8bZM5RW%#Qh=CY76__d_nR16n-lxDikk%1@=e<7*1jXas{%^L^q$f zjRMVSxM1m3NOYzP!V$qo+wxN$fx)dyITHNA7k;n7BtB zdgLLu7Ft*Sa=%n|nSS7|{IPwXX|6^jg))8s)~y#de|A#+DTOFo=zS~;%A-sX@!f=Y zDP)nd_0vYKSn-;!nPFrh1nb0{k-snzsI>{iL&!rKOZ)V6rdyYzrG;^7RXQg`1&s!f*`IunTdi1ZQ6@%mr>Wj4)meys%hKC%O;u_icq9 zrgJP+*P%|^_0sEl81vqE(}hF|@Oc_4!<;{eGe;Jijb9F3ac~~~Mzz~_HioV6rB`A} z->hP7!z!WGGZg{%ZZt*K#3gy=9mz7t6wkonp%w(s22xo);-n)dg+zf0U7~pcW2}6= z@sq0PMm?DDL_QrtFA2n+nHH$s-0KQ5fweyawis~LcdQcI^)La;Wm7n+zj4Rd%^vum z4lOo4Puj-}V(B?+F9Hr>&PXn>vJ$XG{P}64YJD$eWa}iq9?+vpjIq-)sm5twHxhYA zRhtK{$VHmf=C82lBAEwMJr>cz_6WoAm|=~G_x|Z# zG0+>O!dLB>8>f=d-k+xgc(YLaKzttv@W63~Qi=GZ`hJ056DHjA6HPF^`S|*PmWWvy_a+5dyrnv0;0AM zbX@F&fA?+i^$K!4z$JroDNKMyXbx}HqYaBeJ7`Mi1a>b$S%n1oj&Y-2wZ-~QEO6pB z3N$`|B2rcjQ+270e6e-D zOTs{AthgQii3uA$YsSI|M1c&1H8}PSyzPg0We9c<%<$sUP}7p8cI*=zt6FIFf+qT# zhbOYlG&zrcz+xAJkUZK^udNnKL(i>anTP5YIpvo*+?Ec#^s#k1V^e|$`_`x9+@<)b zeB;BpXVfXn0+~GV+*H#~`nhw22^oyDmV+xNH35wCo+kKDsbVs-3_8@bo?^vsE!!Yc z6BZG+f(gI0Opn*XaF%Dc+>jEK<-*CjC|{jc{TJC`dTCp?B@}1)qb@5%m`23T3a{W; z+TEveWmahY2*UalIKVu-G_x5P8-9L2t0_!6*qZ=DgEmeBkLk?fmIEKl|Augv=5_rl zj~yd%r7Rf-E0-}1RCQl;2}htp5<1S% zh*@=9#AOLL__&)xdkd?D<4ihO{Z=ewfV)k;(0w^Z_xCfBEAQC>#d0g61kP@ z$Q-`Gn?v%C_Mn#{ddyI$T9@G262_3=>o-d$0)_@luxG}oW?cN6ooQ+hK z%i(y#eJj`gv*_MZFz2v{)gjxS{2ii$aKt0xiqaQrG}Fy=kIT&N396DY;f)DJebXw7 zx^p#L^~ZEJP}_;X>7%zDBscd27;8da%73z zO6{Ez`293L>agT$$R6L@XnMq2+a@mw>+EsV`3al1)o^!3Tk)&w=Gw+t<&)WuD@}yv z)_(VmasTH!z|Ei)6 z4>SY?oS_deF&FL2@4=od;D z*(C(-^Ovx)7|c)i!>bK5JFc;(y5hB%@mW7hD)wAfB9!x5Qkzk<5dG>X?g>La7lWLVO z=FPc{OBMS(d1n05>DOEJ?G2B>$s#K~85Nz*j3rr2%o@MeP?pWRgMa2WXoJ7gqFD%{ z=E^L3m2~_l%8%Y)Z#>Ih%%Bf7FR@Z`_|Z-s>%v_joj+gQ_yu&;#EtZu7$Ms>J|E5N zv=U$Wxsx?eDGAyQEs89`#!$~zgp#OXrKXz@qV}Gt*>#Rz` zdbE&2F_;p2C?aF=HXGxXJJkY3H+@P6$+*7WRe%xIUX%PZvUDtw9Sm-G^#|(j8Ff>IQj}{04V0I16xU&D zPqHF=ZVTiYVm&ovF zjcf$Gbp$vaJW8weJd2p}72j_wNonx2B_|P6V`0!eY_zL$ir=UeE!uHH6&6i>dJr*# zgjie*c&)_F_T?#v*bM5|9|#*=VKLvaD`EK)11AKY@d7V`J%a&sdf$b23@WYs+j;6VN7}}2qeRYU1d|} z|6}Z(gDY>i1?#9|+qT`YjgD<}%#O{D(Xs8MW81cEvt#2sdHT8c&Nnkv^H!x&Ie#ZP zb@u+Py%t0yy8nH5dJCxg3KQiwb`~|t;+csQ`)W-^9!2JBYHXh;0~ds*VwSU5UX!45 zS5ub}ZQL~OJPX#ku;%Rim|VpT`tgLm5cJ57WO2mZl125J=!4UExE!t87pk3L1I`mU zRP+8FE^;Hn>iB#yX~SUY$Vh&*qswtYQpe=!s%3qXA`EP=Rq#z+@5^%3?>C5LEI#06 z;x@OGQwO+MJ*n7O@J;hjtqwM>M)#Bo5zYjHh0_s(LL^3n5nofjHW)ZVT6x+2vY^HCjQc(`s%dsX-aRG z6K@w@P>rOU=_9)!zm=Obo#!I4PuVNGNs8=DET>hYNq?5P(JuMspITCxr|hS*{eCKh z%~ulSqA{*k>oYoW&fNG_xbW5F<1BWQ7RjH_=LLtp;{V3beM)hlC8b-rGBoVzT=69Uj4;E{F>Kr5nF5NAD zcvb9Ud_)~GY)BY#mhMu@?gpjl1}5oYe*mGhhUHyQcQuBnb#Gy$9Y8e&pUOs=-*2U7 zq)0PK^PQqsz>{)qpoP8nH<@$W>R}^iL1|BJ?yQX22D%-ryX>nwpX_7hW4UWKmS+AF zq1`I@KF6w66q!}PFdt(r?XeeK=^@esjqDvwm33dB*L^G0KYH;-Y_ou>>gFXJY;Y&s zsS4j95Y21U5=18g_C69S``ZYmnNaZzZ4tI9~(fY~R-hlG!~DNRi=9R{SuA-Pep;yY4nyyU^q& z=Z_mC|HM-;6Q3VcN$!LuxOVRE{&?7YbbrIr#!;WrIf@ z3Y`Dl5EJc*2ys|bT1^D0mzHjE&QTt(O;h*?3C2fIt(WCQLc_PP$@ zy=JP8XSoF==5#>f6S~uFc_>VQ>VLi0HWxxuo5+s2!^v(myB)=(aqDZ$(wf2MXk)p8 z?Udy`CeT)l}6gH8ZIt$pBYE*Fs)Re`978Swh zS~i}%xxH;b6k0@M*H4heA5l@>DC_LHjFjS;07|puGRP@FCCRi4KDtUAc)qt0 zsxhSL+iUft2~LzS!J%K#3=g``DvP2jGD~j!VV&j{-X=Vv$~xP~XF~a4>jfk;PooFR zSD!c{b`w4AcYBLFl=&~o(!^zsTJ{CY ze7xDT*|TH7^|8B?m{wAR56|7&;jRC~@-MAqbatlyX=g0YSPUlxeeE+8pRW-=qJ3OB z%bx~g>Fg(XhV0nj4Jz#H@ewsJDeX}REVG&HlrfV1#xZ5LgbzEFJoK1y*nHc^y5oO@ zTM!n-2(?L$`8bkG-=QO*uesHV-w-y_u;2YBoufHdDEI-juDOBO}hFTQ@toB;e*a z-4_axYb#f%_y6OufpAz9V4n;GGy^a~a{ND;&;NdG@Sj}LEuY!^V=B>r)s@HhP*bDV zfXx<>5JCR0OF9wXKr-Y%DN>NJCWSuhv$M17sVT}n@h^1ym1XQL^7O4oC$hDx=0rKP zl7GHw#gfu6dt7SsR1o&7%8I)$H% zXuzY3Uq}=umGUQ!^0u`pQZ#7?Nzaf!6|MhT7QTf}TT<2eM^zHwUKT|QhqpoNXcS1j z19SEGd^mzsBg3k!!`kQIs3@4Ar_1Mab-nk+VicN-vm%{%FP`(>(Ui?XG`1oo9jxj${B^0b9Zy!`k&TDO1&A=WT+{n zL4MX<1q@8@W@|Y{SIWP$2UHG=l@naaqOup8tQG^2E=jXhJB#W(q+|&xM+Z9- zQ>CColyIU&DFgW*27~3CieRk`aO$!TR$yLlA?GcMVb^<0V<)x0lr$4N?ih-BH|1ZY z{u0dW!LmNHJf@LIvcIepGoTgLSmxs`?C5gkdO{ZTWO#7{4~OCZ9`6ByIo=Br>~?G1K=x( z3`uC%ZGE-Ou()Ko6P||%;RGS z9wFLb5pIg!>fp=KiGp2!J%Vg&m@#u+EnX%VvPL|q_T6wY-p?ghj*9jH*|%|NRfE&G zxYg~ZbLMTcs5@dq#qVftvx0pug>uw~8%lyD@sB^A|K>lzW!8K6ii>^39@LvUrDU5{ zy518c2rdm0w`jEPti7r^(5%yq$3=;}{ht8^#wZD5 zgtqClJwt136_NJXn9%VwAi|{$SA< z8oeA3cu6z$rT9vVE_OPGA^$O74Pk}z(hHw<i4AKlU$)3bVIOa}RQ{mxcDrBNga-Uz2`y+z+A2v;Ck9HjJMau_MS{K8z&!rl;SVa0mBOdD9?)P1# zx9b^0VsqxTm_O|85&jIOBEw!6q5hHs zhlUi3gUBIHt@3$G2arI*TFpRBAO`viM8ea?TO|>iky`iOB0>Lh6#|Wbio_BfRb>MW zPh~S2fRIMJGQGltHjB!iaB^2;R(2r1v*pu|Y!>buG}>FrH&|x0?b@v_HDC_-B_=Wx zBLCnM_M4a5yoxGgRLzXT>}SNM1k%6~(d62m0pYBcQ1?VB~ z?>n|O2j1&jR>;DA;1u;Z%)^)?`Xxi{PdfusY<+-#>~JH??>(NHYPS74oQ#er;YFSD zkEckApwP*fgOU>Wl@^;t>?&j{KEH*#j~1kH6}WQF!Sh#6M$a*E-NW6}+R~%&VnA~B z{8If)8+@;TW1X--+*>bFA`CqI4a+E_Vb2y-S`cC<2af#p6*~{&=`_sYkTm7>} zPz;Gi_(Rl$Up+?*ne;Q$e`fdSLGotNG86Jmb!`R-5Sdrl30(T`tFjM7au&Xdg zX4_h>9So3_@C0Am*&NwShz(k@sHOLha4HORn5O&^-!>mN>i~P@OWoJ7hfw1cO2vQS zZt_12jKTBjT5|~8Z2cqt^X}+q|Ke!+5g+sUTC{l9=bDwb?g|ONjM3hYzhH(<{B9|7 z4a$ArgRubm?o#C|TV7s@ldqMO zFBv~K5As4`?-C(D&knYNA(m?)=)=i+%CQ&Xvvm&Ybp*vfVL>k48PaWPVBXB`<|kLxjY`BEHzXvdmHUBpLs_xLtmGThdd@Ho5L#O z-QV3d+{9nmV`Si+JL}sp$@>_+?YmnWFh-EoCn0WWo%ki+i&UB7<4(eZv0+KQCPa3j z!SatIQv4rBuu3Pe&wj!2Jj8^m8r15m_c`#^HO% z#JJu8Au?S1hUD3>+*ag@qX}?Cf=DT#K8Q>b4E;n*JB|V!53uc7M>}Mk)-!pnNZf$P zZlb*p>d)1|Q(TmGf{&;3fwDH3%jMNW>^3wK?DFcIvZc9A2T1-dC+vGwyGYfm&O)1b z=KEsUP-X{z;5X<9H;z}jsiq4FRoDejb~6UPHEu|{6VO%L0!>OpIUrCDDgFf8k-R1p zy@5as(Qn5ioP&uMRAdOGSn-;L7tzJt{@J`?{*bx&1(xme_84Kiy;@l5oyh9PZ)Yr2>7X9Rv` ztZUb9jN#*6L#XxQi`M3d0ksr#tKL3A}$xn$n z$!ts@pdVd8Kz#rC4ECR#-=$SML|&4xEJwh3Fm5er;Iw7C?U8fx)y(;t1d5Ov3=B{B zY?fXupaAzIGEQu<7~LFIQ~<8;0AKVOukFj`l>B;)L(M;&Br7&Eb#+-olq-}s2-v6- z3TO88JSqMVAoeTJEndQ|DvnDP%qNDh-nLz(Nqy(a7?~wmb_Pc)(86*jxoHhEU!_lQ zl1s8Ei0e!mwdQJ9g{adGYJ^1js5_B;Cwq#~oKxT}ja&7&R%lmp(jwt*MCqLy_IuUb z=yY?clC}!JRgS(rO2)woUBAt7K5+{)&&pkys>+Ok39`B4id0#-GFe}J+lTPer9e+m z62`etoXu&hGTCD5*Anjhxj4ugQT>wU3XzG{^4e0;QMC8T_C}t&n<-3K*~dQ$;wI%w zmntQ}zL>YVc^>xVhzR5i*+gzS<4gnitVeRRa2isDK?SQy{g*N=wOY@$B3pw;ad@)} z%2tF3cq>VOGrYCqKW(gQ%w4(gLqhWohq+?cC=F!x~KgH%e< zD5-Fn5O&6Q0C_!m`ih@_yR1R(2>Po1TZ*D6<6v^{c2MlFX0}{vHpfq zx0?9;2N7? zWy4Ch&L=SX@nyrQy?aA=cVo4z%>Ci8v=3ba!-vg4M?cN^j?s7_9Q`#t1K4-ey;3b< zbo|G`j_8Y}mY<i@>0K5esNOg6omyl>X2-jlUDD+Z#br!2t%Pl-2vezN($VyieoRZV}P;v8^ zo^bYls5DJDstS5do0A&R@CfWRu2gMyjzBB%B_yeOkx{TklSh(l?_JH-9Bd0}7}jdV zNLLjthmQWP&@`5!gLV)d5e)m`lrs}ETA=`qOm8)YY=zuU?;lgNA!Rf(=WV8?_r=aL zEj@g%Ur&d-erj?y+fR&LPh|=G+4&H}NZR(2)aPKa_fe{h=oc!D@J~S1Fu`#D;rHZ$ ztQFr^6@nmnPc%$KS`pq-?t-iFjW^3Gy1$&8>3Fx=vXPI{{tV>(`OE`x`w*I6_*M_= zkV9@9z;1!-6G-=Da+GH{8Gync2uN^65`Z+X6NURRFq!!w>jTA4xvp=E>DEJ6d9|`K ziWR}jFV;EhP9Vcy8sQe$EZ4k5aY4_WnU~w7=684AB6&84-ydT<>Xk6!(2k4A8cl`m z_MNXOYTGq2Ut-u=O;18jDUax8F)f`;5pjCU`u@>P2xk!jEVLXwP55jfG?&+k`M9>1b;txV?@4lljN^h=?&ESL8S4fQCV3aP0EVs2-Gu~sy5)Mu$25>CaHin-xu&E z`y&iGUS4bz;HAl=Vkv*T=ADn-IQ5?3xQ$Z00VO6A}h@h5wm zzQUWd-G)SnBDm$gZ@TLPtxO#s(+f%lwSe0GRdRp0tDmDYCT^~CT{Z`UNY8&P*r3biG<<#*N$-G&s`S>{K z7wM5c9K{_Y0oDtBdv!j6stq{C4c=>87}8(2ca413%Ke- z)$KAc&6KCM_>2`cX)=?{*eqU{@;J?$nQN&*Vslzkm(+-v(Hz`Zi_;?^nhP4^8UhS5 zy}8$AYBIE0!HK91tcX@vzwWj(S_aO(T2(3(?!aNt-XT3imZ8xwzC~`0?;vR zR;yWO^Dvf+|Fd>v=4`Ne*h=One}47PbEPZ9V?u-#M0&G-7A)>ZZle7TPwxvsJR zTn!LR*=`2Wsg#Ot?(@z4LB|Pra|_uZ;raH_kmJ}g%CkL35_VYjhP~~Wc-#e19yP0i zF?7APl#9-7V4VJR?_n^9`yi1$XQPR0smgG+hjeC2$-}ZKp;?Rg(^9hkexT8-aAY& z~XkzCd*WN^8m3|AK6R^10guOzL8 z=iejNHC=cjv2n61J2OZiW-{jd#>2di(AAhI$t3&4M2#t6%BpBEC1pGXt9oK8qZH)` zr2>f-Qgj?0scfN@&;U$bE`m90;~8iJYl+Zd*L8&%*p91mz}Y~c{aMxty5S%KmDAw%YJrFtLqTscj z%)NxCHGMISxWlC(hd-ey+o|x3j4rF#4?RRt%<^=Y%v`1SH|C99Id*Cqg5lnHHNL;& zdpUm~%|z}j%;=r68M3>`SQ*qyk3~4^Xw3$GJO;sd$itV#?#UmhtKiAd_y>0=$w*sW zMIvW>t$w>;m|(@XsxE)@yRD!R+Y|>DaWxh>C5)|%<#pxDOkVGgW<{jiw^?4)D?ZkRL;mjL?wi!0GysGyeU7$_%L*8%hf?^@IF-!ic`SQsBq} z%htw@HEFL(@Qy;1_CVryH`(1UFwMWZ#ez;jTrbN4QMQ9j49;F7$6XrkxDcgg46U1% zBIc3o+Z6{HYw)xO8La9!4q>pXmfG;UxDyBB_)j>qYF;2;wo6};1_Xl7VfT(>$WQMj zCcIzwcFA`LI1lY6F@JJsZ-Zw^8$dy*Y0m8NZ5XaYo*4u>!KrWY=Erx>9{I`Mh!c`_ zd-D3`VMqk9(u;guaf-%^ZEFJfbUpLdKjcPYMAgBHCGLQMc04gx(zlYk5X&@%$= z5FCb9mRP!hIMf+a{4S`XTF&|Co>cKCF-z#wC78eHncOcYiQmDw0Q5{wc{XFZoJN0? z=r`1Q2QWhc6vhcdz;kKbtR zE#?(bM2?y$v6QJ?(oxh>#S|^N2;f6~&==INCJwhU2Z4-A>UwExdiJ+?V9um&;%nRtx@2Ld202GZQIMb}Cm6mhKSg*I$B} zhbrez!oD$~@3?JGDB!O#0b3~i(g3O{3K6E+K;ert-x3|g22r!!Ja-m%JjH0x5VViY z6(&T*g-wozXwec;`2Z|@X`Xv@*{vBi)w_8rWYINKTU5dS48({HEIA$UlWaHz47rcL z`eGT^%*}#(;}Sn>^sE~~73*GNa!T0&1M_G{m>LrRebF&y9HA&TrKh0y&@f$*U@GQS zv<~e?nGK|9PMb(fHm%z(JAOkIX-#joNmpUT1XKdn)l5VsH(c zD-N?WC1>wr4F_hP9LG$qxzB7tMKkzs_RVbza%r&X-TY?a!#)`C(Z;7D|WN5c6YnP znAwQsSx3&dvvcsYL`Ly_9GMYe9}+oVog|C|8dL+T+HWG>>jFkf26HSqINPBP(WS8? zr$It`&v-}6AAUr27&nogf9LRAYI}>{Pdc75(aPat-t`rg-Z`l^c(b}Ojfr- zw^$RM{WcXb7=Pov6%qd6V6ZDLc9{c2v5>7ef({rTIQ|yMMK-d`2u1IW>D$qjujV6< zLLz+)9G+=>opJp^`T1@A%D3>{-Y>?l6*n5%4!QjZE0G^z+dJylwhI{^*3q=9h1WJp zZXYe(Cr&5bXmFz=jhoP|b_VW$SgL5PPbXYdkOZh=$g$d^`vI!<2HkeTr8YSA1A?ks zC20^&zfR%ck9}le$<2W!P#DlIN>Fh;1RZ^zidn79LN1j*_RDg?LF^IC_>*W&zVWfh z#QEL(nL(U1Ahw3FG&Oo8venu^GLxbjH#)Jr==<_`;_ZhFqMkvvRV#|Uo zCp?t9*mm?Gt5ye1?U4&!3vY-0E+Qp;yo7-kNCY&I0| zULPj$5*t83eZW&~jumWn?EnZez84iwS4D%2Bv3BcR)XhtRehMTC6)o{CI3F-BFrjs zp_ZnIUp!P1Or}5}{nqteACCP}_SGGPTp47AotQ?6wRT7l(!ek;m~~2mr9b;bIJlgT z@bJs+IJ6Nq710HZ_*n644J_)-BVaoiHLe%56(kY@XN*L<8z|#KO4<+M@UW#sLcJOx z^j@huh6nUXkbx0t;aDb?A(lu;L%A0DY1zhOfyn|3$6-UeP{{6%gFyAkbtP>Vf|ut6rDuv6x4&t z*%0vCC^FXlOOPcn`V&3QtL95*aCcBNKM?X}y|u~xOOVM8{QkPd-dGATIP&uC&JLkNYJU_fJ3MvVi{o<~Epk2|%NOb2=#_5V&gTc^R4!seOO`J%%ViINP9$sqCmo`%}}>&oiu|* zmm!SxR4SwIRKp%P`i}T>Q&zQTF0R0(M)>mQ+o=xnIT|hGKZ`OO>&aU2VPbVYP`!Va zWE*pbst6s#mkCT;nLHu=6lzlCx%HjJVGG?e)S9nX*4|9Nd!P2hSO48|)j%{Be7g%O zkmtI0wBN3L1512?qK)2BNA{oZ5V@j{G(=>558>R%PeFRP75Hj#%^mP<^aAYncX6x5 zTxNCHu@q~!wi#vd+fWsV8w@0dok#t?0sZbW&=%nckh3$Vvwz+_8$V)0T5l4S~D z){{wWyr3r4ND7QxOHd~1Z)A7ADw27j(a!JE;z6Jw%pY51@Z2?=Vf)B0oHJ@+ ztg;(q4YB?TBTIk#BS)PMFW@d#CSks2_mZll&lmr*x35;bdSI7?fXO|Ff963na^1Rp zcj);(qxkwoVyy)wjt{@p`7{7|kpAgtHWOr|xK3KBk<>1jD89%W5I?XRjt$T9Lh!>kF+a;=n^*28f z?R>L1#A&sh31ltx$}<*Dw({8@llc4@T%v(*|5<;<)dTP|wezSC=14)BC{SNv*D6IL z|6P7e|514vwu!%Mu$#-jYp|VOey~DLzU%t+6RL8PCZUfs+-6&Omc`()Or1J<3^+`> zeYyydk^ve&h9k0(8*n^VmCd>Ob}l_vYyEE2ARq9xH>qw7g@@J2UY=@#7jLPsS~4)U z6RhVbgVgXtH7>EmDud`h%M;%^-0Ux(gN=SP`Phk6z*-k8#?6%jKjyShplD<1SRKaF zN2i@`p{af29?wD=cG!pZoc#d)pJyKvfU|Wz5R@`20DqQk3(PPECxTY;o04EcD=gQ7+UHV=ubgmv z-g=U>(C9QVx6T7OwlHvPlXB!ob9~Za&F(i;>uj0fG4}%Xs9gg$5i!NTLE`QGNWSiU zX6+gF<4R{?K$u?3%1DjEHSjY?{H9C53C`7_mAn9{vbT7B3@ArUqkIx*s)7lf z?QVC^B(e zKB)+nJkM~}c<1gfbE>mx)y38~+HP55ztlI_wxnd82l(85$FvP!husB=uA8+5Bhw}% zOG-m5K!hvp*DEARwxop0z2z()>QY7Q6Xkp;vs3^+_toP!P`DKxgD+#T@t z#Eg#y`XjuF>aJ4j;zSBy7S{e0Yzj7{V;rUF@;{aaZf^URDV408m38JGtg3dd63pfA z&*kH7EhXkfZ!wRYd^xwIhu>=kcT6;jA0&4S*pbzW3g3?=TwvQNqkh%G^XlcZ#Ib0B zv3*9F8=KR-vjCF0R8Y9#H!EfX$3D>`F82WqyX#oSe3WZmcsVgSeQ;^`(AUZkNc91k&{%Vm;USVo#OMy9^`t$^obN*xJ{&sSI| z?%&=rWN)0?JQU`XW^8CR^;ZUejYMw^>gjb^T#W3lWDA9>0DjBqNzVT6USC^P8?|!T z+!hGl61iPPes}v)c+pVxeR?~#XYc%PGmEs5#?=T>4h3=Yuh4z^yzP9R6m$+Cba!X? zD|9FMN9Z0Pc(!Kru+cYK)0jN&_#jx=0O%2eDIwV&Aj|yIBYw&KreY3~RYz*{!2L3j zrsw;n0O%1{-~d)D8^9BAl{KKB%`9P-t_MIf3xJ>jnpt%JG_$lnn_2sx%`7qMaET4K z))1q^2_pId4Sh5D3P@bP`>4yce(;Ry(Zu5z+T^)xshpuDR+S+5QU4NQ7z}9BuyQx7 z!T?&citIBJMrf8y=vtez@Db~hDp`6bh@C=cxMzao6y8d;)x|pakKxZl_3-p`R<$Oc z8!SxccPQs3*hMlwyPx(xLTU#UEQ9oJ@+RF9VX)OWSFD_4uNt9n(#9)8wsQBYalQ9V zY}j?14nx{O9hdi_W(q3v>4TuB^*+-(UHZR@N@j5ztA2YQ00<%LdnK%jUDKH<94lCJSH`>(6#E%0NIp ze^XSeHDpwmO@h3v{QgP{Q~xMTuoaGS68{eWf%cPA*F4HxbMQ=p;$kgv2fDZ1m*2uD z&r8&PLJ3XWmD?8i&BfRVA^u&Ju$}FksxTL4Jxa%Pz;@GS#-(|7rhJ}=t{W56!kP^? z{zFy~KWzznU-GJE_QHl3(vQ$J3MPQ#qWsb=pR3PY*t#lb0XD9L1)4@6-(_A+Y4G;q zEmvr1={W40!6S=4fkAGXs`HWelhY82Qp6tziahX~f-A;?b*0$=RHVXqbw`vk)F5^l z5eaL7Biu6OcCG*d1&wKa{kU(CL4>Ga7FPN>PKi)GVk=x@crl2Q`D|V3RmBR<+Ur$S zRvaug-c^b*ok?;zzS~sKYsM~U(v1{S9~UI-P29Ie%-_Dr;6=gILh#_9f*0OES_7(P z5_el=W2;6r;AJz--r+$3s(rtkmK@M4fc*+FIj{S0rMD2w*g}zmkA3%*vpb#BK4yaF zb(Oa8dy`74Md|DQknahRqQMV)UAzyAVOixKNE5?=+LKL&DU}YMGKJ+V5imTPs9wYg z*Gj@65u}dU6th|u`xoRs9E5X^vLYT@s&Hjm#+Lxq+&hHz{xD8qPn_&DrL__oj-cGy z@hr;W{9WUf@vN+({&5BWB~FV0N_iQqfg#zVtg=CkusUsQ7nMx*Y#0{x1*sI<)f6WA z>-yKWJe7-$5{tJL)+XhfIoZNy)xw&mb}8*aIOPip4DPLsYwZ zYI7-mztn1EB*S)mM6_oOaI&sB_|a~?Ng8mcXx-yzcwi< z3=q06%~zBXnP|%Y%LA;Mads zp8QwnE^J6%?^g@kUl2x=iC{!6^7i%CNj{TDOtavuW6ddOY3c-G<)ztZzx*Jy-qIZ` zQ{AQIiYkiz0PN3Cj+J}*n^hzE*?2Io(Jy{HfKnC@D=dGgP4q}yfdrszUw%)t^ zSB5paUFG!j8vk-iBAC|0?IUT*kp|w$AcYWv6c5HE+cp!wOR_qWPj8HYp=`&TTT6@6 zILEL`IeR(XCD~O{-zaT^X1Ej25l%OFMng^K&q;=JO!b1tvSxp=u*f7l%oQ#k_(YZw z7(>k%)UU9q64m< z@df(A*Avv8h8h0C;hI*nq1Tx2rym7V86SWeqbc${XDcFN^UdgO1J6qCnwC_xGGz^{n9Aurq8i zU*|~lW8e7=s47SW+h~Lz$-tQwAwG<&A3j*Sn^A%FyClZS%C}zJE==q9$SYY(m>Q<} z$qG^nWBeFM34ly-c3MW1aGLZcsXYKe3zKmGAZVF6lS;!^pP6F)+<`bz)-~OBEwE4J zyAlIH`Hm(TPhN)13Nx%H_`)x4_NEPq)WSl{jN3J$k$m0+ntQvv4agMpL>jv~0W!ry z?&2DW2qJ)+Z2*Gynb8VBAYB7wwB`{G0SFo(qm@q!AJlK4gQu`)`AmmAf?s$Hy<_G_VSJYV->SmJ62L-`uKdV9wI7y}SAsZRv07jUty zHfQcmz+i6%#BjXx0LW;aLMw(8eP*->02!@2XJ17Id2sV~#EicgEqg#l%e@GY(c+$V zy*{*W&MJ5G&!61=!KZZ`Vk{SCerJA|zAH(6jPg%Kix(%N$6EBs#1h)@YzSa{AFxOP z7~he1b13Z|8-Lok(KI+g)V2Kt?Z!*HoPVu}<9OqO@P|Zd&hi?9ovw5s3{lF!M`Br# z1Q_2zKaKBE1kM2CJ1(kjZ;dm+_zn*+zOPv>eaX{16hKVka&6)U7~c{8VbExTDg0wH zm`pV81{&h~8zsdTJFa*)H4;0Xa2m6^PVz_Y6Ktt>O;&d{<&o18b41A$0TYOiot8?D z+>?!MwNKqpMqVY$Ic`Dt-XpnM2Y>9lwgxHwZxiXG(Uy8EIX#U&#Ri=_(p}=;XbGX^ zBVlHeRo>@SG>c(#qiU~pIhcb&Xb8>lbh$UBBM2co5Uo?ahp?tL13krGi?e?UV4<13 zP*X6WRq6Cln_4`O{V;rB8X~Cyb>kQe;$&YAa_>OUptI7M>j=lh!Y&0i6!s=MdZ)$N z{#gp?QCV^CnvD7F_UkN`-pYPH_WG=G?&bhc+)vA3xTzWiwutG&O(i)8NzSBx{^alb z#Uq!jNhW%;&x=<^`ijw|Z4Qw3CMn;_Pywl9zXaTmo0Nn}Q&qk!jVDi&eZY&9$=|5r zG?kp-^0-~Eii275H5KY^yrOuL9DEb?n#c88IJ2eNpUHDw*n}~jFoNwcj=gphr@~l@`uM0YV8ke!^JPdOUvu4m`fmm zM$T@of^O^c3DW4Glvt$1P$-8so&S~M`Zsla{O&aA_&0T|3rHO!EdG-^K6;jIU$-DE zDW?20f%A8IQ{s<3C(3~MUExU{OVCa8Qw3Xn?BmWqFUF%d{wwtAY`@L ze?5gG1xRtd7*>a4EIwm?rnt;!d{P0$WRc41pLpxN!j2x%d?zl?Q|wb$=WC?G%CSDN za<<;I8HB4spzFe*Ji?}A%Fj>pqglEcZxN}bK@;Dk4?~dtu-0Sec7;9OthJR%z^z_a z?W5JdU?u+QuB46)?sSDc{lZM%vTIm*E!Il=p0P8psoAPQcgvKM%-RY%Nx?<51T235 zvMaZT|2K79p+)hthS&n~eqFOjBPK{*uz zE|zuRFQZfbH&k!i3Oj%h7jprO*zsgfR<C;LXP&I5(4=*r@Y0B zJDM3oL&fz~^y)hzZLxy3Y`QTvKkY$Z=bFf!p+I!`HOXG*s#he|7BPqKpCPV4OQv)= zEi5h+oq!P6+=!YNqW|h=>ex^9)bcZRyuo%`(s-x2=`-@uvN=opcA@G5pwz%wsQ{-# zsusV&{s@R)P&lYY#0%$YfZGvtdpV4);2_OD?@8r0sFpRR6>prD$;zLU1a8zTpO+FR ze3SF>&0M!?th6j$Iq3+}dUdzcv8=MBNA5|_ z;3v?^j;Wkq;jOlq0ZtyMDdqp`E6J=q@1QQNbgTbY@GD2C9XDKJAt2=WmGZ^)Fk^wq z{;0r>Fv~(sRS{XJbmtv`H@~+Pm!)QwtK6fBBBk}_q!I`aCi-sazF}?uJP_u6_j-zx z_yn#YNoi*LERDvCGZ5|QXCQr+^+%EQYk0c~w*q$Z zE?kH+I#+ScWZCL^KWH8BQ<7n8_gt4P8on|GiXa&FHE%CZM26VpQ@S%ixjJSyoE7|MN>bpK~|OAARVtrO^*r* z%3%4r8SfBXM*^T;n3^2RpY8e%{yddH5Ts}E*BIsh%SV08Axbn=v z$w0tMi4=XO5Y!>B_pP-fpvAQk{Po`!S5Yc2pvA@ezqGg#K3iPQgdrsdj4Pa#uEM1}luGj! zgRJCSxqJK>{&S9{puWUSeA1UxFyB7GkZbr=vxdQ7`<8?&}jpy$1io` zjd%>C&<<#E71npOL(YG;xWpLIc>379B;yJqkV=);Fj}L4aEd$f%Ck6Czp+XGww}G) zf@+?Rl(Vm^esp5!Q&?$@_>LebOM!d@Ln+Y-%=a_X9}M6_!c0!keObytVHmwXM6I3w zY#d_)8pjt?^n%Lq`p^1Anlz^e*jpu>`cMyR-Mxw8o1&|qjpJZIBuSJHh5DT<2JoO<$ZOivR!vZzoYkepm^p??(^V2=> z!(`y{XTJ0+wWTCbARO# zBFEfmZr1+ZAj4tr{dVQvDMmTLPSBL(H0Q$ht6oV93L#1^e@}znW_6I_|0C=jqa$q> zZSACEb!^+V-7z}0?T&4;W83MlW81cE+d7qZt?%r;#y;cQKT_kV`k$&X?|IMb$|FX3 zO5n783GuvSh$H$SBI*}!dAr!Zb}srJPcrLWcO2DO6^5U*!CAAfSiYSb;I@>rtMu}? z3!kY7n<4ksuKob7zby(AsoDtZiPNFuCytPY084zs!4OKb0r3kQ-V494G_dOa!jWk( zq;8S)c9lF-Dy#G30U$Xpf&fU4Zz{K{LU-68ogJA0#JkSs22`5cL>bKwNcO!=f>1Xp zkCzB}t^ag!c>!Ep7pZ~&xVUg0!^<0Bgr&-xQgB3aJnfOT-xK=Mc1IJ2E`gQf^;!}R z2uu7NA99vw@D{>YMkt!b!jLVue=G9Ab&JmiPZ6EySVsT_$)7!#0cxlZHRPLs=bO*b z$Tt&;Hmt@deVyi;@v&~lPw^vb1Gc{tq>SiwTFkGh0VUt<6@k}T9dX>%UN%B%N8^=w z3?_mwo#DKahNAh0Gqy22EIchjiiZEV-0Ge28(hwVtuD3mq|THUl4doJu>rsH6SaK| z1wpM_AuvK**@MYsk~M0CE0NJC-^??uo~?S(_-w zuzp*;oK@l3XC&uudGBV*Gg!MOf&UCDOEJ+{8&AI08GmjiBkPZg+1FrJnWQ10qCbpx z^DTsb(rKsiX#sc29vYxGX8O__lRNzny|JVF)`%TB?LT_szq}5PoiGAAyE#`DfoIVO zRJf1@rne>f=>O6i9|82nK>yYo@7jLpjhz8{<0!0EAhgYJ9PQG9N9AJmk^|dlZ&0ZS z$<@WuQt32nDJNl>a&=BL@j>RwK9Nk9dN}v#j|3>fL<*6p~>tX|0&Cp zNxYo__n8xwC=A{^%Xz{pbLzA+=uU#iK^=5x zQFR)W%<|TB9Ir}I=9W_JZ-9b@FU2@^v>5Qg!+U&nBr}9|lrv@G%LMqi$aZH_BLQ!I z%vL5EV!pT0QwBufjV@K2K3ai_O-4)dzuR|zP6qCS)EbG<=F5#vE23(PgI~#m+uiwk z0YcRw+$Y$77GoA4=8=$qP=y2tRZRbTF=l71@A&_hsMZH60fks?Ya?Sd806sD^_73z z*~Y&j6#(N5{{KZP5#MT3whrb*1d?&b&!XbiVhJf|jIMuI04Ar`1Y-sJ@g_!ifzYDS5`Fg&7Kq01(c9;E6A%^`= zAr@(KISuhHi_Z-x#I(~EFqHT3_h!>CsmX_Grp3w40@07k{i*mnyzhHYYw>?-&QC3y z@8dA;wEwFR^U+9iVJ+QX0$nXAU#G7Qg!NXAhy0MnSb#Aab6o5#cu;Aj`Hb3`=hA4@ zriZ)!c3J=dZ`xw4kB*Q^9m%ipc%;OaOkMJ8os&`-^{3X=1-tus8cXnkcnRx~<#~rn zJVnRNvD|)bxCo3h_j_l)ertq9oY)2J**F6kQl2*9Z_F(6+&}uSf62bU&90AZ)BKZT z$7BATpsh^Q{Y#4lh@^cbF&e!S^}&!VYV!F+_ppmv2owzJE8yop>X^=JYG-k4!PPQN7bRq8CsL zKhhrFLFD#XDv(J?qDPM57xD`fwZToHzYAU|LizN9sb(wGbISXOjk8w>x-gVW{7IDn zyZmaxwwYG?U{)HnV22#wjz|V6krfIvm2EGzf<&0_t+xeB{% z<+#%i5U3p2&1wLF%6;{eHMnz;#6(&cU^b?mVtQXuUs4yde$vwU=4WHbQYPW`URl~o zYo$IXt$^jm%=l$CrdnQM1(=PCp+XOTg+c<0&mB2$+*!r}TSRC>wIeS|*OiB+A#y11 z2)y}SbGaVgQ9~Om5sj$%#~8fn32;Cr@dx+ozl{E zU6#ZEHB3dt%n@D!AEv1;gN&2D7UW{?a08K?*yxRn0Bt4}dgugN(w(zYOyA7(O3rW^ zBlc_B;xnGDQv%G!FaWbLsvq&x3ZqWbQVy}hGQeyM1~3~_qF`btjZEpQGdP)T3vG{8 z*HiQ|{019GO<4c_Ltj==U+2qg43Ek;T-fWgCYrmw#p_UYcyG}vc6w#25+4i0`^&ys z%W^+;)A#2g{+7?Eoi-BWBGv``-bjxV+7jvG2v0Q$18oGA{{czGD1KlHD$(o@KFnou z;t->zTg-;dUj2-`5GBzqRV?0tS7hzP?4W6b{n|x9rVa7h<}CzPV;BRv?Dzdq zXkVZDTYQ1=PdU#Ltxb1MZo3izK!#Bv+K(xSr=7roOrI`YQT-ZajkDARM30-W!K%V0 zf4hK3I2My7%W(UwG76#`x6GqPV(dAb7+cU8?Aa`Rs+Q~VKBt4XhjF&|ByQUE7PLnX z#QMudF%3;PxNCli31no=T^>#y=aqG9Si;7DEjx3B!FELbD5Ve-s{**jximv2hXH*s z@tsO=i!!)NfZo_BFthSYZw&Il2+$iF1N6q5fjo?9Px?+wj0hT7lOii#ti14usp4Uz z3^kJa4?QA*bKpk(HInmxn4iK&!UtYg9fepR|MG4Pz`~I7A{hlHP(>ogo{5dg`(o=u z<(@UQ=<6@r9ju+}6%zT-XA1%MD&7SRUr;64$R&24Ls(sf9v&KR08oKoi zJeE1$F00fRjXj}P8%er8o^C-+cwFZG3qjE8utfR*nyF?DQ!w&*H@5*ol&jsKwY7~o zr(H`0^xmi#H_$}c>(Z@&qxSxr1tz$@)fzgmN!F3N?pA|_1cbdICTp7PPJ`dG@{BH! z9Imf3P5AO&9pB(esme`VRsCAalR?9+@|Kg`>RIJifkBFD6{p|q*>8LA%;hZ@hBkX$A-qs8=$}(q!Dc^ zU?5wiTa{U*<8W_sa-t1$XM%%qU zP0B9KFAt*=6~~b+7w;f>YHXZ#4RNe#^t=#uD9*hGss?k4X2I`Bkx5p8vV|rEgvu;G zj*^qLLY6c&QbW3FX7*72dmqNPt(c(qAPz`Xmls&u&720u_cH)KW-fhtrq(!nrf^mf zkA@oA@bd8!i$lM9d4{4fjz|*aEv~@}BVQHpFZ}cmJ*7Geqp-Qpu;ovp{Tw| z0zW(SgZ|p>*T!zl^M)ai=$o~0Ffhxr|Nilbd`vxw>izPA`kjYr7uF<#rmLxHyE z7mk);@aCmZy&m#&4dz)dr|@e{QFui5+-vE6{G{HiD{cAdV413~{SIe(lvP$-HxPi* z>l@-2ciBCC?~mD%ftW6$#(*%$EQ%-94JjK1DFY2FDu^?_y{GDGDk%>ZhL_M;KO^M2 z3SSj@zW(~1#%9#hgh>af4>;d?TIt0J9&nD|bfD~-6TNj3`ECBAJ1I4l-&0W+h$Feq z5ow7Y?`5HUA)zj#&u;B*H0}{EVpTOYz);`TxLm9B*%b6Xlt_}VVrZz_! zJbNSMT$)jc9drzP!m)#*LtwX1KM}P(+~R?aw)WFPcwh?3hyeXxYN}#$^~LnQwaDev zw2_)^hcE_eRzgrs_^JFC{#gzeM<72K@<}?r?#M}Ea!==L#CTrH%K5|0TO2tBiR>p(*`Tj}v#=0|9MAj6c9@ZoZKV3bpPF&KYnh>GWlK*nrzBC!kA@@i>Wz}W9^+{v z8nu?o0LyV*kkL;GrK*WVIgUS6cXXS=v=3HjHJZ1t6|Jntf7v=>6E2ksHZ1{`<9kym zucf+|vt#N2HP41ByfY2i`Xc0-du2o?$fPvX)}eC9AP=Vz6uJebTuV9qeYHLer6B^M zbR#hss}$t;^OXZl<9UOm*Rytt7{G}qibu!o;2p`MPQ)Z!_` zqCArXBdc#3$804Boxg|po}^nd1i>`xm_hL8-EbE9&^13k<&$T@)@`i+q!{!F;O~M< zK|aH^b^D0z7u^Lr0F-^Lyq92513da#TtFYDcmM*(Rd6znqrK?rRIQ&-EJcd>DY94X+cquW4yY{{p3} zae~I{QL|5Tv3wNO!Cm%tH4FCHi4b>aG#sii@H;7AjNJV<*j5ef*3tDd3dyG&<_FAw z<|>CS#d%49C#Rm9rYcZ{-2f{@k)T^_~$8KYvvf7Gv4hPkO$;% zi376VV2_3uV;MMubpEYT<4a_YCJmpjiDe^luql0H!!(@hP)o{jk_x3H%IcNx?dz7M z{JKssQ&m^deNxC8O;B?jjfQc@aj>&QdmoUo}}{U3RQn6Tef!GHV(g3Mti&% zyt$bizn**C&hf7UGb?QX&d}z_>*ALqXOIkJoE(IU@XL|Y%C774dT_-(WB%vgl!av6 zdWqlFRPSCE8}o%phOcuEe@@;5B}EQ5PvYeGUn3U`^I}*Q^S$3I+%?|uj+H0pBV_Yu zARy;%AvzA^+NI2xXJ{f?1X4Kj@8X^09`=c!eOam|T&P(^?~q6w(~~n>jJk42W=@>u zWmPMr#7&$&Lr%8+0^#Twc|JGtHbND2i6{^Sb1vMFI8R+>N z*OkLqH}1b%opRa$Eb~8}W5%NZmCrXxQocw{0pSVv7E4)AGlq;6F3I>Y=~X+EvSUq0 z)5aUqpspBB67HmY%OwH4W=9HP;+JOjH8*Q_WnWQk`GA&7+2d1fg{pX}p%9n;?68Ax z@y5S*93$~PL3NTB^h+Gaa=c1CffsIaeT`b$ukw++g6XwVsp4J(7^LIPf;_4a>YVOQX8tHBwsZDcR6d}UbXz(y+u2xqwr8eo0=>dRu9+lw~;>i0FO&9W<0JQZp&w%TFFauC%aW_(oj~j75G1T+~@tW zXBC0$rg30T6jWQer`OQxX)i8S;>e&^G; z?<-Q;VQt8pn3n4C&ayo}!-O9~9G05%FES-em2J83EHBz4lOThCK_?MG9iYIX`Ics~ zxaY~qaQgi+kYZc&Sz+JU!x)o$MGTZ-c}Gq=WF2bW(O$?oNO(8;Ia}-^@cXD0h|&_o zRWs?pjj=o^QdcZzzEms`jExFjY{UK3&d_@KiLTIXNIq8^(=l+waw<&9NvrZt(($vK znMH`UWML$&f--^{UfM*>uhPB964ufli{Bw>%x0|_7(vUjL740hx#KdW3^H_FAQDo5 zBd^D?5j<9lOsTV8pV}-~Eu-JFmIrGT@BzTE6QA&7cBmbypg|5G@Cy#cJ6y;oFOMS} z84?V=WJ_Fx&+jfoYJHTK)D3r69ot(JX4;RVHSD$mp zpkRWqhRy`nbV{xxr+g|fHjrw6c#gM&L8u{B_Dby5!CP93^ARp*Xd|07iY4`GZ`brZ z>8DoZxU}?Ye~FGEqD_yiC$zRojW64>Owp$X_r%-F&SAB!aWv-Qf6V?BkJyBT^lXpN zIYNJ`q8OVUxe=-D`%9Kpz^*A#29y2R%_B2*$yv`iqJ+J@(IydgnF!aDKTw}@w^ApD zqHd}MuWdR;uS-Ac{M=TkuDbJLY=z{=4N^ZFU9{&jlM+H!A4$ZRmE}U0L>Slvuhn0A z!F^G0XI}u`XADx`S+JP$LOdACC13<_R~dNH~TYU=9$?*a($m94T>g2kQRP$$jjUChzkl zcmT1oGKd8WhUyUk{SG5WLxLm$TTMnInSiT0OG|Y+k)rwK$k`lvof3FNu{QYoC%kaE zQS$PDc)t1bw#rd0LxUX$J?VQB@0??J1mr)iV@UoH96Uo-jKtef{NbFWRGEs4@et);{2^>udYhwlcMoO;AqCebG6|8U$XSxHu9C7;ZpkkQi#R8vHS=TPED;E79C%v-w5fYw-!r6a+~oD4^j zJWwmpT=5iDlQr2k>8-9gnKxo57xB%Mh^9SM99n{7gzh=z2a z926BKAb;>TS>)r74)l6)Fm3Hh1lpV|uZ>{QP2SQ_&fTuSsw(C(?4Ibk*ZS8)g}NAQ zNj8z?jlkd`?DH$@W&}qK zX;qyH_m$twzk?}G6sC<^fSJABj&{mF&W@WS<7tEVi4)R3vGRaX#<(_siw&vZ=Sji~ z0a=<0ZmIv%^IXx^;#qVgTbL#(MqTOPfZ&qGRczr`*$&VxH|({JXoRJ};DK*Yp<*)D zA)n0_SCH(c6|AW2es>?!yML4{P^~=I=)MD4jPN8Au^hpS^ROq-lNU_{MEcMMzLxE9rR0LWd9AxqR8 zz-tVC-dbHC8THf%@EY4N0>V-A5PFjo_lLXml=X9A;cQ_^-OiLasPuu#fkl5ba@R*1(CNjgAOeX#CYu2JL9JUz24o+GV> zkSUlVjBcpxojGpeP~8f#Jhb{IMJ+FJW?jG0N;K&&Oa4uE_TBN;C=uk$tc*i7)4u$J zgKwArkn#%o&7mlwT8}=>7Wa+a`o}G8@VSj6XY2H$;E0Ks=pVg=dO1(tUzBLrp+Z@> ztYS?=J-v>TJ1*n9JQPu2Y6b@6;ojF{#9{yovYJpGjnUj}y#yJTcd=byyr))iZ2!~{kz^i&B#dxkb;yEI$MC9 z?K4x{?r-a7l0iJ~cw;x=r=Bn^=)X0`Za{dR^4oE4v5M(S5qi6sw(U^$h>Vpj^qFj_j99(=7LcFs4sE>nWZ9SAnsEZh{xP(mTDmbIg`QS8RlEtm4bK;nt5IrZqd{!v@ON z#dWUx6+H0fVEeT?UHL2!f3l}7YNyNHrCE3S;>e43U`sP`X=#$Q6|czXn@P*C64fS; z2;_K)J<}r4b#_=iuO8R($F>bsDYez_rshXgQLe}4Te$u%0LODygk^JtQA)bv?Qmvo zQY!j&8bjk8hEFY%^M)X&)1I@@AC5-Y8x-2Dr>2B$ox)Lib8}*P(yv0GM}YjXn?C?O ziz>>t=$&_qXC`;A-w(1f4Z=xj^QjAB+8RdEexqFt= zX=B1(BV;o1MV+0G$}J>Cx?slkZ|%%fx~LY>5QJUc)VRM`&JzsVpLQusKMfbV9K09X zTvto`U^d*0PW+$)n60;h7|RDGhL||z{P2Ja8x*&@h}1lmMuK&Ln1vXaX(QI;cYfl> zK0&!ti6{{p9C0+zaj;KG->R>od@oomG(4nZFq|qv!q=NalA}Ph9^!hAJivzDBaGNj zLC4grLh>e=04M%-$f)98qv5B+PzNnO!E9?i(GObuq>j0>#I^6aO$kBZ?^Xy~Boz`3 z6Tbiyy%J6Di#Xm9v#SBLe8+16H*963!JskwAPu6Ni!>PQ5gVw17k}zSf#4Z~I6%c$ zZ}ukFrAT#uGa|`KG3BA+oAW(9-th)rheeX1}KMd7V+12J+?fX^i=hsZe+A; zodtdI#>naP#1@MyVLX|O%qE){iv0>3u8?x(N)Krr4)ecLRFed#v_6RP^3@RV_dK}Q zYPopI7lHQfiPC`=mL zJ!x8E2JA|63_VHPi!i>PN1pJwDNlt-Y1=@^wqv7jDmg+3OuC`p3~i&yacF(?aWz|r zw8jL?LZb^ zv##f!-LP}o#xp~X^B!8}<}2tPY0I9Ozo5-d&271aG3xWXiDKtz%ysRHpruN~YY4cT zrh1*+N%pdF!CQPYcXDLO<5AHH6iVg{(p% z*0UV_2<{x3(O|Rq%_rG1nPP~=rML=-tWig#6VWl!8$D`E-LfMJ0RZQWcz~BT7AM`$ z5q1qwffjNMxlvUBUb^dy3Xl}+gKt3tV z4@1uPe58r_ydDI$A$i@&&)4_4;75b6WpH+m727-ZYbyzN>O1pNo+rawweIhATDw&RPk~gn<(0Qfr?aFlkmf^&J-BYtvT8)UH!& zw!{TW$gf=XZaTFLDKNP(f@*y+ss#}EFx?1TGm6>Y#x|u}2hI7hQ(q|PT&49Kz)A~P zMa%*QGhHopz&1!&RB=cnS^LG<^j+~zG`7w!Yg~05w9m7AP*R~go@&aiNS*DFj!=xQ z?j)X+5cI_yffM=s5l?BL{szo1^Q52=ho62^o2ogu4nR@U6my{=FiSS0BW*i@Dst#% z!s6lGPTegH5*(%B$Q?2R`Y?RfGvJ&cH%QG+dDgP4PJ#bXxt`-`(PB6?0N@FnO#LeO zFP=a&h3*xAC$K8iJ6icpMYn*m;KrKMTk@(uWeHc)73$^iSBPdvI*BfX6Y;v=Fmf-% zEyd18F!#wLsds7unYq6gOAcdFIpy8JU!Atc7^ysv2*=<>5~KnR3pxI%uh1o>_t35h zwW{GuUZ1@gabl{o4ZO7{<+WjQ zJ!Uj5nAjhKF3Vt6NHsu%1fpP}94KMT#A#klwW!#oQhu#EdNe}%DtIL0ocby%Qp`{$ z^>z-SJLrTFy7CyFNlb2C#ktH*F(C)Ip05>1vYck#I3wp6t8XLN`^X80mS(!kHU(Gk zO)Da+iuz>iCXm!?NZ+akax%$W!D!sDNc^t#))Ow3YcAhERwKR}svd&8Qm7cjyH^+O zWd$NuHAAWwqWKRW-J2AMt#fyfxjp9aW(VB5uc<(GA0jMdORL!q0cUex9VZJ{hupAt zdWBgTRIQfcnz_Swwt3;rK-9&R{1TiWpTq@o2S% zDBB5UpRTa77EfF=MqdltCb1Fnqd`;cvt3hd7>PR5CjCy#bumh`lW1|7t$rF5ry^n#Se!nTbxaofn!PRZdlKKFDCMNqglNyxGgk4 z%>!C^ZePl59?Dv!!H>TRxDeD*PFF7eps4KM(HC1!EnLXcR`ZhjH^AdK=PaG8hn!4C z|3sV>m#oSCbW13RL!hA~q6$1hVP+eCOu8aF&!{ssJ+jkTOLbI1y(~CzmP^2w@a1%} z%I3G8LH0r-758_ml2+F>7?hwXbwdW-Z|~=2xG)JH|yId7%>+Su<9x<`mbXby|vtYAKiNYgfr;075!udO6G2vH!U!~ z{oG?5>}1J_P>uMq?IX7m&VYu|FbOm)XkE{`GdQXD4G$B*tsa1nrtU!9@E~(86?yV@ z^^6L3$M(&%%io{b*OXA&Qz7`UxJ{SD`h;7#gYWIfiBU;+oKHsa?)jXURErL|ZfmLg z0e*rL_t+xf&{>Vho^YmmP1mlo$c_)_6tl{}crGu|Qjl>*9R0iE<=-AGg=bymv?aQ9 z0mygpOPq1X&fDmC%(J2}4LkUPkpM{SjKV?Wg>z5&_`pKl<9h}h`Z^fT_=9eb1O}1u z_Cjy%784yH*zG!aS&9FCM1x!R0??P|Nkr~Km_mM}^k!nhuBFbO0(m6A4L=r zVew&RgfZkUDqavZ1*@yy5NW$eVP`c6Jp$mYb}<=-o|z)B=V(&UL*9{r{#fu;G@&?Y zg8*w7vNSMnV7HUtZ4`RXKQ9aes3BvRSF>-JUl;HX+{?(h#?L|Y@1q6;`q#AWQBcz# z_^WOOlZtM^uzi_#EBwT-h7Lt={|@A4y1^7Ytmiq@o${ow)%+M67N4_v>w#bxIIgs{p9E(Dp9+ z=&##P3~X)GUgOHxC^S8gbS8IjfZI<(8phCvku!}m?DEv;AU_HgA2%htJ)XLvN|dZ0 z_W9*+t^aJE!&~&&mnp7m7U`D~KVc-@WJEJ8g4$cb4GhnW7~=jAurHz=9oP|@I>H)P zCjF?4?l7#X4@`ULN&SH4Rs8u!=eq#p1q|zDP_U$7PR<9I!powb;$?c2pG)Fui>Y~$ zyUU*y_P#U_8A*^zl|pdKZn&ea=Yq-6T<0O&Btp-aEf24r0c^~c=V8RP4axjv>wFU* zf=0no@^3Fwv5BK;@|>K{z%;Gv=Q`|0&9fdby4RDvr#~XRf(LqCR8^z8@mc+v=X^hY zcjKC+>zuP-ln1c2(b4$|G&15W1ZKG}DxIUT!Jbe;32j6=tr9lWM}F-|zFm`mU(-M% z5(0%`txv4#$V_$F*U;uXUYHhXEQrWLWnk4*d2jkua9eF2yQ({*)uvi(MzDPI!$3zM z%`>7SkO%%U(YU-S6_O1}XfplsVX@78<_yGp2JSj2dk72O$KBGprQ^^I@hVT1nOw&qYy;u)E}SR`Hr1A*|t9Kly!vC;X%V{3jpVd#mu ztKMJtE1lFowLYfYi5rtA7FT#dUPjU8tDvkxOCCUHbh>45((WUG$LjbT1LG1~K)L}w znxbY>Ik0AZfBNZ+yWix$>anICW@PvWwN`SZdU-r+%E-C~2jIDlXR%gK#$t-c-Fq42 zBXsY8Iymy4580pSC1?gEM+D=84aNATc^XhykuUDEl7F;$^lMEZjrYq~ZS)0Sbb*rh zet{qjS^FH#v89LSy<=@hYv@Z-sqEIpCcxVHgiz=K*K{ z29VUe;z;ONHD}oD?T9DUSlCnnaP1~3(iK0afEOH+y*Q`iUGUK{(LypSxhY`3lr+*x z>*Db1mYv_-tR$~zPM^MY*Uub<7p%v}FA`sb7xbYq#maV51(!k&!>JL7aVgWwZHuX? zvRrN&Ay*1ipMcnm)yNCU`}Y%)!a9hW5$+|?5X4p2=b9~-ndtqjH32Y1N{K#5vIIcJ zW9OPDIuc>$GsNFlW7Kw2C+V+)?5rxQty1W=Zq()(GC3#^W04R~J~U%z4K0FwXPVu= zcmNc6OIhM^rz|@n_%ICj)U19?Ay1Phqzp=}<1WK^^@|yeA%{#bY(vdAyMY<4$^k@$ zmqITZfp^26p2sn@48w#qPSphvX(YuxzrlnR?y4!KT1#@(Cr7cfShn7O$D`%QKem!k zylz9=+9Yu?im)APbqSNetTR=NjWDQBT^>Ye3NIogn<4pDE)}lF9s)Go$_(R{=E3jmmG}9X8NHCaF zjqgV&_|odz*XP{}p>*(EOS4$z_-{vz@Eqb;Ak(Ovnw$!PaUjt!s2uaUQjd)NPa3dm znBZJ3cJU)NWmxKTsti+2>WthLK^UFf7Qeg=tS6*D#G$pcqt#Xm+cTO2*sju`oh(#+ zD!xAXrNr9OjBZat-{6{gVo&_+o8vZ~Id{q=nPfgArY*{`dh58f)@*)S@lIt@H|VeF|JKix5j+B~&B~I|z^*1Tk%l)j2ZL^{8(_d*F`x={A^4*!_LZ7Ng$15iI zgG%>o-~iSp`m&lBB%{~=wKmDrUeDEzD`n`u8y0F(UFc=)WA+-dAcnz?;R?LKu4Z!D zH2SXI@+GMu+0EIV9z!whaF?B{$yO&r`Lnk2tBwN94WGKOq9EW8CgC5!4^)M27^qm>weamPdk2lc=mEZq1^d;JDUx|xX zI{(__? zbp~zcCW`RyiP&11T!NG7ICmK_@pU#Fl~7s~m`N4fU`{jw`Z z?3P185JPiU*`E!d+aX?c1$VnvVZnG}tkE1kQV9Pt7`*y5X6s59YE$ix6o{NXuG75E zM!1wjLKkEox#JJ?nj_e9M-TGo;oQFS0M0{~ylPa+?x3OiIbSoTXTLyuP3%ed0WI5S z#iBR~!*Q|iz8aJ}k!pJd`LsvUbIDB1grjQ`{KTDOft_OG<_T#*kjZO?Hj#oznGpNQ zNG@v?2qOCo3rZ{lAp}+G;Y8z!QfUAawl7zYrK(2r*-10F?n;ezft}w5ZOra~Jqz*f zZ-#sw3m4HepS7F}*UL2|19o>k(M!-Xlirb`omHMkX+$?xonLw@;`}Cg085@SG~Gg1 z5nJJ%4qg0yBfh07lA;Wj`a& z22WJMlJRf;y(w_JpC~XphurpbV?fZaf+~>|@wOCE4;`^8ZDB7r7XLx7DsnstG(R8fGllx1UNDU7niat$d`v z>Vnwx{BSI(Ailhxb;XIHwX`V{XY@FYCJMq)6r+RU>u&=rsh3p%zrx}Hrgc9KiPZ2tNHx2pB19)(QxxCf)^@xemC=16uC`- zT$?X)=&fs36Kq!PSc67yV5qV{cmVI_*PD%Awq4%$&rk)d8~5}|<+CN8 ztDO%_Fc7s_)k_?1`cx62uT)ZQ0PDO!v`S78K_=p8_f;F{1}~_`5@X;3GFMTMAgsSO zSewD!3mO2vChT1Y#Knh3DW^)*T4#Ibgt4yv=p8B1$s)y*S5G_w^F9iCeR7tCx9Qw?*kW5B8Of$Ogr}a( zrk=EU@{l!bsIeJ5o@Ix1={>Gwi=Db82ZZp4| zw!(#TD~26SpCW$kg1;E$JmVR$)MeoQ&#Rfd z>%*tRUaKgW9kb}gr}Oyiy54zr-EskZWhu+x6chGoGc3mm};>0bp*#8$c1y6xd!8~lV6)(f~(-ZQV&2BOT zfgfM!4e)$R*avtsxTvl0hGSs6om>|PlP$dV_u$bAT8tl0N$1^j;!{%oZAlRE=Oo6I z^BIP|8r+x0<|sQMm*6>@`UU?#gIgthM9U{E5YP|6Vuj^@3vP+k<;D_tKVRUt}*xDTxjhb*IsHpqz=E6UfWcJ~+Mh8g?np@6O`y8#-6%tHTg=PYO zFH?)E)1ck#C^@gyW_%zr|*LYGT%b)*sQlg;F^WWO2a7sfphrAIl znLf1`uLNvrdv>mE`{Uz8U>Y>n`Q5?C~8g%RWYo{g}oKesCA{op-aQx7cKzPst1g^GjTmj{KWuZ`4 z7!2py^^WpVi$AYeHrJ=!#ueR_xmR1(#fqms<>KYS_s7Z5?S4teDzZHTTxLB0c_?I^ zWq_dQ$qBpDy0zYD9xkci(4W|2_dX}I(V5DvC_x?_e^;!KFL`La^QluK5vE?#QsNZ% zuW_Z(@DfTtMdI&s_>Q`V;H~UrIwBLMPHtb|bzF}+4%9)}vi!NWXbcM>=<){;1CCN>t--0m4Y zi|L-`o>V9Z6vfujvKWlIDf>2SeWrA(Qo9e5@Cfy?AhIw)ZWr z*ogAs>6uLzxCr?zth`e?ejP_y&d+zY*7$}+4IYq}SCi!hR~8XR7ufDfl5fH8_igaR zR=zm7Mo~q@i|4uHB#k1)1gw##U|3;zH%k=?z$@OrF-4MK&{@ovL*!HwL7&u4^{dRd ziB+?~z3X%;)X^-iLioCh#aPbXzWbmC1*u5nnkpEc4Uyw@pzZwV@o3%THf(qASCd7K z676HIO47LK8o+znruMrVsUuG*vvFm$&!p`1svjQMR}pTc>wlN+yK5cyTTtrNdCE4P zAV${grQytKOgoo>C2S8^vaS`^S=InyO^87J!58~f&1{}rP*VK3hXGN-r;i1U11Sk{B>E3FS`wV;2rj&e z6iCo+j~Z}{Sc~6riD1}JLZ}j)_ecib zEYnlG${{P(9X4Xf&Wms%(Mu!`n;25$lZI&CSod=+Cz4s|dT`6$cc)_D%kQ|!nAM^a zb>xQjWJS;qRJ<%>7_A;ZySP+3zRw6e!g15`l%6c=X$g^T>Q3K}?~pllb2+iL!7xqc z%q;VvdLp*7r|W70_Wv}0TCTM6#e+7Gnn)ptA(G4upYJ#WG9x3Ke{}T}N()ts3BL$h z6_!_{?Z|*n)M_Az&ymY%NA5InLv2{_p;O=l@5FmgrmpN)SDRfIz0p9$tlC(u^wtOHkJ6 z`Z7|t;DVOhqBPxHi}*EFDWEs~o4_cP82)N?$f(CV|5$hbuRvCB{RM7YY`Nx)W<%@Q zfclm2K)1W(B|lpV`f>n;WalfFTTDQx%<2O=CRycmHclI7{OS3t~%7^?im18E-v3{~0#1U5S)lpo}hDnk(QcVfSTp!X?q zX+kM!x5RP+hAQZQp$b;}NX9(+*HC4xA23uIe{0CSe_3VP?!$ZtIeo{<>p1W4NFDVLP_k|64ZW;kkGAC2sJ~zD?l*j33Fm?L1miCkzryta&oF zFJ3ZlfA2=ZD$)$#;1@)z1tCiB=m#&^Q!$=0pQLKXUj3ucX^$GXc(`CUD?*o*j!OFyYx{%AaK&3<<(eO;&Y*JO8j--YU-$|0RO0m&B zA30IeevQMec1)cf{RU+-WJ{3dCRXvGPQemo_hv?8&z+L6B@y7W&%3K_AuAmrb1KjY z&$&U{CrKOwp2@f4NN^2mIVuP}Le5XgCtabI@0qD_0|B&9$Dpn0fWIZcg}!Fh3|~tY zbpuUzYdDa`Wt5~D!EjP1S{J&ZicJbc#L~t)GTAfEKPBSj!}syYsMv`G4L{gA$WVpz zVsT*5l1t*qUBmZxf}K(KivfTc^e+a$4@Zm^jTgSqF9v{-*=Pjj1ML5003fsS?F%Cx z&9}NSJmA+np8H#$>10VCC(I&EYMJEveq$K5fTfC}*jRo3aE0qk{;hAaPU~q{HLpG$wOgqiPmtp zrf*&Y!LwZ70(y~$hbAy)%e4)$dw0?k@~M}eqEA_1mfoyq;q~T!n!moVCIYe*lx<1a z9;xw9?F4$+_-H|D>N~zoW7-FYgWCAp{-n$d$5`x5vk@1Dnaf1d^=^wg(pI%bwDWE3 zAhqy@KfG3&D)k1KHBKss@sMa)`<;6<_`M$9W3cpO+0{)U)zLIFq)J2NM60F{%vLGH z@#hx@>1OkuXrE_oB7mjJxA4sEWkdJs*4lnw3atz*>-i&@5AN%;=s-n|H$x7UXgt`- zi;_o{ip4Pemsr=kt$N{5W*NX42gQpXJi*=*{v?4XPr%hRY|kJw1B47aWwTN67I+jcUsZQHhOPB=*> zoY=NK6Wg|JeVuvU_nf`=+50=Es;j!Y`geErz1F&~D-oMO&eEHw1Rx_F6mM;CRR5KI zL26<<)rXBUewqTmcKBQHXwS~<^+QgbPgqK{-t5+b6R~F!NCF7|4^S+Albqo7$M9Cy ze-2djA)u2_fIu~7@c)1S`0qO^pKGvxGqD?LHULmH3$K^}J^_xxA&mcti474zimf*$ z1(o1x#>d>o%w4yNvkOE}hlKE2}0w9MFm=0B~sTq}i(R`^SxD z$TKxAQVPpH&=Snw(5ui)8Z>{GIW0L9MY1WI8rya#(hOZy^N<;p=$88G&^=roYi4gd zV$o5`Jj=D^UWXmRH`bJ)@Q5}&90vIo#o>YCZP3YBMN?frTpx|O{bge3qpm6e;uXMGnzQUA8`|1662ms;#i~s;Y)&3#?V!~xpbP@5#Kl9XA zCN)gI`tzw0Z#p&komMBsQmVY>%{9B*WmXHg>HmZPi2FAJz%S=NBLHOnI|RVk|AYX5 zqA6BL_6)V6gF^j5V-v(iteJMds9`}?b9p6k#7_!F;1n23J2Ytl?6JQc0T*&v)U*2- za+Dl^?wb2%)vvRSL0+sXWMYn~o9v6;3cH+~`;_AJ93;Puss$nQZv;S*HiUW9``5>k z;I6Gew|@`-LjM5)fc7s00M$0QjaDTD0EW$yV3b5oR;+hrN;@=g4Jm&BYWWWWV1N%1 z*|Js2?w)yeRJg*E6^!t|AOM8IJQu9t-iq2&U)DzFFKk^NLOEb_BrLjTN~iTn-7h$= z`O>2RFzo9Uuyf*OJ6R1Q;*olO&xGO%*7P+tON3BMoFq@G+y^|Bwo-}YnHjqrt){lM zlh9JvXS+@GE_@w!%~Nccxb=I_m@PZj2&|cS-x7V;dg(4#bhdc~9KO_4ft(f07)wRH zE~{f(SS@tcL{vgMvci)u3mT*aI(;}n?&<#S_o4#!KE>M)O{AT{kcWN?RU)nXrwf@>ylwUG|v29 zpNZ2>nMS*m|8MtySCUBmZ}-3T zv-_`R{3AF>cwCHRlX6RZzIaQ7|gS=haY0&_AvL_x?{Kv%{Uo zrclORs7Wrm-yx{C!#B`z{>`eq>KrQCLuspUyr+K91;zFtd#MLnX45Gvygiu z4S>Qn`WFg2ES@~{3xAfZDOg_Wpi;c6o{XG;FpQ#MnpC;sk46SG!Uo_Y`*Ov*W4O+| z*1UlCLOw#UKo-Pi#=dV7abP813t)(aNzT3~p=^q(lTmP2+N!Iw{p57xRxcUe_+2F5 zeTnL0P}>#>Pyn0QzX0R#%sx@3-H?Ss4TUIx0OmfRGgpDg-zmS8;J+qu@)jChl4Y*r zuwXY5o%au9)j7k9)JMs8`LA{J~x2%fJY5UA9S*VlV0lZRH(JanXy?Hs6r_ z9rEKVNB%ALEMM^L5n%gO=f97~Ma@()KEjNUYe`VGzHiF8Fjgs%3CqsC539^oRuuS< z`+z>81pr~E8tK4(g0Q=_w(ILRcm6~3Ukr+)+1p|jan9lWv{OMvJ>yao1Ve)!8g(hD zmiorhDyINHR!FfTZQH!T1#z;z2Kwt(JAdr4={`qM|JQt=>dRA>atdRiiO%lIgt z3~yCVmcd~ZY-ofOC)*E2Vo02X*%BC0ARdl72%KS>LX~0KJKi)NETT9H0AW)W7H(() zK-fkzS&jb!Veiyk28;KgrYDJGy^9hfUNF)9WU$ zo^Y02Dgql6f`Ratl(%ps`jdBJUG2AA{p-_29*z7(KdSI&0jAar?#IjPS}OkMehbpG1=5p73o?MuFXjKJ{dfK! zwf_sYou2olAwZgn`CI!3q^Vh~zqS9rX-ao~YIROvn!Gl_Elw^!37Xb+8URy!lk%qf z+4N}C>4qr);9$oa0LgSJd$jr#50U(C0I(_iF08gQ`bS6_kt11oZm9#|xp++c4mv(= z4K{7It9l(9fpDt0^h;Z9Hg_&#p!5LG0KNa*%769#;Rr{#muK`sx2G8f z5nBMg|1`)ftiQc~kdph(!Py!M< zxNuQ@>0Hw~Ue6#L+&zG)Uh{xf=hx5y(|G?E2k0HuL(YRJzRixhgbIHP#qDM#4;R~E zBQrX)2^b&i7qWnijns1RkR+Wg;OwxT;Gl&ei#I;q?MWcrX^jB@xag<^bQJNT*k%HAMzjP9;?<9s(gmEDB+_bQ(L4O3$T zz|=hcBTS81xNAJ%>$tP0@gMhp!PH#CIa@Zszg9WOyTgwx;}I%zA&GBa{x6u?(SLxc z&Cve~re-37y>gDWp^2-LI`|-ArjfF5=jsbW9Z9vKR`3Z^gLM*;$)`n&vdr^z>Gajt zP|0-cy z333gZ^7nP5a#CtnG>tEBXLFP%c8tG;)n2X_LPclHKW~oQ%j~?qt|!4l;UQ^IdS{=@r=%Bx-Z3J_624jIvzD} zOU!`Rxq>-vq=$eb^W^S@1!6y*hok{~CPeeilPd2X8`H80%hA@yK`G=(@ z{n7d_mfCyyz1FfGhK+M!rrXrOifPl#H$@GFb%G{TkvZk}%@%KU!Su3~ED7nMc|iaF zfrLZ`I;~4FY0r_8KF(w)lVVvQEg|hr8_@OdyAF@e_bhpKYFX_Yf%OR-F=@`Xnf69XlsK_m|x za8F2JK6##(zWW^q)=McmBG_CH$~^Qy;?R1MuR@}>{E~k?M&_1Y$%(09lfI{NRFd(U z)j}M{u;TNcFeDVpo<{Q*6M&}n6NQ37cM;-Dte)lUd)+L6ruG)}4^0j8>>rxi?0^w~ zrUtktd{>&G7SdV-2QU8O7LbjfqY0m!Yv!)PHF}8n4F}RXO_(yX+O;#e zGeDjbWfG^u_g^%%9L0tuwU2LO3l+Xi{KXO@B@(26qZGg^v;%#nLk9_nQn!F8HAFV7 zcUAZqrNrV7XdVAXskeTcOdq@RSMi@MV>qyu9hV$#OQ2#Oyrwm@N+L z3upuUH{PVlm)O$Gx%@v{Tl6^#0Ig8or&h@7Q!9k=k5;JZ;2@?)k2NA~#vc%+;OeET zTv1);b#eHLiYEV_6Xs|6uFbBYH_}*=Q%dW`$}A99)=4}5#Zxl?UvVJ(>zwdJSB6Qz z?w=?X@lTYJ#0}@K);+*(TOiX-;kAWhy5s8}q0VVF3z%pQ#DohSbZ=v~))NlP6qgLYI z*mkSo&pjc|+;GWKGw7?^a;Nn<&I8%>!p$Cr7Oeaxw;uyL@7m5~zjdixVNGrv~1-GnNLVsmop;M3gL4h2GU53T7C4w~}8@0zomY$Py)=-HbF z=hVD^pHcY&%s210NWC(?IA<2XY%`CO5~BHo8}{w$>;D)dM`Yz9!4H>2snr=@1H45?bD_7+`CU+?$0;8Ou4HO&Sz z=z8B`K$OD%NX+M9t6}|*^<^rs$dt@bRsDs} z%c}}CukHa>A=UrGDzp+$K8V6!E4vQ?fF%DGZ!0P+A|k?~tidHyrIgnH5gxznKgyw6 z;^_*e2e1mo`(=Jwg|8|H+c>LSftWiIdU%@-Q0>E)YfW=h2AkKFSVnyCZ%A5Ni@jaQ&<9ffg za?q~G>F$4qSP9@$N{eOztZJe@6=VwAn@>w5(9W~2#Ja7#YZmowL2FEJ4Z{)l#@}T7 zjeF=?igw=Un&paioU*}h8Pa2HLdoVtz(t8s&)>jTwI?hh_gG7Uwo-;(10>C!lrIHt z*S#G~(jc~fmc#Tq#V`R%vJ7e10jC;;F?%})aL!b8`v}0$W{ffKmGuWN)Z!`zZ@t_w zJSH6^_Qoh9^Sfmgoy!P<)zs)Hkwl-XsUV*aNzkhq5K*=VvSlZcY za{MW=O=%UjZU9D&DTWmlC&v9J(IC+m(%gPbbZIt`zyby$b@mly4R&tVb_Z9Q1eeB5 zl;2#eZ-08t)Ctn=^FNFJR6n02azciLVG8H+g`Y3kvArhEe_jO{f|}Ai%#N#W2Ynq@ z2PlQEc5L(0hxgKy!=lRI11rL6QKG4P9%YkthJh5Ypt>4WAvWx~JAI`0J&_dri&wWT zs1ldEHA1%)Lu?NEew3nk3+nan{x-^2`Ey=p!~2o0x-qjpfk$n}Dp&5D4w|K|_SYzc zUIAE4)t}i6R=?yFCPLh@qU0}sGSnu);M(6G0Sq!(pD9dId_Mq*a9)ASjo_I^_RjZ$Yw ziE&pN@PH_#Ju1o3jQyonqWmL7{xXTlaR`&)A+4Q&_ui=26Yka#@mBp00vzB}aBhj; zqxB!95N7k&tm&oF?0+kTF#n|#%C->=dUL|)3VRH`UP+lJu>KRQbTCa&`Ct`tYJDBx zRvWwD2;n&5JpbqH4V2PGH%ja7JwQGHIUDmJ6R?<~9hC3aV>iYWO0-kQuf)z|mUW!V zak0Dek$6pTuj@w_uZe}6BLd(gmG9lQ9@0eMv}Iq%)Ynb*cT6DRRGZ-22|5J=4iUK! z;fMfS>JXmwM|+S5pPfD}XuTDklX;MfX+@M!x72Q0pUUSU07EU{{Hx>2Z?AxhFD(@Y z))$VlMKkN}v3N9F$ueS}Txxct=JsFd?=;4#5X`=tXf1f7{FkrYUDsI-)S5^$hRhuL zM}!01B1#!)xumMv(!ezGT;MgA1^{8u&d6v2KTv67$dO{&OHOFv4dhtLIRoi5Meb(p zSIP1)A;|$}FspReVDv8!mU>_m!TRiCmz{G_L$|3gpn&3T*bn|9;A{KY*TgqwENvr-6|J=xIl| z>G)Oaw1L$CdYTl5F@T;%B3YCO5C)|g1m1r{Pd?Wn5jj%}_TzSsX#B8|{1gVAL-A?x zM;p7hr~`yS(}Ef)Zo>2oyWhgcq$h&*2_cXTzBgrK+d28FNnL=*E24AvZC6*u7N4~6 zLH?1gcCTl!yvm{v*RR1M+3eKoZT{jp{*;IKIIi(qw3~(UuP})1uQ13ggs-uUEZ}4# zy&NngN&8<}Ds}i%7*t~gG;vtIjUYeC{z2J4vnv?2kN6d}=gjxt!XP|zHyLhJk56IH znPA%oja%LoboR^GgLOWN^uwxMqZu(C<5J?brq43x#1%>MZNR57=#|6Er5BIuX?z~F ze=*B|lWlB{iFufc=9VJV zhGoS>&wwr*wI`znA=kre{E>DvXRZzZJ914pV{yEQFk3&u!6L&D*-GA6(?BUW&E=Bo z8s0BC4-~I9r@V}}4W z1j2EenTUYA!ysOk_#HnU_RFi)?ja{of(iJ1Kl}-JZ9m%_j)nV_nWg@tCVu!OgMPE` zec=Oi)EC(aonK|s;^02Mv9iq5B4!(xaA-_+6lTAXSaS8mAj{+ z_v7CBI1#+&putiY!JKr&$JR$g2Iffs#^oi;4&42C>-GCD!qyVMV5)iqAfRF&ARwOq zTb5Ebad(!saB`M+w6iyHbp9Vh)f=U0@^Xxh83}&^!1>b*aQ@U{w&#$vxw-5m3;;<6 z_e=Knw~V-TWrbxy#a9Pk(Iyf2o3{GR@XpMvVUHzsrMAKE#buDSDpsx>?)!W?e{xAA z2qth6NT`|GE+u(5MItNGW6zIMO0W}VPocyy+sd5M%4r$qHDq7wB0m@eLJ6$|=Y_9fQ{tnI;ELIcn%*>xz#FDSAC9_Dts=a>Ww=a>C z)zTOlwh|sc41q09l|<~XFj5UW1eVns@J?0NsZ$HOP}(J>EZEB+VNfkjV!e#Cl&sqj z7v!zWu^}3PGx&xc>#qD|`<<>(=WI2_AWb6Fb}6_TPE18G1=_#>aN{IXu@WdSi=*At z>7^0@m`1HkJ%uX3;a`sf0UY3-))ibhsh80b(AFx`y{RPvw6%PHLe8jkMc+*=`s-n= z5YdV(sRi>93YR?Kbj-&DYMXNvi3XpTH}bjUcH5g;3g?9ocw%#1< zE;3A^v=xZ_>Us&EKcWfxeB}Jrqh&&1K~o3RwLl*+ zZBN0c*ioPWb*)(wi-KH)$oQWQeYG`@&|q!C{w5I}WqB8eR+PD|yiS7`Ii^&Wdu8}6 zficmM58r$W=9T0hkSW)24mAmm8?xMz@4Tz}(vIIUEjL={QO%LD?Hg$3%%SJwbUCu` zEGU%`9L{dHyudb2h)Z3K5BJT)HXD-v-u~Ij*#^qXf!)@SQmdhD-R|x}9&V1gz7&#; zRE%pqM*5s@%wpd%qn>wlbynWJ7ehJw-whLBiGowkl>7w$<2e<)ut$nyzVQ4OIjL}Q zQo7b1DhMI{jo2=%^{ly(HLl4O*bZ!40&d#_^If4<8J<@);YpU50X z{hg0*2G(mvFS_fY8$(1S#h`^cl{@stZ?I=V$PbGe!MBsS-9`IleJxtWW_b=H zYiTJ4LO@>&+(a$td+}3JvCl6%V^f(Hm)Zy^Bv#epg*S2dGmnPVb~2YmJ3_qpqv-;VBL|ZIuK!_lhmP@ENy>FE_yN)JDbL z{I%RK`@250k?YFFszZ|*ZdMPg3y+h1F{6yad?``r?l%~6Fc(&T6D zUzPhBic|cnCSr;dyZxsqRO+o&n5&C5P)skYovAv}<#PP@#gCPXHY7tWWAi($PWHpo z-rSAxK~0zZ;pq@n;8Bu-!^Oj)R769zv0E^9F?ubC+{YILT((y?m{apbn>^)bjDFg#wn_E%E=Hix zW$|Q;#piKhe{KRcEs?%VqG4g6^4omt`co zZ_!lXL;Z0ELZ0v0J;j~H7|00UDB&`t-Z3N&NW3BCghYZwt!gn?uELt%-=Ve2mf>FY zGcTL70e z?xk~{Q|pU#3}nzEGNY|*$!molKH~K4+TsTsT{nD7Plg$ekTSa?xvKn|czrgvswg1u z8Jh-B4`!D7#OB4QKgJ-1SAR!8&dP^-j%I$}AFYfIJe@~KBLs2!-+Z~^z-Uy&nDGue|8$Xsyyw3Sx ztMLk7^Yz@2Z|!jTZoi$`bYS&{E$B4A)Ey%##(M&!k-Dkn`^M1R@ondM=c^ELE!f!i zY9jJOjo?0>X-U*>qdH0N%tg`4i|0MKk=OM-Rv})1vr>(ba} zN>2SIBaMKe*RjngLf1s@5PI~kst@n6DOMYa$`tdtX(l;j{{DI9$-P$Pt4S>F@-K4a zjYI}vtrh%hA`AAYrhzu{*N}i;+i0A{oo)=`n}!3e;Ldv)c&C6jFZWgT3GKBU2^fYs zz6@~6I<&=H6w4xtYGHa`?;?obJg>G_mYlX%T<_6*#WX@ zfy>fi`9YIj(iv9q@%rqkuJ0+hXouPjGLO@gu5`;Qv*ZmW&fm$IOC|Gmuu;`n!sITH zMRAKr@wezoIgLA-j*bU-nq-*7M{a9Qut@f|YzRZ@lS827z5`m{qP9i5o$K5~OmF1K zB5TO}Js8{EKdMWBf6qz5a@Z!#YiwW|dPlmjfbxN}ZaqYNQ5Z^%AbdwCPKO|)ekBOP z7C%5tA7`ycp$z{1QS((+xevI=5LHkDMTCOTf&RExOd(ibhQ}@~wk#c+Z?*mdq#G&C zd1)NCFyp|p&(LaSOz%2&paR3Mc8i|7z+)2w2)~5@EQfn;PXa!+EL{FC@vv z+tCn{~2)P`?Y&^vn2D3fk&4&CSN^Vg=cq?SuBsjHX@rp z9@c_0%4k5@^69!=a8j07Z6q#j3Zfo2SfAQIYO@@1PF1Yup=owSx!i-*d+ zahCK%Pi;v{S^|FJyXN3oO+FriWPMHE^;O&b2Uqn?SW0{=!^E(Q41QU-;^IyaVD!-04ZMSL_ZWw@{5gZ#TF?PY89R4HDq1_mlIBWc4YYiJ3NhN!e?jq~NmTBcUNM z<<1whdUVz1Bp!AvD_T1$eBtdQLZmpoMAzo=+^lQG#gEvc@8dT1a2ij^veW$0@(q#a zjGT_ip~LjtOPr3=^JK*riDp1aLxdkG1*CU|7c*t%^nJls;IsrUuE>MM`C{}mGp&Pp zr$cUaj?ci)(=O;a1hg$s=j=pB)b$(BE8ET%<=%9@->8FSfh?71Xbe!}+r@!2cse1KsdK>{>%ulXm z+colUL_4i#+ueJQv)>3YQu_9%VZf4!xNH%RW6$3P$Q~RHVHAC8nq(>B2p9>8n3z2C ze+GFj1^@vg3ImBDRFi#OQaJhm{m&fb-Ce0NcC zaZ$O;t?OFQV%b_L|N_lHOg+ck2r6!^yskCHmy{F ziZvaeeyZg5RH2d~L-BAV(sJ#}ua^RKGxt_vq8Z6`TsV_V?p@l58X(JDE%ni)>D9`Q z@WYQTHma6xU%FVS@;J&AP4hozV~XEqrM zMtE}uSBxn2Y*0iaVGsG^fG553*&*iv65`dZgtktx{Hbs2SjKdO^=2-x zv(Mern?%5uv%Q!0g?BTJT|0a&$AEuqX$AsWn3FA{VVw(enyXak>+VUI{N0vi%Ux+B zv)z%|ixc3E8RU)}A`azGGIvszoo*rlx>wLBydM4#-B2#hOKPudnEm#S)QDgFmNO$U zg@qVa`bO~!FVI%oKQ}y~1;`29czm3iR^g!B8R4xzp}b8m?P2^7wOq~zUY}Uy#edKP znxm=x53)JkB0z@A<^u$f;YN#UV3{|W0^lW}^)wAc%U zET3U`FQ9K>jSg=~xv!3lXl!;i_ zFKrgF#CD%IPFqqf&DIK{ASAL}(KI@or96(!t{(RHa9dgUz7&^_ye^>iKQZ|0>Nj- zQ?~>gqU4GmkcS_paNgiPq)7K2NImi;zG>8E7OQE6Q^B$Wt^3Eo-BK2CN+@G*?YBot zT!cvAF^su^9A(-fP}Ej>E!0&IemvS{RgS2!&izQ~0(;(2z`oNLey3k|lq(WtA3>+D z#9p|;4n9QG9<15dyw9|E&4&p#!zL)EPDtREEpD(16J6=zskStwzxiMkI?dDn zsQsppHk{{AXcSOt4d9u`Yt)6VUQSJaf35I_0%s}8k97uUisi?AOI$v(ELS04)OZ-; z0_v^1q4ge=V~7k%h={+GY}6`&D7ZWzst6vZ^y{sSy@{ltwb_XKip-3$%ZSY zaEN)pK(d&$Sg?BtRIyxD>T~>Xm#38%C5o!iy_f(j(SD_A%Zxj4II@-)RhAuBAyr`#0a_)~@Ws`SR9Wiqa6=+r&WOSb3myzR@ z&)kXO1Vk)}Ik(rZZbDhW3XVx0IL#@}D&HrrO@`P?mqN)zoeNw6%2c{GwK*;GA`&g|P@{SVmYEdN@!4ODSt2LQ_~~d14fypaCtF=_uyz<3OsY2|d%09Puul zr~y3&@8mJxk4#>RoRG4nCi8~UumF}QU`EQru;bk0r_Eh2lT(MB#m34&nXhiOE%Es# zwyf32OoqXMsElwccd%7{TUoU?K|_=zVp20aeG}9qm=f^MQn|{8m{|UcWSK!Pt5zd+ zQAL^b?|jv7cba-?$wa8CebtRgh54Z8tWgDNeq)BZ8#AJEzAT;W&N0OgNCQCx-8$D` zi?J1GUnaJBj-&mLLUJ>d-$lzItqtI49CN#Wm>}(<&=x{Lg$R3aK=gPOe1+lC^)66? z?4_L}1-%PEmexpsoWoQSGaXo}vR_oe3vx5KnXFJg_$@S8CU;L3yP5~%Ekir=w|ofx+&dJJ4)#M*mA2NU zDveN+I+)aT$5279%H1ktsTz_;enz{{G~;=KED=(}+Nkn8id3Z*T7E&cu>@(S?2Ii- zYn4a`wBASX=nAlQ6g+x>Y#5g*5E9Je>*%aDzV*)Go+px`Kf^{|6m7JXjTLhB$Vj2_ zObr)DQB!jt#Ry+$aV5*gSne}=!M{|&&CyUBm=C4*gpq6shuY8%KN{Jwc4M$H+U-wJ zCr$}(QAtRopROWUsXH4>nAuio_9iGzM}|m}N;m-v*>&1I$PnnlhoIhuT6DEAggXQ+ zOzf36vU_nKC<8^4#Sg_svDpr_x|C{4QpZDGojMQ;Gym9%L)A~Vm%O_6lyPMG)bhLG zTMsY+<0uv0;{l7}n{kf{U60GspAxXP%-(%-y&q8^8$kWAo^+jw*fFj>|;gvo#bRWd}C`^Zw%H}SdLWaP21q#>)CiCw-Zu-T1mUY z5O=c;Hrso^i?HVTZfiC;@jIShpaw=6U0s6qFbo2rG=FBH7QXz_BJEeauAzy%0dp_e zUVs|p(c;Z82w^j_NwHf!u%`U86mnImrYPLvI}mS!&|eQUZ#e@a+2MSaxvy!VD2S{G zZXqo*x56^_l=vVFNcxk%?Nup#-tLZNcg9&Nt*~qQbtNC%@Pfk6jE_kVb|%iG566S~ zxKW;$aXq!HW;ZWEq~!X%gyzPGR&;)OWo$xI;W%h#lnQy6`DBkjcj91w>AKySjNb@I z!iE^YdpyC^{+c-r93m=}E2`w4LvY1nS}dv0Pz;o1Oxrjedrl$_@a$7f-Cv%rV<(yOsy&RZHb z^I(h25HqyduT?`m{2-s5_j9xWt7?LShpcvlFj1Qk_!TPdXj9k|^fV(LY4q($2w{zY zbmTg8`3BOFE(YFZ2>2R_J0hnCT5cPNZwYu~yp-YE?*ktYA#@7@r zD}~<&v-+KFHb8F1PBQnC%)0OoKwi+rr@%%`eYG#wyTX7BC@`s!n)3?q z$c>e|^|Jof}wAmPR^7!<)S=zz*gkKw{H!4S)+|VgZfE$>mYvC!*r=p$7l)e{pCDUl!SrdU-Kg%lTxfm5 zPZGndJvDPo$V;gRgRBo5pIs3eEQv%2ef&X*=}xNLtk! z*8VY<)#d$G?1K|UxK7lQq~ku)xXXZ|RO`l-3;N+>wXGHBLSMG!Mt$`Nju&q2WED$6 z=Hlp-QlJL%W_O|Iaoqm>l^{N&S)XTTzpg|7k=T#pn z(Ko49y3#No(toxd=BK*A36NCUC9F9FytH%Q*M}sI*#Xg2s4S2#sStJh?p8APWsfM< z)z;y z!z7;r2gS;rWX}lvQQP2j+J{Ev7HGobq}dHr<3@W8f^a#Wv=tK66^8AkPP9#fqe7dv z7(rc{SV~Dk327_qSss^vLmBWzLmTSUe zKR=gscI)mGSsqPv5zV1%Pd3I#C67=x`!fTpt$mB*;uf0C(M#v5z*;f-))7+yJAOmL z4zf)n+nTW1Q0tu;ft?SZC(A=N;W@u}`kcn~M={`W4uqedrYrNX76T71>l;n(NzFPg z&Y%(`5l)+`8%DGDQNRcj@NYV)u94|5rlTop2IQIB8>Opvk7KMOSKnUG-|o!6Uczsp z$o)7FOl~|dnpiTs&=ka#m9E7TC)zJKQh~PLsDOhZs;55^lad>%VxW*R(%eu?L_an~=a`W8Pz?~-qb#At!K~r+&ZM1xL=|yZq zZBgj~QqGi+jTV(LIr_2W!Fy?Sz_=Dq>B5XhhrNUUI z0Q=uZSSs~adG$$is1MS~6>~h>TkAKoT)9>-!FBt2Lx3>SoPaXkB93~GFW!xF6KAje z@*Za?lcMgDB#7c2NkACR&PEImMk9IU&hchS^@V(Zfv0~tWxv|eh)~g$KIAC&J)P71 zMl)%oMnH=M%amBb()|PKahpN(dQDxL!$+RtJnKoYfLJs#C{@dlL__~R3fi;=>Oi7; zGpafanjNiP(_C6Sk2r&G^BS_K@9dJ-gb3M;D;8Zv8cbtRQL znF%&y4d9eU1~i7E`T}7yYNMb12&_D;*OPEsUyA(&C<=_Gn@_xFEb3=uf7+L5K5bOE zyV=5SogrrQP6k+N2`9-PAp_IV2^uu3sCkbn!`o`85CjF%_?M+-F=sPb??4y6^p8Ra zk=f6V+yhKqSKp4n_L`}d)f(feUqLI`dj4c(dm&);f;0tpml2v5A?N~2J$PDJtzvQR zk9eQ@w7osI_AJi159vmxsTU!PQkFm(bX(DVa}~ksxqWgZp3c1o%})F&HklQ-9x7!^ z9lWUobs|SruC^N|yF9jNh z525=lFc#ttFSHyAp~YQnuUH^wnupNyc$si{(PG zLABT=sq0Weehe>;0?*H7FKJ!ndo_() zVkJYZuL$vod?a6O?e04(&P5VM?c*LPFmOF>*2)7`%+3Uz=3vE; zjYGbol;+F1s_u&jna{yo$OapAaPMVN_xT!c270TSFZ%T&?x_eVbZ)ZztUc~wNPq-z zrkfibL?Elx?XaoS^<31i3tt}6p)fJ>UC{*yDpv8iQ=!pS7n4BZUom^Q)BBW%m2jKm zT6cO#y9JJ*-w!|j%ei7%2pT^KfF^GQfD*F(Ul%kMHYT2Swk8tB|Ih6&fs`pv4R4rD#wYk4E`6U2N-ev8HT0)a9b^BVo{xl*VF297E zIZG7z($~e zp7Gs!HCO3Mnx)+KAS^n3CQaWz|5mNNP%toXcX#nbJy_a8( zU|kSZ;LbYMVw&M841oV5R>T?WuNky&B7!6m@#b(Yt@g$>N3I0=-nxixK`Gfu1ScU> ze`jDc*{K*0D}6H`u8uc0e?W(dNiQAaOsaXjKdedBYPGqO*xLmQ#RmY&U{kk6T}X6eHGeD=AqUU^H0-@la5X!%ynDlJ}r>~1+Z$R9I`|xJdTVT zHwLAT7v9)ifSvFL_SE*jE)=JQZeID`FBBoK+i9uGLghHWzCbFqEFNmj8a1tYAT%u8 zoEOh!&da&p*DseL@TfqTD}i5<`G5V%*fyj-p)M+YucadZp0;GGhU|W1rCo=+Kp$Mx zL+|!=&Z@tzY?rFR!j%L`R+TVal!zFDP`+&1d$j}xr;x55@;XviadL{-USLBg#OvY- z%5v4JqE}{Gj8w{BVU6)5XodG!@l8|)i&BzqU~qK1aFtc zil7y7_0=)RfC>8A13r0{zdrc^N^NGxerZ48K5-{B{G+V!K_zM8Qm$>eZT>eQjNeK}&N zx9|#mzd@{p$==1%*Vd_(ygc`5`7Dk3idI}f@1$kxP8DGUH>{8WI8xM+%$|?Is_pTd z$b5+OHJ-Zasi$DIe*Eeb_$R7t{y9^q>Y?q}X-&sqz3>t3;7Y=x+QL#$)MHP*Vh$dhWkC>eV;U9Zhj-BL7$K6fMlt4cL4~Ohk(wWc+4R$QQY;2r z79Sk&OX#^<-Rh=XM9G~yKI=N<&Np-P3OVK+S6PiNoE}@b)79e^S6PpO9lXk!4f%e3 zHHo`a>+hqK3{5!wW`fH#7MaHMD>(9T%y%71H~+)>AzoWSg1@2S#t6$2)10%S5;e~%Og zVu2&YGN$_v!=XZN%Z`3b5KRPfIe|a6T2Xd_bB(bW1s;$xT0m3<6on?Ml}9_Wzl|my zcPfZ`5~T}(zI)_l{s8xgGP$p#6s1-7`**VeuEvd(mRJlM7l20|n@fy@*i5MKkym&Q zKaR=um-8J9&PN=g1OvnOfefR#74x1D9t=VdIVv!skAfg+?7r<1Y$v@bGdkUC`1z8` z3$|Z=QJ~)WjpKicd4dOzDO>5EzG##M5I;D&}P(}Zr4phsm*48iP=OZ*ThBGg%6rBz;H zjc{&vz@hz>!n%PvB#nO4*Fjqv>F6+32|t{VuAx(Gx=}@ae`V7p5qiOflJrw8?Xr7I ziP`8`h*2r84&&=R(Ll2pV+0){$!uJBhJ;gN<08?5IU(0r;|}7B(0UU*QZ(qDqo(os ze8g@_kVQT;5hTnoZSs&p5kjdkAzf063v2jbaahHGM+%J_e4WICSG+UY!qkz+)Kik7 zaoM+!x*RS#ZU$?mQwKCF(x0nvc8#aZ+lyXuv7aF?B|f0o`N(Ecn1Tfg+Mta{l!Kqp zz_Sg%n$Uiu?q~lMLN-9}!t(tj^VH zaUU4Ll#wcpZH643H~CXP;%;IdK4Co9fTsU%;`rsRg~^*#smeAxnrYn^>ZAC3SnFUL z!e4Hp%rEL4bg(w9ax{+18PR&!{w}-RhAOqTPX1$uK6%h+ccB%|Oo9@nO^Kh>2p#PW zHoHfH9sB2#h`d3Rq`_nJSnl`{q)iZ$>29(la*+gHjb(nBB0~SVJcL+Ch1d~TnM!I=3Rf{;Uxy8`YmMa5IW0C~ zWjK~HNlzmyX*dmxHF0}^6b>h^+b%0-LLBa)Abu^l}P#_7?|X6IQBx%%h0{3iLZTTdB? zt5HJGyBCzcvjJ^J0KL1+PL5ZpiLk2Z?WN9Z@|?ISlX4`tVegl~!{&4uLV9e}yF zm$~W@&oOxrF#fXV;XHLw;Bm&bTod~-<0Qnc4F5EI-&N&r3k(8if#G`iopLXZ&F%Co zM1NBwADl&D5~D6%5Y*W?PxxWZZqd#HsWI2(yAkPhU-Vs)Or`>`XaHuyQ6AF3gISJu z>-(5Kc3w=j>OLQm^zdxIiy25Y4)hOIrtoW+tSMi}R$Xj1#Dsg<4M< znh5)2?pLAOYN7PX)mcvh6CEyg-IJA0ag4eu>3qvS#1A@}1E&={nv+q|7UTHs_UCyf zW;X`?V8tvq!KH;C%zpeHJE5l@xt#jFU!e3xtYu&KbTJ?Cqf{VphPc+onY}-mXYTOU zy52)&On+8(sn_)v&t`;AUD!l{1XKt)*yN z1?7wNb!*guAdC&oeBHN@F`^w|f)n`w__uAdfT#jwo^+9WR~#bITUVUT+i92w-zMBK z_wD|pSLR%3yaoYiyen<>FEG{h!a?{-r7zeXIZ9x_990?d)>3Vn2%lj8yY~aMjWHWoDjdt7Q&c-n?*vP0Bwj zUGCqP-dDO7{r9)*{;qU2muTjjiz&2xA=KY%4pWV()hO$kEizqH6vvieapc9ppU?9Kp|?U+Aen+G1#K7tWZ$b+R-&ICn3?HB>^@ z4eeL`LM1xDI4R~d3G-z_98%fa>*jg4Bvw~mQ)Ob%ZWnE`&%-Lu7Y49uRL|I$3k)-A zTQ(c-I{QNAR+S`gY*os;k4`ej zT7c4e{IEUVN6U#J+xx*>%Q;d)IYe~}<}pI2g*@Ds0<;dwD{ocR9E@L`=e5jJ0a>im zy5J2Or@p0-oc*lKHx0Y5+(#_P)-!n<=D=Wqrvf&cvWj=C?66qZH}QUfP%o~}xdF0h@V8JU8>$(sUS z>Y^*L0MWA(J%?v8m$50_awa6pyv|mE=)0xx0AD4}6QdY`5hDvV!Qrx-EMh(Y{t|7> z)NoyLoxeI9^&sK3wH+nanEb1SWIE_1);}GyyQQ|3AUPu z*b;Plc}cW<0;akakzK9wCQs_+9q4~86V4cdw*46x5|%FfMDPYSw0h?J1-E+T@OPl* ziM!*X>7)fExBK!jOCW&-7)vS9Lrf>JSd#ZC=>f3RTk+_l&wP=D^hWHj+!G##inLyASAqxp z4vga4B=&uHTRQbPc+;^%3Ru8W2tugi0xqusbx;pKYbT)Ou&GND5ufleK1N#!$G6p~ z8ivGSzLB-hOpj8o9OhH|S>#1m9}afOaNt>^8U3I)U@4p=Du&04hf)ked$$zg0+vE3 zvk5J}#Zx`fBTllT~wje70U-(0auRRuyJGer;a~>5le-~^q4fYbL))gSZ!f}V1&W#7r zpFAEQOT^pOvp#{>wk_giQQIPddxr!R1<@3i%w}4B0lVoQi$g$R8R;%K?gI0y#jH|f zEek=Y{QBIw32X zG!+Qig5d>DP3-k5fNyK%g;6#(RMe!&*7hFJhx6^{t8s+Zq6TICynvy2pN z7aN|pGUB0_Npn(&0&JyAQ@xpk8C4=@IdipNDzK@HBxspZTWpzP#I?#Xh%uz8c@Dc< z7V2)b0aqI7Blpb^qEn1)K` zvDT{iHX2!PJkXPu(6y7=IA88C%uwmysn1R7NtXN(|Fa(%SC>pNSAN!b-qWa3Hx7(( zP29=^cUzfY&!71xOELXaRiRG?@dW!Sj7m@GPNJ`4k7rq05eO$={x#Ga|FHtz4bmh#clhU+BqcRr4 zcuO)I@PN#tjhzPV+ZZ*rR{F#L7?~*T_E8rGavYY#B^=Zti5MvK>e-(%GCm>-%E3n+&(xA8>wE_bd%_B&tNiLc9WDNld;x}Id1T*V+Shrtf}T= zDQs7m;+L!3P*OBe&D0x%rIUJxv?XT`mji5-53m)u$|L6SgB0^)JLO|c8PXH|MKSnZ zDbNvuU+d+wgzE8V4wJa46cvSH3ozP!dBe^`Nv;UxJC!PdiuG}lT37&i100yuTlFq%)tWhzfP zTkO*rs5Jo1*S<@~6nLmhXx+bT1qQIy2Y{_s-r1_@ovo|@wqko{E1>5@2buj3Tk-#8 ztI+?!R(~Ac*-Cgl<(;i2EBgMj6=vL5U0O@2+syxBs|&!eK^9;vmk2X3mebwQ9mB>S z4j4AF{~9)Oio%5KPXNP40Z?p;{Yq-A^IH=_{|~a)^w^-t8M^qd9WjRFA0xc{Pu~Mg zU({ictCfk2K5p#7OEvrkmA|z74v}F+AfnLfPJ?f6ik?jw>XE&VYfsd(*SyVlg#><4 zIlv(m-hlo4IPVUWk`A!GSDC5?&D0gp`Bd*#2-1dY)b7I(t64$;*7pSZvw(Dm_5;v% z2bF46dT|LF52|t*7CXz)-fQ)&pwn{kjawHg3w|OZRo9MvJ$n5&bcdKVQOOhB4kpHu zMrbr6Z9ZT?)9q*W12~LO{DIBDli>z?B> zoUe}KFW&&h+Kl}QTRxkUcJ+R1L~suw(=irRb4syr68pzenm-)RG|)IkiYo?$nHQ-6E{zrOuS$>tZd+=_WO-Zg9LZuQN@qhGNXXQ1Q=i_a$Su4Qr+BUp>90 zZs@zHRoe-^qpJ_F8i_FraG8t3l^&v|S%aHAneT$lff#Eiiyoq`-OpX5UT~jSEqkW! zq|1D~GrK2$N^_kM?TW@*OTx2&#)5+OVulW7JP?+J5$EnWUjnK{=|}K_I@g`}h6Crk z=|=aiF`L`sfl(CLj|2F!j4R$TM7-86-4C|Ua%&kP*O@zE6a0go^YK@*{MyYbNeGDV zf(>~D=#0D~cI}w9viD|@)8gcBeT`Gnzs;fmF<~(>RJOIN4d%`MD||&F5AHt~7p?uk zGr_orC-)x)=e3-SpfbFN12RAH&)W9`{qc2;dD|TB_Hu3y%h*pgI9vTzA;D^WKYuw) zAaVV~+o*!s7%+Q$mQB*cu-ctfXbD2~|}z zGt-Ndtc$FR#W$@NozsTe^@^nfftHi(5|>fyf*-ln*`DlHpF@j_o;xKU8vU468@|RS zMwV%YPMwL1C8IEY&!HUNRnSQvisX{7^<^YuI?glThz#0A#umR(xOuW~3QACYgh&{+ z6<^N%{a0ORQ}vI!ut|{M2DqodIynFKkGgQUf4%~MtpBJBbN#4z+ua@>M+c+c)rC8a z_MvLqzzpSIb)ljD+FWk@`>0m6Gh6@rsFpPGJ=5P&tyy4HYl-W$^%)q|IyPN(Zp%$# zdhV^V`_3KMzhBPO65#h&VR-OYVaVl3lQ9G+439p=6^9m5*0|F6^aL>;$v*v~H{yimA<617h z(~R)D1|q+amRzNWMwAc3Ssv=H(eH^ZVxwLGnsFYK@Zd_(OmycYY{F7@_ zlO2&hE!$rsYl*aYi1eq{K)98Ig70DNR>2BpxlYG#8$6Iy-r{4Zpud&@o5&d+xaQ4p zHji*KQnMO21|Vr0OY&E|riCm}I7b;IW#1vYZrT^I?q!>f`DTKy#jD-a6FM_VQ*-HkRGiG0t;KswC@XBvs#Zf6C%TK zh}0?Y$~g6{SJjoIS0Kok+syRLl&TPse14*?X9oUbYsSOZVmMOfa(Qw_md#Y%K6#xp zSwG-@F!j#0!Yc~kFk{L&GhzL}miwX3ek;6ttF%Co&MQ`DOVquF>D*>XbF7he1nb9SU!+9``5svw@TunMpcgcsnadD~7 zfFAER*`kg3N6oEz(+ThKPW!V5OAjnoYcS^h&3pIL^;-6Jy?__cm5`geP@q->%%PHF za{>cfVEEOf+@arIJV6v~C!hmjnp!1?+jy2%?lBTD*g@&|LYgarRz}}JYn=&UWik(L zrS7DA|2Q1n(^9BPwLYy1&hN0qvSzK4W@Zb~%V#{QFz6BemHNX~S4`_nF6fXL#o1x} zmS6X%Z$&#poi1wTv=Ast`FKhk19xQ=bl{@~VH@k|=loJ!?I?Zjhtp$e`!6mU%}!)z zx*{`K^Z4dgEHjgDiH%og|S@nBP!bx#tk1 z_R*GtrEsHDE$UOekMJqwTvWJRR+mUMG|R55W}hMd+$lF7MG@TZF^t zwHrFKDG4?uu2y^$MOEROuu`&`Qm6H#$5n5HF;4KEO`0O0h5t-a-RJ{LH{xr&q{idb z>t9A|nq&s)nF=jlcuVEIUK^l{&YJA$+KDzV38u|i{}n>1ZdP?UWMTn)FD`WI-DMd0 z0t1P}-3U2Sc81GyLgfOgT<2|uqll+js4vT%9n}$7Vi{`8qCOYJf|i2VR6zPoaI+vQ zPMvumRCuLsf@1L(Mv0}wcAB;Hwy?n#;Du+X%3oKz2RkO2POtszg@@x6syj~<gK0Q_O`@^ zid+*WH{UPlE)naU&WwGEl|LVBIf7yMe%V}{C)rtT&%cmxdx==rY#@gh&u zjeh&JBwUX^P5UUnoq+bt@!;g}>ZBn9uj9cmX3?1Uu9>^qHVOBf{ubDG36rq+BWgg_ zagb0@v61V3P35BSeIXp`sV;0)kUQ_CJnsg2nRv6u@^!n;yR4FH*>Xc>X>z2Pa9PnX zMdA}a8QJ%_+1GQi0kM$%vnD0(9g{$Dj0-m6&*Y1<34BqiV|41W_UKj8VJMz5&y|;# zVYD{};E2_tmHY*j*IzEKWW}N4sa_>2_)e=Xs==u$mZ3h*2@k;;Xl$l{PGpG{@fox7 zW!-dhU$W*;Ohq%>-IGsl?%Wk7QzzGlQ8y5+zMMWeXwlwnOq@QDb!TiYSsib6-lUSR zdIL*aGu+eByj=(nn6@@+fCce443~^H{`%Ljm5N4!&?IX^NpAqXE|X`cGvN7 zQ`q6R#EJVJ#~mKHUYaTM(dSqMd3>}!ux7|3dgjJ!Wn>Cf(xL%0RWybZ>__hCPv2v> zI$_Dpxp9TI4{ln7k$|Z!)eAq%6P;)wGgk8---uwTOyA~V%5>p~1n$IzW&oMQk3}AC zLWzvisEx2upy%Nd+bbAJBjva#P0pit+n=7GO2RVH)cB&(c=Ei#pKn@c1!bS$YEGS?PQzK^_R|^p60l z*%kQ*rGVno{+2b>3!zwN=SB`U>P!5lj=Ri+u}+Prz0$|#U7)_a_h-!;LNbzSIibF& zlx=o?x^>0&v3Q)18rx6SJ-Keu+1m0H1};vZP@<1=F5oa>;0wTbG^Z( z(C3u~z0(W0D7A`sW$UT3a*f#Z1^bfVN(hUY*VI`v;jlwVZyNd1I{~V@#swPU7pefP z=+XLa4%U&XLFc$D+6HrZ3x8*=`2Na?*U*;(VZEoY(>DxZud0Oy@P(%QKNt# zo(=HB`>EH(I==hi-H6eN((;|3_cx>aW&7oM@I)URKkZK2{rdN1Vw=)`!17c`f|pt9 z!(}#wLVfB3Udr-hjsMVb#@PLOqT1IsNf9L`sM^#Zs0Dvl&?qAi(YI$1$icUT-Zzl{ zPF$H2BnxN&aZv%p^?#Nc{+nn0LtIKW|AV)H%`JA6H@64s+OcI;H`SA$jx7xcm5B6a z3)_+ysm^z2tHTcAAPs%rtdNt}PT#yq2G<$%P*bdKyDU&GC6l8>m~xV;a+Q9^LDTNO zZ*D07n_FJfC(asTl#)|HSMj8Sp(6yX7_!u2Rm#(oA%Mz(Nc^$$s4|9Z(K@e!6AVVZy`BI} zBATj`candmMuejwjL@Bh@Z&`dya6*~nsufxTBS_b{jJz4A$nMUOeUPM{UtsGIu@2& zr4%16r3kne?8vX6e>LLH1nvb(Gy9zObCu#&Lg_-ibLPuo4G$84Bf$2lGinxJV%m&X zHJ%cfTD^wp|HN85ogHKFhQx%NlyoAab`Xv%mb!Bg^1tqR_d7|C_LF$hu+KB}G>!7G z9+K&^5vt}y%k=j(_#v9l>P3)>7JGnCX&=H1ax^jj=E0D{B zzdwZu0*JM`|HfM2ME}HEB=pYU;3X(;Dx&L^|HfJ`@GOdTDs4Cd6pi0zfP=x$5m|mv z31Zk<{-$jgwp*U4$#y?=> z#qoE=|M5O&46JWy|0Xvj>{!5<@VHB^ibs!D1S=3YsaaPwJjP$XsE7|?qyYCSuhuN?rWRohM6kBbH;c(Q4%(rcZju)-;IXv!Bz^l zn1gPtfrPV}=2c^|+ZBqURBp77dzCuxxJglm^=DKP`Qk!lNXLw8mdR#yXob^c!8U6?yRvx zf^*%NMDX~XOmYMn5l(rE1~haWYdG%Jh=b?k^HhotQO7r}5fK~FfYflRfo@6@NVSHV zFHRxQ;?~<&$*cq!E1$1WS1kml@y%MbIR(_hQHr`kq) zU9?cJhgBgExEN$edQY`_JXOItE7AP~)Ik#=((py+gKGp?&;} z&(u$jG#tnQfiJ6sFufSSN<1YJ(EO&nbIM@tuYGvEmNi+4&Pc=RT$)$LKX7;y`5tTC zLrO?z_UJ30tNfAJAH;mV zEs%~;C>J$vqy*l_oBl8gl$G<-rOhK7-5HOGrn$4>Z$sBKY5u@#3%1%EbK6^%NhSU4 zrOa5pa+xa5p=otZa}o5QH9X)3!q_*Xf~LtvcVenVHUN=RHQe^Oy|2qd)3nW{oXC=v?AK| z3ns)Z;EtD_gpm5V7M_Ty8?>N~Lppu|xa0q$DrjjHRM#rA^*{6q1ayKy76JQ@!9Ok~ zaih2b+L0UVmDi0vxD{WT>K~ArtEP17W zC-Xech!@v4(vsNlE`X{a>8ZftMT6hPd9kCdHYZ7$-#M?Fm6w-CUG|}r`uQS+8jmbJ zYya{*F#|hawP)QUH&JK1!acn_;6@FAt#Yg5kK8hzm>#{obM{rf&_yI_IkBpbY}XIu zL|#v5US_I^V~MV_pe(A=2v3suy=0RSgm;L|s8qYu!x)6M-anbvdXY3Zf1!L_L(@oo z290CPH+*We(NtL0{f*d~y7GoOBYw zPsf7Wf_4wB%ZKBg=e)CxFM6zRZ;ZCT@mk^|sRtShe?B_v8#WJ<(eohVEgEGd3Wv^* z@OC2Y@$1uMdZa{x`%CH~+Sv=oe2}&iM(&Qxr$ZUMplCu(H6Rvc;$!yyH{kMkIg5!{ zp^l*(3;mgF5?!QD13}4- zmqsyritAKEF~sw=tU;L$X3DCQqDId7o+=j1Y3LCAdN0GS(=QrxsR9z^wn5{anO(0Q z`=m`#@$Ae#s*YYypmGzvV6Z*0_kR`gdY#|6_=+$G{Bz}DWNU-+@hV%{yCfZIrq8|( zr3`O^iZ@IDVJ&DsuF1`kSAezJIHBKJE8(5BN*oA-nc~u+nZ|mA-){<& zF(xSx-&qU#$2@)bJ8Sv!p@hA&mb=qO2)jJLzpV9L3}CGST@G$Gtif=GQ3cj|S(;`{ z&eqHbn-iIu^wH(C7YGboW#=y@vFbL?Wd{iCRbIyGi4?OXS5_u<%4CnJHb>44!5A$Z z*V03yS&pZ;>%&8Ad{Y?~)EzIv<_t}XwL+(da1kv6v?Z;%n#y(LY|+LlMEn=3d3fGm zHLA8Ak~0|54jZVWptW=`Vmz?@LMP&vCc!Kog-lv{ANn+!3TOE|=z0v*Ouw(D?E$O> zcY5Y*A~oMPxQUFozO#-xjwH^G(8Kl7=rpru13r3>Padl6V3Q;SnruxyKaxbPdi z83!~%6?hgHei%sPD=g@Tn769X|GkqH@PXbF9-yso;Chhl|2E%JwzvErpylx%Y`u9r zpw-y__em~od>y%%)s|-aK?4vn|NpYb>k#tkg+%<3B7+cTTK#>Nba-ezDmAoT(iV8z z?}Vytmd4ubt!mSNBSu9v6m%7sU6?#X(E3YOQp~||nC0tqy<;}zXn87@i3>#N zs9HGJg$nUw$bP3vk0aHnTs?XXeH>*i7Atp=t>o%lh()qO1Rb~4hSk1FNkA8mM}O^a zYv6vl>iHxK^L$fDQlk*=C5$5{5dN4sX`^j10A2*iQmi^}JCXzqDdI4kX%&Kz&r*w- ze2DDnsc`QC+S&gp%g_Lqla^5S6L$>YjbFjV<7HbVp6L4M=oh*_a&d(Uc;ks{KUPTa zGOdE54^ISMeSX=L-$MV~#+e5va%{0lO&JddRyK7C$s2dhrga{vL^mopXMXw(CW`7?s6 zhKhM9#2*3CGYSWl@Lz)2`cUt;gAOAapOB{?cO&zr}x@l=XW2Pr^EG30;V`9XccR1;-uBCQ0M3PM)Oz;1vm9^@=TqXu}t$iYP z(AM~^*jRYxSBDwJ#~Fffy{C^{F626Bs}GLFTz8Ch0)%~J3nA=DlJqKk`C1jXLTS|s z&>Uvs7xDxkmif3Dg=TA@V=NWb;K`D=;sVqCE+Aqv+TB2+)sB$eVjW;X zeu?|b)b7lHY*HX^vY*QZQ~P9vG2Pz|2Mg!dFu3T1Q;_SPp1;hDutBrVd!j|AYGmn0 zCEyPvTG>AwelT?!sRT3;A|z8&wqS>M(G+w^;XY;A3sS+y3gY=TrU|^PL4PwGFWLPT zG`G24N=|~AyuFL%)IcpcfEktBnMs3UO!RV7#}$bmDq9#Ed20d4CikvSDL( zdr5djLCQ)TZAO%le4-dDXug7Ulk$f{ubf}k$zv;rj_yh){3*!rnDzVo)`B0#Ew1gC z*^1Lw_=E8x4Z_YYB3YNd4M@qZphDFzPxOaS8^{tWr!u51Uu%<&FdEQ}f)?BPv}X*@ zCY7o9mhX7L6C5^uctV_>J(ZP#rDG!Ju=ua`*JgSe$Fn#@g`EVCAQ>5QCfC%@%4mDG zWE{ET($ypxjf$GVF6h=E&!D)t2h`eo+*QLcU-m~8w(-;#Ag4V^ey%0XK`725*oZ`a z-EFX8y>V=sofrg`jzi#mtQ|60W^ILDO_Ht#dW;gu`iE6&+Cqo|yf+xe5XPOY11dRKK#=G5=Ykqv{DQt2adpqvpiR+37=zS(^5inBoKqfR`e$^Q*6|G!ZuGabO~?Dzeu$BLQgBBwClGiv;%UD& z;}dmv(r{H^Q3$#C5cg~=Jl`Oe%KhOOP)*4XocK#z`BJHoy4$e+Cd>D26e^Lh!^;s9 zmfbfmcPA6=sjc*U4HcC-K4)Np4Q^}{Xa6{x)1D@ysG`Po5eQDLK?}ouI8%ceZl6=Y zx~;c>x5pJ~K<;b|73B3J4feT|W5j0+cP*33Wk#uPi6J5+61G^~aDF;S&sLcgxjLB! zp&zFA8|~S6Fo&e8qN!Oq+>{b>0oC;<*4-kBluPq{%`5Y0wK~uYvC`th1_)h!FH?=} zKxxY$<;F`vQ9sdiG}4{iJlk!X8PO~quGk=tQqzvz5aH6L*-!#xc9IgR!I^RHaFql` z5UCRXhf|DR6~R^5&bSWfOgxSj3R{!cDg5=sFsWo@5N z$C8F`%*uO2`zfZHQ!xoPfw5yQG*`wn7oQ-{KlB;Iuc5@fp3ToHdl$|{A7e?U*J{nQ zeJVl-;@3o~j8#fEvr^m^GHa9{T@KWZu)vwnzL&)JPgI^~LxQU}z?vgZTO(%GzH~ zl#MC*+f#2{nVx*5<e8OGp|*t0h**nMk3lXNx9!!vq$#-t?NU-?7uy;eRM^8yY66u6Qyz&}&y= zYosh-shh+k!fKQ!d0`M0`>!bRxnSc3VZ^tCZ=GBkq2DDs=m%;GW{_2H%QBj<_od^= zUQO7#-B{y?zlfgTwdmotBv2?Of794XlH7wmc*EGd(WH|)=nELI1)&zDUp|78I;`nt z@T_vf5x3SUc7S1=fzS``_1&bKcjE|;MJ4=rAXlxB)J z%BAGy9lk&3Ua3sURI+pY0AH4b}$^!5T zH4T59aYa1LI}Mz_)^hyQ>L0M5^X!zZI7BTZ0TR$)hl?u~3y?XwKywR|)3uQc80bQT zMWDI3#|@(Ji%w(6SFh+}_3v$<5>+j`@R~QnD0@gLAm{|knYv}Mpo;yrT)irXYBB#) zcvilhQ`bR7Lp>|%-r1t6gsI^rwW8tAey+vxeZFFQRJ3;m&EZFkEZUoBC&>x?@6gE9 z6V9i&ni%qB*FP7Ei^YD!#HZkyXQ^9zos;nb&{KHew*GoqHP9hP)D>)*jW<%MA1PJ8 zn_`ov?4b5sbDYfGmoY?s8)6c^&+umoV>*Z4-n>>A$g=+QTydkw?43sezg4;P+~YZG z)3rJj-oUOi(T|4u{l#geeYDW*sM|t;$hX7Vu7c?g88XzKoMjWDw~iW{d($6!Lz*pQ zd{Ot$yxH_biFAb{1u$A_SH4R;uGEBiI^Sa!XGY6tc}C}NxysyCpQ#N_+k}-rK-QR> z92PII`oa>UlceQa0BM$Qr>qHQe&?NI{`PcIB=F3Wc6jfY57<8X31Kuj<|d=SVz-(O zsv;3QoX5X8T%QzPKNi5f{-&oPC?_M~WPGem4SQVpF#&>T3?dqJTtN8n9s1&bt7i?Q zEGt0)fR*%rRnM~5w|21Aw>P#n{QunN`Y*y-1opWWfPF4!H&=eQ)!8^n3~)+hl<0sE zhlceRcYJqZzAhBp^&|AZ08xN#ryYGabXoM#;_FZ?Xd-S$vr??;0gp@jKw zl(nz=Ly* zQdIB1x`ex1{p{kWdPoVJ4hoU!6tc3`J>jDz{f)8m-eatloc|@pawUt*TtBF@=)y8W zk+YZpK3M0GBmLT))*UiI2ecQ?kH2&Dftx`m|^&5+ayR5uwqi%;+gBDpT8#U!5$DB@Lr}6COkEt@DdgH)kq!Hd+>-%&-7o#o^RK z91Dt$QT)@*GXA%lmGa)r8vI|oS(!76pl!zkL(0;HsemRbt!4F8hs~&I`un@};-Gml z8?atn=g(Wf^UgqURtD}!1|sthU0ay&8{*ad<*Vk1$wKn$*_M3shD!aPoiT(vqe2aM z^YtorX7lGFgz0_%v0mgXyRBBh;yCJ9!X425&M(dr-ucxbPH{W?2T}j{^l7qK5_ZfkmLU)v@xIW%d;1PDHFQc2df__2S*);Zi)Cqa zQ?uo}h&=X0^)niFTK3QcAR>1X+Z5OwsjQ;xeixCW|62VhlAW)ZT_5rKGl^_BevrJJ zZ$>U_a|4g1djH0}Mf9lB=6#jx#Lja_EB0~(Rd412T5S_J7zC^roo$C&8Vhq^%V%xO zccL-52M*7(j2F1e!BJmq7_)Pb56LfKLhy+g2z$bThE}}3@z7OmJq5Ge7TPjm(5%gG z)$Gb==bL1!FF$NfuF(!ExB`|f7k-v3DV~3aJmX?MP7qAA^ty&2D`CMMeFd?iXzA96 zJk(GAg1mp7*koUaGjaPYv%aXcm?;nBSncIB9ip1Z|K?b1MgQbjU#~%Uc!_ilGR{?F z3Jcd{VVEH^yBSr|L!IY-?L3O3J1OVp0>k`_Q?J-egV4))+tXCrLL z>sd@1Z0c{Es-_hpEWCeX;`~$3>a=~9O}+XXWJUfBvIK)4JCwD|fqgDp3LwZ*`zOe% z;;QN6hlDvPhqB*t9b2Pg6bebBvq1|5=!(Hvc~uN?mHIcVo2AM{>WOP&hld$6o!Q;) zPGLYl85z!)5EWzl?4eCa z2Zi|L%VyS9k9rLHn^z3lM0HAXRRI%WS~?wK!>b3VhWHvxl2` zwpC_x8EDlfWDS|r2ajHYNy-H`u9VnWGjOvwz%gJfJMOKjWBh*@yQk<%+o%5N99*Oh~Q>>g! z_Q;_J^e&CHP=u@rUcnM+e!FsO$C}5S%E9%h7Ca33cSvG!GJ-F_MSyKwZivA3932w+ z0t2x;uS3 zKDS>T(0#_d{EDcy6(IQfn#IM{v~`Z{%ynoXDu8;HNJ)sR1>pDoU-hi=*3GHUdX}B- zH=5f=>?@U^51Bo^c4{m}7b3>%02n&5G1DcG=BRd_OJ$HJhogiRMiFT_s(^(^@@WD8X%Eoc4J;^hL065SA-+RVt-Z1;z?~?qO>LApO%DLnEvZ0ZsF6jL%_SUqBc^1T2aDFU1 zul^dcu%KSpN*yJf$mY?&Xilw}x-#7lsZrx4KVE#GLB1yD(Z(F}_1X}tVYfKnY!(xr z(fNQW-y}sel*MOwSlwtie~~xh<#cW0c4bL`^ltY+J-*H4kwzfp>qkZ<9H%lSH^x3wsvk0)_^X zmY7W3%rDrAKP;p0GcWPv^^+auA@Q!$^&~}3e~W}rvc8AxU)>ku#gi<+*IE7YDhS5c zugE{tr(V9CoY5+chN6C3xphYhZ>J4uH>5Un2fSi=Z+*72;Me=SY`$1Q`I6i&;$ynB z^610jJzodOL+OC77xg3I+iv#vZ}C}c+d96iIGrpy^LqVoieiWI^#9QyQkk0yE>Zus zua@7zr8fJ|BNk}GKJC#FJ;<-%lAR`_>=h439}$H0_#2<_oIfSlEFFOBYO^u1qD~V- zL4T|lg#ctrG3v|3foL9Q`zYKMZ1=S7juGie$!@@AV(s9hHHA5ZDCE0O(iKI zx#>K@xTxlZm2R;v)RvWwiLM0x`LA!f^{*dHq8*raCH?*VjfIC##(D{KXVc1q$L_OqQegongbu|ewt5MA5N z4lIcuLJTEiq!}~(cQd`-@dsve|p)bHy*7f$xn+k9<&OCJUV1s4H9K~9W-%8wAv zq7AX{I9Q!9G0HqZ(A9JV-YzkG;((wa7}X*`uX_M-h?<4o3cjCg1&v1^a5l3BaL^`A z%;9A2cnKFvLj$r8JTw6K0zvkkBuORGX`C~|nf&)IRGL7Vjme5^Qqf##oa%%LoPjpK_K3nZxHR6e5u={Yw24RR42aX^dJ7`uu(7q6Rq7u$SUbLI4Mv=dFM1N|%JWpQU8}Fro5r ze(!RbwH|?cY?{@E`Hoo4KxwJXRyu$BRHGH!RR88%btPZ1>Otzbbcy6H=8EUogELw~ z%gw<5p`2CaQEf)LymLX~PN*^eUS&Wyr$HWES_*v!>p8cyHJ^&Qfbb(@+5;mx-l^RN z(9SZo9Q4_ZldI$M=(W4x z1}1Zy{x+I7{YT^5>oD zam8QFByO6_DzI~5slRubsS#q;@8^|@E3Z_?Lf=mps+AP%7ZLIM*^}= z1H{hg*cT}AdrzTP^#2|etoBI;nneecvuc5WnE#)TSGHy*CPudZ^Wlou!f9KyIy3Rd zR0(H`!2#A#q=X|g+i91V!NKw-xQnrE4JTjqte3H$Fo|CO(70!Z@>&_7DNW1h2x8Jt zP}EY=T-*%!X|cavP-!T7w_hVWIG!VIYUgZgHAN~arnrbq37J;VeC@(^`S2<%H+IXn z;i@;Llx!hJG~0cNZ3tmX9ot=sK5Y~dIin=@v}}{78MrF6d<;;kNPDf*IGbFmW6PVP z($Y_ToU^Wd6uJhjD=K-KC2&I6&2_B6jF53W&(AlC0)66k`M6*4)du`uQSp=~OTK&Q zh4Z>|mU^*{_wHM(NyWL!&p}jrRZ_o95Tq9W&c%9Rp)gbR+x$iOPVXCO&P_?m?#u*V z&t1|X@z`DAj~4lf;tyf>Ihea@?TW&3P8@{?=!^)KksP`#!*Pl?L*A(0PvU$8;U}SM z!@)$uFq`T9$}MD=leobwEx2`S@)k%$YHJ_uuFeE{T_d66A2B*FF|#BSo|T2{IkSmh zuD@mFyJZNEyPegfkc>co9Plo--@6#Xi=n+f6j9eGz`9Ex8wi!&dDJ-lDnr6|rO^;d zaRnUx?i373%Usvdqf#qBjf;;o?M)i4-TXTTaH4QWrdVkRBDJ`p08>w^xTmdbZB(@) z+F!j=E@X~Qv=vICseT5i_Du-edABlM+Hm#b^Rel~UPmi%8K1cqxdZ21%K))+tz8x% zy#>I~3BgLTL5BIESt7*%M@xfF|O!aWQzmhp?M- z(Z%zF@S;zi32${A@6w;vRAwtW9fy1Pr8H@9b6yCNKXMd;<4>z%^Tyjx1TD8g1iLyd zAA-v^r9s*nTRb?WxSen#n<4}1Smctv@tfN>!!L$1#Z|V#41W+FpjO!f!&Z9#sbiId z&y28fp51F$5gfM*um7l>y-BgJ?D$}hI=SE5bI6@*K70jgcy#z^o-$mJYxJ~pm^*w^ zie3D9yp@Rt3jtU|#T6ZOoeP*)!esfmbogMQAlAY^w@Ow=gF}v)-in)4e$X;bv$n$N zj!bc0Ajcz_BmRXz0xJ=n-`+e1-uAn8a4YgcSZ%2|HTgD0FX25++16|_)#f`SyhmAvFv9r~<2;m|hro2V|UVZ+))_y}akmal)D`1&(lqpAA;r;o5 z1;J)=8tX3|xeod*=Nu%f6t>e!Bjunk3vJpH7rRV`w|La7fTysYWeIqEf$~{u8`a2i)0Vp;>_BLO8Acv^Xh#f<+Kdi16LOe`z+5Z&n&N! zpW28R;|@GYL-D~UQiUh{6gxjjC`T;~RlMJ$@N~O`dqs&Dt&nO-AZdr>ziR>CEnjd{ zr?~L)|Lgr36I3F7N{R#R`Hw!Zj+yh4GZhw~kJJDj zh9V;rsH@YQ-%YRt&W^emG7cNRZ2TpN=ejgsQHftpG1-h$YMJ4WVpedz2Kmk%?|j8HrbTdPGOs;W@ zSePbRM?$8BF&fWUXo?a#Dn?kgCymcnS>p4fYaQdkHA;ATIwwn(T873spR2$JvKj7? zS*VLX9z-713VkQlB{}t*3+l^-qSt-#Mqo^5MkAo4OFHAOjksO+-&-8=7(Y021!QNb zK_cA^)v;eCYF5m}#4D+d5rc`y?hFGUUXY>S)DRRWPtG;RJJHzrHOijjiy~RfqXT$v z-N%5Gr}dB1=L{K1=H7St>gy3l#X%q#&@d_zrXVDOtHURN`$woi`0J0WAoDSr ze4jg~ag|~1sST7Ku+>u8;<@}y!*%(GA%)~m*uh6vGP;%gJic{cG~b16_nyMUf$_l4 zkaTj1?D-kv!W3IQOy!rE7F547v07wY)$S!Yf9**x0ysY%O-bK_LiGR z!g)Jm#3l`WOZ1tlg#8%{El-N-$SRep7B_G+56e4V+m4@FE+rz{u4b-$JXPl`Z;D7O zer5L*VLMh8%z?b%7WT=%9Kdm;1@Pr3rocvhx?WXLwB2S?H9VqU4`|W8575xqDMqQH z)e@gz$X-F*q(Wb5h}4wG4j5-PB`79hq4UwzaQVY;Sbh~wnKaIJPWXNx zg%y}!6i`9`%|;><@01TMIEfkZfc6_&_Y-lFkI7=R*s_=ZKvhP|*+5Vo>n$|wipIZ8H zB%LdH2XIn!emFPj+xNLD6oS!ej>1!1HOw|cub}s0Amr>R;+ho3hjtXIgU~kW2W-_y zXc+|*lQrQf)jn=uf$WdJ8j=@xI)C}@zms*lNl9#dS=cGBN=R$p+n+DZyB$fpsb!mJQuoOh;{i0Ikse~2Jr1mjuO#7* zqadbut$#w1hL%2H!2~Wu0!`^Lehph;Gf*ay769K?H{Vo0&Mz}|g-9v-mT*Lt z>fYE4+rSi?KGAu!mY5X@Z9BmBCwdX@D$gzzRTe7r4H1M&^+w@gnRv97xE<8V^VEs^ z$|dU5-92ObA%+8BlBD31u7(M zy&D5s)hu7Pv$UYY-&>64RZn0CqsJNi1B9KL0XgQ&OCd!{&qRwH?LNQpG@U9yAsrgN zwauV1(0eDD3S>ymQ>%_uOLFiXMD6?=|7N<{0zKZH&%z0aA1HmZv)|M&yVYzS?rEbQ z%#kPJOS9i5y5YT0HL{ zu+Tf8Z}ia+>RLgvwW$HP(XBk4if&a?cs$fNrYIl%f*D`z&=CSD55LM#y0XFsc@w8* zYk)55wORn0knUB9wNdStoszTZ2eHJ&!(sB4D1Y)I+NNm-M1Rma0Y->sohe{ApHGx( zS~=I6A?jQG;j+0IwhEqBGOah{^KqE)X$6URDo zHHY*lb9|B+ToQ#0eo{4jJb3#BKe`v2Q*ngAN$w`2x!eq6wjamo`O8KzfdaQ)^GB}^ zgrDjb&>i9^y2NZ!Q}lg@eb|0jyKC(X!9Dy z<(X6UeF{o%4XgD*GdmL{C$Z5Jtnt6s+ai;jEBUjVIT_Tar;+CLs(p{r3pD*7X;AdV z0WstWbJE6a;;0)9mioiy{3*>Zk&;tE8&Es!^9{A4?xL~X$2S=h+p7mPdq``{`(82 z40R{Uk-N|2M-e6bU_n;@BW#c#t_`I7iqQ4vU zRP~mxq_t}ty}j4tMAp5!BFbg8(GQKKh%YdF)ZqWi2DNbk_XNaLj=}Ca>g{kr! zp)C5SL9CF)8u{&DHYmXEd3xZ(;4)nPAhoUR&3nNznQ3oFMcGiT(~84G9`~3H=0qIx zFceRPTTea;|LVn_E~Q(m`lUXN+!(i0KSVrL_Yj+fWRHQ0FyAg#q!k|ren4{72PCPP zWqMev4|f0C_EuaIsQDr*|y4#jNY#*4LKearhB4Tg2s*(NG%o&$0IyuZspcr zoCd|xQsKX7F)^F8x)% z>Pw`@Fqf)ILT7+SxB9d7hQjXRo_eB(?(VV3u_f6Y`h)e=Ggc+yBU6h6^YpuF@kdT0 zHwdAaa>GmMp;oca7n}_wA4M)ITBarktb_IX3k}s{x=;w;>`N648Vd`-I++?`=^&rx zc;_6USPNKLN}DB{)gzL~OiM2?j|!m0SIhg{%1=}Ef1T<~UKYiO%%R!zk5s`J|MhOA zuF7+wd#R+LH{x~MII(M?d5=9(*?0#AeG4{Ub=jb|VYSGPcCVe>@>9?>G4on$hMtCoPp-4m02=<@hL%1BCdVN^vnpDa*9#BkmKhIDfs?!Mnp6*Sz+ulx zF2_!;qFa2e-xssXMrG@<(9RXV-H_jIRXNU`IL!xFxe=@G8wMH8`_0RsAC&sA?!^X- zvyzsHM4Ob8o8FO^7;t)Sy1;RKK6ocI?p3}`B)k}C#39Terju3sS8K3IP*P4b0;Y+k zbfi3D$PhmSnXz~(HVBi8JRzxeqot+$#?{Glqhnnmnc(yuqQ;lMapMXWP2D{1a|Xn>Lb&V`795`DNDN}kjYNK&*!)D6%6?%F=qWO&3riL=+*+JdKekcb?^d1q(a96k!BN~ zba*q?SqO>zmo36xVcO5HmryOz9hK|cM7YA83c~S%7ofjI)H`|>G&MLyTyXE$M`Y>F zwq5fj$C_80GIT#*26YnK4Qj&?43o4U-7b#2O}1AO8F$Iv(NZS==OT zu73JkFj>3JNYhixq@IU<+5>vz4JAQLf(EL~P@JeCT82?F*1ZOietJ0A&5;Lwps!8B zMA-&J5}KX}VH|$VK6+`;N;HUic!I6s(o_g5W`lsyb*Y^ZihF zzSspYp}Z5YoC*YU=+$T>;q15PiTxz1!X$9UL)3qN1q2L}vM(s)Z)>!P7*gh~6A&@) zJ_ij_N&VB@UsPZXP8cmEE$K^opQOlq2dnk z)lbOZuYR&vA`zKe^7^G5@y3ju0Fy&onS6G@=6h)^ha6O_)0 z^H|&1DQuIYza&i-qv8E_z~UtSmSR6*>>==83K<~&pI;a)+T7EX&xwGdzrf}rxF`Fj zW7^Lr&zVo&(>f!M3UTX6vNz%6cOxZ zVWeQ(4Rj0ER9DJOf!^8STyzymCY?|+v}@@Tfx}GFPy;fR4xlU&XOS=^dZ2lt&GspD zGU<76i*=!U_#w{)ZD(5xApz^Q87bDF8^k@{NIqB(_aG+pBUUgmEjcX<_GAc_+hm@e z4wq{W1G_&zHiNX1pT%?0%)FdVEduC~aWHvl4x;f8<}sNFoR+QL{KPX#R5xwj`TzSP zfdgFY%`+?zkggsO5dHt_kwDq(|2j8x)?W@2Qx$t^1#1c1&B%$T6BT>&* zAsky(S+jGP_4%aOoeHid7FVnKaX*G~uj=;I-N-OvwG@kjHcK~*y@Fu;51kI@yXRf> z*#uO3TP;qJIOmEomao7n{hoApD=CxJQs}AH>P?!uz-Fh#WQ~tC->WhRt@4-Q9W7Lc zU7jw$DyHR|&s>ir@gFvaq*!4sL2-WjUy<*?Hh+;xqqttcMv=Ms5tXKKMivDnXI> z*`7u7N8?{PU^?JmazME^LZsveCE?>Cvc0KViX?OpGq$WSg&#ixS>S|y0c>q0T=);W zGg1#nKXX>402MvuA(QOoEDgkEYff^0t#7Slma4fwMa|r4e}nro0cW8;gMJjCyavD+ zbNn&4Blz%6vC;57*HuGSVNN$)`&=68F;Z)1o-USx1S}1i5`L$awV!O;9o0w(?~BYD zakE#6U##GI_Vzd@ovlqAKc$_O5-D?K1S3p(TlhB|Z~%Yh~rCqy>`u6iLlTtX{`NR8j1weT5|ubv>h#g z!C9iMfVd7+6q%bLa+3bk?`?m6%dq&nG*nVulQy9YSQ^rS?B#&`_)2OAKMpmhlzInT zp%|Y+Ku#&q_qNpf3(aKHei!nu8?YS$a03hhZUAS&UpD~8%X!T$X_~3?uN$zP68efo zsG-B97UG=G;@W6ieMn#z`X3(l&_5n_)PH)|z(ufd|LI|e0sr-|#{eESBkA!pz{BR0 zJCCwtx)ggu{`9anT>s0%rflkj8xR|2rIh6X7ESl`xuNZG2qxA-Ud8VF<8MVkPq+mgjE8$>9_=wXDF$}09jpALu*=4O4=k0k!-Cd*jttchBk6ni14f2= z3iBA4i=ddUg9D2H6q;3@pE(SOv+FQN&j=%LRgIje<>DqS0uQ*2MeCgW4O>-^e}=6p z*wyP7&5HU-J2qf2-8*;{mTf1m-mwpOrm7gnV|QE%*4BEzB5?$PCZ<>{E%5jt9!Hsn z$87~@*qx4-{*nWZsSEW^TLj1lp|Ht63P!O1n}xj*$iwF7jA+jTxv7FB&Go4U>}^Vj z1@BWuOA6+EQ})}1FzkqyoC`&Mggy!JyHBEh;(4{7H<~;h;o-0eaK4~_E$kjJLLwxhZ)+cvOs+~@o042@ z?4~T1{_eryxE5v>QPkJxL^5~5K)Edn$Y1O(@9jaruqanL6IK%)v9=r!Yi1qc9;BXJ zjx(-?yncVuSHHzGM+aj0;7lv`Yb*V@Q1WX*|L|#5jg2AoyK2UApvbuXYr2dB@Aw`F7@0cwqMc@M1ye{l=d2S8 zqE)Z0_o+ZpjI4fcUcj1p{}w&`?$H1sVH?SIfb4iRnnDpLyrr-vje=1BcM1Dv920IM zU}XqX6iP%C6V3CIF+hx;f{pDdRwSE%0^^8%3{9DB%sSmVeGS?ug7(pmNlc`T@e*8R zpqbN3J-}!N8eNCTWHXrhaYp|e4eld$Fr|2$^qw9f*=N-1Dc81&?fj*y2N1Oihj{=* zt@vc>xHQ%+2R)pb_*vrZlrNJN9degPQ=?FlOCF{ zES0DUHNknV9gW4-rmL_xdBHn$_9iEy;Q$8117`CDU}R|675df|Ff!x{5AyqoX!eNT zr5R7sJ&c?RR_m*5k$s&EuOqQjfX)*iY|%Gf_jv9Se(7P~_nOcRA@H7*|1RTK4mEJCDnP2wU6yTxIky9ow6qMJjM{%TkU ztxIeEOm57sIcw^Azgx;9<$XdBop}x%!v3y)c$nnT54{T}#lx1w!<8}~>Gj?cczdb2 z*-O1kB(NMFQ-(vJ?1A>DgRA)fM(0CKY*A9@GshCF@2wN-m?xGkV5UQMlN+91{akx^ zM73?B51yf4tbBDL7hssI?&qtdJd4T-HMaphmUe%jJ>06>1Mfx>(<_kDNh{9`?>%5Z z(kkulGiha?58>+C`KzGNtc4-3Hzkx(0Ia)!0FiGrT-?q*1A7}%V2+JJ{rLLptN@qi zr2P>b>;Elj#j7yUmB>GD=w{OnNLsD5W2H@QL7+tXSH1%vi`qOtC!EH)%xG4)&8;~dgszLx))kM?eaA^BMqA`*eb$z zjD~L$oIh@XF4E#H!KGr5MlwQ56s2)A?HGTn9O|vGLan|!8q!jboI)c!;=pPzda9=x zK1_X@Y-yuZ=fL1DJ(-<668L$h??51^s~7(jweoh{_*c|w9sd);HUU7`E{pCHDtrJ4 zyT{nA{`wyXd*>6vUKPiG0+S&af2i3YTQvF$Vf*|G!v4%!mGYy2!+$g>!I_LT7z>P0 zoI;%o2WCDeN*&)GpF$BC?yjE-nFr~l^9rUF?M}x2BBT8TvZrdbe%mI36O>e`I>Yr0 zMtr3@gUYk0DkOvvtr*WBC|3&l$=pf2_W%XQb9KudI1n2>iZN5lpPSl}qv_vMGP&4( zz!EyyIyMriODJ#jg2j?7S!0E1ofTYHr>DmXfUph7!<9*GL#^!gTWIVyemq^jzr`Dd zW3Ai{-DAdF)R8W}>sKeitv1A+USR|MkVvRIYoLkIsPP*tE{ei^9O)0yU`S{QZ{x^k zLqiPGTzu$&rI`gb97Oq+s`)PnyU18mYYznN%1~QV>7v?BTS0(RA2P}g|KJ&bZ)2cRtGNm)7KvC9XDo{e#@FX z@TRXdJe~4+l%Mhz?n)!?Ape`l>W2R^e_#7BUv)eoFk zg#Ug<$sL!BJOIup`~P2O)c*kp07z`2NFPnFsG3i#RU6<#i)OCj-h2Wa`F)!{X|+xl z8JRR_azrFlv}EJj9}lT-ITeEhmBKsRH%LBtYsnL%=i}pHj_h+ba~|Jc-ipKNYDegr zo2?zWX-VQy_j=5}%PRqz{W>E9sCiAzXUVe&!@-7g@Ck5^kfAEP?pax|STwMSD>`>gnk}!px&HJ4avfIgrt2)UyJL&2 z0nK8LeWV@Pd0wsr**(ClkON>=NF)w5%q@JxQ5wse0?GW&O{1k?js&{g{ng+pk7&wg zP38if#nee&`g*X6`~B|Ak#I{2RMgI*G92eEve0d!0U|vd1NmVIcs+De7YBbB=1W zY^z1%38u}LRa4yUIXA_AdP9(%-*TDHFEl1KTZ|6+)#u?Osa6`d&?PCS3nOy} zfiSyDgkMYtx@lfgb?O(PT*`l-Y^P(SR?+Xv0M>PGE+5EW>sqlDJdIk%2!`e0G&aE4 z>jEgM@C8Uw1>&)uX6=SZ%Px8&OZd~eW*mtVL0DL4<63MM2@3s%29N=$LBuAF{#w^E zgP+zl+P|#pZ&X6QM*m@5+X`7GuuGE33u4mg&`RlygJOC2Gpu4X{)>u&LklT}rT0MdZBV%4UR5DMM;v;fc#2Z@mVb>5Goh zrX-#AWTp{*yOuKCrh!#J8$b}z{*9J2Y22o#Uf2g<0e;}go7~7gmQajlOWJYFr09O< z`&Cefa)ITZ^#aPwmZjP}Xl9O%s581EoQu1-2#Wld1-M61oC~+^FK6Cqu$jNJY?_%a zn`0yrw7~~h*Ej(m61IP>>!DBUy4>JPHjcC3r*$2EX#}vYwE@<3{=cp3MaL;sMX`(f zvz%|Ri$@`%dXLPy_t9 zPzmdRfBh^~xZ4J6&uPw)d2i+;1oQcd&{*Z|ufP9AUqBKmKS;clxEfJcNbL&+ce%Bi z8e1A>1E*Ti;Ks=Ru&!SK*7evEU{s0B7-GPG2pBKY0d&U92Pv8ou?X)qj*~ZEmw_~W z#L1MyRKzkkl-Fbn>nm%>7Ln{|71&KHz~;BByr)4039nsaN#sj#Oxbe8s42bB*p+f) zBs3wSt&}}tEo?(Lnt6JhHUWlfi6!u8L#!V-6a9}d8Kxd!iPD@3`^@2k{ard$} zJFHrdtHk9*eni=#istXSvE-T`qYKE9(x*dVyf4t)kdGoTNmZ*2tzAmzYDMO6(=7R1 z^>RHK&cgWK*-A^jedg7*7{n;4MvWhY`xskqS-q<$dErDdavU=iBiPFGdrdOz`%OfQ zhA@257z#5swC>(_(Ppw55qpiL-TwH~>dsPm1cGFw-QFGYnLe&dQh4WjIfRMiXcFe= z)HfcRJf+1XsvST1HKc|2rAm7G&LH~c|B?W@=lQtWe@TFsIu!s3VEB6JKJp@%2P%Ar zhQOUX4>8W9lt|SNxTK1>x>RqKB{TjZ0jw;J7UbRpGy#`X+UF&eFSZ%%P=cMgZEBEl zC=--h+mKv?=bJ(XdN@M#B^#K}Kf@bLs`kA#F;NF{QB#d%;{E{TX3hX>cob_l-v4}( zZCoKv*O8r2gZg40Yde|KQ1GU^FBd-BCM;bm(1t6JClD~#n*0f`&5WX&RJqE`{n}K| zH)Ir6V9Y23>WJJ^Q(5g&j*KELct_XjvZES|;L|)Fc@}qytQ?@RdfD(NX;$r zyQJWWy88`qNoj4$9$Bu*@csfEQXWruQbh{9uAhgLWxwxR&8KoL@4hzu>?&t! zNTWlAVw?=Sapus}np;3&TBS-eP)vczsZZ>BE86rPN!Iozz+?0Q?S^c-0-k9!b*O<< zw&6sJNy7Gw^<;hICFPOsDj|s0MjsAgEm+rgTyp7$=|v1B?CAH`GnEYO_5KlfSgAF( zOT9-VuvWk!g#i>jAowt`QwC>px!Ay#Ci%F0CewiCoSDnaxajz6a@ub4M~81e8Q!WjOX)10s)$k`L1CcEC_ud7BPzqDoTIIH2`~`4hK}#|7ZlJx~DL z+DfQrYpz9v0f1XO?fX~(aBC^EWs0tvC@G}L57zFJg>Olda6r*pKq}+imN1wMeX8TkkrES^Bw(0KKracOEDZlxwVQv5zINhR~Mvtmg8dmAcE zF0I0(L%MNUbATC6SV#s z{jwA|`t{Sf=9oLWBF`S=6E4j}NBGK_EFog&<37-0>>C z2eC>s*K}bs>8_#|- z9*h8M55j?>ag=cRi2I9Ms{lBFe{k#X0NnbVbgdd`%4Q_vlLH`MD&~j)M;0Oz<&v&= zoah0y&z#_L=R0AbT)a^aoG`)V%XD~jpWl+)jk8_N#^3wXXEC({uQ~pjF}8fzC%88j zY4YlcEsm%EX#xCWTZ1m(f7;fOMV}Uc+vWeT0L(7hfUPlrfO^`2fO!9(Pf_*;|ESh- zwl+VFZ0-Ly5P3|h>V<6CyA-y*ahtF;e*X4UO zaV%QBaaE|Ze}1rS5-DI`_DUGJMAh5QG%oA<5rbbOf;*PWYx^O-Zh@dNF+a5a*300w zEB-FS*ZOjAnz@K}WR7<<&B)0|B(~ACM(zjPVO`AX6BK`RfxMGV zG-oxEo1m(KKcGa!^`R2Y^E_qH*iQB=XQy?nY&~~#&5!uwPNB_Q<$FWM`uW4wShzuC z(GIVUP*b*X$}I41808=QQ88PJ%t5g{N4usUT*|`I-l8RrYo+46he^W6X9>%eMW|5n zwD|9Ge0(vLn{!4d8+kLWM5se|c+$u4ly@XPT8QGu<S6pMydGz_H*r4wi2= z)CceJU@3}4JCOt8SKswACpsIYZNUw2mb~&3?*2tzkhkDJ#9~9Um9FwiVh7+|8a4>^Hf%irf!u<6wZuD>su$6_NIdWHNP`{gGsZbRl@UDs*`g!jdL9&K6$RVVeyNvA1`A zM2NcFpPQ2|n`*Rt`x5#1a4uao-Y&FtesmDOF;N!*n8o>@hw8 z+^Jj!VAW{PwxsNiXIXyr=GkAD+i;X0EY29(m|TWuJ0}TTkwg#?dXW@qYriiRi*t!H zIFMY6x|`$~iC|$OiV?yO;)fZ$cyl2@q$jKmndWguGMSSc_H&wsawOTwX#wrumM)_? z$iy=rk|!9hy$v@z4O9q%vu1cLs?G3crRV^sW9t}!TaGWuVzJ>q1APf@w!<A)tO`{SPhR)_83y5v_or$&r$SLr=Fbo^Lt{|_tP0_I13errW^>7`8O{7`qv2rn zq4L-7Co5rMpn;J|RBM#8517SC)Ds=_83T{g4h!qPE$BwUd70ciRw^Wi4EJfQCrZE9 z%r}!QE*P^Y?E#!xuv&$2v4AueedHUwJ^cs1(l5;RM6dv6+=l~uBN~VpCTP(Z+mj@~ z3i5=oB?VFs5g*VJBtalhBg8Sw#!np1DR=X-z-jE`Mur<++%lD$bSyFI&4P*Yx-Yz{ ziAy;fNmtq#f<#|N>Xp0{{C42cpKB+6- zI4Zx&q|b3%)QXah&HeC2h?T9^r1yYC+1)SxhN`O@9nC?Iasx{00@gx2+PMD4UBU-am|yv_r61@`$56rx1go1%y|c$stHvxrqqi=jjQxb;xnCKva+k6_0Bm~C_vaIyEl$KTE&CoRJhz*M}X$RJvQ5fOha!g7z} zZw|5c3-GN4)@$gp)1(J~%`iLt)940;}jP!b(nS z;6c__=HQeFP_zSNa{rAMtTMOiYtCllwiQG82*o&yfq>iYnX|187T46d;DSXb#QMHv zpq3atvF-QMQ_}qAL*D!P&~8{kb7O%)>5cASF@;KT(zEDB44#CpRMPiE1h7@ zXIZD#_fTm)MpR0?WT1dy{_*3!^E7qJChvakDf>BTU&_z;q1l#H6%GPwkwDV4Jf50u zPL$DA2uw(;nYl=&U1gP zzyNM6m%ULb-UOdmZXtykUEp`<>IAMTJgcl$1?++^`+i%#XOIDQP1r&=2lPrNQb<1* zC|Tocf0=+VFX$JjF(JOTeUSxt2lD(x@(<2l_oJi$BV*|6VIN28B@ubACFvZ~veu=! zKg78sATY>*_jJ5k(G7OE?MJk`oN+A%Gnck1TzsQiS2PLZMJ#CRKg{#Qz;t#HaVuZc zaLoI0((1mb16@?;LIb)Y^R>Wsk^0tu3p32Owt&Kn7@#n-gHSa5zFXvqafx?k0npue z|5W{!pX>Eq#l9VB(EZfiY?|2bTKblCJ?E#~{2*s+PRv_sMv-N-#U9=3e(;`-170xa z4>>d)ylBETX(=kv`zw-7JiqqW{|W%(IxFZ+GLG-o!9#Qj=u!l|)*l(sn70W4Uv{a# z@F_;D@J1lbFNgP$_M(2@6*L=PE{I7HfiK++6_E5>@vOumQ3BY z>iT9*a-kHkEt@BTZR9TbN?avA;)u`G@5|t zK;2%-Ef=rdoC!X_W^S=zb@Ba-F=f`;lM!8T>|-^1y08)^mystJ)LTL99T&GtLo&|d z^r(YEkv6MGtx*QQ&t-`gLa4ELM7U~t3Dr(~PdOknpM~F{eQ=K{TXhytCzV14w7}p#Q3|=#*4Abz!5Au8X zGnTy@Gf7lGBYLx7v@HCpbS>#ceb|z8(KWN#37On=4PwtX9hiry%0qN_cGe!M9S>!F zpv0oN862N((awhaW$|^&oih3U3sK`y^EVErJ*Upve2HHdmx{OaUgM@2-*P4MreN=n z#8$a+ija;GsJ_Z7;%OF5IX+v$+^PrDOq-&)IQ>RFEg*Np_nvvl^hFyPx?5?r))zxd z`d*g92i0yYPmzl7-UnjXB)NB2D%EcPl)$mQba`7~-GZ8~Ikf(AhB8h&O)^0;K6(Mw z$GOJ)L>+pgpy$Y$+aThIZ<+fbRqbP(>>9=5l9QlLAci?sYJ!%ld{(7j+8usuY|R>! z&@f>7g>Cl2JqsNzT}Pw5K%EP&jbMKWOj$2YMA8V;Y?KJ$m>yZv+8we_D0**YgS}}s zL5=ezhVA+iwSG+|L*Maw^(k7^`u#R!*}#t7k-~Tls_k--gp1y%iwJEf<>`VWWIBrh zNw@q@8v}vwOP`CK2pj5#yn?vF>|EV1bGujRb2#|Ig&-TK72kg2OtdM0mtf_DIM$zm zx--6uK`Lhx3?b zq1}C z#%Ts~(Xipo8R&YIBj;Ud)~j$+Vil3^FoEeCy{!e2f`V&@MZ&>FjHG})Nk-EB%sF;3 zQa0`8jte#1?hcW3*5;^;Elv<9T&g_~EFXW$yeAHSz2zrVC|O1wWIZ4%lQ{DC|K!tF z(eIcmH$zzt&2QJv4s1P+XgZt|y}3k1gs>;a+wqYQi`|vBuyo$Bg1J*$>5f3bXTK;ixX zT-G4-ISc+t#0KP_!WHqXGxC16p`ic${#+w}@mD)caM#GUx$4ZLGc1u(cw)eSp0y^p z#NVIIu{PYT4J1h0CbKSxg4Bu6bNr@0!aTXAp2kI!SH&E%-ZYMM0cN^?_%eH)0((YztOHl z_jq7Kc1<=($(hVb##NN1NOzA=;s2>Eo}-|rRw&jwJY5?%C8?zxQX-_Z&@AiPrYBYj z_GZ+obQ7)aF34ntSt_gCW*34XbtM{W?rV1wgXYQL+Ep&zHu`PqJV5+zdlU(?MI4tY zRL%Lwf_u0m1-nf!nk@a-pk&eHRmR!3Z9^|tR4u!hb3^B18ihRADbx;47kh#2uHp@{ z37teHb*PezHk>9D4o;gpuE5kZzO}lo!mXi(fuEWbL=FitUNx_lEXzXa4kv*p7i7p< z*g9NNwjoUDyxhLD6cJG3&TPJ%0pU-X3Ul_Sl}*3Ln<(@6eEdyJMSnVr(;izS7t}gg@N$L%{`cnP%!z2q6NiOfonb64!vzne{UUVskLD%O-EC z1VeumA~S|7L`5FN)NpTU!_qPO69T2lH3z-$xS9&S@L)`&6yd|k?3IZWJ!+9B?D{GI z^OH5;F*}i>T274(7p}whcf_XHi>d1M+K}($*uc@r4`Y?SJaHK708U$Wg9wF!GpFFn zMBiFLaY`Z4T5J`7NV6WX>}(KB2VE-HC>IKiL>%BJ*}bV?N-b^L{Q?yi%zXXeu!5f* ziqauTsYMV2@?a~0L1*)R`k#aLS%Q&?x1mFjS)fQF1sL-;3jDfTbnn_F-7>l82d##? zFSaOh2ZrTh#-Y^_zmgFIQzE@(WQ%6VCcj7lhw%KdpoVnA9G2p5BD*|Cjm+cbt0 z$)o8@;~<X%)+(UeOmy^)SB{Xstv$sMNQ>iJ zzJHcwK`axxWY)VFsqY%`G<5O0KF;jT|7-O*L5y(E?PRYAzLvKvoOcLfbKDbdqD%~l zCI9-Jdl)OutLa_9fL;!|jPBrL zvf==?5288nXaQHMoNnPK46i#t(dBO?#{=g)x3S9?KY<+^M(bssGS=?*^j}jl1vpqG zQe98r9EGJw#Vgz8d|;!H>2V6f72s0z%yi}4G}d)3t>zDW^5%Tg8wDMY?R<^4M)r{G zHRJ!VYHByM-%Vmo(v$Tr=Gtc;Z)PL_OD;(`a_Jk}@pu`v1PkJuB8~(& zk<%cW=*2(3v%rVTQzk*UNZ!iIIC6QT!JTCNd2iPvwr!4{Z-#lZ4gOAg`{HRI_=@~B ztn{(de3~=HFBtH%$RJDQXgRoh8gRL!g|+js`6o5#$Bp`4u!`7_pS}622wvRtITsG# zQYPp!p(R)U1pDQ=&t#hk!B%+-yGL*t5d*OzOv9&9kGNCP>6?^{x$;(~tU=LuGZ&t2 zU;LJwempxRSJyJ#yG9Jc7g8L8MQ$CZd%&uF`4!;HfRm$J3ctNbxYGBdr5+OVYU=}z zPI|-prdtI}QTie@Hm}K;`Is5EP9I5UYnbvrLE#UtBnWpAA&RKf_J||s{d-|* zP;p!Y0~5jMDgSm9&k}*tszOA#Kr9PEI&ynp%6Al!lKw-2aBfI=E!pT-2E6XEh#HEp}l)@EQmVc0x#sJIR#R%_iYr3tMw;_-|5eKL*~ z!i<hOrGI@EP%h)=A8;odX#Wlf+C%{(k*oJcS)7h-v ztSgHVIb$Am$~cm7NT)m0uiQ5vFmlS4XidzF93PMWCyu&Hc;D2#_GXTexfM6(zF`_GCn&8ya@PxZX1@gW zKBVv22I{ffwr8M2Z)z|xP}hm+g|FU4QPZF3pK@B!B~Eov=(@F0&zHOs_v z+CeE+h|gIr9u7Wv{L<#pchvX))a$lL0RQJrbRVrrpPosAJp|lz*gAZzP{t z-Q!5#FTtBvsAn{duNbYWoD6NhD5P`OVFJyHWq1N5jw<~&AhX+BGZT<_|3*_%7xehd zBQxATBx?6ln_Qujv2%nlMU8hxeYjOFgMx*<#K_;|>!Whu6sW|aIr<b|13nq?g1q=%02^Ae;11vSgF_3hQ|DTDtKxoyc^=r7JTW*a{(Ln!bHn zP;aW{z}@Y8cW6B95uVn)*5U89)u*>+%39La3{_609M)HqA*+F>x#4T8B=vFYxv}l| zySD<@{?_5rRCJY|AK_*E^qBh{ZB`n}dJ+DiyN@kkX7(e--|#nqV53)#@8jM{C!v1w z{$Mexv)zekTvmxWeBbk>7fXNAT)#8J=}m=;0>r`0dR#v8IP4=1-rWCPjX6s5kre|B zZw=J^e++M_n>o8!IoSVy3~x1JgZeP-tafmC3g=~R+Qui)v43L~A^Fa4(K^cWPQ8~*44|`&1s8NRZDr6pcl8Qw)5YQ z>k1H3)o9{h;KbKyLMvTJjbyv~7}pWcoHoC^kaXYV6~CnYpTk>=6^ozRKip3*q&th3 zXne&pUdk72@3RjitW`AbD~0U|$0RQGS@Ci&Hs$3ei6HMh?mnm6AUlT|#)a<31Lend zfw^Bk{|#^XEAZH*;$0EqAw#@37IQ$OsF(K2O~3tIbhgc3_gC}FP>ecx*U`H>waB0I zmVHP%@?NYns4ia$AnHEr@Sd|$-BMZ!+0`HTon)@H2>yKvyEMNBvXPN+9J0jAtw*Pl zx~N-d%TC|@>^tyal4SLY8n0dp198yO2VqqNBnn3t*YzjksRx6k-rYN7j5n#YUsM4d znAOi?se_tr?jJIZH8%lUA(uA!5=Xzsg1-dZ%$B1I>tsN|h6)h1KkjK$Uzm)6;l0jI zYq@U=`yH*%sU%of?FKU|%N*u%e@_sig9siaUTDVG8i9Hp%ooDNog8mD9=DvT0RxN{ z_^gMww9Z4STfT}2dkZ~)A`A8+RoH)l+5ZOFQ*UBa`ZS~eRrwV}_Ams<%GGCAg8UDh zK|6?=HD&kH?7_jP`gPGtolH|wRE~%3E(~iBIRU?M3pT1ZAlob1NJX9gv4o}ee5q>g9gX~)}Wz?4S z{Xvnay!VGYWX4a%q~~M1#~KFwi|a4=ho3G^PD{3Jvz>wi zkl{`+93;?3Xt8L4mAP!*MGA7k{=s96W>V;y^X%LPX% zAErtR<Bj$5m$D{sdX;M(N7bCa@~#U}+I$F1ETf+<#9l>k$qLkKooBD8Cu0s~DNb z`B}P<(!_p`K@gh%mgIlU-&7|Nr+tj_cC%eW35uDy_h8Mq z*%y+ko7p}S`tvh{1;OIG^W}N>F4AT-trIK%Wbjg?oP_Z@84xAp&H)r&o5;ruuRODb zQD5gM@{5rze{PBWaYz;!b&4%fyF`O;;X13xSBI-1Yz@vW`!hn9p41B*W!!=QT_f>s zsHqDpXS;m@T}1l;e;D)NgubwbYlM%(BTpYf*VM0;oQ^(;zxR`~Bn1iM@!o11*gw~~ z*h(qm%FL25da;pSyfN`-8UKEG;gWjjYaV4R$0r5Z`dt-SU^fIhD`VBA$~mQyW}w(B z8)cI=+uJbO0j!j>jK64%XW#sU$Hf2DJTrXqn0`7dzX!$gL+G-(82Tlj?WjQPN}i<| zgk6msjguS31!!g>sAs^8i>B!enXqi6p;1ueupo&HuzM)rTyfv}r?}Z~Y?n^aRM1x) zFG8G?ydpVSceMt#H~G`w{v|vfUZ0uq{wmd>`vW4tZ4p`WPUAvEEFeiZyAqj$CbAGN z&i=2Y*bh3)K6}cunLl~Nl8h(DJdPBD*$sZkMB>p2$|MCAEbAOJ9xoKDcS=m@l>Ob^ zGQ(h*mdRQ~!pDl|{n9ig$s5^BJ}jR4)rp#;uY0{}YiSZ*4S$bVCs)>%R*5PQ?M2~P zt3SNUfNAvf=M5&ihc z^~#l)SiQp(DTsLjw{-)UX5;+Qzja%>)dS&3JT^aQHu_;D$+RG2Vwr7}PpjPOz8Y z7J6*B)Akz?EQEnf=L#9asL81h`MwZqyG~*nZyg0=;a)sZoYK8H+IYfcF8E|%9`iT` zmsIg4+j%m!Y7K2k_j0k?QEKfgE`lM!yofH=l?nJHiU%Kw%7C1D$V1phT6$PxR+lhb zIx~V=*z@&wDa4XYVugoyuh30jkLXRKBl=);&>0@7J$r z4d#ikhflQ+g9K3|CX^fl5wkBEe$YnO`JKtp_e#FHL=N9E$4qSE9pr*vkMYc?;2HXB z5N}mmI>Dc;;?@6hK2zS`9PL&w|8<%jS2$M5m!Vl^P(KH4h#_s!;X8BSbfRTG^oQgz zE%vnk+9WfQ+rx2-)Ra2s3qs=t4f0Nsu>OW`+2#2ItEn|!e>a{0cFjnr_ltpjHJ?Nd z5!C)yAp|VuiwX|!?YyKO6`s+r9$1;G#mE3!yd?*Y!TwLakt^gp`EL8l?$0VoF4p9C zXTXRt&I}FiOU0T~;}w`z;!IX&R}-z-VarR+)*3pE;;xku!$bMIz6m@z-&&ptyxcWo zmoEEHQ&MWxkhDun$eb4)YlAR+1mj@HrMt>_TGh|#?Q&CO(d6V!Od4;TO<5-UuW^@) zo1C0~FS!7p0$|+z8_N=-)t>Gf7-fhELhuj^cGx1=&dc~yHY_5ZVS+s3=uD3teM%)6 zgEHS3of+&|iTo7F(Q>tBI6xX2l~2w#G};Bi|BSFFLo{j&MyG@8HKs*AzLqMD-i(GI zv&u|jjS^)Au9dK{CQ?a@*{_r*acM&gRT;!|MDj#=(JJf++Im{qX@@6`B;t}b!?qG0 zqaQRGb~nvg8Ta;Mns(r*lISVdax_Jz2}}kM0i*xzGQai1ZgYJk-3qtv(y9JO6}V0= zB3~HLHvM#SwdX}l29cRHZkCMV8Wb3nD(<9ClXkGy2U9Cb-obGLc>vIp2VHc;X`ZnZ zu&aDJav}|L3AgXatY-#bNT?A^6)DdQBCphLUAxS}Fq6hK)2?wmVlw6?kb3PE?)#P> z^ixHFqpb=?RPLr6M4OSc#)I%V3df|0el$1f5M^V#TE&*$jLmPG1g7Ws7X;l8t6%3M zE5eQUw_a7-tc~cnYML0CHR`JueS4+U7t(Hz?Ns?O?pwTN4N7*BT&h-Pt1`UIP6o7# zDLL^f(9w;xE2{C=tx9hbEABzuE>;Hh&y&f|0cFz$c?a89pJ`2RKB#2s?yAjT-?ZKu zIRV333ol9)jm1Y$_nMmNS6c53ZaI*p4L~+b7h+1ZdCUhV6JqExI%#3C-ak3U#YV5u z;&0;rTplokY^LS*YD4VpVDJvo|Dvc(jY3OcE^$nAZUo->q76ScC?)D2Z8KQ_uE`PC zB1RIjj;iT1N4lan_~wjfO`m_T3aZmc=Ky8El_Vp~!NHH%7qU&Q%fjevgvtwH+jakg zQ&=$z6SsKSs3^Yjyp#iYO8#X`-)i;ycSdNV4oH~5tD)DRJt;;{112J_$mJMHEKsr0 z?qmyzpSD~k+yQ0$1#&|X;Q7nhE-=V?rwI8HMlcZ(=}iv;YsL#;7e=jCpsG7j_izVV z?|o&%s7MWl4fsMA%0WcAh!&lJptONK`BjR_o3FrPFLqe$Rj)Uz$`8UL~n zC0mboKp&KEgpCMNNV@PR-7h4rw86vYb9x5+*>_>@fs2{KU+V+@^IhQBbf0!m!L0rVZGX`ahH5!%^NgMZqd4Qs7$%TQ$=wBaH=XeLn zKn~8d(mF^(N%#{vr0`3HxQGN%bhN>(Un|HwYj(ZNk*J#ipZ7WFG?*jx1*ka9(>l^p zba~u@ZCjZLQHyT0Yhd*(aR;vY01xzXz$0i}!;$4O= zp-9jUttZpgO(p)mM7^)rX5jeYR2R@2z9Jh$nlTV~ay%?FTckk);VPD;+fn=H39y0A z(I9vy%w)X7Syl@y$V1uUK8U-k-`USTPLpVkSXdVvO$%5?VCh`%EtY4#vp^6T7R#3E z&j&~>j02X{8JjfJ_ymiTJ*t2&iZmX>lV0f~!zh_&c7p1cKl+Nk)&3ncKTgLMDdHpq zE|iFC7~e`q;F39=%hHfDAXnJnm@?ZC#RzxLA;n)!1iUQDI7Ps=Tv>wF^ogM|8M%U# zI7dak4`EqESpm7Z8o5yHeP+4U~qtd4E znFed6oai&X2R>8W>+`FZf{z-~8YWKA`zwF*Cl>Wr$RuRER_^h~W6RhXTgB>(kBuKj ze;@I zWv$7;$EU@{o>r6IhIPXYp@KdkLwv}9?8o2cekNMmscLN)rtYsUqBh}X;Hl)azeyk&>`UiK6aFz2 zPX&@2443x=m0w5hZH1Htkv^ZBO$(@vhmgM(e7OqYhP zy!S2AYJLkTN9S|lYhi-Q1h)XjhVKiY`z}K_`YJ|ukII@48-ID%Kh~m?q9Er1xBepj zM;D(bzFFe)rBQp@$Tj>&jCrv?d@ zCAqZKNM6kM7K`-N35OzwSCQ&deVa-3en|GVegJvI0^Phf!%#iOF%yio5Go?WeO{?RIXl+nB^*Mk+V~nM}T&gX8WVK?P)`IT%gVoDQemd z0%!4G9wv!bMPC7lc`=TLmCHrM_@(FWKf45*6DgC_i7{!@Mn^J`3Ao=pWhBSR${Pze~gU-zCaB<`c1+A5Em@7lapzUA4I^N!Da5N zrK%IMjxd56!iHX!JfkC}-&u>6ORTxP39M%dE}f0P54#VfztZ{GDE2<*Wv&)~`{4rp z!z(`HmE7&9@!poB6DH&Z_6xfnX$Njc3ko$~c6W{H8dEC!k9=w!T<>=tZ0q_}!sAm< z&d0g%+LiGY`|7+`UbEi__ij#juow}#k!*B!n45LfIf#AUBh{MY^_J7xik__VVT(F@ z)tVC2Uz4mR1g|Z1&*7qs-jf5Uznz%k@wOPkdl;VLY|s3>dn4{Ewk4 z#Qz++%KA5SB@+2>=qd->&-OS;V0IOo1<7OH<||e#uQDCU_5U8a!pDd7par13Zq@(C z(3K`&+|kI{#nQ;u*36l~($&uP@^1-4vKCOnP&yar%$p8nVMGZXZMm_m7qb}c!#%} zR4ridMxQN8RXyc-R8HKglHPw`=e1tse|Y@wq<AqQ5^puh$*xIA^Um*-e zwJ&`JkCO{++<9m09unF21waTx4)7Lgamm*@al_|MsdE8Ng3_l=Wr0Of{O>t|m)aU- zyxgBGg+Hz$@iZlOALkCeK7J4UR&A=zuA1Bwa4%{)c1UD3vH|&79_*E;s{$<_joyNV zD08oE|2i1OkD>q3!SJchOAQe6{@1}^^uyB8aI`4V!f*@1bNO~kd7g(iG3p$~R?GM# zqbA;r9?2V5?Jmb+NQGkM&THLSyi7(`>-%EzT0vqo2#8?xO4a#ES${v?)>*_=I+FoA zBpRCs%(5MKKWWK*Hw*i^zp^uU<70^+h5dY6Ox2OpuD{E zXea_Ar1D2G-1t;8yhT}7kNESGOh6jcdj@Eu1^3Tz_=6-FNEWuD{LYZ>^fCo+d$5I_vLAO3P@mLBC<8zpIBE@UQ&oS+MjzAKrf61)-)!9#;+QKM2Q(7+^8`*(YC zqWO%7urU6_oxx8mvnXc+jW%~_BTa%V<64YLC6RfobP?t4e8>@%eh5{}>EuA>ZpvIU*JfbI&dyRn-cS*R9$Q)@_xY zofTD~y=YXLSPfQ%2s$i01;KSl$w6+RFw+FRQ*=SFOGhncim7Bu9ua762S$e&9}W|= z%9pHr%UfIC_iphE^LuevP7aEha`Z0E!97%B3j7@Y3cjTueEweGXus1>Q!A@$A)@!C zj~&4(`ZN3A0Sd0UTwO3>1k6ltfCjdG!D&VC3dF0gr-d|70&?G(4U^xT0{_%{+M4uQ2J(|lS)|>V>025pyyf}9Nf*QRIvv=T{&sTY7xWc9 zpqojj!6*Y}vnTa4rnJQRh8jaQYDhIpC23z49r<(cJmr`E>LTdA2PsuI^ChzQGBzjZ z3ikaZ=OmhbkEQi;OS?aMHe{~5fn6KP;geP2nM64^*o%+n!DD3VwZBgc~8Xg9Kc zsA_~`dEHam1CC0-0hSUZRK`pv-1O#!o&f`WWDf&Fm?G8(wd;p++;rUy%F~D?fWheviI~`F(E2Lkt1dk8Ws! z8bdaPEM@?O0_Q?EkK_eZPfYjn9baRCp5}ZeV*{^B^+4l}nC%z8cy`7`m9f>6;_233 zglGCpjb~PY4c{Ng0&ar@ApGM$gg^U-@Nf_+&Q6cv4?fcw^iGw>vU>P??96%xh1`jT zVPRbONg*v3Qcy_q-ZuJAy57GAo&&ijU03d0=og7*yG*6rET;?+KTwg61>-BrCneJ7 zTU2u7byqT;+L#;`gI~i}C>C@8?Td1M{~e^fbf=8TVUFJAo5=)837)aG)vm4Ze@)80s}2WM-LzuHsYRk;@%s zuhA2Y?-REZ@6vScRs#xj?n*5>F?lM}OqWIr4S4BpT!wPhqCBTJtT?%*cp$k#)Csg8#t;+T9yW1vR8 zX?Hu+IM}t2%;1st^w_SCG?=l6)AV%2q!6b z4lvI2@Bc;_s6~~Vedt1wAUexJ8jeZbVp@aXPdLdm)e&+}KrA!;9^eQ*>qvz701P{; zzz?XjGus@WpkJLd+~7exj1ns6eo)UpFzrC#Th==QD(wyTB#(<>1IQ4Uy!9p0k1uTl zN+0&Dco(yx7X-Uj^KEi18#?IF7Uq%pfJ*zfK`k>-LN;Fcm0TihtLmZBZa?bW&OKHy z2ZPA&A(bxOUkR_>BR{1)_xMJCW^U1X_EfnHe^ahlrrSV7;JQs%B!K2s9|S`@J5a&b zD1G

    xy8KO*mFQz@C)mSqz7C-AD7|0VEgH-80QSd3JAwC_7W;DO;ixBvnVylwnX z;6*Z200J*Uj~)JB0v`nscmjaHmtL(J4h*{gZ-EEdlfnN#1bzao87*GwzXcv~BNrg> z>HWLuke6}*fsY3W{Jq3QhALjMW;b8fCrMXrkQqR*T>W%>?8 z4enlMo4taRiN}+p1!8_VzpqU~$PZ=u)se2_Q{WeSt1`WjV(lR?YL$&&y1^6Qh+YcT zHMcV7gJr2VB|T&FgH{py?pnofe{Go5Sa7AJ))Et`8B4mngy-M>(y5VQd#fbkvpEx# z@@a1RrqG9zI>zE-nvAHCzALQQ_>4`~{e@?%C~UOCQG?8@mknn)_(0bzQH{beZlX@$ z(Hfzk>(rsh-0mwT;pgx3#Q*?oP9|U`=??Md?@S z*{RbUKe}C)i>!&wyaM3YbC<9rH@O`V-TIq+M1|0><_he3EMu$M+xUt#0N^Y2>p3S; zF9S-awek|TFK6t{J)S5e<1Z>Lfn((^v$te*qi3@v3PEyNwi6+HZ1O!B`PVbP-LFGBSF)oJ>!`i;(A3aK132)=Fy& zWy~4F{ZE0Hq53QEI;dI!99yr;8$?voF+b+^n3P5r|7I=BDSdVAO#lMFjWjS#00#6E z_3d*wS^s8BU&s+D6;pu;A}pRa#bWe71pbJxKrYlCJiqL(!2ce>7f2XDLqNo|IQ45B zZiVLRvz^DN=tJGb9&36Dl8d1vGVV9#4P50M3!$SP!d$o8kJs$s9s+bN76>+J@vKsK zN2T&4lQ9z_uuqU?zg<{o*oFvk3^qfwFZh%uOx>2GK4ell7VYxoo`EUJ1sgZ9^!CrGiqloQL1Ba;uew9iPdN5;;wSJei^7E7bF;d6-X!hZ z9h9KP*L*mcyVn4^J(&C1IO}v^B9FUgA!J;Il&9?(U2YMrF-MpYJ>o_D;9_%ZWZYD+ zw5O)!)h|JJU&D*aicHr{G3@X~5prnuwmgv01S3Z;@3>{cRkVc~%cOo^`5)njQfB?v z%9f~)%LAZ=hz;j*PVnNOEGbjc8__9a|RzLzcd1T zPsRz>w(&Ou9{NA(dIcQDw|;co2wpW*)SV*umQu2M_n?5jWX(soa&3B~eCDLCf_MLLY1JEGv{QIR@GN1>XShvfhtyv<0Z~)MpVVac!*Gu(|9q6QW9lIv)P{ z5vqlcV&zSd=p`5{mJ|?|43*+0}}0Cg6kXPn~3B8ym{=-eM$S{{HV2HR4IRk z=u1^BrfKjb6NgRWa3D)h$^;3hdl-^9Tt^8Er0+zr4EQ$A$U1~Vb)A}mG<5==(;FCq zklM#n;?V~TV(NS+(Ve=nOonb(HbkZ#Rf3_;)xq1_-|^&9+e2aN%Q8+vKcX;83`e0) z@-cMROWs>&ehlqiTLt#5Rfo+Q)gGaVO$RG~LKKRIC}!X{K1zsggEpu85mm}$k4|cl zMk|d$E1k{T)0l#NTXySx9*kYlIZ={#YVXl8Ki{12=w^N|HzJjp+txK+qq`Un0V|^3 zR6;+VnYSU?5)O{t5%xLIBsKPNLz9*`c^YEdfHRCb>u@=*Gb`BLg6wmP1nKl~hGQJ& z2XeLBhZc|Mb8EdWo|E|*`5W+#{_UQkfB{dYRcEXTH;eNaU)-Mfk2aEo#hW@RUQtlh zDcTjOogJ=a=5q@=NtM;FM>vH9@+{j$BEJ+@U*>aG$Ff%BvJ6Y9u4k`Q2fXxcdDr0> z1PTS})F?Pj2L<|b8{TW3>dqFICs@a)6{kH9>`grg&a{3#?P+V_v^2rCCi7J_#mu?^ z(E5p8BRbfrh$l>bC=7wzmZ*obfh;3jry@atp{T$9{;vJk-&ZD`cI2^sA*d|;^><&L zL~J}|+->E-?c5F-*rSDJ*Y2)d-WxoH1G}cOuVC4okmZu{RG1o7ng(6NtyD`J2YSsU z=uP~VjYE=rKL+RQa9cS_nb#xST~c~}|7W-^y3rok0ZPEz`P}YkLEb*+SX2&^52p0? zNeT4)1en%eqWnR-_RQk>ig_x;Ggd zM=;9LHj%#|5`2CycfoYYTh?+ZW7oEw=RW3mPW10YVe}UsTQzzFsCBzmzY4 zh<{O!?L@`ijH3_4mx9pvfsrn2@fai0`g<|ae?!v%tuHW{-iJi2*N?f<6#6AFrz`DA z4li32Y{uqU)W#yJE%E@$~rvwQy42SHRHoLSc`tZ423R?1kaE}3iJmC z4r=nrP^m`-_pxI;eorY~<=~#wrg;B-RvI_Q>yT-LDn^w^8AS>~HB7u*=C`RF(13$^ zNmA*HE#S=;wasx#LskrU*racxnrq;;C=EcPMB?IhTxe0OfWJiT`DnP6GC`gChIArE zX#`}`+(v2YGOW<%Esidcdzi#A28vj|X)IoSVQ6?_IHr^-x zo8Jiv{_%UZh><+IIh4%*;P*J}5|dk^^^|L*hU@OFjY$rZznuvxbwFpLzU&|`6uGVg zO6w6Z*lPFD9MGBI?V<2`E&y~U?(H_!q56-Jmh)vb>!iZ|@jEhr-ZTqLWBk{d@cBPF6VEWp(XH+t z)g7E||2h-m5r(bZH-OHBbE6eg=O4$IK6;liQ8>fDoe4T>c z`RM`=ZzhH}d1hh{zHf6qiUkvz$s+#pp3Xw!K`P}Z6pDS9^;8IScA!lm{3*|Y?mdHz zqRWVXW5wwlFOlSfUSLW~|4+s)293y;#M`FFQaB0<(v_}YM2BuS&-zxeKASSHF~!2) z6emz>%Y9=a5{Nyv;8H8-Y%K!}xTRBI5;rc`e_uSp+IA^9e_PB-ftQ#So#t-Vlb3Cb zm3zU-F}vP4b=zjW_tvdztt()kg=Nhz8QFBr>o?ahLJHUy^gDXW2jzn`+G`@^13mm8 z0YoOK@6~oW|3)S-{v`9^10oZb$KJWVm#r6>0gB6)R0f!U$b`{YnB*XdQ~yWRz$;LV zMOQTXcJy*JI5{1uo@6&}cPx7JU9U9DQCKf1C!G3@1ka9TuFs`M&WxdqYzoqT0M8|& zwIlDVe`y4~`)>0=Cy~w7Rlg_uzq-UAhA!5u7UJ@kBV8!jH`Kiu@Tvv!$->9%?id@l zIp6+<;5OiZss1fEh|?)+_P}n1Pg5Pe{v-?kn!d(o{h20+6Vx{_vkmNmFMO<+1#eKk zV~W4eBb~p%gaZEJ44+_FGE_d#?;VpgsO2HhKvK_wFX$yGn4iw{Qdl|M=-e}^$h&6U z^3a!Ia{P4bv{dvrYI6Sv#;6xEM(}i68Zd}rG4@mX(pS#VzR;hNOSgvMdzNw%yp@|@ z|8d@Z+zb8ZFNjs6hvfX0y^(i|G??vg*vv7Ci=Kh#LmFC1%8DNdq%~!%fCC2d*W;K8 z55c^|;=u{#4wlEHZ}jtlfr~3}1{7SZ-m5dD{CSwHrbJiG8-K8)06kBlp|}4Ln3#@Z z7cGiP^GAUN0zwi20>b})uKLKCxmr4y{)e*b`nUjUV_$D~)ULT}9GO2Z6D54I4X=RQ zK|H+ToHj16E=)t|`+hW3l8d-_y#0QbZ0zUz4kVRf&M7Nms>Aaqx48H|u@udpT?hTx zWkW=*TuI^*@zDE6Fq+zmAijp{Z&%sZ9WmZ1QpyqH$4tU7u3v7|l|*KJt0%H6l*v&X z+{;Dnb-b+thJ!m|h((bo(D|0?cz|lO66i!MY$i4rHp@^RaX$(kw^FZhyy)OJ9a%Qe8fH$6B zC_s7LI=k$Bs)T8lgcG%|_mtHqBpMW=i4C)z5G2J55n{(`xJ|^wqO_;-fKuSbj0-sM z55yvOM)GcAr$1|A(Us&MN1vd-XQeSv*M3a1qe>2%HNy`R4&`s3VsW2=RANc6yclQ~ zt6jer-s8bnEy}Po5Q=PrsxFvRM*biXXhWeHHQ{*y)vgu)q1X}xU3vBGk1&3@DQ|^a zP>wpT>xoH+X}LlvPk9#l-Z?{johBPdRt^Lo{Rz2}D9seX$63OnEPqO@7~~ac`}OlM zQgI(*uQIvSWy*vbY^qMHRgfYg`a`8TkDBN>A;Bj&+gjDi2Khn_JL7Iz*HyC&x)XdV zFCk9c_m4Hjp_+!*bm+6$bGEqRHN#7-n~ruMkVoZm6Dm1hy%DD{FyMS_+KjHVS7tLO zHmw79=xe;8LGZ}Y`+wO8)jB;6_+fA}@`hjmiWQOOqUa6^$J!y4+sRiPz2uj5O4QW& z2vNLk%gq5GL`*}JBP-oNVi24#=Z4f~>Ju}=?<;6sJuscFt_bcUzCcyT?!C@UoxnM* zwvE79u(w)aBNQt@R8~GR2|$T@xac3s%|F~BFuz>lVBhM@Tt@)d^l0` zG9>g?8I_nyTV!h#rhdP5F^jmLCo`3d4hJvo*d4T4QjbmBUKQ!+8sAcx6{x&HYHFj` zx6*-&z)*|wm*Ia>Hd z3C5TGu-^Q6HTBGcpQyT}BW2x^2V>dGXfm6HGvv4#v8pVk>(Sw96jGPHCu-TEdsQ}P zTi7|iiHZm!xTEI6_q36olxzfa$ySp+;+%|SiWd4-hq)R7P4g{Skv-O%nLwUiyF(KO zL^TOf#kCI6bLbh=-%U@9y}GD}9NS@a+;=r2o6wW{ZGMe~b21HW$FmfK%xNeS&2iz3 zD~)>cOAG5~cb)=Bg8u7npyR8TMmHCZKD2&q+JpLAWC-)^x(a(wg_fHOhf!LEC8d2ZjQFlx5L#dmlz;1P3)0zmrO5|t4*@Gg`1-hr~1YAL6FtWGgo3YRb z74JfYas>5?=2ZeYs#LsO|0_`uW(^A@THq!r1St2JQ3&m)_&F~@Jc!6Fj5p@h z4J32YJZB1n!3+2P&l%DX(?S^#5eS%ZvW~W|vkfle<6u~=11BU`G*qc%k8!Q^cZE^h zfo$gHgxQ0a3>GeyY2!f;$PBOwv?uC80!{7YH|_*&>d2Hu%%)xANszZ>9a&j&kT-6Js}r3hHLmf}mOc9g zTJab^x()2}VQa_~RWp{Ys9DzFqV`xbH=2Pe-|iRYtvH`>RdV4`g5Ryx!IznP#$&Ni z@&~PB%SYahaZAp)0)2;z+v$MY=;Xwsnb|ANkmAr`Y8@s54Ep_Bd3Usx z5w3wuWqBK*x~Pu0jR!yCI~O~g*`|>=Y&T-?Vorvj#KslmS3ikSvLmMa&pu;R+D_*h zNS<}Ql6x`1Dh?sbI-)q51pGh9;ijn=0@=D5R{xQU8ze0C{ckzA8(6VM&|#Nl%OR`Y zHy(;LRIPS1(`?WU=fX*5_1W>A9$hOa+iR`G42k{cp`|KrsHKBPcQJtzllD?FkFoE# zm5Up-E?r+R=yt~q|G&UCXg9hsI-XiQ6F7(1R?N{a32IseQOb9oyu|?tW{&87ue$Ak zRzs>4&h$(39uaF`RgM!5n$d6BTGTU2&cwq7dzxZY2^BNX%E5y_j&=J-`a=_a5vhTw z^x)J?;M57oKCPE2a?^m{^N41QmFbOXcxQVKy{CMr+@|qVI=ww{{+@9qi4QJV&m&RT z6H{1>n<|t=YXxg_o-zd#0Q7aLVreIuXAf(D!>I@4^doY*F}Ynhd>$M=_vRyVC1)e^ zkVz~*8p&hEa(T)HbJ6w=r%SruS07Gqxd>=%P*!19RZ|xV#>h|(jCTa_3vcP3aEjkj zAwNL>jT!h)FkN02xR44D0PyMn06_5n45sBA%?xZUJpX^!iq6L`R{-t%mn)$3)>J(=`7v7J7r1vJ>$_NUY(E^VaS?cc{# zcB=B1>Q!@-p56MXV&`>U=F8Ny3bcfY$lFm#Lx{$*J;s(=vXh$7 zLi+4bS^*Ca?=Vzp?a3Ckx;E-8`%AK3Cslu~s6?4wrH3}P^L0>GcbSnQ~kpk2vd%{RGn2p}~MtIQC-QyVwo5gS&2f%t7pUKe>2 zBdc{Sc3FQ?oatP`y)^?J?s#A8I{@S!$3JIYs-$fXOkOmsbP>`ZZV*0S)dDLUhc+Jt8 z@AeeVdPqU=t%BfeR%SJTJTCX*VZv`$woh+^MaJdPp7WNh7BlzJ#mZELOw8fplfB70 zz*&>?=Stizp-qBUir$_Rr#-%RqK&YrC1 z2UZP_U2!*-WZI%GT&FV>Ph-Q(_!rtlJ&gV5P?>Do@lyEwam`jME5htt9$|kbY0A!I z#$L@vHOiXKP4JTt@@hfxS!S`kVV~&YmOBA4yv7gB2S)=hKj$NEnU&a1aPS~0tW*LK5r|Ns(CMj0D-oub z`kCahujjbrNMbP{fEgk57@h87+vsMyAKrwiyK|viEd37V)E=-Zj^+U96k@!L^@4{_ zPQ@Z1frfPD$;(Wf?1cZ%IhLY~^8qvQ4(VV!qDD&Gae(iA(b<6)!srZFp<)i$xy>3U zVZA0>K~EnPtsJDPpd^)H;EOTlSE?=Sxq-GY4D7s(5S+gXvK+T{-M?0Atspc+ao9#{ zIhyUCB$o|3qFGd_E*_2H)tn^%hsZETNQ)Dx0{akU_TW4E3Igd|Kknr*@;8VluO53k zo@%v?6`I)B38(vgqIH>dz zscM@Q;e>#IBZoMhdC|@{fiZ$8WR*hGIQAuDh;6$YGPY8e^48WfU$gO+K_LjM-k9c_ z`cc7G(h|WCd)WCl?O;a2PB_~Iy7%dmAR^*8+ibsK2Mn@SdI_6qgLZ~oy{T=AJ}|1yW!r>&23M?Edn_` z$fUaGm}CN@G3DB4KRj@c#H$tzLRCrjaS% z!@;Q24X>jPujwqc@9Y&NtDPW&o^~^r=>xwtT zcKpOt_um=0C_{If!s0f)WeoABRS zk^|&Vq&df|(d@u=7r(P5ys)}+{9En;QO7fuxZNFdIhN4Yv-B7R zVTOV^*eNO@3J*^IGWKZ2Zm^A6m$_8FOiDbf+(2nrcB7@jo-}y5*XGt62u$q`0)$lD z4ZzqRNE}-W1k@zIUN+7mS~P8nKc5SxJWH!Bm^=^QuSsHvbCeW>Jf8z@%4mUkm`y5a z;k5>&N-3+dYIAk^F4O}R{`w0Igl3*a8XnE&dHGexsH(~16EF!lJH2L>kwkbrZ<&eEl1@Mg5(Gp z9;QK3%ZP&1mfo99qFk&C!Ps$^WNtx{hs?;T1Fr)iS*zknO>-6So%C24*hEweETkKC zmk={k;kf>scd*9ON{jv7@_)!-W76&Md3x9HH&vrTg{XcKXXc`t;Cg_*@Bns#uNICrVy$j7`mQ+n#h`sSYrVe1)Y z-|0*=>%^M1!I+|0a~CMG<5L%hH2E6MabkxsiOlj-B&7At(lO^dW5kX`)!m<(vaw1{ zz1e5NmJEQJR)VJ(Z0=h9b`1ESXD!)U?dh?uB3GkW<+SyWVZzqf?s$hiDtoJHiEIaY zxyn^M_y&>i5+B2KF851vbN);anluy2dh$17Cm9=qqM1H0GcXV+^1SQ9(3U$ir@_1L z%zJ*pke0r(yHOpUH8@f$njx~)E>=wq(Pm%W~4$5*h*^7~y(@m+NJ2&+5FFVIj5d0_(Z6jJM6e z1M_e(=axi(cQ{;3=$rOS3)sbLUL02N%ESl+(nMwxT(m_%yJ2Xe$1cr8OJ98_cFZf# z4-tqu&BgX1hppAbGbNlh%A7iRjn3_A{{wJ(>iq+iprMKuv&D@+nXUV$_KUCk5DrMg@HDa&68_cvw0CE2wOap`=^gargeu5eIB?vt5 z<*aEh(!OEj<*wY7BM!gS1=y1sYKVK)Mxn8er5GBh~O=PC@?R46KiOka$O#L0%p&*FVOIG1os7gkB+&~7I~EC@3+@6 zVc?I*EP|3%uy*btcN49!yMw^LT}AuBUn0Id>gR~eNxthY0*p3qT?`m{ zkN#m zTiQtXa#kKr3x2-q7nuktTOePSC5;~8jvcw~F#!bAs?fTBIyLuPGOL4dN+e0Ksa*YU zE7cD6xL)vPniZ+W##Q1ysu4?3{j#Fp0JZy!JIgtdzpYy|9Wma_?B(n=(}+~A&Z9X4 zJ6eU8&b}_?va*O>o=-;ko#pi#Vg8X0!NF{}sB0^!3*-<6zt}*A_DH*M$(9p6AmYL7?!=lE&cA{GxFao%XX(j8Vy zcUMrHg_xkC+T-rT=zpCH-yxEU7+btkY<}4^k`wuoAki2QCBmw7pZz{|5Pe6RykBJ+ zkDJ`*KS5r%Qq|xtR6O3S(X_(TFt}MA>yW5SFJ~kNUqN-Ln6>&iV^{6wcrhjMJyy+= zGlh~#J5i(el#ncvZa3oB2qwk=2gZ+xPy(mhM85`GvxC zb9ARE&4I99%;`?taqBAG>irykznYg zT4=wV6D|uyckJ1sQ$fL7g($n-DOWvKTZ1nOO|O|@rUY1Gy*GJdxp(Zks}4+LVn1WG zH;$QKKRz4@9%X+@8LXQjDH+l9?D#@;INI1W;D-PLpKBSE0c)o}dGIc~UqEJK99yB% zz18GZJi&m}HfD0cwm5kEyuR7hjkHZBPapg+X_$To!iH0-II}vrQ{A+x{mS5SYyiFl znAXRsSb6eVwt=s0B=@tOCT8t294q&Rcb3A5dxtqj9WTtca ztY;;I-r$C5#oobYcQ0(p{^hGe6?aRFtI-dtdxzsEE5W(=od!zx@m#~7c803Oo347| z-_i1xT&*o4!<7yDT~lu!f7!wDGxht&;Q^6N*NyP^QaRA#geNmHKiK%GUCoEs^HGN9 zxh==MS1qTFlmbsmOm#C6c&wY(7MiwQ?kTI=Yh^Gxk~-YZmQps^$X_LLFDHwA72MVv>*uMWTZ_(*>hIPA)_v3k+Dc@R)-byfnzSoHS!y?`NR~;@zc*epgm%>RGvN)gAZC{IXg^u zpDE!dt^4|Y{B|Cw)q${8VNxzhE;<&Wb|bSe9$*`~Xyky2b5}K8s3n#he80pc zWRDI9u|)yHk)_sb#r-wxcp}3w#VHw08_nC6daqZeC2Y*A&PT7^_};|spqgYQbvwxSy_l8l`~oJOSaM!}xW?6V zjw;m)F=p*~@Ql1rD&GXs3LPtvG|ejnRN(NH#uI)nuMqx<9Y)$0diSnX4b;s8|0WdC zDW(!aB0E&^bVrp8k^LgomPE5Q`a=T?I)kGPG=|lyt{{)l=O=QGb}+&JWoXJFm`??n znG{MO%>xccHU~Q}!k~Yw<2%`JY+=3qg95FQd%w zupCv*Z$O0r2+#b$Q3BS_!a;wW6C(K<5CXA95}O&nB$0MX=|^OxV=(}_m*ygQd{h#- zi3p_-&Cbt<9x}xB`{b}irq-bRbww=B_Tspm=J%b*=Q8Bd~Jt)hY2D;Z~1M?;5P7>=b$l4 z4)WKdGF;#N1EA(z@J8zmQn`%~f=67ZqPDOg7Wm_w;3NQGC*SGy$z4jCD-&fSuqyVc zwk$OmIbTqi-sB^j)Rb4ADn zZwG|{9QziVQP*5Idc`G;6H@Dtdl6z&Z72{6r={1J3(OT~7*+A|3T$0eZn9 zMp}RjRTfWo6}86luHMY}KWgm4Z{U%R>TCyGrUp#A{q6^P0tlbE^#-*R{8wRlRv+(q zqjWjn8$%8P9<%xI?2pCw{Ac+8U7h^ThwR*tQBv}^I!UAs06_LXe#o3$Y-|i1J^r`m z|KqgJiuTj~O|9%!lbH=2M{iTR1=~)@&)QB#2yDEuJtZTy3e;&uqn1GUSn~7HO};h^ z2E@MNa&4QkR^s<`_`>VCL+kwPQM!Wn?Yu*(Hn4&1_+#(jv_lTv}Nubg6p(b z`98;p356x8_r_f$P&n7!7=A^G+HJvd{NUm3qj_RDkMWG1lL4mp2WXnKvU9w7rn+&) zs+o(mrxaPWvQI1v`Dew(Wm4omCRkd2NSjGBPVY3TW0MfPa1~zLQTwOF=kZ}>q!to> z%#VsmACZHDY{b{&VTsL7_8;libX*n=ZY~nfn~mEl(WrX#7uH8($<}ecVSWWHI$~qE z5$_+HA-v?{Ct3$?DiWos&^?nYtwT3=p02YTEn?s4)lhwfSdiE>d1!sgw+Ngixr>n^ z7vHaSPAigw#LS&$+fJDcPzUSz>n+$$w}FyqnB|y%mDxBO?6=47*Ix5C+i@kdOGNtf zM$&5_D?|oU@$+PAU)LrJH7nS+a&&?s_&mP*ptre(1vR0kUTjx@(*>n?O&=>SLIwPr z##A86oc*yVFc>5Gfsx|JKBxC@vuc1`?lxZ&M7Q@NhXlKDLx3)Fbq=^-^&{J_yUFxc z4Cu&p?=qx@&*y(ESS4UnhT`_A3xMjX2lj`Q{ubKbmvrODJZtgH+$`Vtl_3J9?AN4r z+tBO`fEV&CuZh$?Ah)}(TyH(T%XnSCL2$tX%j&$QrQXrfRrmRe@AV=%l(Iepeug}* zYuCNg`<)=SW&fG%bh=OX;o+DI4l90P%iFYSX{_XhFo?=a|2L|?dJZpflK|uOk|%pZ zule;@p>VG}Cdi4caM!qxI2rELyVNKu70b}^5d66-*1XA{Kr;^TkNmcqZ>~}Xi0_l& zD#&xSqwOpqQnzOTR6f@Fe!#`deW@unHs%{da;v+&-Ohz`#qDO7`oY6~$MRx^!Tr|W zYvcT9v8kE%=}r!u25@Bak6cRRlL)$QYAQpYj1`0Vx|_4BfJi1NAl4Wdp)cNtAXVQ< z<$TSZmj0c2@X!KLWDr1Nk&DyUb&UmAUaR!#q4&LpP-Up|v+-|RUEod{T`nWz!&(>F z!C6v-2<{i$s6FI%KKlr18+qEn<$hP{Y}Ow-esP>~lP@Nmu~XW%tZ7cQ)c5A_O5RLB zBgiXcwOSL%Xme^a#_9du#ci(Sz zIjwHjB-v>sv%z-32CX?wb|0|Hk89W|Zy~;}y?~}4K9)Oc;(1ZMRyHNN?0Wys2Oe#^ zrgmP(4lH#VvzIdPLi$w9sxqBb24dq$zJ7S-XyZt>s;En}bDk?a?p zoL#K`9D(?W84bX{43OxrFcg6O3sOouZl}OXKhB>ynfP#Hvgr9v)E&-_$vaA$?@#j| z6K+;S;L{dc<7GRDrfySz2b`^e!~P&l6!wtL1l=P4F)!MmnR9VV&HK5 ztD`dGeMAUn4aO1*fB@1ZbPpXB>NrhwTdasB49?`r z?=B2w8pquYl9D8F-ys>l!Q!`}#Av@e_3em0$_mLBmUa;PHAt3a%pMP2zPe~0e9uq+ z=}guy*25r%D4u503_!uU2gFWG>@C^ovIS|{ehOtRLN4zcD7k^ZYB(Jnxx{X`%LJ22 zY%0IM5Eg2lt}-6$*e_Y^ozl%nF?;100ch^(C-0Zr`)_Mf4f-=|C538NQG_}DZi68){{eY}C5eONGm&Qnk0{^L#(dZGn%ET(H6pf>xyx=fNr~orR z-zosC9t|)yMzEHJvlyT!&<~sd_)TK%1Yn(PPmCBL_;e1 z&3p)MxeVE9!=*bEOjT@Bf zMAC?q`)>|WyTHSyYzF%!(AvpVvPMjD8+Q;py@TSc6G|SXIh-@HEQyzy!~{;LhCOmY zPZ$|yQ5O}G_Nj_>&o$X}DOvo*Q6R%P8-S|12%k6UmP)J?pX#8m0br^htKK^R2{1_w zN{HrZk+TP)O3{iAYRjZ4!FFmXy8J*e;atUvDjcFFw^2%f;e+9%{ zu-FUmzK--2MzrO_1DP_PH)L^vG8qn9l>%&M1i-6<)JE=|zAa3q#z(i1MHP2-I%&c{ z0Od89<^!h4krU;KTJB`2N?MT`m#o9D*uwWfIpjLU1bR#D&J_s3FXoe%$<16AjGGqP zzq$U<$DZ5Sa0*CkXjEV>gduPL6Ne+Vux`P!1b0X6{^P<@y@YgD!JUgWTq~1- z7m?-uFE}yZ36LV8%{eNRE3Ad22Yqg-Ci+u=pl;{mo&3N_Lw@l{t@5ONJtXo>T$A|g z<|c2@*^{sel($fE#}OUtw$x#tM}-;72NVzPq@fy7$n{n4RsN_GHdg`!t;Skp}z2B1eKa$vaxi8yVyH0shsc^Y_naDQDI!{9&(09At z_ZOuAZKFtMYOA2G}Zo&3FKp4!J;qTeY#3i_W0Tg$u z46el_K9~&SY5X~s54yjDCh*N^!HshH-w;uVw?^E<^dojQ3xi<0ReiO4Hv-Cw3c|X; z{hfkH_gJQ^^?ofd2FX@U7g7n-xw+E#Kh#Zi+MPztb9YSwo`2ygO4aL)5omziv@I$& z%>X(78H6|R5wBf4fWQsNW}b*?_!bKDZO((D!%qDRKtCINdh$#X02{d(XP@K^Z6c*h z%_J@!Iq3b9X-b5gdZvD|MzukvU;IH{Ikcx%wu{onh?)u|&(VxO zvdP|SX4)_9lxB-PaC3~eU}?bF_TEuUZHvhTw}^Rw!KMsA{R(IwuRL>o z?(cgm)HtUkNC8EjJf3ZxPpO1MW6@G6fb-r{5N9!z^%_Yo6(~)Qb+e##X-GvZ5g8c8 zq=(ZbUXjS;nEFLl2Gb(mT$oN$mYJn(50TGaWsrWLxR>Fb4|Z-Hih?geX4(O#=>cTx zRz8^9nIxJN|6^D@z$V3R4ERhZ1%J_C8k9eBNZGmDHJ5EC38pU zXLuCf0iTEacy;f6n|1+taBAC!VvHRv%~&g#c7hvTwHRP;kNn*ox>R~{Lcu1Gf|jD8 z2@?ghQEW33SfBRA*>Z;n6IDJ>S+g8Iv7WiTF{6WMg|7ABd?2O^n zqwiD1(26qAr$6Z?)wT1Ud0Ab}2Hv2Irt=!mQG&Xhv2;4M-sQzDJC1 z^S&SbEa#0z_eL_!F?FvdQ+~fj_W>9O(!#5^0k*Tfz%EbeU2>u5MS4_m<{UX-Yo?*p zXEkm9cXl?2BDMg;5pG+c1q?@iR3U^VUl%+&T}xtH^SnU6QMvBt*=pjbMfZp1|~F6HvPOd~7Qlr(CEw)T(;P${;FIMU(7uP_Vy9*nA>T zf)Z*~qt|OgU}@Z+$DJpmw3JW=oyU-YZJWC)zvvN$=r+Z_mN!mFN=%Qw&kSS(Kcx?8 zyxAjzcK%)DQ@MH0g- zahF%TL5b@5FVtd1r)6YcJ85KGYq3EO0Gsc+Y(TUe?%BF}c*d`1ixqOEs@|N<=bwB$ z%~TVFD{wWEGu7)!F~{&VmJjCnTUc-Rkq37FysV~&yPt4l1!w|VoQf-v@p307Z+w)00|jNIZz&|8~KkneQ&6)D{HlNl&u-0hV&TyE8mK{A7n~kTf%gB{w4b(T35t>5- zq=V6x?i~Lp%#+C0mTqmj>Z9P~+43v+E6iN6+A9hPjQZif*4iqTJDH}jG~n)%(#W#G zGIzOZZjJPFf5IV$vZCg;fZu~|?${w`$8@knjg*_W)y?pI%W?`xM2RQo!f0kaP*r}u zo}V&XPxy#tp61>(o`56{bY^Oa1tv*+i}t#WSQ66`(=xvY0x&2>r*Q%k>9rlZh5KNX zMBAJ$S|{;A^?I({x+=$Y+DHza9`$L>8wis4@=Sv;h1dw=iu*1BDUM}k(_IWy6uf77 zs~0bEaud&%I&+Mo4BWvipS}LAJm3l;u+I1}%~Xb%uUfo(2Zrc^bATPdBN{LZw)qQN zJ5~T1fpuVd(vH;8V1L(#rXA2X+H*$k#v)seku}(jU_esOKbCP=!~Y#Lcx|WL(?^@N z@5}Eai3UbgZh|>*Xm}LDi%(n_|Dl4=-2=%Mmhck+wh|p13=ln(@^!qYGA3IkLTTvR zVY5#`h4)^xBkbYxd-Pl>gO9Xpl#nOU ziMqLA_!>1V8z;YZoS_I8jZHIqS(<* z!pxPNWYq>d^#`g|f`V~A&5bg8zW(#KNED7wV~K^iKOiZJS}<_F;i@1g6t-@PxL!#(oBh?o&1rPL@KfPw`d8UQYOU^f~FiP zgH21Jr(d|-c7BqUvE?Tak>XfIf56q!7KC*84XX-`^A~MM(|?*E@YMLh*sVeHup6f| z^cS5`x06siatS}i;~a04dn(cbIP;cN)hQzd(Ab2P2ukX&t~y0w{5O}OgY*!?BY7@C zDlELv9AD68?$uq}lteR4KIbLh5!mJ@Bb+ueowhQX+rDucgPX4YLcFK=xq=_D>Xm|0&H zzT0grF0$TdLjPaEhCJIUjNxa|SpO4uS9++4I|~DgfbSuy5*3#iW==3sU6GGQ>5h0wLujKpoO`s5t7Pw%Wfq z1{Ttb8vLR|O|JUYDp9bFf~~JXgV1IN1*KKkQQ%0G<-F;^Dwv?iAK{zGs|sR7sq&Je zM>B9U{v5q#g@L6xz&Pg!tG;p>ei@SmA}ty{|8o(I_40d*9LX4ZbY`Q!M>&e=8KMgv zDx9Sc(4SZtX-qkiMS1#Tr2WQy>)o{7g3W=2Li5DQJ{uKbtv;ig-irUL={)N|pUkWT zsvNbds3v##4e~1nnWv3X;TR0#itb^*o(aC!{Dd(;MT9n1GD($A z2&o8#?h<%j)oGH`zWLE=A{{MhUUYmBsRO{`Y4(pqk~qIt^_Ls}6+TP%ihuES!Lv~<~M8#>2>mEdTTB7`|@1*W&=ilsE zg&X*n__1!{QKstKf{j4=vq@=^nAA~Ay;>G~76GNUpcN|4RHM-^y}HZ{M3_1%%+HLn;sk2KQvm`!ahc!-Y{(8KKHD3&(T<#wZncRxMSbM7YKBIz@ zD&RadbVB<*?G#R7y4a*c-nfwA<2Z7{mn<>cSXosIb=EdEmIEgrh5zq0;=BB7LYTsK z^ScnHASHzW)Mz=dMY^&DMhHPeqSUC0*z(;{)$g!Tg`4fYjEUG|Ktq;YVBGywa}sc2 zzc)J1r`u~3zQQ62G&h+mRl*7NrP?;4QpgZ-Vv+@}d3_KLpRaNza^R_QuPqTi%bvUV zXn)S0$2_KJtw#ZF3cwAPsokv08x;eH?LSQs1xEzR+U{)0*UZc7-u_1Ys^j(XM*Uf7 z$AUKZjnb+LVp=jGAF;02@ZH%m?OHe9JpJ(L>1Dqbq=(&6FIXL+m{@MK+elwzyyX2a}H+{1u$^Fxz;k9foO~xM0{;}0dDK}ZA|AWq9 z9zZNg_W~%ZL?@Yv6?VXt*asRIlzjs(kpN-&tcxp`jwWWy_2>jjRxP~oS#ZxVdv8^iFbV&(g%|Wv2;Lr;66!9G72xk6%rEU z&q-(mJsJ-F4Kj8~x$p!0-%-)buSOw}kYL4z3IK36^Q%+*k5Q3})Bg^Nbbj>-_J*Ig zS8C^NPquVVV3Ne{ZZ~E^HIPw~8`3x+Q`hHi&p)KrfH{n;`zuslBTV*vvrVG_>B{#`56znxXalnreJXH$-!8_i_E(Mh zK{4w%JiG*Dzn`y1a<{Yb5@o%_xAAhbkThOx%vMQ8)sw%R4Ct^mC+a~PMO@o-Ih4%zMV3qvKu*yJ=yhgVWv|L|I>hP=5RZX ziUil6`v}Kbk+mW(@^Jg=a8!NCc}Y8Cwc~=F@;kRETDpMa+AGAKXn%%=&PL^YXkJT8(gfG8Jnz!G-74+8;aFZ|5PBnrWrXJb8w0T ztS2=(z=o}Q+x>kUcdnF2J0O6C?L)s@vYI!Kqhd+)MB#H92fV;yIW`PI2ZFXUj~!6) zqM!JxzQ-o0q5_p!x&lpodiwKMVP1u!^R(HQ5FKB$J5#qOzq*8sHPA>4?$54O+w@KS z87kf25hqJ}q1p%;i|AH%3(mBq9^eiL&dmAwdDf@IZ-;EhF0|YG&aH9H{B+H`JmiuD z)^{jO$kcb-Bi&e?8~FayS;5-NO@-_(bhbQMGZV;C?5F13=1EfXtBnMZA?S~wWN z`sdN?9&psfZ@8M{3Zv`(n3dF*F`4}fO*9vs8(IsywxnDeyVFL}u0b!>J)Q(GOR#k+ z<;w1TYIY-!URoETb;dF67GBZE_{aQKmlB#j3u z^E>V;Z9p4Na+mUlb4ALr$QDKa9LYWQEU`Z@XD>b}>vxZzRZfvJWxhv=4QWYZIl0V z41GA3QgRu@;NS{=$U#Vun*5^Une)cR721qrxp?476)3ACIDO4_Kc6CaDD7|~BHs=J z7V6Etf5*??zlVGhjmomjw8?Qm7JcMJ{2|W9_0*!U3pq_V6MOgm)ICyK)-+AMgL8(s zhkW&c?kY~v>H;E`yXi3s%|5+16UfUfZnCmlI)E|M?{8TFisoqEucscS_r>4;vD*i zd(07oYbNlm&VXOm!S>pV4}E;Fz0g^|6LHwD2CKkZkkO5Dl@5xJvOjLjC3(OoSsFNs@;4mEdY`BoRdsc>spu@!AB4dkRo-K~LV9KH< z1B=<6l)FcUIrEzjteR|}D0~ z+3{dNr~o4xXNPXsh28CKgKpNk9Kaf9-d5>m^=i-T>GVzIFo4rNH5}Gl47a2AH!!B{ zY~aX^$)*ctPq~zH8wzU9Pw+-XSyN~=1UJT9F6~|ReS2UZR9R4;MHhsUyZ#0|d7ON3 zvw<|Tw&=8*qu$PmUTlI?6-#p})+QyeNnObpNq+BazCnE<^jLx76`$C>OnQ<$EJNL3eG=iS;I;Q@!>JT{2>dt-Y z0X8Qau@``Ac>!o)Nz4m!t<`#8h~hv!9UR;;$aUoQ%=P*0{aRp@B1kHFwdl? zFb_8u)z2 zsL~MOa_RVSXA~gZNt0d1m0exTuHY?~06NPR_68GIeelcY)N}z=1TcCw!V+2}8|i(b zswmzvPu|841k_^#;rmTm=Y;F=x4XfFwvqLhMT51o6y)WC=7dT`urjRXJIxrUT1mk4 zAz2R`-=iOFtB40@MNii{FpLI~G`(ZAZImx5ENnZ6fCy`LyOOJCBSEs%QmS8eY)RWKR$oj|8wpkBfMSeMK8V-W9EW_TYAhEN+6|g2h zr$}dms);V1G1h3&fjBh-1y?)OGOx9i`OlM2D$E0sO-=d|LM5VbPd|d5OfK&^8r17^ z0W?8)M~pcENcbY|1WN(IQ^L1XA^U}-9m!990nF#Yah08(E)c5dXk%*!0NMi{_)>lH z&H)yyP8I0(9U-BR&psNrIMIb!clP66>IaRWhi^vMxVdq%Z^ezYlV$0=iYjArb z&pBNG<%m~xfiL!5h+tyO1uVJS zouLG`@{2()?3soDJ%__>=yat9d4+3RLex>gCG+YWVWkT?dkvSg=iHY^(}3&udpsr4 z3E(C+zw8g!RA}TmYG{?MF=t`e04m|&bZ93L?ocJk@9$yT*#bA!OUx+oqrW&x4qgG! z$;q?ZrjFx5Y}o;c=ApV!OjId4!#ahY$(U<6O%Nq<#5Bo*MmT~Fxn=~oFbXpJ9Ait$ z&6=k>&A%RA@z3+RsLm<|h`=&TA4j3JV{DkAS>_qMPm<+v>Ytqaf{~WfG9L8%TL(Hc zMX)*-RXcy(DwlJqHmUx^2{_K|s$S9G^BJAb_Ku~~{Y;A`ui9@y^YxE3sC~y;Lv8_7 zNX@=0$TA zk=*Q8fL=~GEPO2!+ePr9woLH#jRx4`BP!*b<)_+N<_cGCJ`50cf(Vkh{BkOD?iZ;M zDlfmi^I~vSV`}~m#bC4AiSLf7K|&vf8Qi2&Q)uq;6qe)m1Np;xe3KDXn!~lTbGWcy zGXz@L=6hei5#Izj7teOr=eHu}7!1^o!9i^IvkHhIEbtBOKJDUM@8tgdZjgSpuP&Ox z0MSL69yR$(NzN9( zcLqDhxj0lNZoJDEi#lrzDDb<|Wha_fb^;hYe^x(VXq>^n+Fl3s6N98~rtKL9GCt}z zUjPDp&ODHBac%VMkp?G3VfGu>z8*y093 z!h@CZNkBz;AqX~U=BGeht?S903#Tf;CDs6~2!w2RvEfokIEhCIk|(H^nCw}9LB^1J zvn*5-wf%q`&myanYgC*fP@URV+ZmGA1N{+#-4P9^z~Xd7Bf>1(f-?~XW=uL^#&_d& zf;GG@%!mg-AIe>yJlH~npTFD0;c=AchzeC2f1-1=;nWy1kk2P`!GgYNo=|qHN-V zqU}u)GBwffJRxiF0r|I6JQ&jDD4D)RX}z^DD6=JD+d4cQE^I|3bYczriZpa8GU6ox z6N~{`9u=O3dP54eG6DAz@GqC=8h=t2LzCFg#@BGBSEQ>IXeMB3(cz0BvV_}%YKGbA zMpCqd;(OCecQyxH8#HjS9=(wpAo%PVW;%OP6@_Vi*)-!MtVa9o%cy0$kGtXkQ3-@! z;B;6Ah)Dqg_MOY!=p%%GcUWPUAkk1)O!J~0a}|7O5DmsUU%O6NBDW}UgFrhW5-9dP zy=D|xF74U^CGV!Lg7a}9_bamZA(ZF6l_$i$>E4Z=JMH#8Nirv=Nut|qRS^6enQI|2 zdv*QX3#YHtna3w-2BveScx2%B2RCwp_QwVle;yU5&I`>}T_H}AzRD&>3^7VKW+#3& z*~>iVx>?|p#hd2XQd3{s`><~`P&uiAKh3x*I^BptDr9qn!iGw}47y{~PynDMt_5G5 zM`c&r*2*&g!-t+p&L3Xj46!woC-oD~K}+A)^_Qn6*5;^0Mwlx=q;Fyxc(ZxB9$?;n zlH72DI#Rj$Ehz;TAElX2Ms(A%2j)ue1@7S0A0}KkzKH0-K$R$d7+fJuUSI2s6poP^ zPCAb)MFOZ+k|sWKOiG?Pdgasz+cy72MrtC4Wp8r-zvz0$F3AFJ%{EnO+qO|@+qP}n zjMXOl|FrvZ_fgCvW9jjK>{D(8_BX^@Lb4mnB#t;t}H-%}12ic4CBGb@hC zo!F5}NrE)Xq$L7m{xWAp%)mTk%T4`E0;r@pAI-*|;3#xy2Sub4>ZK>?4(>B_z(Y(m0cv3f<4ulbPZ*u7aI}dpTg74cS~0MisV!(YBEtalG(o($xX4Fg62z2StZgG==_D6d^CQSEjksdjR)1s)IWC4`m)8- zfqsw{X-kKm50dLi2OS&&gvP4s{nSTSvW4$U;ehnL2+I~AB^(<+9eU&8p)QU!xAfjU zo4@qlXCKt?ba!_$IdNw-^FiHvugRYR5SVa%nUaLcN$>71Vlo?hQsGk77KDmPt_61) z>_#9+0IQD0)jQw|@cR<13;*9-K-8Y&d^6GRZeFzEYIDd!`Rqi6O*fYEi`fa_V5UWj z`)iw?zjb@UlU3?e-WkFHW<@t0rKslH6L4guy|0N^GT6X18f{K?NCqkWz=pb24w|Fj zQ9-Y(r?6%8+clp|_2IwZ{uu5zi4Oj7D^HA*B&1X~h8WC8p#bJ6#Z|k*5xyih#T6J| z-Be)gyL3{O(QLI!K(z!`3S(_1B?8+O)*?Yit@@-hnTS*u{^a80j&|AkMw$5IKa4kt zM*V+LJOm%R&OeB6#b~1f-5@ge7GMQ^Gmj1aAW5gI6I zx!b?dfTwZOYt8x#kB&ILjsGxAvpWct>z71qFC<%Xx0LJ)AR_cp6kghctqP&wpr<7b zGUB>3FHQ;i^ije~Gg$5G)h?AZL4yS|VVB?8r!h#2vqB7X%un`HwfFOAU9|}fqLKFP zL=_g&!caG)q;hR4_04)Mv4vb_v~%SbpL>m7u&KCTaQDNXpE0MA{H>>t@8fWd?mke- zf9PRNXox}T>3D&wn`3A60DM;DZvvzd{!r``q2VQy0h|RWI9&Z2tW7mJh6;EhD%bl=5 zK<#q>(`vYasgtp(or|!&t%HrJ%l{d@;#xbeN!;Gu(wH5NfiH_9uQ<}z1=0y{9KnPB zka~QquGR_u8NgOQUm~E#@^tTvuj2R9OZINr4@NgN z1#jVN;iNG`LecdjWxu!@rmkQWj@o8C!>ssT0uYN)!7SV>97FAe zb}2_XcXiCz8h4e8s}i3`S6FCj9#L9e0WS*;=o;_`lG$ zYUeLM@!+)ZR8%S39ig(2`%nkOiAg8&RRl4DmpoNxf8u@4;>7LND4R38?(&lalBb7v zRgA?OBbA0t3bxx5gHME(wsMrAaj<~H4LMKm35WlVHGh+yH>9V+NB>k7xON;WJ$Xex zf@`!C7{dNZtna$$%-Yr+O=) z$cduSh1M0wLk7bLySa6$q_5u}vydrNG|S>A8WT6ESHfOOJzmxya_L@gIk zDg`{-69jxq=XxG+;>uSonSYi z<9k*w>xd8&mP5~Q7OY!K(p5_nesn8YJh-QAw@aVX>1dsgsg1 z0#05tBqyM`!!W;Lb|M?EA(h~fNs2^7h`h*s5w}_1x0nnD{ffHGeCaw3-?;M_~o62MQ8e(dI(4&D}1JqKbL=gYiihtCFRhUxKTQFX@xN zE@61aWC%Pe8VYrR9}Hhs$CmbEU~g8#6>sbo(WFuUKaLhDO6B~IC#2QgP@MR9aw`iO zk3YT=eeT6(@=2fkXze`Z0h#p%S5sXcxNUJXYSLDdJu5Dg0>0nh~{{FyC$ zf160OiGYl*Tk|`-_ZYHkyRO-O^vk&Y!H$>M;+C{($cCQt+Y)#s&k4qaCy)21HvBen zOhF)ir~!x@HTgIbT)j{1e4Y-Xdx*d`K&BC*n9Iu5fZdZ{t8P2VqM;l+_s)_9dQ1ja z5X-$jIeM092$oA1bum~E$HV_Dhw)&&gMYc|lJaCA_eC$XoRg+0q9>LUUNF_?05(lk z_B;xt08~R|s17ZxKea}!B?Yuiq+aBR)I|6(eTHF4)z zfPHIKTA=!4Gji@rKWvjrbnKGticyXf)DyA1Dy(g$ru$(#36bBxX1FRah=s)Ps0YCm z4)-9t_UiXM9mIfz=yUG_=>c*D$ru5r;l>~YI2B-hLU=OjsNxFc#^Yq^hx*dW6keL# zvr;oX`CQqYdu5kK_W4g@-AK~p!2Bf@J;_%Opbp*FUeR=YcueB?j-*nyu4R%wLe&NX z7vpgj92R0~xQM6Ifq3O%kGZm$bs&L=Ru)?F@kh73uv<H6cnSG4`oDft=O~N%b*V7uYiQ9`Nl7gf5G;DzUH&x-;K#B9Ik{<%pPjFH`Npv`u|oGB0?mXFa(a!`G}LHx>A zdvS##duz#;d=lz=FEcrE%5Kus^Hc}(7LuWA*S#I|p)%3bO%JYowvvl1_3&>CKfQya zrR84sW5`bK9>ykFxu0H+vO=32zeemPrsrOI|Lj4d6bqAOv`FgG`jwysDs(VralxuK z5=!g8*tJ}l2{58q8isRAff2cDdj@s<20Eob#&j|v|7-c{*cvP)D5>-GOSfS&fmE-k zIB7sBPXPv#LyY!v=a7)jXIPK3=^%Mg7!FRTvOndiC}c8i-wH3Ro}JRupE9Vhi4Mv_RM-Skzo|3Tir1x-(Vb9h~;HOpS+#o4uV z%PaL47~g3Gq_!=LOCo}dYKjb=$3x=jFKNlZs}NE~brvx;sAleTs(pSQA#N$8{j+xM zp|xOxEP8AyX4ymo(4PRxX~#+z2iE#^N*sGV*8pB5-w z*m*3#1Tnko`PgepFgfa+jrMpxTMvlM7k(<>gSV!C4YzaeQD(|GMC5oU-C!d9yj$iF zAJ?JiifiY1^E$(xH`}2`nz{+yrKlE7j;l{}3y|bb1rBwH+2o~;Z-44iq-}Y(G`2QR zpQPPeR-l*Jxf3jCBOlA;cMzy&={fowO?ggEJvEfJ>y2&JK=_jm!P8<`!C!~8VW9$1 z`TEoDja)gO59yZMbpB{U?ng=BcH5bIF{W`8W0V&m1`yW?8{r_6q*4$&M!sA+d(%+; z`#%4e#oVU>E)aQ7aJb`Ti0)qY|+G46Kag%G-Cs_ zEdFGi^FBB>?^P{lr{$$|^Lh~ycH+@a3NgBAA!)Ogu|G5M+-lL3ys(adr63hfb}E8B zC_&MD*`I}(0YbMCV@Y!r{TBL&UsE=ensgh5(Z|iE8OQdVyXBM3VoCnJB*t84ee`B5 z6-C%x5)ByZo)j%bRo?4yv+t5i+Iqir@w?6wU3~ULl6m-hTc$NXCnQzwN-T~!$KQui zvrOUUVe8;#Aa(EkQaoqKdUuY};>5silHvl5*9Z1-w5q81C-Aaofea|X zaU1{>5hP`w19kZ)K*%wo;n@SybHGN+zRKKHM`MIwT*!9Sn`uFK%QjtCF&i|xF#9zL zc!S#e?`!I0!XFDn!0?rSWgA`9*%Hf>6?Twz|8g99n=f0C7|RkLLg2PR8?B>1Dbm1W zQ|Rg0^FY+^iio=uk~nvH`@$E_vP^E7-U5vd-EETOFnw_?BVE=0ZQwnm`|Hnn^5Hb| zc9{D#E_js^yp;j(6~@o&G_JXM4I$-+8L1!D7XG0XEj#3K$^6RjV>+#7Oyk;KMb!9Q z$>}$Q1GD*twH?I3wM5Yrfk*(}A?S@SMxS7HEMv}d%vO!R=HVg7`?%wC%KkOO@UDJr z|J4P@dpZ1QW_TQQo-CQ{yNJ(x&Sp4bm>(Bq_nQN`eUx2+4 zwsQSi*gX9Wpx(ymEPfd`g~`gmz;p3j{6Fk--2cDX2iLNQnHlt4F^sb-Ojp<56|GPP zGsAc0VbCa#4xW`C^UO>?r?$+yu)Rw@!i+_`42^ob!YYN9{wB4QdgHqZTfV|>B;|zU zMj`;KZuT1eBhvmq?34Ll?BlDmCEgVVo|*@omKXfZKF_-+n_2>)zrINVYc7MFk|yow4!{4FeE6wvwHP3T{Yyc=(pTLaD5+)+uCM# zfnP;%IkagDeIANXYLEv809P}a`lMr-JEnr1Zmby70ZD- z=stJVUOzoNFqw!dmZS;9d?>fa;!?BYYNqeT#@~=@f^6`k&mS6+ZweAkce}46fDLLy zB3S4^+Fr$HUjfY`0f?(}EQr&yA+B7tP{@9y{GFvASfE@mXR_oy$Z=2gQ13ZeS@9#T zj{vCf059O`aZj4JEflAWCPb>h{5=SpAfr>RMqd>jC9L4$KiDH1AUOT} zo68BvIZH0xPoPmBc!+za{N%PgvbnoyX$yj=a7?`b0Xy}fE5gfs z#594||MfN58RW zS_R5F<3X$>1iQ0q_Pdx8`nAnA_4pt5eEe`}Tl}lD1Xr;60U3Aju~WZ=`lR6D;OeM& z^`)c=IJ|#J0S50Gcd3AoG{0!t`BqDUaXs|rmb=`@fc;&j93$#dXMv(3_?qpX)H#(3?u6|hK};2&cp!Ie z&<4|yv#%pAd;0^#<>KX7b|PHJ|#0bW>L6C4;o0#CKsL;YmRL>CmtJw752E2ZHfo|3M%5q8OCUN<3>aN&`i_Y1|tX_d50^ z?|%IVvapYw+cdqY$yZB6NML#B3nc$`;=nB)Hef5g$;Y4^CKO z6$Cgz9Bz^yp?o7rp5r^BqMr!7w=)4Vc1G;X@ejiQQ)TISs5W$>o_WV?*304R>>|>M zLDQ1*pp)I|i`@db7Hy#r%78;+7R7=A-L zcc$PTY@ar41b<>f3K=;CEDXwY4t@!$Py<$+@!~9o$*{7E*3j%wwGz+iXSa!VXm+Yj zgcPVaTRB^^fseqkfLl=OpadH%ltu}N&WW5r6`|CHj)ddk9g#jN(FiAw7DYD4YL{Mv zJSU|1Rqly+b{Rm3cPprc`2z0(t?39BT(jgGk;b6w#$~lCiQ{PZjt80J3_Z}6^()o) zMV6jTUNcoc$zZ}EL_ZVx7bp!^#RM_~B&OO7a513dD$xx(VK0VV-${q#`?*#L-UDkk;3O8C`6TSiObmQOOYBg7(h+UDOpSSi)w`0%xb0qc zgvf@B(j~MSl;G;)D`iKo(530sqEG8$nD+mV}QXG5~dx@^5{bw?MYDn=v#6;yfgSM-SWdM_~jaS#R`de z!y7P1M6Y}D_`ArvKEd5H^H*o`X?A1Js*F|VW%4L5!F6z zo9--xse%FFNi#HckFHI4Dq2&dl}Nq^6!Lo2`TCHOZsq$=vS#8E?_}(jq`!eexJIh6 zgpws|F}y3!qZgLc4rZJU$|1=~YK($c^O&(Ww&g_o_M!>R9WC;IIZWae84DNMl7vv; zNWH6#%gXxE#Jj(Th~UzHn)DE{j@A<1_<7Ep(Iz8?GI6@IaBCK`5VCfV~-O0-Y)}~!wZskqo`J%47Gko403)83% zXOMlLvC46phK@m)Z67|vS7v1(1-}2`dFSDVP47OJbiGl#yqmX`m!aBaldicg+Zy8= zh+4%M0>e1APJ z*}|o^yY5=vZxbY^lysy)zXnVg$EbyKv2J2@mau#ewl}&xt<#Z@fL%Xc54U{O{4gi+ zEx*RBcz=eApHb@G&X3N^T36%j*$!py%I%U%GAYrdS|Ym42@Vm5j>Wf^5~)%P5*C!w zQmr3e)}{HmVM@Y<*^f{e5PJEA8y=*li9|f4uz+g?EW>Frar;?FVh2TJp=gbVXbIqc z-Z-f8QRYo(odVbP62ZseV8qqZG(3a$#*rrumtV%F#v=V8M`#X_zm7|KZ+)o-lp57lvJLN8|F7oP)L(C$;H3s#hmxIu+4WNY^xkr9iUWq-A&zq9@Kb=YC!A8i}K@Xc5xHAjcO2^{^^aenp0lI!)Y|K5#HeB%{9a7Kh&6DHAtPn^IhLd-LL61xx7rySRX6W&lVrED%Qcn>(H zFZfcr&U`7y1^bLCXNKg`E!p#!YHi=BMD7><#np|Xcwx{gm9(F( z7q{lYYqkGS8nax$_V2^HB97xxoy(e7@@u7((Oik`&yUqA%=H-r??ZQrlG~Z#cZN*X zfrp0aam57+R3RfH;m?x00#MGR+xyWk;Qu>MI&w%5Uir2Pg^2%8Md%7n_9m{zE|ULE zEF|$Co@#Ki4LTzpU2#lo`WGdcA%K!4pI_+ewt-s$*_udV!I5vZe_SrJkmNzE@VvJ^ zWR(q|&&f>Jc>nSKqs>z7XMeA~R1?g`)k6Qr;<{}0qA@=I^p!!JPM4iln9rjEPbFTo zj-YJ<&gcBES9=Me>6nH`{@LA&P6mM`aMsE1GWpeCPijv=gv9CnxJ7#9el_L1%mh2% zY0~qU<*oijC=o$^+yDhC%UqE^xKr!y~vYNPvF@1dh9!4E!cqtH-NkuWqB zPygG;&Cy*ZD;#t#o>E+*Z=$kgMT96$tYLZjQ``uWgOpRYBrAbxGH%Zrl3@QW7ZQC$ zoe!^Fqd1fK=(*9tt5~m20srY>#&*U5G?;~QJJ>D=v6i4F7$a!jt+Kf9c9YvVB-&og z(Gwb^^^v`JsmU4ws*K>Lf1-!!!|32%4IF)Rg^~ zB#E-~^=}tnnw<9fi#!5Qz39_5o)HB4WW}QPP(H&djP1s6?Tqf$D zP)tA4tQajDX#9FPZql7v-jkJQzvAWy2qmHLMYhiv=pXLCrzW;ksu{lf>I?5Hr|xfN zvT5?V^p`zPAm=^HwDu)F)MQ_j`D`+>1{KB_fNJr1HGzmnoRJ%JPgPe>Rq^eJ=_)|F z3%aa-Xf}>wMRrCHK;>2IR#3RYP^RpSPu z|4EYcUkWIBeyAI7fU1UHFl@Zo0h<%H+XNoT_^9PEjj{qozHKp=T7d31^Wci6DG~tu zGf-5`k!CUIEm5$1BAa*p&sGhR<7EvrW-gf=By?RRBqAo4^%k8;nxP1dXAf@-A|AvC zvs<8Y;qBi&G>QjcRIgt$1USQ*-AQIc!WKecP%uJWQtLqTeG;bMNK796k-F|n^=$R8 z`EE;2s78wHT3VUu>pW5!8PDJGGOM7srJ4G8mPZq-!hS+RnX()3*a_&Ozr~ptA`OM; z5RlIxYsaixe@%|XwWlVE>~W7;H5Ef!@K+&gPHhv0 z{sklc{&Vlkcwj+U>i8i7P=hh2`<5wf%38|0Kgig*;f?$@XA|RLfF%~~t?XIRjgdXSp_DRk4?wk(p=HKbAjsh}Q1!^VzO9%1Yd{Fd$ zFHIv;Np5Z{ZROCY1h*HzCj#BNjIU)YtoPN<=zyCvQgUw+HAz?W6HYCNp zs>cO>Ae?1Kiyi0>dJb>6^1v3B-PjH1**iqcJB`B264W?J8B^ zK}2lwlaOME6m? zxEX}{+(?ApY-|&#g@HI1yso4AQ!W4OTfufX9mYpaWSU;@JUD759S^>7hC|DEghgh! zlD^J2O2t#A+8^(cV5e6N_)$d!VKouiM$!ppv>N|F|3;~oksS$9V4z}?&GH#bL;E*V z!_}pF7o!DYAP=4c&$BLsM;{|eWg1enKPcWQpp7L5q)B*^8>8y0PJ<*zS)bWj;RSc_AVAq3R3f{tPNrNN7D4p5h?adUPAY zTcrhTGVH1V_hOR0Mc@6(1+!9Cepaon^mBa& zrnLW*@QD_uC7}y@+T^ zm$h(Am$jy#iM2+?X*Ecmyshzigya~Edk0245JO>hmq+r6huLf_U!xe6Ikx-SAkrKv z6X|Di^ue6;nGe;RCO{gC=p5IFFJ=N7sx5xiflZ5~*^3zK($eS>@tFQGetd&>?X;r< zeOz-)M*jD%Pao9^Yp~~7iDFIjtC)9*h0#^|w({v-%0JCeWaL#5&FaqIZ_SWflt9$Y z(fqe&=sQ~C@eOUIQ#$?oV78_t;cfEgvCQ;gk}O5%dYFb~@%ZeQHWl}o&z;=-nht+M z$P9f9{#>$5={w9qi%ZY|EWj#Sz3#iS*N4vAI_GHQkKGFK7!MDKbyrN3jVBrK8Zhdu@iC04xpf*w`Ildu4&&A)XHnr79J5~qPeBz<88mEq(^2=9$U?TtU zx8dDy>aUKyqcFASV>}MyVJy;{Tc!91@G8jmdR{h_y+gy^aytSwt<8RT8U_*XnyO84EvtV( zw;&6l2;z3zo%`^maU}Q6h9ssH-HUl+Lrmh62m2TPn3~g2{rf(jKtRp20Zw3bUvig~ z$KD$-^EX1EUZ8qs-9YA*2Wf!QZI$iX1DvG@+n+tbZt1<*_~V;bw!|t=nn5 zkEL>R=!f2h&|7M+7p1?}9dCx}gbukg<;l9iUh^aBy?OOl$%+`TaqprS#Ohx0^doJ?w;U<+;*eu~+_5=j--cm$^>%o5 zuVAqyQ#KO8z@HuUcxRgBcn6Pph$T++OW`{DN4d_A&j>4v=+5v=yE#W@;|+bg<%rz` z?6z){*$amTdcmDuq1su2R1EUO5?VV`>NADy_b-kkUD)588y9man*^b?;e zr3~wjKeYrsNYL5tt!i#Bhm~KB%_B=Fe-1p%A6yWd2%U=6M1cNHpZWqoK~R0cPx%A= z-&Ek>%22fh4Fn`5{XZS|DjB+egMovo(|_eGxNpvD9IwZRH8Wfd+RWrL7W3y~ehI61xiaf#-^fMXIBW)>|WQ+YkytYE*A(=YgKmOG!Mgypz{L01rq zX~g{EYqqUYRD7(or?lFdg$$LpS5B>X8{?!i9nab8Ct&dq>`4EWwQKDXZC9Z-bK|q) zt-Lp{Eijaga=X|jN+G35mG_$KtW#QQIPS2b_mQvqi}u@hH0d{O@eo};ppYcLHC93v z!FulI^(Ej{5ml}vV2_6^1DW^zLkF3_94sJY+v%$J3sp44zqd;IrX_+mo8wwMqUM_1 z=e+!2GJ4_MR6< zDf=FBncN&5R zha-=mr`~t8P14WB3Ou8^8gd2Uh=dWRn^SLks?37M5e#{8yR7DP_W6e*nN&AHAAJ^` zID6YGCiD;uXV&N2)Dz1=rawaA2AQ)yGV%N`Woo8Z2R6XtL58Ec{sp?DrgbdlVru~nLN zhWL&yLEM-w$_e!FdSa)6qa>OOYh)W(6e5}+uUY}bJ@$-lxwQdd$7y#X8j564r$bH} zuWNs>e-;vDy>J>EoW5rW*o-p%4dEBYuX@-vRj%U@v91lDC`S%siH3NDnI=DW{#zxl zLkX?#d@swup@#LRRyxO*zL=jlNd||SgJnBP-?O=Htk2bJ;=EH^VXst4L{_g*)--oj zHG0N0vQ4Qyp*G0(p3*quf;4NXXlSUPc#X9XMK+pyfK~D4vYOV|W5;an&r=uSA%}P8 z9Xq5*TMGVD#W&Yf^LN{1b2FAh1?9Oi&x(>NxrzRTjvkg*l@gAuV_G3Cys>_j5~(*- zzr+qBsO!XMVd~tYK%!Q$0>Fo`>c->#b!Taiv1eB)24mG*l zK&(;^tGo8{;LWSryEl*-fHpmF5krB(wLKN2YYzEdA8w4R zSp|Es$FroKj2Chhg*-A!V{cMHFhG7<4D3{LHv&+eO(eV|&L{!)WpfjvbvD!n!QD`# zq7sM=V-qUKfmUIiItlg(T|0Z0E@yKD7!nq}02(!mlKPKv830F+P#oo^Lj&-sUVn;{1rfyA#G*S@n6`Pp=;xc+qpS*lB$2XZEjcN<+T+icE>cf+E&T~A;Y~OC?IlPGS*Ybh&xp*Z zF1o{rCkr8qbk6@XrmM@u3=2m)?U+Yj+Ir}~roP2HqNz@^URsdEu>dpdp6DTPCZ$e{ zIVK<-w&CfFL9uzaE*YLfNIt4vLTvyDK~@bcnWNW5Fi@X<%i28FRYvC4AovGNe+>5U zz7`S;d+f)7hFfqJ7AJgFC!vz+%>hw&+Ss`y<%hmVdk*fJ_e^a&2#N@SqWY1#h*1XRNa)bN51`zp zasQe?xh04rS;23eRVY2bC!9H^pNXUG0U#e9dn5l%-_rz3;J19B-5bmEK_3gFvqn^% zd|{q4K?r>r_wHyg=IZv-FobBwBc(LU1?L872Yz`&*iW*)3f&kjl1cJLK-(aTQGhaA za6?t#47*m^LycdJl=ieVteXgnri9+CPbha8znn8WxWQ8CjYRW!fRN!DZ z7MxPpq1!@w$T^kAqnljtf>JjnQQ09$>o!_K|6=a*R4H0B<}XFJc87a6Z@S2Jp{teG zlv+GK5aycXGR@BcaCTWA3OT^JA~TNB53FffpeQ6ka3>&!95e~*BB^r3PQHK|ZtE~& z>|Hk9pG#FeX3 zn0{QlVMJe{qTDxdFj3Lh6M4PeWIP4gw0qyK5ww_El=uc7ykV9xo+Gy`%C1DvH-x_S ztfR9%Pk2C(4yfUy6`L2n|J`n_=F@+B+}Sf+F@B89`E8bhXsM2qKAo|3{-ukvKRGU# z%V;s*!%j567KNoUasJ4Toy(5v8HBb zGVE2gA}~3>_`_#y=4WS36hzJ9KJuye$_<@W8+Z@G^_NxNyKdbI`5g`q@gT8}>Ce@#bXHv+k*f${9+`*;@TU`YpD@{F z0f^u<(~Q!>F4Z{u?PU0bvt0b*Qt{%GLVy&1W~ZOG+buZj10NSBeHO9Y`=8Ysq9Kih zcfN*8YN>u#N=J)2e||D(=7E+-p;7ZO&u@n)rZ->SFNBY%y}0OYzY71wO7uSish;?b zu=$|&e2gZOP%kFi1;!65ba`vCXSE7TCYGx%?QWZul;3|!3I+3*?CT$qeJeEh-89+B zsA|{ci=PyyY&8m^H-9^2-!&D1-Ve9j$VK;61=qX9` z6#rdg9IJd%z60N)>IN8Exc5oZ{Rw3da)v(i694+KxXsR`o@FPR7Dq?!vRtQY)3@w_ zFuhs}O+~oPVi2HHz|kmhpU!XBim&JoYDu42mp0T~_7F<$)aXK|_$g<^I!DlnRf)AAx$axwBKv%T;dX>Nz4*p(Qv&pJ9lffZUc>WXX6 z)v=x6b+%^2FkGJ8jXXJCmpq&6u-#DTamuvWhOL))H{vy{$is%S8yt(NtOjJjd}&DU)4MGKjS~m;06E$(Mlf~}jF4AHp5`@Ru+?gz%{SQ}kFT~$puK^CR%d%` zSUL!O6_>(PS0XC#`CWG-w7QsSflI*(Z}KjLQA=ewVhqn8AyvBml16fB*|gDN<~pFS zmy{IM!+t@)qRRutHDmn&9j^_z`Y~!)zZ|%~RGiIChTpmT$HR}LCWI0Mp}z`N6CV1s zR1hzaa`Q;MH#}a3FmdA|w0NDF-Kur-U7df`frB=1p(SzI$o8=EqcQRW^Oi8O6GLlxcF3MtiW@yfzA_5JK+-x<;}Gp-_d?4+{uj1I&j>-uUzj+zu%y zFxZqhxSOb0?)z&}kw0EdX6vOy_~09zTqZ=j1lKvmH?`)98mS4dp)sWUV?s)309A0c zZnH7kQR za+R|vwL7Ue8%klEVje_}N!U}bmbo(;)ztL+*G;r0azLyuOF2+d#&~Skj1gN(3_MHG z(l1olV}6J$^1PM$y9WGZ{UJ|ix8Qgdyr0stl45@+o4Yu~QWU)cA)X?n6iuc@0r%Jw z=qSI&QYfw|=xNYl%tQ4bL5lfjz?LnN`+!o3n4|*g>sA9YD}#4$p^#;k>kLsA9Vq%{ zBGi<&ONSMDu334So^>aOrXU2y{8ya(LPvw=~lE#Xc_u&H-o4e=+nzzq(^!5A6OHbge$ZrdXkAIaN} z1bZJdmoXX>u?D!5<(a~DGF+Oi@`FF?z2{eZnqf(~5);8>WTGnDX?V>K==6Ht<4Wzf z9lOvSdSxNj(0oT4n`zogigcDd!a~3VGIqV7^Or{vS00eWXt_i$5z~Bhfqx>DYtb`G z45t#K7Z4?3gx2e=&>c()Tqs7N&zOLNtwbV%$A*g<&JY_dq{jyk)5OA_bJ(fi_b-|l za2i2hz{6PV%++ZHc*NF?deR}3PfmLcDI{L_zpwK|Chx90Ym9P!aY0hy zi<+bk%Q7t0&IXRbr+YD9SaSFHPH&KSS0p7fZ z;hZ7Lh-k-B8&saM$#t@HBkL>(7zm}6u1~NKEaM@*4=clH05?P?q7(qIfOa2eK_xAU z`V^imT90EI8x^Fp+)}XtySpBJ%4q#~IG2qugrloFfv|yvIu5e7)-*PiY0w%9r-KOP z1N^DJs6fvX?m8LI8^Xc1-|FzYGa4hWFG?~lTI;kRbc2yqeb(clvQAC-3EF=&uHS(G zwGBNLFAgU7oa{mDW4%-Exquo%S+Nu%Rk2hjw_I&JSR4uWJWw3z%Tqf_)?0iSja_}= z)zN3l=-DtDPrVD0nwZZ0p7leRcFr76kasp=z@*MUEkdQwfr1=BCp;XMpkd`SNw$;$ zw**;*JreQ)v&ug3O75%IY>#l1ayl9q;m*csd7yjo=dLu)t7+rpWRlJZqn4H}FK}f{ zy?nN5M`A_?b$Luuj~Nw>=srxWdww!ib8HBG3O~ELh&BJRvZ19aw5iL_1S8bI5~3&g z5Ua`NS6dQEIGs+0!Lh<9xP=f2LKpLlxviyouh+JkAsm+#0kI2zj>cQ_C(AJ|t2w@&tZS#ePMe{}&<7SUIQO@a9GhCsNlRdAP6 zO%uG5n{oG?GULkqu@wZtVT{yu`Kto_ixv`sFjSSG*R_#KADH&y;e@rJc;!M2wT%Ko zHSZ%Qr7#KZ_c68<8eJPQjI$g0#yfb_81aieY>qPLMCvw)A80N=dKlLxP$)AO;xRe+ z#M~29%73>ZG3q1Q53KnRXfwAmmM;cA!I0>aY>4v`-c z$DtCAHERVPN{jAOZFo?RalPR;Hoh4s6*DLC5)@9i%X6YR1djj!8tOQm9YiP3F-_jq z@XVIM(9G2ObzL%`(Uh2^mHLu&c^BT4ejI}zn78uNKIkJWx`0;*M#sJbeE;1d3Kx#A zPIs*`^YpSY!2u*|Wnv9@m36{?J6fFl5>Jz=NF|{v<5oRJY$GdZY!%SGKw?xIX32%} zdeN-OpB@X)&H|b5LoPFGAy^8I>;Xo2i1iS1;x zVf*5n*cQ|yD!O_zihbwncf(Z@{R`KMhKe7qo0=Cq>$fVADVPOegrtKsy|xJ$%$)+Q z;}|-xl5i%W0(Zp^7ab0feE1-Tjl@P6)0=E&KSreHMNC>i!}meK59UG`*u&L!L3z}8 z2{VC<_qhLGgxzCw9gMa%?AUB<+iq;zwrv}Y+1QPprZF1Zwr!hzSNiO;_c>>LXMBG$ zRz~nES;@WbIj=di%xwgi(lXAeWX=iA@L?m)(I(%x9ZJ+f|6O?vb^|YU$};M*k?9(d zl|Xu9?%%(!+`%)BtE8~7Bzt`l<|Ar=!2tQ@@%v;yV6ffgG5kCB&0Y@OFel1oV7QHa zdj zkM*=z7ss#U>99>@+L08}re`!GIa+oaaf+t|3EWH2AnmV#Bnqs!U%Z&fn|a7&vGFxh zYcLFbb%o4xP}226E~j|S%~nB1s)mAs-FM%ju}-87cvBt{6l~*vEHMZhI~TmlIy@aiSj*duo1(xbr66xXQ7uJ=77^I?Y=-V zaO6)n&wtnW(46yu3li){fCw`>&5?`(Zy;I4Gg$3lfZ#OBQ$P&oQc6(D3^2vkuugnF zXQ+OZ<7Q!@<&=4nwiomfmr_VV>L;|>uL890XF`5n*3s{ z+VSHL22*uzgwBG~BZV#IlrN`3)2*&R8Th$NN&?u$DG&IC8c0xLx}-B4?7%gy5wjIP zY&r!V=;2K?F}=I`&g}ywPY29cTvi;5zrFymwD=lS$Lr)9)yC3dL82WE!Yu)3Zb0z6 zS&T@-apLkD7S4c%{1W#Y9nbxd#k59=M`_kzXmx)9_oyO5sOT*3!1TOICc%Fw>F=9! z7i{S2XFUc!&pk0Jwg?8>hXpjZhCEp(14X%nWd~S`l4U^5L~Z78dSjx2t-mC^pd?)8 z^y_Klu8n4ufe|@_Y9)ma_f9?t8WSrfx?ydhTis+H){5Ol=OgI}EL_AC{vF0^JVtU? z8jo2V;sggZ8h-`LXotMqh4fv-(`Ia~-SXyAkV=j1)CCkG2vdW zbF)P*ho$9;@+nZdj9c}m&z|?AmpSzpK}w(}LC*5rpQa%5IXW2qD*_c{@3=!x>R7X+yaTgjN_QKhfe)t@5{+=5jr;pp==Shk~{@kq2@CU$S?c6Ma2~p;-L&(HD(bujl-`hxL}Hn5H|!0cxX_Wz+p7rYAnI;l7ZF#sNQ^XeKH@n~OjH^JNBH zjU^~sz@}54+W&QT;6E=j{MU3IpoQCEe>uESFP*5*9P4+JU|)5^I07Qaxqve1YHJ5v z02}};J6YRUMbsSY{&{>Q)$|hz2$>q!P1D`^+rp9NjWmhX( zf^)ui@Y^Q@gaDp462c=?ZnX5RcXiQzBPXXI#V~(1@dj(B>!+3(9#fyn+v-|-74>*m z$x=zVCr2+#ZNIK+-V^M8bBFLl9}INyJmSH(7n0t8mYwDXA9&z?+3z-jE;YkO^Lx7= ziEz)3l=`jnQLEmSTC&ceJI-ucLO&-M%uYSwf5g6#7g{P|3P&D>mhfJ>;LVM#w@X+wVqB$!d9ayOH zPLw&OiXu?)BKLByzD?yzKWe|KObs68)TMARu>-0&$1y*{hHg3pd)?m(!#-RMJ=`&# zI6t;QaD~waz`v3OC|b^WDdt9Q01<0S%bh-c#E)$RHZkD`&X3jdvtaxN=UU7kMPJgn znq;aBP8q4e)Cc5~HrjD+?3A!9F5yYzA#a1TWg9&?`qi*R+E3BT+E3VqS$3uQd=T7u28-`VNWv|6vbwm(N* z?;yzcH-DtVlv6tK^TXHhcmya#8eCz7auLIJ#kM11+~{8-7Mz*vfph11uYpy=IDzcp zZDc7V_>pVnTHs5}?@`VjqEK%)Z@ucAY5~_yWd`{#-IVpkznTCYTuxZVPEp^*Jn|^? zpMXED6Sq00o`!*&fDTTUR$7w`DTRuT$~X|*^s9C`oMQ2{8e{V+b{d_q&L0YjuHb|y z-mtai4=|PwPL2Y`v<(L>I~cA?rr^_WXR9tHzo01_qTDKsNf%Tw!B6mq@($SHdon43 z6|5BU;l@6A+l$lWKq!uZL?=uqHLTcHoreP=%hn?_`mQ&D+#!`m@7cw58}+|=PC$>I zvE=fLb0x|yY3mw$w&IhWk>wnkbCF5%nIkiwD6pAvsnW}D(~Q%kpktsC<%3WYVFsPD zOSOTNCShVaG?tYUQZIJcKcdOhLAzRR3R5|#<_v=BB#!}`YV zCJxglN?E)-w59nh0xV&wTW`TZXaD+Dk+qFA3(7i&fCukj6#kuwl{PFb{~!UCEhRdA zei(vM7xOr^o4-=;)jjc9*vROHo zS}bq^9dqrqJZWs}QFp1+L9DIKgXk1n$i(-QtKojaHlT4|j0}%1Hb^BBcbC*{-7zls z___3@mNS}Ot*nV^MC6y6Ku$Gl>~*2Leg2|Pi91;KikdH)9A#|J#q z$Qg2VRaK)cOzIn|*yeN|@r_sIaj;7SGHKo*VJ(ksYttaqRzZ*{4jMC>Q9PioF29aF zR=GkWeB5CGIRPS2oE2jhIk)d1ha7kL@bKp(qFJR7Ln@KsG2qg+U2^V&_Ew;KMoZ+yicaMXiO z-Eb6S==xSV~0$C}k>w-*`PtrPYgWPH%P_ufALy|@HO;KTvV=i}T zeDyb%LZrdE0q^k}D-NIup<%xV-p4r7cWO^>+>=sOH1fB|X!j#>+Xq>kS^jp2(~$wq zc^b47+_$2^uxzB6I9%*O##>T72)dQqzxu)p_d4{Kk3rfU)iGKUq!$oV-->V z%!c^oPJ#}Slf!UGEZjO5OfIhLI!d{n9A9Yneb0KL=b#u%{nH{>sR{GlQ1(*$!^8KS zJ~PLbjMX;cXAa8FqEbHPOEuVa1W)} zG%)bnXnzhz-M5+bPab7Q)GpwZlO4_o-L>&RB_6KafuJ~3FiAXXGJ*MOXSjpj6;rn3 zz;O13;Z82dzv|2+++xEyoVY=Dbt{rjCGN4kdvFw(%#*9Veswj={thwo?NY5uB3~35 zq7hf{l~O-)dVk#xGKCFPp9^ma2{0?zoPETR@Y3GON7SbLsy*twoFQOUA1i&tG_pZ( z{Y<~%G)nc8j%4~a<95aM&2uABFJ)I}l(fQtYS1F$ywKaGbgbWy2&xia4J=|Efmry^ z)y&8q(qNJB&y}GN54_!VyUqxk=as@9pJm}XOlelwb7cLM#Vc0pR+~FFt)|-Y6}@BB zS`8w`3C!ZVNHtfdXbA7d19P1|hw+JZi8s3x`JX<-!%lO&H5+Q^?>`lMx zrO~RIy3_=gP+CdYBThd$(6~)=dGnz1!Y>`xAVinVrnu0DlfNx=@=SRra~Cz2?^}4Xn7l4< z$LZwMY*~G3q20tE&R#YGEmqWSE7w~3nVy7hG+9i9($iy*P(;YqHlAMdD1nM(4&-&ENq+CZWRb;Zo5@M*RA`~G+&^tudA2gZ-eAvsb{XJwf&pZ-KuwS!*l4D zgdz;M-H6mvk~)xg3@K`xinwE*JCt6dt$an{y-D7<_cYKXTx6MCm)*BxO|wnF8^_h( zOYNOwv-Y(X`U;e_T6s$cL4(pC6hxliQ{Oh+U`_5%BNpH4UK%D`!$5ZH+a}8KJdBt& zU)e0zXY^g^pM8tp0?oFsQufrdV{$AXs%!Znb-g@B8Go>**}3>h&)qHKZxdhnbN27= zqo$@R>*&cjdUEy`IYdgklrBZ?a^x2bc3@ozZ_z7(g`AJybwFkk-- zcqhbsz0Xu~yBS9lgRa71W^kP~co`4T>*zK3CNp;<|LIcvC$0Uj$;toNd@C`!7?J~WwN30b z;82imOw9t4c9$n3Y$*^5#L|^!jMp3co%)l}A$m(t(VVXnDna*Y7snUJhdiY|_IH^F zml$+&?2~OrJHiF4mc*j-_ws|Xx*RgX9UcXEDG68xaa?29yk{p~6@YE3o~1jH#lzbc zcK(GogUU=$-=6Aqj@HxHBn$SsWI$+ZFMk+%1Br_$@1YwU{!@Pv>Jzbn5(k!sjHA1r zKluc)+VSn-r&+9ZLG6Pa_irC&Cs5&{!6ydt>^WLVB9|uh zk;ciPT6F9k?IFWvUm_xy^1FgM+Q&3#LD@vsK>)hKk8yIY)5&W*cG-4b3e;#kD8K`~ z1?r6odWmjoZw&f*XCq(uTmt}Ah#vk>nHCPHdDMIVt*UCXB`ydUptQLkEAOFFLG)LP z8~M9d7;4OO`Q8>&E=c2~u6q6N9H;XKkw z3kU8bqNZ200-s0{1PoBtJyGVj>@I(-xui)yAWHqACVKixQh)gu=#vx>`vm%43*OZc zRDm&|4W24!(-PDnKZ9Fz6xe<)6@()byqLY)KR_Q0j1nhWct>(apadBPBWC-@j#Avu zZLt%1Kybt9{AYraKqdLPZ`t^EJr-z+!&I_#sb#b1!(OR_-F(@l0;5|Ft28Qkc#B=(mJ^s~w`EW&yev3i`rCbNHG+U;>|V3dbUnYB;b014bytZ~QzI?IXP{c-|cR^a$ScR72R{pHhK~ zyH@YY#jg$ikt(2C@3(8p@2>tORY;{UdUF1iDsuMO#qA^edf_4lEx#ax5G%H?dTv%w zqf^oYqzb0r82M?uh?xH0nTh7st3T*ug7#FdNgoi>wm4f5xPqYPQ0(JpEkRD>?L~)Lq zj*X;H+U>siN0F$SCmnfis)%3`9B~C{cxz|~NFX!ISUh67NE9^;vl5~sj+UP)sD%(3 z1K)UFfPCTjE4^4{w4Y*HoH#&Pz4N?j5A)poiBEVOiv_NW0EMUX-Ls0 z%@>ajEcp{a^CcxoOp7pUcJ6kMky*R0TfdLXxVK}bOI+bZ*tGNjT)vjL!1_OeaFE6l zQpt>s0Gk37Dil@=S&P1O=gG_0g?|Jsg7gZSsJSn3z&G7YwIYCf1QJ7Xiw9`AW#gkF zTB9qd9|{@Z@=T!Vb4(uJ3AoGu^FOl#sdFXv3!gvN~!B`fuqdkT328V`T(h44KW;~ zlk=MUpdVqu|0*R=N99sVbDY&a&yr$(W;me-*a(B6oVfiK961v>OCXl4z&D!!@gu&XrLD&L-Q^@1} zgHyb!=SGmt2I<$%8xBCf0zVo4#VPR9Nv6MkDQaw8yjtbR(A9hoVHM6f#)AV|##@#~UMw z89RCb*Tizr93jzAZoHvW)_)HE!o;mRhQcEu5kq!HtNZ}bWKwnpk!#N^laR+1|AYB1 z6A~s4Fo4L&m38${YJ^zHj_2W#X0oKUg%2?BArQ( zC~LNEOYAq&2{=sv;I5m?f2QscCQH{wv zoFp?1R<8$SH}64#r(#D)03JkbnyC_V*|WY!Yc`J`qNDbMRDMkH^vXm~yj#nKE zD_$np({UOgV4&N|`KfLAS+e6#{K%t_V#ck+@kqdOh_pg_ z6Bev+DpiY~WY7L;2LZ;CQ0HNiGbU#=OJBb7qqBC8KHkd294qIiS}v?yWBJtMIJo%t zCnARfg7-Sta$<@Nk)=3@wNWg0K zW2+-(vnV}g-V_#!c*+8e5?|FBakZ}PT9yPaKz_3DNK$H~}r%;sIool{V zY~)c1Z4smlEj-}l`{PsuSp*r~1m~xQ*K|xq@mIs^^Fxjapq(-wYsyqWLRcE0^M^g~ zp|fZljv-N7FB{7SY7IF`(s*o{iw=9sr4uP!^(hni-r*vX=J6X5pyAPfji`sii)pcZm(T`XH*ZayE$aFw@&1woLIuSu#AxE8`L!_5H%Gh{&c1 zr8T!(swu<`{5sPeCEof^=o$@R1~jHE|1n04xePSfIbz9}GJDjnRgR_o-p*3zp03>I zcov7Q+=(Qg@`K8A)6-~wWs1W{ja z2I1NyQ>nFo3Rd;ikT{7W=y3U0lTARGiIWOZe({D_AYuwyMvg!kbGKNvmi+rTXEJO0 zoC{1UJo~%4`}#c<*bltF6y73$!UKG&^I47S(C)drB(}%SH44QgTZtJcb`))CIN9yp zK;>R-h!a7%QNkoZEcY+ zxqYnK8O!qeh_q8vf}(c2-}luuWDG>7;4tJO9}uoN|H8=S0k9s2KrK72?ah`L{HXiX zXyCPmmz%c+ejOi8_3J1Gt-T~Z`iU>)9U6|?)^ys+o-Ga37mO80@{WRA!?c;dD|2{! z?n%#&`-TZT83S@j>)*-}sYm3e29)Fa&zbl&vCUv(EFMW7hgWs01P{Ty;g|??k^2yz z!DDSv;x1Jh$lvaqn%hwY7=@j~a!q;k|x=6!W*EAtSywtNT6Pmc3p7 zI(z1ZcYMdaa(km?|CW@#q_BDVc3A#3;YNMx0n7V z;5GB|Tc4ec^Hg}BK5819Otp2f({q{L4>N0;6^blB&5hM+wMz^2xmM#YC1mNscTL;% zUYfsmlNTIG`n4SKPbXCP+%3WZ`I4mDX79TANHuL^Msu%pFRpr?&`*|w1n7k168~6o zz&(Fyr@)71Bw@#1&)>X;Z}f#t7Iz+OP!#np!PCJ5TphT~BQmp)FgvOVqW0(Ye7)Ga z!fb#?!NXUHjVJV*X2%H!RUTe!aaLB=>KF_kRJnB%Lp2$0%jg;6Ag{?GwvGgq(l`(H zEdGeuW#cw$(q(`TXF~*tuO^J{&|8k^AwG`w(}8YnTM@i>;zGhGJBUlE4(4Fj;7)tM*Q7G?FHjkD_TOhZr2z&W zX7WD<9{i97z`*+}HvBd4S~~^+23~ud6!I6fhBWNzhPk z5x-#8chI8{J%7)#!9@p>`(hQ_hnUII=Z^Wy2S_$kCfDXM-^u%5@J*5s@}4D9M19pc!liAs-3C*vZ-S2 z)cC5UI9!o+OCJIbR1ZKlM05X7vcW#%s|E7nK8Xo}~Wh6vqq_`O* zWRUpM>GR*0^Qf>%DFFN%^ArCj78BgkiAdc^-CgJ;>W&dcr_R>b-`!H%MThkG3OXBK z>ypp4xb3#R93_!H7lqSXh2V^ zJ1g~wKpP!~a)yN~#hZ3kDOZVz{Av+#(31cMa?gNn4~P;}DD*x)Xqbw|r-A3FUfGIZ zDhh-(N*xC&?LmyzW``_*r}uPSBNM@`+Ph|p~RfPU5O4pd@5uz0rp$NpaJgKC8X{Np3y zCl<}N=K&av7F8|M#j59*;!zSvFp1>2bjoIVkI_1B_+wYBt?MRB`dnqwsAUXZufGsM z&(0UVZ2+QJ`i1M>?A-=P&mjUOZ~lf#tYT68ba)+w6U2YZU7AOVc66y+4Rl2js5$xt z9e8N$e&i?1PCy=wSE$1L?I3W6-b$-k`*v$7nZDSO-sNrDmHa1tccF=fabVJ6NOIg& zo1_NDNnhZYgzeAy?Wy`&p(OBJ?+1Qbu#rhHIy=7n z*4e+)cnx3Y{Kb%J<-1_%9^(PDUn&e3{Fz-d@^e7r@+(3Z9-hLjEOV7znrqsHiQmY2 zj7cUjb3Vq5r*Ulsu-_jbOSU~VyXax~$(^vC19xJI=InL|u4H(npI`$cFWj6oafiHW zWU%*Nut8r&^%HFPj2F0ntI0_jUqC5+vRrU^{QGF>qT>|kod|q@a zL}|~*vxZdo@9ejDCyMj{NT-Q%cl7o>XifWH_PdIaBHxi%%Ga|@(o3k4G4yjW%V8=K z!cm}Zrb^t;K!>v6(a*sUaK|AJNk*oFB|P z<2xoRecNo?MEWlI?^$2?+Z`!hdWIqSrDG?hEyZtl@j#>ur92HH>X!kT2P^FRHMUOP zq+wNz1Q59tEL{fIfYNBlm6o(+1S$+7WyDjTrpVN%29k<@Iu;SEoCm^?Do=G-pt@?^ zt@srU~2-RmKbKUK}u94;0+e*dyVC0B}0;SgBf2X+|o#YI%Xz zD^5pFOGu8&J@Q}qZeK%L%xB>sWR?7)-t~Qcv1L+DJeE3PWL2rBONhlG!fJ>ls?WG; z*qlaEfe&_Qk&~xop08oG)0O|yx`%MXpvkBCX9VZ?jbCJb8YV2rM|RPOezIurZy3N9 z&oHoge3a;jSs4Y=;aK-0I7KZ1JQf+2*n7{f;Q1nS_6tc<3yhLa#x;Tz%diJnRQhRz`?CUb;15uf;8j zyW727H0GH~EX8$ci@U*4s32kS6+^%kQIow$@ND*eie8}(Qk@=zQJ)^v#a?7jO6^6{ zJ&`(zp~UGp$<>^DB&J-x1eQABn>x~Cv6ylq7n^(u@4N~RAAJ35Hx$;2-SS{m(;DZ5 zAT`Dk=8Bo6^Jov*d?i>1*bSsuc7j5mc0+xL=LPsMfAvnvJvw;Jj3gE9u ze?3`Z+fdf2@aP$$6FH}GoO*HQjX4BNALjCK{9(le zMo?n5)lF;5iNqIvQ}Vz*uG}fOBLE9-S8htN{uJBJDt{bN42ghsm5iXD&JdLj#iRgu z>agoZ18*5 zO@H5`6CVO(i#SeH*KoA1VQs$p}kzmaQjf#rl; z>gj=tguw!!;0}AIxNVY&)YA3=YDyl&&Bl=Q+5GHZ%vBB}2!m+8tYWhV0=zroaOE-g z*i{@!rt(`6B;H)k-Bnqj5o~#wpWCgOBq37rVBeo-g6)I;ei&oPFtclSKlcl^#?G)i z!X>>90Q>+n%@H>t46hT4wQmJU+QCX@F%8+0ilH7tf61F6QI%mb zD;0ZndvdoEA9QLbE4Xv7YUJ^cLB!BzSAE!lMdLJ$L#YkPU{Ke1S{b3Ad(U3uLgz?P zy}NV--fGh%_td2Ge6o^UnTb%AxTyr$>^6I5p-2wN{ZUnd9TnIAwr7Ef7oP1QW|8RL z#uZEt^?+%_hYbiqI1ryf$ey#I`0dWc10ST^AQT-T`=(alb>LT^*ihD2@Dq7lnj3J! z=@9-S=~mKHgvND@)_b8!7oHy!+xSb6c^*?2b2a9|=H`2*ZY78@biykMa(G|1x-vG1 z{c$fX;koIH=t+8v)wF_gqKCzVNo11T_;U`wIemZLC%qk&JV;F(qmg3{AQW-g)8N+JD-%g>hv5MfAGx9H-?Nf5S2J0sB9jmRGIDG9^F|YLWTB z$T}rc8^GF~iHiL{i+BI+_|ZyVbrh-b;IcN(5=e;g1!J>-9KE~iK6YU@Wda#9cDl#q z&E`*YF_8AL-T@sSb82!g8UB*C5^uoqBX+>?qghed?DRuC7sus)0pPoapHp%13>#Lj zrY1^f;Qu*(gvG+nxp05%QZ9?gma7KcQnQbk*J)N8vf)9rp6aTY&jVmTDTc6(v60jOzdZB& z&VJ*K%a-#}zB^7iG6Wiq#end0Io07-nymPq->zPMq}Ud2(d4&LPR$-bS-O0hQB|#} z`qlX4!~R52a~q!f{6b%`b6!xD%)p%BH;S1NO4H6JEe_yctd-w?49lv*TVB&u1 z8~-O)2eqPV+Vu-+F4(No*N_;(NUXG(7&M9t1p;0y&-{8qSb4DSz3iAV_3R?~LsjU? zQOsiTo^A}s!dU9FSK0I`SYMR;0YWd7w^$J!x_6IXu9g6^P9*qj9z=Dd5-bO6{{+4} zR54=oPDKIo;eE_)p~Q?>e)(XQ`tpWtSJ;q59g}kn&9=eeovqhdE;ERr-gMc**SO72 zwF-SHMa2(O3a-1WeKG`GblTl~teo!)!MjoL^Y7gwit82(#o*BHCkCLFFO4Ib1R?Qa z`Z4?#1`Dr%yGO)z?!abud5V{V_C<<=1N+;nM8)c3xj=HUpc`s;trkSKW)x35GIJu_ zsICJ*IV2tzI#GIJ)w{mXNl+`599(pBNB1%4l&<=M1goK*YN{izublx*OA5b7gg7X}rY3``p4i5QP!zvJ2u zy1XWY^m0KD=iuY)fnB&E2N*>_t%BNv{8_8CLjh_P0f`NzAwc$lNJN2R8z5=UFgS%p z?69tJCK6oOI#BV6Y(7rZHlPe@4+D60E}8TQL16PSL-vk^R+vb>=-<_*yG?6i->e@Y z3PLJ-0GE$)f)Fh$*wYn^9E(b;QEF5%nav302U9Tp0hf;|80QXRa${4O94V;#-c&U> zgBznbr$s~NM4Cw5gDD5*Yq+5od|C0AnC+MqO9F^?tSBh7Q&Xx8 zJ4CvHdQx7nGJ_DhYZV7|GsSu8t=PKXnpPY|Kd2U0eX|uoJj#y{zm(?i=RcXDuV6Q{ zp5_<(U^zc}#hLqWZp$xsbN8|3SbSLk|KriO{vgLn_C&%woo42n(o`v>xq+#7!w#_pg@Fn&lu)&*1 z=Joq{p}}8E!BfWvF6#ri3NI}+9RexzX5B{%@oVaHL!gSB%N1gG|AG1aS+D43-#5Se zW|oV7UkqX6ZIizJUC>8}zNJR8XcMeS%K7|{5JbG!$rSHxHNSZhG=rSttQKV?eB;9`LJ)lf0A8`=tRM79e$n*VyiZsXKVk5OVHzWXhuc%G802c?7;1Vv4 zAzJs_MV|fp!JzE2bi{=uOcp)Dw`N~|uGHC5)ePQ(`yUDZ;vx`5{1lqlQyy)|;WH^SedE!m0eoYdxh@P@nZb-FG8S;sh1(E8+Vstsg7mu> z%Kk%|d+7ofIII>a5LPtISr$!1_XX>oS{Ju&Sy=o@T(@Ap>zo<^RGu=a@X39v^y4u) z_p_?YC7eZ9g&(IrgVxLJQ+VL<&rdCMI7!&~n)DpzXu)VzJ2`KPV(ovHjf6vcQmshR zC54*5#1%~46IF9<(B_^{31Rdd$sBvf^+T%0_dd!GhftctR=8#bv>_FW7G zN*~5G%whG~M2KQW_DzJlYD610_U&Na+8#V;X?;HaJYnS0gb@72sNxgn_C)};kd|TA zkKH=G!UTL-Kb6}O*V*;Ms!7bx**{xn?b~ZS0fVY)7JWDVUay)?*OGs6fIJsqTFUpVJ)GkV+9u|4*%*Uq%uO~7H{J_O8xW0QU zM6c|)rmguUd%_bvR$@9HU`&{WCs3Qw^lNe4i0_zLmN_0TS=+p#yU?RJ&)l#02rGy% zw_BDbEwh0wvaWn3Q6X(2zrI{sNLhwa9uU6N*7y3jz@lTQI!%A1&Dry*bzn11cjtQ- z`5@Wt=JsSRRA{DT-pjJ@4wB#V+|rw&EPB0%hArcGY!}j~m#(*lr&?HYv^9+rhhlKi z^?O69B}YYiD8v~?n0XySh^@^W+S6;?3$0zwIfrC`-jA+yh@mt$@i9D2c>kz4dld3o zM&9o1AWvrR1gDXu6h>?Rl#fSrUzJ$s95`Zz@Rn3#lR^(tQG zmM37P>2Sf}Ro ztiYSgkmgQ_unluh-e{0NsqA-v>Rn%sPBa!-}kWBH4| zp-{c^q|J9XV*gqi?<`s2HNMy1c>H&`0%9^YrJSxGb@Ew~&#Q+2o6z=-uNlsR1p-PD z1_HwSKZ+R#Q$v@3!ibKo^G++;htD%w>%<*>di8m{O=COs0fIqo9$7r_<;I2^7nULH zRdtP~BtmB6W9OqpZTD|d;2Y*l_A$F1jN>CtadGiUWTg@Q*6h~DRa4MxZwxw@=U)p} z3kilR4?o3SSKWBkJ3Y+tlHvy)`h<}Okc%7FEpUb~p_w>;ogcec$;MTt!Q1|{j_XV7 zsI$a%HUcMRr2cjjSG-Ig8sJ82;> zwdQ42aK-KnUnI#~FUb867+#9Pu{_1)MlLRXLFj2-Z}1GVQV#>R9-5>9`Ey3dVyt2u zi6F6|7YB+Fq5dXkDB)&Ek5}XyvRM|?VS&5Zhvv?GhF*mtmCJC5fOo&&SF%0Wc0tI6 z1XZE=(F4Cco04xc=&SQlp~hf8f&)*o8y79SV~G^gA^9`I$b`{t*jD{T*TrBtAuu?S zu8@g(1ZqK*c=!$>xGvczaC>WQo(AoS13P1Sw!?e;1=ETmOB?YDD2gbj+r64RkBNY} zit`K6S|)oU0ziUEZ%iliEHS~a=U~A}q2f@w|Fh+-XcmhfMV|6}Nmfe8&Uf&b|&#sO}whf_Y=H z%1MJh?P%4;dsXoFAAC(P<-bDWK0w$wzN_(F27Oss&pr$G(rY-)o4~r^O5GC9wVJnk zP-}BO&_wRIFm@x`fgVa?-m+b;F8{J(`0$kKV018&S5M(}h1-4WP}+()&G^z2Q{Sjw z)qq{PaNG*dcoG=sXWP2bVw{A4@Bx&wX3;=jQN3#8A0YnH;jUR#;Z3>r>fxw({&9e5 zHRrOAh_R-hV#ytLJF#Njb$A8`R$tzpV_bjj3SY;SrxF{@CZz{2Gyon|GP+W|r5oT; z19okJOe_TSMOAwo(RT2vTN9dPs^m^DT@B5V1B^b~!_1FYZ`Zn~T9}#5lNsOG&3G6J zlq*Y6LLf?T=yra({>+3BhdB{oFP$V2&v`nA3Q z!lWmhp+qM!)Q6<4xsF;MQhJ<+yx0XrKvwhVxF#AZI}PcI&0vZ#0}qSwKr zn?35?yX(M=R%p7dfGHGDcG?wMnC4fNC9}hKPA%z2LqlW%_ZsgME@a#8h$q&We7L;h$77W5Vn89oP)6pQMhR8g`l%C}dE+=uE6VRW4h!+zQqa#!C&ZIk(kx@1GU1}X(1wOoss9kjyZp*4q`L zEp^!Ggg5H!_q5xh^KDW#25OmpDXaP22+UBGkW;flnU5b7|II->u1Eh%8G8JK0LsW{ z0s>?_k|Z#azVjacc%LC$g%6aI6aVq+yt->!hVel@CIu*M2_*c&&S}XJKtS_V^6tDiPF& zZg&MpBGsBMGmEG+KmffvZh}o$8fQEo9NhMnrylMXmZD*KaP39yo)9fzkd<8v^dB30 zh@!lBN-PPl6QdQx!}lNCOmA883Uj4wExc z`LKCnp}a7GrE1Dpce=gQw?(CLtn8%%Ly<~%ej3zUc2%1&HP$J#QI0S&s$K$W-=$byQ@7bu}Sz^qK6=3j-z+H0%ER#biRBOB8CzT zw*-bZSe_|EF7yZlgK!=_e4a_eT>n{<$=DEC+di=GHE64na++#;uW|AR9T?|coHC6@ zM<7W=xQmPp;++ChNpngm;Eqx?SsQ$azOX2%W#nCI7YARSa+|`m4N-m%R;<41tC)VZ zR`w7PHCBwRHPI1fj4@?WhHAPTdufW{+^i7SyFi5{R{$<*g5^uI2ko&gaCpE8;yMjN zEiEj51$Pum0t0Ls*7Oyr*YalTta&v890PDqk6gWVYX(89-9E@z2(;+D#Sl0`m#Z%4 zJY+t|$|HFnB4nQ4B$x|mkHj8|X>={!D41YTbb`)t);9^{!6a=WWYC7_DhMQ;r@_I? z*hg|^YX&^vh~u331fLLc^tDu5T5yQ;-EwfgqHd6=089Pp%xE6^-_x|jBxI2+6VGe9 zH2OttYA3N5x@DuL{jN`YwMK}KRGbuFp$ZIniw^tgE17UQ?~;!V1uVkhf&R?_P2OT?RGp4r#V+obiQ8)i;F zdjV=RM7C>J;^V&!<%Pub+GBW-VABl`SKzJX^~pK`RlSF%Xz2L>12A&iGT71Ja5 zRjLcI|G@Q;x6 zY!s9Wb>y6si;tYRP>p79hfeGFrh1=b^4fQ9+v6LCC?4L%-cFl`kl-z564{pLMheWd zYdS4I5WeJ}zw%IivcndfJeb{=dasFjI7(9clm2=P*lfoV8@Og`nU#_jb+e1yoX2^t z0ihR<&_bC_IP=WVQ+b)r-0y#W8p}COW2gBwcXpBOCHsT|06anhx|W zdF=qfqyNDNTm1W?P34dBn!QVT@K_&N#_=!}T`$;rtsa(cybuSh4{I7{GuIqwVj0mB z*d1HK&&NAZqcKh0YHDMEdqI7a=-XRnI03B#bv+eIt-L~|cQS;cmF8ErjDJ5BHOvUd zqxQ{NC|H8$ZDPAU*}|=>d046H1>M0BL(Z>T?Gk&%q@8`0`VIuWUh0uyu~jM)fRi1h zG#lHp*~i~JE4qyp*^FAZS5dC(Uj<}?4_+>w(Rv`CHhWEe`#@N!TI;}WyV1Spah%#z zZ^K$w{;s?!ez4*TM?A4N+VnDdOZ+Poof#qKc@+dEua8yly&6A9{@SJlw0*ddD}IX( zI{=Fj3OVh>7c4qHsJcD(yhVY3(aul1E{1M(u+iy|Kyh)Ns zhAyuEhW^}F#L)k=`9zjEWi0(ay3Q#&uxM+uv2ELSQn6F9ZQHhO+cqn!Pzs}zFo;1s`&BzEzYrQ&K^b^ zKIVnM;CC#VG#?v?EwraXDU?J_$+B3tX;n-RFWr-8FwT}(9pPBU9LpDIOe$m~zqKr# zk*e$LLYAxSCbf)xpEokK(#mPGm@0 zK4E&{09J*!ufxaF!42%$8Q4!n4ld!`i^z%@p^RGcM{}Jmmc)o7roH-7Yc?`y`dw8% z!(BS0#x}8Igtvs+exbdF_sA*hbhJ*3Iwn7KPy^wBm4H8vr}!xOF&b`}m<8;gn(1e1 zXIctuC$GQlCu}ItYVvZWzUEH!(INfem3SX=JXMsPde{%}_TfSCQxAS;*Q80J4#Z1M__KhY{3 zDvnPh5lctpO+u?mW%j<6gGu|IKs+!i0r! zyl(t0wMN2v@I`xiC{w@Ix%m%!H8oVieva!%gBJn=GxH4!)&g~$?AOn-lE1!u)Xh%L z+W`uifs8{y;zTRh6?a)s*NTOfT4FT&DLzjSj3iO$mAa_;LY8m&=<)ZnH2#VeD@JY& zd#oIzIG_nX(ro50_Fx^Kf0-iWhFga_CqNH+e7Ib_n*^)#U$N(wW+DZUtKK;kH>Fnc zz;aRGH8|jIigC?10>+U|&tya}ib@Q0!O9x;r(2o^n@f`kdpWT!m~ziQGl9K)JF*MH zd5S0yMhJ2jv_Uuu=mDTsR{F0oswz?K0 z3-1W%YQyY!l__Hme}Wxb0e|%?6h1Eyx)U1q=4@?Vfa&!5fwduo3zIds7D{;(!Vo=gEqD*OXd|b5n1(lcgnZ0LSdQ!3pBuv?c^Z=0gy3 zWCWTMgt^;^PEppQ^-h4;K#=JWN7}8h?yaOKGC&N9-JovO=8=|!(Me&@bLwzR(*gy& zK*Av9tv;q{_?tz!(s*1OI7SF&_#=+jL1W|^$iOCBVwRX9qGHZYtUBV@j=jrl2pV!X z;%3f5_45J(jSzU9gK(;GbYhR#EQ?KLK-Hg>g;x~h`)SS1gdw2Qr44oyE?cr_Fc<;D zPlAoG5p_0(feLUnq5ttvTct`Bm~>IVvS@#kZ{VD@ajcQv88TM30JfYRA0=dNYWmAU zY1#x{ErSS_Q_jB6*7xAG<4@S;_b2!CgyXC%m_o`koPM3W8@_Na{RqfHQ=U{>f)0<& ztl%AU<_IpIyfYtakKNAzus4Kh&ytCJ1C0_$VXT;f&v}`jPQ66(qU*zYxBfZw%%6LQ zP@*D10&*c7Cf#ZVb{xJ~YoC+9R+hv(%OS=N^8WW2p@zC2{Jm@u))~|C+~d)YMx4=J zZXz3?fu^p2)72PlzaM)#+&tF0O%J>%R=*6OND#p}I<>ya1edrw3Eds!$Q@4Ex_{W9 zO(hM^*Q(py@#APHOIFx&L=O+F6nBt5zYXemsjxl7JyE5s%HUSwChjhAXEn$bUMPPN z_mo_yg_b ztJvrWz<1vtHumo?VlxU%ap|Y1My*A}U^+-bD-1B+s6nPgL&Ex9gC;?h)p|ZXp zT3nTJyBEWe6L<%Ul)3u;^xlP~CYi};D(`hOwe?D|W`ZJ#jwp@`TqgXqP1Oeb6p-C5 zHX`T0L#d)?4asgkq(W(M!VK?#9Mle1gtoR%o41fA!XXY!3J^rat3XLh0Df&*d&xIU zf7LG+K)-``j4E4uY~vY|23^ztcDnHr^T($L^ATZ)k+F8!+!|Z(iidjSt(;QF8`#R5 z^CF~u+?;r{r|GvqQ5oIJ!yIuIXdXn1K$c5en9!bM!f*i#JvWLELSXP40E907$p!@K zXo1jFi3{_mnQWDJ7QO?KiaoTFl1a_Iz0q?!5#WPP;{%n0kae{{%gRIM=#$b4SD~?~ zYecwr>E@jYgT8YE8wm8*#|V}K#My)90u^@9Kbyh5#GYw(A=;cwkQC^Yj{Lkc9L!Bp z?$5SGL=oDh&XG8&lk65i`J%aqILg!P9B-Ape8ZSvzIphJ$_&c3nwfjpF?>6XMEg~lT4F7X}A7vY3t-7JtEIw`!*zy41)V$1c3-`J+gk;QJb}j z$JXTTD7yQLuvkODNq*#Q*_U3t*>f_$+_v`q@gTJ(7ba5MA8PXJ_zerSb=?S7=Jgyl zLH$Me>&oV^)2AbQwo9tgNph-&z~|n^i|O8Gv`b+evs$F>>CCMEwg;T|nHrYn!s zN}HW+$L4&O8sC8Be2EC@e?vS$G;IjROM&MOC7hWQFN6Q^wf(W7C}xHh%Rbk^RpIg@eCz(4_FIhXn5hP)excg=Rbp(%kBh7eW>A0N6x=t&bbl7 z6(@C3{wyaLs2%(NcH%LKwOt{UTXvJX(}-#04VF9g4>QVn*g2oY`1f7vs>ylW$OIpW zxn4MVY*yz=RtBsYO=1PPgXh9^3<>hnK_r9m-D7`?dJg}vg0*vd4qdByGA_2Hfw6+N z0?lJ%;iL+zbF^+k?H~xftkv$Ha97tJwp%3?heK>KrfV(R8kzBl!}5^@==92(Pys^e zDw{~?vJ7vM=%+AF`FI6I%d_|f{O;$z9!K{B`50YM!>jQd&$lxql9%dA$~LROEEA)7 z_^ah8F_2B#vhxnZ{2I(FVCSiFL47EZa92;42Mbx!Tbr4cdy`leHa+QxdzH4TW>k+LG{PszUfZqwv9WMzv` z-VZwGiBf6w*HWeK<(0iW3-D_}_~bp`;z+9OdF8DBAuPYfbLgjyF#`kuS8D?8`-=Pt&@0o}i7+aXcr>n7ktTUmAh34l|pgkJ~ zsoT4l#n-Q5pjK9aibGSI(_aBiX^;`UmWaeVhaoffU=7$kc$;Au99=g+8cZ~=T4io+ z$nf-W3t%6c8-bDM@*-8`M)1HrNGUa%5SfD|if<$_>dM>tuM^b}A*Hlm4c4DJE#w_{ zXYCRxy1=Wn7!Sn|Q>P3J8!Clr4c`UkyAItX3*MKQ&ymh{j$d%josiMmm}jN3_Z>28 zIEKaEiy_&?GTFC;xS7N5Pd5WU*OKHu{i=SNSg^pKG)Z0=QaG}lFz-AG&`Y&nU?K{$ z{Sh0bfP&dNMNU#~|K(Zjl*bw)T_x5*TkEc;H6zxOxsbnnyPR+lU&gyq$^Z?w z!y)X0v&Mev(U-Adh{0}+T7@gh9$qBleVRI@)nyHXMtx~O+=X8>2OXxhVN(iv~q<+>_wgMH6*RPbF_e5tN0^SmU-ay5^@`9L3J=DW$cro5=5MMmBB>pyHm z=`hq%@$~u10Y}#hjlDCWl0y$$A9*BW;3=1Xav?6kO(@@TgJ%hp$1uolz+8{;8QgU~ zf81}~&v?%8UGseZ9MG?M@PF1V>ocJXxdq`;4)3oq>^-P8uw7pAp6>&mubF0lX@isp z=l(H-qIX2`g8}7#hJ9rtktuz%F8?pJUPU-Xu-=bak4EeNj}SWAIy)HtA9w%1b}P|; zUOlTrbAuVspVHfmRsNre{#5_QFG1(}Xt=Q#$igW6H#PEe&G)-^M`a5L1k7T0#w~EZ zx7T$lZ}UgjnzdQa7Ry|+%cdxM?%AaZu(*iG>tRzqMMX&jw(a3Q(!7-wC+89^GIqrL z#qZx43Y=W3Nv~dXGqT1LITRYQ>GNFs)dp%QLI;Sr;!A?B?*{ckN9=Bb5hATdmJPmB z8B{hueYYfRB}PGD@ITW2Sg~aUTsW;wjQoTT8QyLlYFxqzVQ(q<+{syS$YdXG-}kGJ z0~l6i*le6s8ARQW_VOhJ;HuxZn{t2e9AJO=BvJb&W=h~)k>-n#LR+?8ty{>faH&#!XZ@08~Hb8aGn1&D?8 zQnv(B!9v3wFhOC19+eE_d$1~`7tKl&<4n-LCxx9NeX#8p1AU^bGT1@&7Sn@9 zr_`ct`o=st`A6fm0{k~be(ekW;)(?itTTQ5au*=un^x`PM~7gU_b$`zC%}5kVn$zv z6>O`fiiKBDTsrV^Brmn-FkvjF_X|$n@mr81CT9EVP<-cKjp{9%0*{tbHvh5_q_^T? z3sux|C$A4+2*<|F?(%Yr%6mj!q?OMfUBB+Y&R6OAxyJQM#GrHO$X8h&pp{gq0}|7D z9%Su=q*|W#`7^Zw`1VTuCP7GF5;5@Ddc6(TV)K!>mEz4XKevpZ8x}YsApp|ST6Ju8 z1Ph2eX>$;-=So(SS6BwJ9oZn@Yw)8C*9yR~sFXTzhUC|HK#ABDAc5^wfb=WI zYKy+!NccrN>PM*6T){a4DTBDX+0B?b`1hYS0c*iKzx=*d?OsA7XJHdIOr~v37N^i7 zz~8VX7jQIJz7eYocL0k9fv(^aNf?bps~_BXT79dBaTFVZR2xCJ>=g`YIe-o6iLvX% zi|1ec)~EmR^*avg@+Q)wXKWUkO69xl5zpFwB1c&x)@4idww^jNdPj z!d)s#Y0LV1UH7xXoRZy{j(ySSOM6Vs0HFwA=Tf-4UNvS<5vp4*$lT*=crEx*@=mcA zs5DnO%=(NIX-w`BL|j4+W+WUBo-a+{xpe^u2Q^SOI;6{>)9RXwctNQ7N7B}*-TdV4 zlcB0EL)`_e*jxM+Lfl_C1wiDKr{VWdq%E!XJ9?X!Dp?2kVeJ<}uO1PhzrXx+MRo~g zR3Op{9x^fq4MzpDJ_X^uyTVU3C17NjhkBu@ra}F=ekzHShTgx)T3s2I!x7E_TBcvrU=E#u}Z zTB6AKp&V6InpljzHOUj=Tm0eaw|jBy;-;ZEnY{w|RO7Dz*0c*3^?wq=8(aqP#0r1y zV!=^LDHVtd+s_v`$af}J%Az2BmEsKn6cX!W&i1XqSk0o??6WnZ$oi5UlcLu*rNx$_ z-N4%?)E7;qC2ABYvba$}JGYMrxNENAEAXk^wXD4~%y;u3kbS5JiGjZ}YGzK8*ZILX zsvIEXVaKjfQYXX(z}>L}s;v3(v_sD$1n8Ry5xp(Wdq>42g4BWsSo6^Z@^|Eu zs!inx3ox8ZE(94{Z7QmUivn2na;G-@^Wo$DxcZ2HpGLxLPKJ@6Il~i}lHIMl;-swp zY({%^fc6&Q))NAb2k#sDF$p+;(4e4HiS0%*h>9ma zj}8U?P?m5U8yf@U)?wEXj#LxDs?i>2c zR7L09-av;c4uE|VLE?vnhj9?GgE(qCz(kWN+j^(S6c|;Gg3?qZEOWz-c2mcZLm2P| z6t4zVrd?bRPf!$&pg(Y9$A=WDE7?NokzR-F(dQbk@xg#6I zC~vesMj-abbV>+k$)aseITKr$GEbSt9Ps`0_tH(5-|wn))DDkuE$$5z{kzhT<;&tl znta1_%>MhOCeg5elX6(~<5HG12w1)lM?yioKSI+0acmnX;sUgb%~Oj$vQ*o*Q4EEX zR6fv9<2p~_%m85O8Ca|=bNKD3Uoh?TK2PGU7@lrgJkE)pNfxZ#I9d1|<@`Z*+| zJwoIlw14LLQ_yUNfagV9Jn$HftU_Al;fvjqRmtwuOy+;+MhMX;uy!KUqV$;>f1GEg$?7Gg7IoF@JPo*q{Iy}GE z*U6#-IpE?udJKMBHaCerZbseS+mE`|RkvSpy4kFgWM^QuauqQq@h^s>aUi z0biYxl?3bTJ|e7#a$9*Y=*Zdeia`tO0Z24kDimWb?6=C-WGcK{{SDN9+g{k28|u$S zl*vd!Y+K{%!_j5xfbq-_wqfY?!#>S2!5r(G%fDbA7rv!doAiVY)~C|jd!4RFmB_iI za@y?S=G-}@x%JPdU1(oo5V$a~QpUys+Yk?sk?y*wcScpwvE>t~L~8-7)%0a|Vw~M7 zzq`?Xeg5(U`f=7@2Wx^0`%dTZXBj+o70hWUJse*^3NIAAz3Aft3`KPXs4_=A5(bHT z0wrkl2i5`?@|nsKO#jqP0LDgdlbij_s@XRydXozyeVN^Rup@IeaC1D_rRf8< z{yt!`hZ2>Zzm#I8DwfORkm_q9DImvHOXF>?Q&3$fJxaQGXGfg+v#u0D2H5i7wOh8%Q*ml=%j`o+ETWfKc7d zRlJ7JzS_$bv&DYjW?X8ODmwi>2#+EGDq<{R2PFZeEt-$t{?(yDQJ}tpceuOxzBxLe z+xF-97qofBEBgt(xLbqBCh5#}wEGn4xksIdHzK9+v`vy))r#!zReWABxvkG<27*f5m3#>3MI1nVtql7HYQYm8N>x6L$Cl@LHNy3d{GqK48yEP5$Uj6Y> zO=9{#j8?0Pc$8J;^{$2wo;_iJO ztDRBk-eI4>X3*i8dj)QO#7!i{4uk9FTP1t(45|36+Rv_B3TWC5)zAz1BzLI`M)vmv9x5(l)qxy*VY%MiiIe)Bw zriWU?(nwTyXdPR-3*}zMYXW_xDz@mzYRagpD3@bcB% zQ#oiIheg#}${p(>xs)rT=zC0m;g8sF{|5h`0k5s;gpQ3Lppr!t00960 zxpY-D{#m;Iw5$DZr1INwjT7nn^;Y%d*S*e|mQ|?NX%|^9c5jiL7y+=2XIExsR2^t5 zE1M~#+18KsTvNQc9+r^*cS#%c0@)W)HE+k7_9dM{1Rr*G#_MZI4Azk|^rlx?a|Y`_ z@%d>}$$5zRD7xvIJzzTEQ`rE{_CQU|$~u&SXp}UalQ(a!<-Ot*d`SD>B{8duoYR_X z#e%<+D&uW?GZkz9YSl<8pjxuXzLje+?npgkxsmiltrmNPbZ=mO6nb}`<@;-8d0k5} zwlmP7qt9~i%!|axP73_Ne7ad(T^zr}oCk!-M}iee!gN=rp!Rx|?rO`KsVP~v4F?T> zwC99S4F}rd`Ulv^YV`4}{eYxZ4}F~qzWZ)dC4VbY9eMKjxg!CPOl3w@pW$#VOEmzM zZ8AdJ3h>yVN32w9&Pj*B=uni-o2ES0X((}0Jw9Z3C@DJiEB}5`pDk;a70J0ABXJT1 zQHIG1gpC#`2}Ij`Ruq|KzBjJnzOsdG?7=AhE6$VW2m2TB;tc%24z1vi1YtNO zMUxuK6jGuhL^Tm|In0HG<1fOR{OdGHk3kN%x*RUshO*gn+#N_j>Vn|afvkHLY1taz zo%-25$Tb`P&y*EhdRpCK^r*WQD{unAf8+*1Oc1eQWgIbw$ zo)&)Qjic503&hL;>!!I(RT#RQ3H+gwSswXPjs^V(s&q7^Aj52nc}}L%w{29gUXuT_ zz z_5?$<*4xO4q?C?oNB^RgQOZ^*5W_P^M)b;Cuj_d=-=x_??cv4yz^SU8lq&80Ze%D37xRc=Pd2=lG;Bl&QZ7GGo>Z)1+Il8??VO)A5*cVt%i2 zjhX*Rfiml<1;}w={jpm>AeJD}Z7tm?qpNga5DHcf-615qfLD`0@GC)Z_l;-lBkJjh z$`&Kd#sqY56l8)EkgrVijD-P6DNTaqR~*9wamRRT{L!-4R!XENcCv+YUwp>>I&TlN zQW5cybl7r;b2>?rlCXpUeb z((%2!AiV5r_Dx(STv_1PbCEttSB0fq3hm7?cUXEv zLt?)^6#y5}MaR_7OEjm(0J_UHqDF}BYy)&iW4LTg<%?Zj3+33?%WI`aM+s?*hweQ# z*K;Dk3*Bag?I>oW?RFp_GEv1rmvEwDliv_iQsdpw{gdY%a4`JXEl|?=4*0S_I2MGf z@X5CI8i_vrAFws)=4gCrtg}u)FSWQrz|fX%2N7kR(LIH_7QO{(+Sa~vq;HsPmf?FB z`p*GFgyFpC{$scJ)xAin;b#zBWWDTDA zZq{P9N}ru6ZfYgSSW$8wQa&>I`!udJ`kirgAt|V>^}+#PV=l-YFJY(N0xU#t+vWWxCD~2fao5UHP zK-+TKAP2h}^*?=@`ZN#e(kKl&6|YU4@E( zx7ynY5WfTG7Yhj^oSlCRgJU-AraX%+s2MT5O2zw|I0wp(j3+W!%!s9(6eo6cd;b9$o8)j}nB7Q$8BCS| z78rpYjg(>oqXtA2dRW$qQcPh;8enD)MQvtBNWKwQpQ4{si@THDTDAvEIl#u@5J+Fd zMh&dm1z8{TTX?ff5{zUg5Q;34)7EhPkVv%C3Zn!6=$&o}rys0dKY%Kf0fq96oUX#Nawqm%-j(Q@V!K7!`21Q=H~Lf0@ybdNFPs~oF*9i5az z8qyN-F+0v%lna;7*8tfG$@x4@GBJ=8qSo~t@F^;ou8ATUp(Z>Aa zd$Tblm79L<_z;K~s>7j2leGkKKcl^;d=r;;NxEPAv8qQ^^efaWXcycEnXVbjX9LWc zaMycrdhwaTx6AnnVb4WthrY8#0w-!H7`P#4X^HOjUTy0$8vG2%w?;V5v{l}U*5Ju0 z!J)7Pu~yZGhg5HWc8qE{yK4?`#rIOBqQ$-BDHa7}rY2o4R<(;ORkOjP^2D zO`ghPr@}Z6(}x5pjcXcYNSU#o_^{W-|9HY)B|tyNG2EtAn*KN^aCx#CYl*~&9mr-2 zV@tsWN(Y{MM^Vkjaa1jTp)@=^eC9*QicHWFFVZT183&iWtGuM*78=Sb?+(Uj`6wmtRKKi+H%%=-`XzBW{xr?4!&&X|O7cFA+8^7pRU+uf|G`(nB zbm6~*qj1$~u5VjS48cS~qq_M}Il`vvGo8vC9?{H5gG~dt>~`i~4XN!#y?+Qx8j(HA zD{F#(&wCK}UHwlg3Q=#|$ig$G(>pfUehni(gk|g16GZ+3v%gWdR$ogW#-lq~*pHIW zdgu0O1`?M0_69uEb#U&&&pt7r^`)7$E0sbWEfu?vtvo`kBU6XJy6(nKegk2H`@#EA z5Xtg;=~~s((9idc^%b9oi&0VDdhnf zAaTT}84a|3F-DxCG zAn9!n-hc;B$fF0$`6I^iIb+o#W7UoD4G+0xzvBSkm3VAd6+#m^oykuP5TtyIueje$*JK^37pasy0*Mwke0>Jgw+&JFh+=NIWY1Xct1w-G zPthfz+IGT1B~*}54()^ikKxOTKbPZ1aaDMv>{_aj*eR$J+jV4IN_Wy5=(qNnGk;3y z?607_$yI}Q0o}AC((>%ea-x;jzLOw^++i3M?pFrH?ZL8wI{TXEsDdsmAMm{)7Fo7E zJbbwt^bP4EtP=F7{Ua3d2mR^! z$p?tUm5#0^qhaIHJE->M^QPjj$+Mi>%jsRiua_=5hDyv?c+4HyiH9@r{Dx-E8&?-F zSS^;&f%aL&Yt4#<;SzCL;=r-<_}$jQdi;cql9TB8)>ML91{oqjei92EC%&h%05H9w z7(ZUmXQ`&Du&hKos6GCV4V_ERiw*3T{4<&BE2U%kBD^0A6F3#Y_D8La*d%Ys`lgee zu?R$FEMN*oo(2Tx%-|H4axymBl9+S}%?KF#2^*HmxyliY2MYD1M9YG3Pp#?pLm75O4g%pAfWrI`i3 z=}R$K9gT_RKo#K=Y9kVcGxry&7EL#|gDaM^+OPKu=db+1cbLUpNl(gO#)V1oPm*AV zh+=_ZXB&b>ly2}>D*ILdvh9AnK@G)BJ<&S&Q?@1oED#^P%zp%ld#v%;m(FLK@fShk zHv)l~n5r+?A)orV)5+>I|6IfuZh?MPEtzGIS={4$pKV>tx?R)1=q9L1C8FLJ8)?-g zy3MMEQ|GMb*itiMO9JjNAOq;2*!P2OoWmr?OxAv9%55%>_Lf}fU@v1RzMifSk92pK zbZV8_QTwP&Q7+d4VdOes2ly6sPLaFE%(=tRkem zrT8aOhM142717B;NYdK~mte5Q{34rj7RZan z1JQ21^e{#Iy+B}XHs``!@t3)Wdwjp73+nPVC9OW~zzMeu18D@nxF!s03##xuB@2ug zxL88f|L#1_x+xoiF2^r0hP6u*9DL4&i9;FdP=Az-@`nMt_-*d?z7p$AK~_)nHbv_wCG>LC*5D{$ zBHm}}B!J9m>`r-S zL2J~}#w6m7brNR#R1G&m{E9=KcQ00pU7n05-kG8fsBC(p6Ja6iaK2G7P!b6OT28XK z=s?}RUxpTm3ohSxX9Yq+;TAvo{C|BS;#eB>0*%$8?7u& z^%2sGAOc9rp`r0oLV(#U{6qtg%Te)tp{#QNv2{X;7-V@F!V@PRg(XCsJD9C<2J2)D z!DC_3Cd^@+#Fr;0mvhTOWY;4A!+q-5bGEa>+`MIY%OuHcW$ys``(9CjYDs|lfRWK3 za!gOqu}mL%!6I?`b!@f(R=!()o4fsh9lsqmLVA8XRF$!l@s3o$ahR`{T-HGy`?Oo^ zAtDCE^Ag6heny7`v;57EBA`!>EFKwmr!s*C>Ip+gfh+ux=7j@-k~Qu=nE0<^bsLo( z-?j=Ram}cfv{BP8{su?Wl0TzCnrT~qcCT+XCbSPq_UKi1!n@f# z2uz^(Y{Ven{}_}bFD*9t0D>c7KqxcvQgV1qL!ZYsXe)J4He8?aNhQ(W|7>RV4$fmF z#2dZiu*~1>ik>&4rAXX@N_f0P+|VN*aRVeo4Qe(x51$ayqsdzHh*+8o#_hvjd(U&U z!o|IzDN;$YHjh4TCV((hJhg+EOw?D`nOF5#9}k@K*>-%{ox3)>)G-IMr^40zQGRDaH@Qk>dCa67 zHH<{9P~Bee&qOhVqCpxGf~i5YY={<{bRH~ZbY1cFXY!PXy=NrkhDQ6@iB;Z6F@lV@ zI#>puLBH7EX%-nLT&)FG4gwSxFWTju8WAVT_gP}Z$#Pu{&iis7ouY-CYJ)9P)!E=V zrD>VkD;*As>A`Tbbd`qXa?pBAiFy1wlM~@Wd^6Wm$pnUou8TiuTbkcwA?5~jvMY;7 z#0GC>XW+$Y@i(E5fEhcP3Th!k}$FVfpMdELoEJh`*y`#wyt5CP=KR3MKWTNi*br~tvPdTR_);gS9gx()|_IYV3;!j-Mi>Dz7B%m-7&hgndeuZ9m z@kvSz1Q(w_?vOGz7pKQj`_oTO5md(Yda4iZ@|9FzI+u4k0b002%L>zBC$oLgkjV5* zBgaF;5;aS8K!p2blM~rj&1=^@2r4|Bb0dbQNJq^XA_BQblatn(XADvP*a(G5>R*vN zA)^1idn>^D8}ZKUwUi{frtfolZ2f0rD`1!dDsNS7?L{AT(m>H&FP5V$|8<3fU1w+H zds{$}Zr^CuWkC`CmpZNBt}Gk>O;ci-#AE9D=_X~YwvPX6Gc*eHF0)P};u@!S#eE|B zuVv0GIr_cGV@M=XT_Jsr)4)CH zp@>!7%H=4N&uC^;jK~cr8~AUx()6*vBW1I-;6CcvphkYh7o%a?%hcT&EYy83!#e@N zIe>Cf(r%R1)6FVaMGH`d`5uq3ZQ|_Fbdu@+nib2WfOyv%2uPyo!u{!3yts}{^Wi>o z-0=$5Mv?GukeBZwK`!BQ}|XSZHuA;G^VruDjW z~b519brnoMK){2d_O4J?rhIusEhn{1Dz6TD@g};8-&I9!j0!r(#otQb_9uq zX{!Gcs$T@x11&pi_J~^Si^=Cfe1Fq{or&;H_v*rY|G`yzGK}Xxa_Y+idi{vf>3s9; z0kw5b=|+Eq!hOxLj2W8g9@_lHU<7`gBL+9Ubo)CyWAHOIPbOUZFxJnvkP|*Z_Fkzo z8|jQDQaJ$Je2MjIuxd@9n<_4{SCK$fj4He6>>DqK?cGCV=Um;t))cfm2ld56MK9wH z#}pK-JS2&mZg$4Gp&{kO-rw5uZWPb-jV?+9G`#`O@ zugUDxy!i3CY=WEsOR;Srjsjmlc|2boVru$z440%pWNtnB_QW69u7be;W<2z-ldh(S z=3-7onUJU-+Ai4$y}#Ck+cd4SwZALbwqX6H`l(+yh82-#Rpxdh&rOLtI)$q*JLGJy zrkIKeDq<{NkQ7OuIllYQa_NdMcuZo^V{ ze)v$lg4or*9GUuXu-FsyPXTsqU|e{U6zhV74;|jF9*S&&6#?(;0^Xd0MkFe4-`A_p z!@r;w68j9(MLXOGT#ZG%QZ>PlA3hYtw;1Ofm1($LjG@|V zz9y27p;JTBlD#tc%Zh2POANqZit)>UuR!rti!Ogn`@Bd_-^XvonF~eFZ9>Tkc5z|nLbkL(0+z5dvKU3$v{U06rJz6OA zSZip>(!9$zlrtH5(@d?9E5BRxj}Da)LP>iNXJkYgXe>d2f-#NhYloYn9dSC&5V7|1 zQh1RC>>I%}Nx_kbcVaFuKGrWENj1UjEG*rBWPE9wj%d()*wHU7vj z5^~+yN|k+=Y5Fhfxo95`Q4S#PKGsk^D3R)D>+Vm=4Ya6LSi@N4qoTm}#gsC?ot=2U zM_@{8ah#n;Pmsck^d+xb<=ni?GrH*tmtyYNqZ*wX6$-a3rH~KC={l!fF>lPQccDRH zpEPI~C!T(}34=N`pvLbV;!2ZvYh<)Ji(dH7((;c-NBG%h&KgMmPadT-rD9X5X#Vt6 zmp?i4@=04-Su;DZ}=hhAJZwF~{xjZ5x!o;sxPo6*X z#fnZ#UvLC6oy39C!=UyI=n0ROgC0KXoBoQivy0``PZVuwC&FK-RqOJ}Xp%UDg1YVfi&CxG(?@Fk0JDB(DRuX1&TuSg+#R-_sX{ zW(q?6`GNEz%(m;Z-<^jy?5<}fXM@iXRFdI#rXLvHF0xL<0#CqN)xf9bbwPR7oDD7) ziMoZK!q{9Ya`WPzx558+={L$1KI&EP3%qixLjf0j{y&D?CKPXh|9~8>lFH#c-sG06@h2r@jf2x>09Tq3ZP-ZtEm=YMU=OCxW z5wCOK*h>(E^qbf=5i6?D^=n8J)-~gM77ZKDlLX;KrC?k|3GQ+PCVVIxwxFFo06_6h z?Aqh89eh9=0wLe(Zx!MEX~B}yGDvVQVpJ6<8USA8Nx1^xnt&BLn3E%XkrCI3EfNp_ z_Mx}G_?&%c4liW3MwdpT^&$d1u#>Hf+Tt_Uhbju*Un3D8N=n<+QG*jTwF?h@KmR@& z3=Ij;X=df#SW>!RzyA`U*WYAsS7v7V>m<)9%)?SXN1wBf&Q8#T)!y~$7uVdxfs4tswoyqYm^O}7 znfjdErTtFy{X_hXyQtdPluW{wOc;DTQw1ND5Kqf39+#PhIh*BS-=fdRqKK)mhov<@ zP2Lr))Py7_r3&!y4B)xIjyh9ORfbtAjdAOLP0YT_ulxzO(&s#2p5GAe%(u6{z1lMy zZ@7j>=zOTb4%-w^d>wGV)mERw6kwK<jIK~oxk^#$yl?ByWDvIDQy4*4LH4Nrmce=&BC!I`kznt)^5 zwrwXJ+qOEkjgDDW#>wr!`wj&0A|-`;0t&aRoM`ICB+%I{R}XRUQ#*_BBs+%pDR zk|QkW!%*4|ctV}7Ns+Dn`ScXQ)gn6sqjb!qy{5}~@XO)VIFg}Stuy$>n=jowQ(N0V zgI#2ayr`G?9YZly^r!7+awL2zy1%bOT+M-YP^!HU1`N7eV%NVUxsVeKe*CTCPjFzl z5bu=An)#(ecKn<0>@Fb$mb@!wcL|#pJ}39e+_v z*5e?YFVUHgQDe-Wo050wO3nEqfb26dePa(cS(g;WS$Re>KxCzjE2_1cJC3P(t!YHv z8%p$x?^6ImXS$sb=MmxJ4{6Dy#otZRQ;?@#@&gx1PC0*27%1aoFVqCAV^DW-&rgVS zx>rp>{U1z|d#PAkmAB_&p6j#ya8C3F=7AGkHy&tOVD%|*k@)e0 zgjEoTHKv!E=VTLRti$_NPK<^Qxt_}i%_U!@u1s%pRkQhx=rpD~Ga7Lqob}eGUKOy~ zi5O89mkPXLB*L95Qpp~HaG(@D7l^reL1W3SXOur1M-zTzQ`kI|-wP(uw@j)13dC-< zX|qLs#h};EyS60KcN)mZhX)Ku<-jkrcMTqOk)m7O`_L4vEIgxFAhJASvZb@_FsiIP z8~ab)HlVoW70G!?Iw0O3r#w9N1a?xCrP0>fsT(Rd_w2w`r-yxTJFZQ_EP2q+&s(&d z@Yc*76rP*vM1QVb@VZ8vZ6{UA+aY`IPIDU{y`1+)JZ_&a2VF(flMcAyW2_vQ#cN0& zzjgQS8ko1^yO;mGhp+$-0qw)rzFv5>C3S>wMF2w%CFxGFMGY6q0TseKJNG4WCZ+!S z^Et-t z@C}zFuL1pbkI$O+fHk*1I<#B5(24z{iVx-=F*NI=sWTlHw?CWMF0inbV^!qt7NXwVhUa0u$J^iu06jJ69rv*~*be z7C_|}Kwks~wI#nL2$M+*^}Rj;z~N@cPwq_+_YFaXMF4+D~pb zV%w9Tt`H2xmt-p$Jbr(Bc4B+Kyc(v@#&~Ke&pLCf?z|f0-%aqpqFc$$i=Qd`d>4*J zZng$v_gQZg^VX8zW#-Kn=_8r{E`5f!%U!GGMiye5ZaXzfs}iC`JmCIWn!Z(Y)WZ!8 z(1ky-;ivQSXMFi2V5cU5djM}({Y%w3)52oyYktFzQI{8gyPxAHXu=Y5{l~;r76mPy+hUk$F?OX9Xlg6p2smB0 znBYD4W85^w&3^EoGL1adRi0Jn1|~y)Z$#BIpuBmD@`!X%^AI5K_48^H^y>(r+IO{+*C~|xnka9Uh2$22G_c+s$jYef!0?@ zVDAI$eR^5umj7+`|3^-yfCHe(*Z?%yVV@4_<@~>)$pZz%TmM3n<3;}`n(V29=&uAo zlL=QZ?)@bGJDO|>)zO0uIO=SXAbCHqjwh zsp{SgW-O*mZ;ZTeO%8k;2I&aSW1m7NzsbP}&4V8SvYF2h4(L(IAfW>p|E90;0-7BX zU|F9OaOc}oAhk-#5bT8fch&*mGPNMjEQJ@~zvceo=rpAuL#^|iiX{hx6!|L#1gDkX zxe_>3D%f6!3CnJ}*8sAanklp6ui<}Wvr@+!`Ilg6bbxHe#0!wk@Mb&YDdhmN8KvSO zK27EEZCR)vQXVfddmwktJ4Ae2o!UAml5nOU`)huI7GZjsf9T{VxaNGAxG&OHN(ug2 zT9|!}qr=cU_Ray%v>;Hx4X#m7Z9FW@AK2T@wFA?2;P`$UFzXcPEaM#Fh9l6=&0B%=S4FQ6gm|C$ zA=WzrK$9!S)~)*hjhaX{W#F zhE!sPIOfokwTwP3{M+t-nvKGLnQ~jUn~0$#v@qV%3Ltr5~j-SIcEfdYJ5oQ{f!|HW~6AqNknVHrv(HQ2aM|1R3g> z@;uambhNs>@sMfsu17Uc7}zzE1@!kbkkshX6MD!Q3DQ#NUhDq-}h)?h&}d z+1P+i?zL*+6sK}2sSn`+{y^F}>ZMN&>o^4`ndBcfIk_&PhhIhUt?6xeeMn6=0|HGs z$F59@*bYJIuWPnVZ8>P@HlKFMInKL~;cUS_rV3z_mnlz;D)dpX{Xi^Iwqfas3K1TR zLCWR@0&9QqcnD|D`B8x{3JMBqa!2xlmnCrFIJDM#5z#Fgkw>9GOS{^%i8j8M>%RPp zO~wMS$uoG4YVP%%%Wo@r;pB}01`8pE{!W&5Hy@gIO|FAP8x-!I)^X_QU{ea#P_Z9&uP4!#^EPhkqBb+ZWDmp4g;Xc6Fl+b zEcYFd>w*I>u2{PA&mOAG(NlNo=7GqG{=+0tH32IpKxyQ&_oXD4e})M`4#cmRZP0}o zft-GFhRZUE`cpGTU@6M8(Ax{pcf0K=azneOO*M3il7wf2O^Yc`$LYt;M065H*B|+i z3;Dgv#AlNU=5dG~kwCwpkWoeeJ9<7?zP?D&2{|QF>7E4xanISSELR!Apq$V*9*~%D zsR{|F1?XfW03DJ!pPB& zK+QvO888)z{k3mAqT;C+U3LKb;3JNdWe8!wH2ernPdsA|)dA}xGnZ`0*sh>nMw!0f z$UN|KRs0hw!b@ik?Asn~Zt&vKPJa+8cX=qCcVG83zI9+k)aiCQi%nznoRnw;4tOMt z5}#PHGk#PP+qoGzKVbo*m7*DI0T|Zc}b-mHuV)Yde=zD-D<&p^A1P+h$2t zAFZ%?Vg|kA)Q0(s*?>{4NI3=F9TO4xaNcW7T5e)$`^T7Nb@HWL&1-47_XL0eaMlir z2xzGRfAKe`-bmR!`RUE6p1A93AL{uXIS^jWs&e0FInnBCbb8Tr;T(~Lf%`CS9Kx)hi9(VY;;1^?h2i-vHq%gs1_}6w&)Z&y30m_r;_x`~{ z-)o*Z$LT;)(vR$xM3E`e*nMPz{-<C}ZuObsBM$itq9_HqIEHKq44{#Jyo6w5 zC(oTH#P*G3{3nah6T3EQ=sps643`Xs`qGxkVTHFYiOaW;6akcV_(^*O3L+JNr(9XQ z7+)q^UG|F zJ)dt1a~d<#geyVc5)8dl&%F6+$LRBcB-h?lm?b{5zjIzHA0C5jO2hFQyC3ux+%?DZ zkf!6;LlsDN#wiC60bpf1c_#mp-wZ|neD)G>7H<{9N=D)}t-Wj?;s#*K%ws;-eNop~ zedpmr;BK18kI&C~4G_5=?>UW6na+*iah_hSdndZL#XTO78r?k%ugC!i+y0j^ej!rXrVn-SWmC?IF_hH|Jzh0&#j%V__aQ&^P%C=UDruek= zmr!qS8jwu`c0rjOqZbG7&NR?M+z*pnZn_@jR@twb#2K5-TH33(gKh8S8vS#9LfkIY zTde_mm6_J9I$ZZ_b{>_BW$)*pXb zg}qEn_on3pF!F*LxIuKE!}%oU1WW{yHF7gmgfA~~+)M??`Mc5fzx0HE3^=#G8rEX-IG810t#WJ{z{wn2mbFPkL`1oC31kMbtwh}MErmL*W1$8 z)XUz^RLbPvQxDs}yOp1v?~(d#41KN%Cg)`C)}T5+93}}MFsaryy4s!K=M9^XQRbp$ zJKf*@np!9*hPdx;H#y~l%M&g$3;g{2TT{`MzjZ!RKPI$r<jYn25S9TfA{BP^ZnqO1Sf8VqOA}#W73xnJ9fud)PmiOcov5 zDwkxIu3Wn$j?51NPkFXsa`!YkjLOrl10dK)vfG*31AmW_JBmP#7p~svm0?}Qblth9 z=s|&Ep&*Fx1bx7$emXrre(ZkoTIg_`U#TGovV61MfJf?ec_n{ju-2x9io!f@O?dJBqZXugtG?sHYwWS){)s6cAG6-WS^C?XMx8kx7P>{Y ztDB4(t7ZEAx^;Gob!L>4#q8!~HJeCTjUhNEvZ< z>sCC_7FIeGD+6Np3nYik#Yt2v0tzt{hQKi=t=H*c7GueRzDfJ%)1Z5)`qk#?Wky+d zDm^M!aJ(%u&c4r{y1xZwa^!gk|2EnQ8ywo`bdWG+N&)#Hh7c=veEc1;*{(r~HoEKv zm*y5HL`}|BE$r&xNLzf0$}A}_-ig$1DG3;+V6r>a&(MMsg5y4}?=r6d-`9!*;zY-E zx!e`}z)AF{Gr@Fx=}v%srI|>JqIlzgfHy1u3PR!>)}C|k(RK))*>%?r>jH{Z$J}{K z!5X2at?Fqm#5Z@kx1tiY$H&j$<;_dC8JyIm6W?BmQ$LSoi!pB-zIP9=b*y*gg@beK za6$}u;JFfw4FkAkdE9R!Bcu5nSP0hIak?B*i$A*=%|>vDXGZh~JXunG91>9<^f zJu3s2JgdJ@ZWHv;;?u8LvjUm$8(H=tUCDVji9@Mhq9q2Tg#dv-sT~>)cY_}S!L*7Y zM{E&!qW01|+8$(dT#^7WRX4z8?=1`HG<-NN%vAUzBUauYm5Orp(TuFbC86Zr=(b;( zfb~W&LGw=(0yM-&UNI|wnZ`zGp!i2}a^hD16$4`oEy-mm2pn(E&(@`z?qni5>71Ii zKXfqWY`qTj8*RojYKdDKh%g4hc1ZDz*9l7e#x=^RV2|h z;=6q&%d8eARL!y1gnVRzNx21(6-!A{DbtBM+^%6YF4`{&dA^+h!Q zX~+2{EQRXv3_qd7?!E4~Q@3%?Fy-FJBLBqX%ddq??WnfKe*7d{xK!h?usP3$d2826 z(a^^ohzjb%r0dIkrU&j59c#+v$MGhnxKkHYIcY~uq^06)kI&}B5+Dso{<~hwoi;ok z%4L=4r44>--=f^XQ*!J*%y5jGu0;?{cv(zX(WNBc_XLfw@NkW$JjnnlBsbz}JPZb4 z6|z1sJzEBRNhg==5f+htx*RS6_H2iWKm6>p!@S=Sak(bRSQP}=eNlANKj!Qgm3DjM zCbV`E-{48_d!M~z@o0SN4UM5FwD~*O(7u%`XV2v`bZUIulIN=-xO5%LGC!Fe9+ z8g4JppkYRw1rnNu1WPPkZUv^PZT)#UINt*%v#2?v=j_Sqw=935_l+h$wZQOVzp=rH z^O*rApGaiUJUABK!zHOCD_Xtj`hjzm)LA&&dVjN;1=2M?B0}w>)upBqS$-h?6uQE? z*d{g-o(vqob=^H^VaPB{PEb>a96fhC+Wb5_Zce4zJEc(mqqSf{Qjxy8d#T1eSxseo zLXy_n^auYKC`})m8J;-X5YN*y*o(8x5FQ$Oe|_i8>|ws06j*^%H~Az+aFeu&>@SyC ze375@h=)h0{Q*ObT3C)d&@>RH7`&)NxY3C_JcC?`_Q)DC8La);2yT7ELQ-(OXhsE+ z`e1etZ^|Czcq}8(q?kwFt`#HkhXe%N4#V5?(Nta;V}Iik1<(qDA+bhc5(LGP&x*Uq zlHzcw?oC5U8-si=-4-Jn>UXc;2Y%D&%tS^mid?rf5)`ZQdQ+U{x8Wd86DF5Gp63yN zrzrGc=AGzJQ|S&MOJ~hz9qwL07O{d5O245a*Hl^ypA+%qN1!T%I(4*zUGiiS5LHRno+12~$}R{|VTO%5C5qoqJ& zu3+O)C74w{2{&C*;5Qd8LyXx0d2@3_(Ijbb@x*6m&sKso@1`jmAY#WU|5ZV~{>!dQ zS}=LNaVZ^e$ORX7TmQ}=_IhS<-s%1HxHT=C97W@eMT!`!LqyOw+3Wq0Z-vq~FZWSY z#VCUfV?;Zg!ICTAn9`4n-cq7eC##GBJt!BlGAic7T25Smzd+O@ zLj5=_fs9K^hD-q8nZAVKQ!RXYbH!G@3ioG^UewgmVw1#Dh)`5=1sln6C^Ez z=NMrv{TZJ@?WT6PbC!MgLLCR^C|H_Pu5NxEl|~tws|Kx!(D>u{Zxa&wDLVL8H`FM) za_s~!&(^%^aN~4xmTJ1xi9^62r=IeQ!hp)mO^EvNNb@hu$xl^jrxA;TT=sQ)-vp(0 z&j^WIYj_IJTSshuMK5}!t~UNcgOS+cbDM*a%NfLdG6k~7aiihQyO^30rX;%UtMPE@ zmQ9wj_4$K54b_KPh_B88n!R>&OSa|)pq>DB8K+!h5mNmN4D+RjtqQHDx}3UO6pcqg z8+%~?Cp!`zc*c_$ZEY*3qncH@!UT6(3nzgT9qbfJ@64Jg;cp(TRh{X1TGfh)CiJQ8 zU2pmN`|X5dYK;D0Pm?)!!rAsmw97-7m5673gi>|*BbX1rx2C|8!DJpkHFu8F(w{xk zDzxnb)E)mq#fXeuzgv~fr2!zZBXyzh(dMD9uL zvitaZ2TR_I5_y)X0}A*{*c8AV<@vhd`Q|>U3koQ^pNDt5kS#6&=V3TC?}2r{2r*Zz1-(mERZw3p5ww~NO!&68clMZ7 zPTW!5R%{8Lo>^6P8oz_xZ@v9; zBD1PDYFKN%__TB^JzOVMDvZB#XrC)DD>`Z9$11+=$&T^j#(i+&I6bskoLDO>Zd4i* z+On4aMKd`qNPK0M!rRh$dVi0r5-Ms~Be^febSQ|bvC25Wk z55w3aCn>ZDp+;Z~4+#mS%x}hN;+||GZ*HMSr@-?=u(b*3h7lg2R8unAu+jNs3q7Z# zZ=%aE<{C~zK^nX%Pv7v$dz>3O?^fgAMj?OV2LYR6(WqcL^QpWS!vQOQ^rigg^Zw#j z^`9X?#z>a`zdrB(J7dTj+5T6tgSYb@7s?mlf=j#9Eo?F7B3|~78>%5}9qVqaAPiq) ztG8e0(Q-fTb4 zpNN~1?+5`r@%!^zowOTa-wyF!S9pd(m-TCtlRolPht0(5PL`iZrm(1 zv8+%hE{Q4!phf>G%bZr7{@DY%2>zDm@g;HG7k{5)^SsQ|563l zCJT$J}=aUFP|lCp!u3~fHGdn|NTeBuaD~{vq33%yqxI9{6qn%WDpU5_JW@A zVTpZHGKX3%i+`VU5s)-oy*@G<(tqjh1zdrz25gXdmv)L2Lm|Q29_RF`OE8S;l_sep zp1BCFWAOz@Jh><%FB%L zdsnY;t1=MiCfK`<1ZT}3v+Uid*hV5RT0fs-yp)wo7E$tt+u;s8y3}-GyVd=IRr|TF zUbx1r)VRVai*y?v1{hxZQjYU9R}20vio{;ikP^V=_*ra^u*0-w%b7We*@ z)ct|4?-M|zJErZ;18U|M8Q0vrpddNJhKeff&+QQd7&m-&gx2YuIBmqHMs=f3Sp!*t z9`OMl$)Vv$KSX2X-$YtVR`VOkRA)<%^#Kj~%rGEF(w%5MP3t=VXN^It%tat)?^=9+ z`|s)2NPLMSggmr`YSx3kYH0;$fRw)S^=sj`qDGZ#j$u&6sk)DljvauRHU8JkLIs#v zuK+Vk?5~-X9N?xyP{KBMD*xQdt>h{nk$W#KHh7(2M;cho8yr%E1P40~NE+oe2pJ)R ze}d{x+mg|NP3S852do}sAOj{E=OHP(Cj zTgh5_mCQjMov4=k3fsEc)cXW0o~)TS!2;|PWEH=^?hHMQAgu@9bNFf)*qp;8)`c9u zFiY>dZ!p2oF*)*jDNXgB7cq$m8lZ%bFXk$=$lk-oFrtcR(FsrH~tQvev{O55G+t;l1rdZc99H5iG zHi^J$VQVE;DK@{HNN^~BE~cer7EuPnU~G0j|A6>Vx9KM?=;Lc5PK%5d!tEdh4;3EG z^PJdG8rlT9A1_h*xz(?4LpC%L*4ajWB3dRUdF?T}0P%@*ZYkYw!spfwTa8sW8#3*a zuP#XgvXY*|K#5GC){c?50w|@r9hhPe5W;k!^kH}1O z!T|*-0?s>|&jsdn@byQaU9@$AIDL|$?+KKopRZ>kW6M8VnIUKnkwR}7@ngYJiZ+9J4mT&QT zL~t&^Xndz2aNu+{EC{=PD}nY%Tq!SFQc}=WG)>)Af7tO9ScsuK;FmiExw}1WjYCFFER>G(6q6iE~LRT*RkG(j2<6dxP#@zuluGGFU8P z2l$W`YtFmNwu77|q*6f~CEfH-4lCXP-T0;Jekh;c1n1Z%SMv!a z<_Lr)o8S9+W+(BCk6Bio_S`JTdD&7CgOw7FJe5ctf-*c%zKfEK3o?lLVBpOgBZZ}A z$om=V{X)<^Vm47gZ7|r^ILYkxh_#{)L3=tzXf~~bwQVD3NI|&w=ZHwqe_)T25-;1? z7~CJ7@r`WEXw53!T23fr=9XDM6*&o@=U@`znf0HhGf;eM9-s zK%Jq*I>di%49hKhf(vp2p5A^gvyVcnFdyY83%s(uOUu%=!!|gTRrMrx)DFo1%S@OB zzGf^3P!Qkdu5w?qE!mE)$Q>8nRW+Z)FSpQUXx=(Ce>*O)Z$4j2FJqF~Z#UZ z*r08;#m9#_5>1Lt)kY>5TuyHB+Bd(p;Bpg61U5N-Pi%!#FOx1zQulDBlPNG=e`vcg zIjg*EK({~9sg+pYCYjG26LX|tqfGm1#FLBgJ|I|+5ponQzSmnFdNX@dMXHndn zkc%$)_NdFVcEo=)!yiZZ9)bm@)URwy_LN88I{LfoJ!wJJtF+`+tODO6^nTqX#*9xw zWt5(uKjYHwxKp^@=l4T3NPDLx-fe1E7G4yLH8*U0cCl{Zfpwfm6?YYK-ts8^wm$xi z#Uov%dx8LN!{hZMlObI?22T$@x^KP2FY?b7mCf4HUj_<}J-K^+{6jgsL--$Mqx9wu zg?R)oc0_()fB0@lnGmpd+eVJRq4Svs&_D+I7vSI+#U(C~ppQ5Y>-}*96pvRdeu#@U z4;ZTj_6F7GD~hBm5Di~x^km$6Eq^>zy`5=2tu$WNns2##FZ*Uh9K?2vl+U&oQFv~4 zp->>NLyatiz(Q5zn?|9k>Q;1LF?H zveUHE)iwsD1JOEcW{aHp_sWEF3<6j3NARo(qpXaL*42sciSH;%ao&Uc)VqsOeyHcR zFlO44dSfV=mfAOh6;(A(*PERfWhxTZLB9iK&g=Tp3UM9b`S|&p@(TG<6;rP&uw6m+ zj??(qPR+LZqtNRChZZ!_$&^fJ&a=EqbuF4EO6Q@#L34OWF40&@`>ZUv>B-*k;+o|%WhiB z0hmQ{ft0B%=7f0iOSXu_+T;bV&?;gCQsHKqMuxALIctuoRHf;R%Wxl9pLs_-4_(9{ zF}p#I&C?#AfH!A}`?jJd^!3qz~+MbejnO@AjSftsLOeM6&VA?(mW zrF_(vb;sMq?<(nBJp)ZAO;i$p75^4eUf}Q!I{|jdMI3!Z^tu;&sQL}fx)|~TYJCe> zgA)*hWXOhQ&5GAq6q^^8;E}9^gbB0S*Jg{13$8KitO}Rf%Z|MoKL|1heXo8h??279 zxqJHQpZLv_31qdO%Y>EpzBV-%wlyHYJuja9$X7dgU@MQQt>mggp84Kr0-mH1i!06s zR}!_!FqcJKUnjWdm?|3lLsHd}{dX(-7{~y5L9oE!lWtRIR5$VNWVrbrrZeX+irr?J z5+^q77zd9+rWsJa#Xf!$$HhJ&;8^A6%?KlDEA(^|e(u_y=MM`X2muLyAhqu{zDAcG zuucqMqZo^eFXrg%dQR|QLv^ii<8Qsc*bya^tQK>w?U{>i$w*Ec?AJxH(&jh_fTMTueGv_^v4bK*A33DRVSxr2~@<0Temz5O0SY8%{B>KCki z;q}nNzI0{|(W*&Wt&SZqloj@3%@VWai-hNlVDTv-UXg%~PXvOloo5$-k`A^&$*|$A zOYb(TTiUVR&ogto&agw7`z>QpDVLh`xWR+*hX6_m4}pk2W$##@ex(Bm!Mus2Nn15* z-`ah4i)y7Pv6m8T7f%NFj%040tvAOcxRK2PC-9u_+n1FP9TVX0SCZ^40Cn0XY)<`# zPZbpr^;93f0qh2FWTKV}RxOQ^X3}#=v_{98#ty|SlmwlU5iS$z*g4O%*R-z+^~?5N zRs?h9OHXk>U>{{Bwno=qGX4FW7E;x7$g@qm!Tc~$TX+|f6}FZ$CRHF$Sq4;)9;|I~ z@TZUmIwgoQHcV>nS{JC5=rNNAlAaloxrjI8;@Vgh65dxG~C|G0-iOU2Gt-iPX*-!tUCO9U}y z$d?Ty{#9LQ3JE-fCIT_drN%Y5#6M}JFC*j|M;}L}&V-`>qfG2jlv)syR{3W2u(~4b zBVhf+pCVNf%TK2Y7c<)#DbPQ31fd1$ZV@h`KVI^1t(fH6ajyT}F1JUb%Z@%{hd3fo z%0lP@J*$Yt0UtV$LUqf=s_nv=6IItXiPLP{{b$R6vK*;m}3Sm@| zj};T|O2oLVG<4~koKNRf8VP}6#}NRLI`A+C#%#iZ5L7~bf1NYjAhw*bbHt7bBlwnnQb0U3BZw}{h|fZr=0hn z9}9E!EeO z)0b>$#4nUijO_H?*z^@eIxB$%<% zdvP8Yb;4D*ULdS}keC?w!I3^ib$O&^f;@V4d}}gbf#{lKh#b)J(&Xb59P8?I`{%%L zvSP}3H%9ex**cuPpdRGuR!V9Jt~e*1z@TK0&%_uPa2n*2G)QqLI@m&{dh27BYq8nv zr_yQNb>ea1rBabw*+;21lkw{+0ius1-J1S7FdmdG5oUrEA;k<!OC#03jxC!x z&?_)OR?M6ul_f+AClRGzB(d}(+_nJjkMWt@t2LR1eDFZF{3MYv+;ELoMjzphWTh5= z@!IsVNA`&wQ;u_GnoM)7-6kgvA=C_A%8-Fjtl%%25ufkGoRy5Ga3>P1M|Emmg3zGGU66ivk<>PPvre040?>}7lpgDWx+&OSmfor_Dk%ASn9yGBYKc%~dT)!n&>ibYW0|p$~Ii+{&uAdFAtpx80 zSiE(7RD->kc9TSqnsrYjB(d+zefsOgk=r_ov`ps_x+5VnPaEocvWAbMB*7%zF-Ev3 zsOkI(T!S{eZCxp7e?K2XF1p&a5Gx9vr*uXh*(wkNT|`LYgah(Q4D@8KWVUgdoe05M zkHUN}Dq=2|r=wCAdrVem)$SWegZI#Utk_|w1=8ET_!WgZPcxr4V5{u3{C&-w2P{GS8h zF^h^5ZI8Jq#35{|Plux);#{k9W<)|eLZYh{ zM3c+3iAQ&+pN!@#2Gb_p*<(K3NiR+m&R^y%=Ij&m^^-*w+G?Lgai+_GH}G*G$7w-( z8}8l*4c=caHr^-1Z0CoFsEM2)<$!M*nj%3zemlww0`;4 zlHtDp0J}9@-+FF}pg+^!O1l(ERen*rVxL4zgRsiL#CP#jyK2IfOjLXLa1>ED_ZLnv&tYluXeBQ=o+c9t$JZYxcO6QBE{q0}4IK+yZ<$ zS~zTOvoRfEuK&iy--u_Cd}yG*2NsIKJUFt(9uN&Oz)Xq+DR0|2X}X<+u^keCl56J- z<@NDN8? zB+X^TF{GcZs4C*0-2=`an=m@XOOO-GF2H;K0!EaU3k*i_3Yh$3nzIH=q}^DWAh-^FfdqsAZ8AlE9ZU88j;iq z=v`P8SAl}on4u!MSOo=8xZcR&L&ER1+r(BG-Fh8>5yQWWrEcJLQKQIUqr@$ck${Q* z)GqyKsg%M z+ClYnNgqr_>8zLRY|Qgx3^%mV`I_sMv@Fx;4ApsvH{O|A&@I1Ytk!k$eheN7tU9msL)h+GXt*1A6Hp>_Q_6K^^!{Ma_l*V;oa;Y3IWbzeYV87J}5zNix>%(6vfn{C=N-HE<-P@2WB&8_yXsPX zmL6v&i54na!C;Rb5C@B4=Ki)vk8_WEbB`c-JOc_FSu;wMQqP)5q%T}QB@R(Lfr%=} z`VgZ^V;9M+eb(a^}>w9&yaV2+(PTre#cXt`LBXVAuQ;qh3gR10Z}>+`|H zN9iK(aMQt_CnVqJ9!^8P%P~1BP2qxy<8J0m_s7ar=EwI%Yfg_M!#b5Ih=ZwGBiH0b zj=!$DH3uT=ROqzZoxa(XaRtXdN7ChC^^NlI^KB=E&)kz={juO(k;8}oF#M^GybvhPTvIZ_a` z7m3xuhpu1iecJ)5{#E5P7A`%}Oii6M^ObUlP4{9JogZLGrZ${Wts7b=`wd0dLw3H2 zu-??lfT5+&$0P2bqTV6hJ_<`Tx^GnO2>Trs&yv5olx*XqJ(hLr36s|D!K!#}Atr2i z7j!qHxZ;_96d7veFg30r+vM`b-<%CmW~bp~-A|TWg7(=&JzJOsPkL$T!)-Z{nm|;~ zd5OvUBRgo?weB^xFk*PQ`M8v{4<;9 zlBR!~{8LVZ6^_=xKd;oN3suRod40#9G_q|XK;b zzc{_0C~;09IuJG{R1VG(eUf8QK}1f>v6wE~zUTH7ZajCRe3U+7{dO;jvwdTczmBSO zy#$6AjILE`0k@%nt}n(v3JZbm^3-JB&2x*dOYg%GKwkF__kU&r&UocKkf%0n=kox( z5ZaP$!K7!)JnQrCPCc@^WS&qGa_D-Vn^x2MtT#xQt%lLM2A%m)Xykm@J>>8nq4WNp zF6~=_>??iPnHgLSI26W)=ytG%;1(R-&Wqx@9l`66N~7_*60Gj6qjZu$*yJ&ALotVI zq(mV`yFt9@h{qZ@j~IkD^Uk@*Df;_abf$Fr*bNf|d{BR^vhDH`4P-Vqyr?^Tr(^b? zUj=tNW;m$-d?N$&U_awhGSXDImpEq4z`Vn{d2y=T?gy^=Hcz#NcuXw0*HLM9e=P(~ zx3$?DIgm$msDCA)lsCoRjl|Hv z*nChN-d;c9^$zXxZVTr3%2Vu7E3|)%a_uBU9#>r;+L~O0?+5+Env5py!ZmJ4{pXSicYa z$a}XVm-pK+2|i+g|DxXIelSIb`wU@Y>$j7fZUx4hp?1#d09N8l7CD05HI&%+dx~*m zSQ)@nS+W0ADKgIpxuK8H(uHT^&As~QRA)N_xsiG(eQBek%UE6MlW4wy^Ld^MDSW>m z^fJYGw0G5HGQ;;b0pvZvD&^JPQ4fYzD46(k;=*inAVkcGoQz z*}sR-ibC>%q&Rg%u?}Tt>Ka1h;q_w?H8WYN+sTTPj*X7hvF&th+vwQt zclidz3hAwyBk z&4yJ@pqoJmOJtHW;upVyp-N#snCDjg8o%YSFEd?|QDCMtJc!hzBng7G0Qey}&IWrF zt1JC2>^7`CvmR?&bNIXY9sL`+vQp!UdsU4oHGY=QjRJoab(c}u)?eO+YNYSz;|?Ms zk^pANTLUTK_7vK3b6v~uLTjFn+3d(YrXnLQxV`j5F*I?pjqv#s6~Jl0f`cJfWN={x zwS&wVWj{a|G!VDF>wT6!vdiljf}Z^7?|iQ;j6iVwxbcOFfe;?W&uv^u%19lt!=C3DIu@QY<(m}d)5ZcK-DOXu}o65qAqV)i~h+%wb6%=wd~D9XXe zu_0wFs6nYMJ|mCqOvua{4$SG|yT9n4{c|XVEOLa`8?Beid#GF4U8_xNN8E) z_-JGlu!Qn$>)vbJXm~)#=L>XNXEk>F6DwsEDVB=pk{hAZlnA0mq{LzV=% z*?QplO;-$Y(cfnsScg)Mb^Ou)>NEc1zc~q+r_^XG-q12S|1^Rn$?kK?-&EaA*gi{? z7SR&`|79$+Mj15eomv)3aZHR6f#-dGV_YVObU03eTVSS!V zo|gdFnv77Kc@Addu5Xg$7>+a!4}meqXs#+mplNv&E=)WgyJ&De$N|7L>}}gEIjy`! zsM>jLb7ubW{J!p!jxih1z2$K~8;Y$EF2tYeCg8X@ZI=OZLX4v0_!AMr-S^Z%`*~J; z7U6gUwJh9xtO5bt%(BW+;n4zCi!OG&HVpx^NaF#vzy|#tmT+cJuSnyY=wb>dt6S|8 zH`c!(^vg7lK%2=W10D_PxXK*lVZvm%lJRME+rXTTrWDTaC^n~+Gu||s_^-yrK;Hl% zk$3~hxk#sXZ_NPI_*wv?CLLjwf8Sn;7nW;;fUPcpD~pdtv1l52j`djsSGx?AUkMbB z^iKVCIXk5t`ZW@qO1{R79&b|%XDRHfT4%D3N_l5+C804FjN=j;c-#7)d#;?@8FQ#y zAH~E5U42)6V?`QYY39EoC6H5C8bTHX^S?z(Y|fE;?v8hdyoTQ@FcaW~(FP`z87YM- zhf0K+rb-~KTaduD&14d4O*zT4@Zyj9sC>kEmyz;=WZn5-ht&Cp=9I1x1yD2_LJZRv z`b%K&sgMDCE%EvTgDhBu&LlGS0p-%(1EtKx8zH zz6;7*P+D!a7^3)zd_4YVXNf{id!F!0^26A)m!Sp@Rz`hre zz{HLsn4hKIvEbF$s=jcDMQs8D&|*<`$_VmL>hOA%PSZn2iZsPZn<3c#PU|Pj*WERc z>v2@Xq$U(?8ROaK;Fngo)a)zYMh`IKLKsjoJYkelU{CEQ44Eb{_H=Ipj6J~}@p;s9 zAyr@^AIGp;?QKR~6B6}uZ)e}&ce>nYRIFLb4>194I49}^uE7S!N+$9OR!SKM#wwVH zWJMlfye>axs6&n1;9J~ROw^BRhMS9gu~uBT?a&0;@t6BU6PjS2`c|@>v8f70=q6}I z_gT$*Xv^r2SObr{Vl0XEP!`jp(HpeNng=qD-RLa=xj2XSt9CTkSRChy(9apwY1-kE zm1?|0&9X%ol^%*5Bem0~4e2gh$(n5$({S#WUM;f=Rls2F!g^Hlh5o(mKVY;}ah3bU zn{ZE3nbDVL9xxrOZ&5vSKtZQP0(C!xze=QT6LT=tWlrOtl(}WT@Mn#V#G8h&b}Be< zvwTyp+||%-yFwQaukP5~CxZ$h=1>9k&A((6yW~B!ccM$w3pb(m?;?@x_v*A2&vyrx z-&8Pva-5wlIWYaKtDfwroy+p(GBg#XGO)*#Sh}1VSAK4bo4rd?dy_J`2JQ7_g~b_J zIaHuyz*uXi@zHcV9E5ArlNz!${GPEKuDm!(xUC|1-qJmqR zh?feu+3iv~dH05E_Ii3~L-~k8-*6R`A|%FisLC&|JG@qe1a9?*jRlIw=XLW_QS)GH zi296g-055`+<{sfIq`kxD-PsFo*4*dz-wpYwuZ*!86VmZwMB4XBchP@f%e|gpp!2^ z=})FmgVyx!hS9&j#z9);xbb>D0YD{sz2px1PW`L3Dbc-Et9zN23jo#ZIcOYvvwt#~ z`Bs;&-X8e6jK03vTHahY#6MBxU8JTf8Rk!?o@<#}|D zdWX`i-RT(RaTNSSnw{{ic`6oMp&fAuMFj;fv9Ry^T(}NwwQr#T5xAuX%MOA2Ba4E- z#L4*@FVep6C7q?M0pY|pq3)V)gV#~joNLZDu!XI;*;f{d#q`#z=#s*Ej>sb-YUrzB z?9e=UY=Sa5U7nIDTP}?=vsjnVag98|A@-w!$)mi*g;$M#|G;|mpE!?sJ?%+wAPM+u z!e#P;JS|dLtmNb+EeoF#joEqO`ksaQJ{O?Es3@FSajoG!h9H+o*V&+DzsqjedoB9D z0prBFb$=2qIdzLm+oFkaWbFF4_3vanmg@q;CtAmy-0?5``VWPM@V1flE_`v0g1(F> zXxM`3uX_+^ny;|o|DM)|H!q4{kU&6Ab^lkW!Nu6Y)ydceXsi66!dPICXP@KgP^(g zXUFGSTH{f-d1XGZeQq{2U`v?uXI8EUytKLa>uXa9b!AO7*7e~5+&urq3udz(^hR`{ zI|X?hO>Q3DxSv4!Nm;}B7M+hF&O+2*g?jxJss?HK3WLf3T}IEb52&4F7aRv1xu^JL zrD53z;CX2&sP@3qTJVky#x4yEqkw+UwrO*86=j zYjFh+4|h!tDbk0|0$wDE24(M5RYcaJ3xN#2&N5M%7_cn%mvo9>0sacS8L%V+P3OJX zFfGvR<;=djXh}9_pXMpjln;z!IVWM}iHs*r@d(alvngIiox%z?cEeuJmVFFDhJ5kN z-M#wP3VFEh>x<}XF=>5xuE(=ud9AyW{N0}-`41KnH4!=BS7!LN>}h4K{xZ3?#;)Mk zT*1r4Y6sEAjUYwdWcE$H?R=2%UOsenz`KMbIyIsYi@{sCr92HA_7r~T*tdV{Vu9?J ziYhYOnuxM z7Fd#4E&UQeCQ<9f{G1hXd~jdv6!W=;V*Aswb{gRrW)tytv>QS4bXCp^nSlV+RZWYy zEmA%e{I!;qW_qba91qGTd9&GZ5+c!Z0hb}*TO9Pynp(WShBm0J`2z1nAt-emTkF!~Rp5vL>FFT( z3)l!YDp-PS^(&+;Qx{|rqn(LIuZylH);6p!luCRG1zuTVC?rCt>^zt8TUlm7)H={`Rv{fL6PC!7;#csgPnCbp8l?u z>lW-72~Dv6q;{@V10eqVaM!A95h|CILSb{WYK7+mbYz*Gp@hm0m~Y%!qW~7g)3*wS zEepQ4T#~{xYaeXweW!eCLI6Syw3@R|)^g}qrhCa;BKJ!Ua*1zamLFq9Ne@^ON~Co>-F)Dg-Wx!P|j_D}dR0TL}W< z?Dn&Y_T>fvPc^By_1qwK{4cP!Y=FrG;}4(J0GwkQN4)UNKSJEIsb*$1?n@tSe36r~ zeEEuQ(S_dAq{SS>{BmxU2DyDdxoWjOvXz5^;H12bU}_equfT{YOpN*(e-C^SGeLJA z;h>luuhvD`wV@fGh*gYQ-m$PT`#~x)e5%#gyVgF0_o9l*eF~P`_oPg?^WSvb_y7}nNm!(2rksB;HzI&+|pnz0V zW#O(f*hNUF_yvq+>EbH{v44Z`i1428`x)wsipq(TZD1!#2esHJlrggi2O4(ZuE>O0 z5}NCx8S%8SYmW~sj(rjeKAxo9$R|dkiU_e(nVUS&9#CY@e8&ig_LWUt0#U!2xma`K zXkq|v&Q<7d`HLn`rx9UP`)7mgxy1zDSw_>74(_EvCD6+)f3INzn-ptkbJT=++icqM zz@F8=gX#IR5e-5}@Bs+K2#G62(&7o}cW~Dsl(FK7|EPwuexZctAs?b$;F#`Dl=JJj z(FjXHCE%wQvIGP6%X6VK0f-O`Mucu~?Zs+^WQsKGq@=hgBThEn5!g5d2Y=Js( zs?oV*lm;ou8CD!tf39(Gfh<=+q74=D8h3$)J93iX-Btu2#MvU3%oRCo15W}n@(@r2 zPoqr)mGC1C6vuc2OUWc84iwf&a9{5^(uny$P!+R)1>QDz*8>VP-jk6{2cw|Aa=Dhl zG&U*@ce-1#9@e#He4j9RSvVk+hNUWzV!RW0LjV{{v~m4{vo+0nq?M?;>CB)hKVR>$ zL*dzP_IC)~9_8W%F65Za!(zr+0Q7$+FiqlT)xzKJq}BToigC{PYu#ONQH3$Yg!#}B z$WDgvP}IU$aKB{~tv*zc8XZ*>9{m|FG_PWt4Kb`@%Qr>d!04wub)RU~kN0eYOLotW zEpICKkf{LNGSS0X;1H5QAVQEt?FR*Gh)`y1qQK8nm|)rcs}YC~)-p;Tt=k#Ws4>;%j28WoZpDyr0U_w$Cl~T*iq`(y$F` zG#$hbtL~=oqMEgdWyglAxUhexQc7 zKd41HvfAe$x zOgr0qWNfQx5HcA!M@s-mLIO;hqXb#ri!9YfiJy#SLLxQEdpM+D&{Zd>yQ;GF=k*9e zEy?mPCpPr4vpZQ;V?;8MQIJ_nVJwbj0_66w@9+jHZM>nhd{W;zjuetL6g+JYY;A>V zjsz>fWZ@u5vl#SfA~jojKV^bpoLV($SC?)21Y{s_^o-BOWyu%_8@soRXaGxP^eqdo zPAKFP1Tb^kg@=Dpn2c}JY&Gha)uz)m?lxO|K5=aF5|nR7ggu<`mIdIctq8dUAjz<)Ai+tOTE!Bm073n7{;A{-V#DSvhmVWzug&!k=S`AFnjk(tHrj0 zcmVY$-wqO^-i7iGRVv4Ri@qvKlL@qoLz3+20q-A4r`6xii6owI1keQR=SbNvjz#oQ zg)XR#q#UJvfmOGpz}JOGtjouZ8t5GqW9aZp9{NRUIpXVt`Dc9+$$)HQ-YXUHbM`t6 zm5ZUhfn@BW2Qc`u)IlGhA_7U1|Xc3ZpeV97)@L!3^L zOpMVNJ1~OTUZCfzsY@H2Y6?@8x$Y=b8kY@`t|dP1S$wGZm33763o%Atca5Hmy@9=M zCwK6xTO=NyG1Zke-J^tYlgG={wa9pSOU$?kPyM&HYRBrgyNRp%Q=b+s8H^kr#Rw*A zEkDv75&LU?xFeG2oQ{|KwcVvEd(%V)se|1v4b z0YgO2eswk1z3&h?Bfr%){>eur=0#g_X^ZO#3jm~P*YzXGfxjsu#~o`N}b7o6sk z-<0-l6H{EaMK(GT^N_&rqirt(&p`qv1DExk6v>;W(-mLps_cQAXgI=f*z(8kXn_*P zC%0}-U}LA?vsG1rYy~fk8;{29!!Th2#Z4eT+4*B^)e38a!OW-+KN+2?gocyZK~m$7 zkWhkNoEtKZS`$gTEHi*5$Kw~p9*+Bj3F!-GWmM2>q14Dbjya=iw*qr+n*X`yKxZ!c zIhZv3BxD%WfSonDA5pH^2=7VkE{at zBFSX-zez{bT&yiE&0YR;^3nJG|J9~jP%DsQtIiGQAi6=6V+5w z45zcA3vFlvZzKe0$fgzuc1Y9CPg@F`cu{l=+_SDdN<=TK{x&n|RkmAs zthYl|t;C?+NtYqu>s^v;Qwx!mN&Z}@{PjWd7DRCI2O`_*CMW>d&b7d<s*##)sGX4S66F5)e z%;ERS9RngP+Gs0^@QX!99rZDQv{d=prB(G0jZ|vglH{K*@u6XGlfb2r-+z^Z;snswXPRC*VGAiSP>p33Q9<5d&eL%$5Oh`l)XzaAaGKPc@G0 zVn#_J=om$gUdt&$p?i}oUY1xYHI!jf`a9?UBONKX<0vqMp)g3*kXH1W@%d7I0Y4nohOYPQ z*wdtVL&DlrflHOp{2Pl)l=Y8vBo!zff%_lnh(P1BTAbh0=re*+tZhm-W~AQji2Tan zT`lo2#e608hc2T3h=43Cdsn95C*H%Pc(uz?sI*gPEfmq>${9bRJ5%CvHze8HV)=7O z*=9cYg3H5u@YNQICmb6MqL+^HSrue!2H95(JHzlgNkO#0rlivjE(-zKhD*;2@E`sX z-X*4uo39N#z=yQJutxo|k~URQ;S;QM)27w&ywYdu6{PjW{i|i$Y-P6X>-M;G`&}`?e`CMSTFK* zUP&gm^kbwVedLv`wSsPyNubNo{ILG0D?qPlR93RH%}~Kh`(VfOYG>%7m;93a1RIXbi}rH zv!C=1J}-pWsQ&2)bJ7M0)YGur#nB#5Ly^T>q?YC)%R=Y?<;JdPN(F1c-_TZa{UE;|m% zB+P(KutlJF9*_DjAzrDA0Xv7Q;1s*E7g`DsC#6#Oi*$U?(?7|`bGXeN_C=I|*iO%9 z8Kr)KeTL%3*76$bt;9!&(9*|oVZ~?d&yd?mHw}Rn;dYxX#tJ=t6RPG6~R!EGN0v)39BGGSwlJl~2cXIwHG zn_Kar^O0x9>9kk`#bnUbXI~KINRNY~%Rg^HMmP|JzNVz?Fh8;6x9W|(NAH57G3TMd zOiP*^&?R8!g~rnM3Z}S@Qcymg76UBuRDq%8(rT97kTKF_oimmjPJ*RzGD9?40lx$^ z1X93)tmr4OVjP^bT5f{PTOC%lI5uHDovKofTwft@v3m*?89X%W-7SmVpnFY1q2GQk z&~>5@bPxv7^AVmwl{(2rjiyAZ!S{~m5GGT#T|G`gFJ7~Q?>yFBPxFCe$_&6CCbFjx zul9Fj{6GL1PkYZ#a91Y2B6=O{w-H3sYs~NEKZ%P~7CB-s=XN<_IamHu69M-mb1iQP zzVRLTr;rR--7Ni_wS~k!H7$NW57NYmC8;KYqQYoz9B@ zB+4%@7`rzsf!|2;d-2u2Xl$(@J zJw=Z&^G`fRFOvK)7p~V55IkmxW{ZS;#|?2MJ^;!>TCtS^<9t?2qZ%fSLOedyELl(P zYole?nm#J31<@hfS56~#EEv55Ls{x`P%!-2I6ouj!IZr-WW(U%;Id`;npj{GScBxR zLv#V-gTE@59q3J~O!1a-QAS4~p4Dl5vWlTZt`+Nz5gB^0AXKqUvhIybL!(7DGAybK z$vR}wMNpjeH_{p8!tK5#XxDJEP0#G)5Xt}XDf5HkSnsqW^?{c+Z)5DPrskorhVmHn zkX*$_okh?Z2a`eeM^oftgO-{JaX{bGu*XZ$w0F&^-a3w~rp~&Fs-|Z1H#(rJ%Fgd9 z1qwvYoiGkxI0#W`Hi;5dDvk}U=}TZqb79WzqsW0<`6ZEj_#$&T7+nj(c(VFM+*s)< zLA)vy9fkz>FftZSu@g#SH)n@TLJv`-v$E1K&K8lxf!0Vrvv zQ<3Hqv=E7=G;r6OyV1O*p(#xw(vCk7R8Upo<|9=+-`)cDux8O}w{%)>(C z(+STvAR&e#AuoH!Te&I9z1>b3Vf+S7xOF%E!AIJy7SMC!F=)}CX{Ot(izBtqRKWoD z6dj>0YGeH+)<=hsF&39#pJ)PrEzyJM#WED_-6_)a>l?ECg%8(3(J>lKms_V>&z|O# zNdV$ni@U?LO(5hP;*;MsWCX23EGlX7jhv(^wDxnDGkoVeS=vXot7=OT_~ zfLptL-&;+WzNXeZ9+f_6?S}?wGIHY9 zYDsP`&YZ&)6nw4+-?XL4&rw^X5Ieh7(u?WgX~sKN0$=la^iS?5`?<5G7idbN;mV(4 zcA>LY6OBb%ptUl5L#jl_x4#YJf7+LBI7=N>bMB_8dXalXVEQ!&>`3JZ|CBUA5kdJS zxd|A~pCPN~TK;qGnu#aPa(XXC&%;gvA*&tWUVWf`&_4*STFxnW#s2qdHdecaTlCcb#-};HZ|6d zWvVVSEyM;H)*Sjyv6A8RWo1()BZh5{1^biyBt8wSoR;1&&6s#I-D?Gnjb&B8L~odE zqXV;ZuRp%UQWfy*+s5u1a1rTC7W{$8m?hfT`;L`j=KW`A>~!b!friL!*^+-p`Dpvw zZYm)+wi?VNR@t$cI0YOw`QuS-iK3zuh&_Dra6<>41h#6WB;#Q z!vH3$Rl^G7w?aEA_m7t!6@xQMBdz`?pY~*bG-{`lJ)Qvv7vIn0)W2JhBF2DCC?7{b z4Ca39m3flzvAEb4&={sF21rGp4)0N`nCi89qtG;R(VO^wgnNHlcR((VBiQRMG z=0e{S`i>sQaPcRPB|zv3Sv;}*`JZe7lwA{yi!E8nN*Tt~S zF^&LE*)7D#EqzWePVU~qDNyY~>HPw`R?el+i_p7WJMtE_BwKlzC=*mCxAie*x_-LkzdrH;!uJqFYb5 z?|cN3tRizRjS6B!DSqdklO4Io=V0)nFyQS_^VY9QH+(#|Z%1wO=?5}~Kj`#1Mkkz0 zm_|}-_-fenZ0U2faOpi7(im>hWV5dxg2PxJ29;kg6|Y|dQxXNhlq42;e4BFPeO4pL zGYCgvJl53(RViP;R&W0cZ}LyA4T%G08=HVN)42cFY@@pM|JyJ91#COO{PKRKYnryp zo?P;f%5vcBzW|{O;|0SxXlnIzO-5+}ag38U=VtS5{r5@=B^pv7UD^)6Q2a^C@4vmU zuy6uPlS(vYF!*`d5T)}Z4y|vn#Cr*)qNe}lwmIv*z;P7Qx^9fKh7O%L(#71@Q^VN_ zr}8^iUeVp3Bip*sl%bextL1?u`^C{+5P__)eNw%$WIVodouW~ekF*l5RgdzkR-5%m z_8}MoU?QQ%)+XM2fOip&v`#dXcU{=h z9*=+^Ej|%BV6MqF5?pmGeYKM%MFN`{m3gTr7ZsBGZd&Qz<~P>ESe7^#)|v~~NB$Ap z)=Py(osK&_ki99O)Mcko^iqqiXx;ohUu`ZKRoZoHU3@`FPf18P&S1sC!(MbRVR6uK zv8drcm2V`!)`Y`R>veyMnTlkDv^}CRE1=Vqo3qa#{!{sewFQL`NZ?yk|4lGfNgf@= z9#7_{EK1=!;xB(|GAKC8!Zuj42p?4_$Z+S~8wXKVCa1y7OO~G(L@A&8A~(0;Ry*Ga zCgH72Wx{dMNez7m|E?GmhtP`@^dd@_-o1g~K&cdvnW=wfn!qhD=6CMH_8RH66>OSw zAIU9#G(J$RDh)undivhW@^^;g{UIrl>9+g~KO@5JR+#yovbK5velG4I z^vz?cLHQbgty|V9KmIW*wI}sQPKSDsBUFY#qZ8csb_6foIom?OLt6J~Bd0pnctJ7V z+YNrdt0Vav)~mq{w@T8wNA5t_9Le%Z}lszhj02Gk4#+s*_|K=H&tpiVSqrvlJ%0mPwp9h)>BejvaJonpQkBkr< zVY+We<>L0oAQp7vMlfgh@b~*0VqIZ`iHlTfpOSbmx{+k=l0;TC`-!vigcDeLL6^{Z ze|q3O9M6-?h+p?>QfdzNJ>r z-}!_FXk%Q-!VZ{MFO2E@oOhC;?p(6(;{cl`nM|0bHc=yC60-JYU|=GPT>79EmikqE zOuc@L@z`opyYbQ4y}8{*r6PK5R``fSoBy{1${p7TdC(0)Ohww_+~;vKu{c8&yS^SK^WEOC8?Af2+F;$`oaHV^Xta;v?P4e^91cab0JZ&V7(5 z%!C;sw1F~|SU)LOFMF6=_!NP$D&w|jdT1Bhix)B1fhhcKpwNYCodn&9lt7XHR_)oD zdEPg4CyLDS$?%>=kFh2kU4*WS&?Mr9cp}V7FH$Af&_*S%jsjuxX&8F375C3*2|1kU znUF?GEU5hTK?1yCs^BH%7HTSC28-7b(H_2t{dQL{h&zfNjEZmO8(kE1 z9ZGUGaES;tWkv?c2%sha=4kM1S%jWLu!S3=>0&Dwg>V$ED>ekKzto_r$L?aotgC<|LK7TPek5046Cu8L#r3A$* zAv{=y)T|$yP&g>QTKvRZDMk@f7hh9F6*)s~3?}%5{@lY*e zx+>(@EOx)gJ@d~0TxtYwB@uJJ1_iXNNNhn zv#)`6__Bk4BZ%}A4j#5)T9a#IAt)ZlK8mJ|dX;o`%kj{7lN$02gV2731pDh0{nqN8 zlG&)5R6=XA@LP@LH!ccPi_HVtrDfXHY(5sQWi)=*;ex7_`+`wo<2sTey#%OpwOgEij-24X1f~(n)CTND#JGM%GT&x& z+WJhPbg$)j)}mpR?As+^`FHZ|Ruk?dk(M=Pc=s&dl0HE(>=40()5$nUyR^E!o(#JX zt?&KhoEon2&1~4f@Ogl$CXtI_hvT`mX=JXva?tqE5n)fhJ|i7RD0KmK)5$41M&3p8 ztV5$|c2ZjS?qkYQ6*TcGX2+eJcwwDopz+q99rx6Dn<5`jp!Rn8GGvVx9=O<8W=g5F|@T5JxTaO zOGfXG-Q88K8voGEOrm;Lg)-q5>Sdn$hy~Cg5cx$s=|;SaNYsJ6gV6X>J@nA+_`N zRc+T>^fZJK%c34~fU%Z%uxRS*kzmxb?77VU#rSw0Pk*@=f6B4kX&(Cg*y7PP-dQec zY(B!EQozdA{Lre&byV2%(B|0jPUuSZol%_~g*_Cae|~GT~y@{NyTCL6~Ty65_q@Z!*JBu@<5bLI)d{>Guj2A8Qje_bfQbfiDqg2LMZb-MHb^r)cc z6pV*vJYVNn_{ATMG+&Va=cQ^SFlQeLIK=l0|F1**{|6=khj<>;uh(16Q*Kv=OwA1v z>$h!LW=9ZS;1nP0yuQ-;Kc!`*Y4};4=U)MIW5>Rz#D>5jJ{egzO{4SI(v_t-&C$;( zg{{}cW~D)H$AT;I>ZK|&@ukOjNq2ot0#yMo;4&p4c{dV@K9UUotYb+d;k%igU*UQ3 zm{>Nxwe$B`0$rj8g-3N4|!tb{jpx< zfpG!{bQi;nv`-7f4@%O$WdwSJ=}*e|1%wvmlD|*u05ZLKUH+afUa|BG!V%CVWaN=Q zbrmq2f2-ZGBi1045K6|1$+_2zhzZwpv7$@#u=JnPxI}Oj0C2FTGvDw|R;+m#eyOxc zi5QV)Am34RNkFeBYKSa3xb`Y7H{xo0UY@m^Qxn4E=lhghYT1t{amk+bU!NIE?_uap zJ?$jeHzyP*c@UuTkOOEUZ3Rt#m#7INZt$?8%P;Ij7)T-n;z5NP!}P|IXO)w_aikEI zkxD(Ec{H9ALxEWox4~6pLzqHge6YE^))h!2d*2ShYDq=EhXrCG`+*T*46Y7$g>cA4 z)(TVHRUcp(LjTj*9DK{6m6WvdFOURIl6^OWO_eW?7*0oU3;#O`Z(Kf0RY82>I_x@M zbd00Cb1T!}tkJeD5mSYFh3A+`&DZd{iKnGNE*wOxYaj=b6F4FI*f#f zY}9!JX%V?Of58|&I=hVRv&T8uC~%v7&joxeeuJ^nP*e|RKhD|KIfQR{5l1#|XgE;?pv@ zwMrBR1WBve1B=QKhaqJtqCy1Bo<*7qquWUiHY3Z<(v#VHNXOKLC~4&-$#V2;H(P@c zEO)2-rjNg!kxZ7{lDmiJIYY zuycV#Ft>L+Ra*=WI43D}`&SNgB({`-N{};0Id3>?Prl=WuO%`{X~(5>&GM3`31NaQW$?<>fUUC|jfVw-Lh+*|8V@=EIWz4Hv z)KKjO`_G|~blxj_%@xV4@toKnwp!7QPT^m<$myZnGGpbheDJmbCwO?Ah!~ZVejOsJ z+YIsxon9EeiV(i6NSv?`m?QV*u9^ozAdB>!m_6y2$-!sF#;t#!@m7`DukDTHpVKDS z3oK*mJ;@Er*_B3@@$BCZYoJ(i5I|IDwKr?jr|n?eRF9E$YIAg9ns`q=a6S8k5+L@i zgGGA^hk$=%O|ER5VNS^qO=uFsE3zSj7wD!!<+#HEA(E<|8o$&Ak(Z7Jb2?Yv@z4Du z4E3?REC{xB=dRLn>A`*v>?cfAq${R|(X@PjkhF~u5Jjd^>9_xNqE*`UIWymO`3efl z?}H;II`DX+|0d1Xf!?53qgC|;8bNd0p$aZwtHa>RVXjdwx(t>;tw1rLz zMLeoqyS;iKjkLu`Rp?AAWA0NS?IV)ToSF@!k!EU6T)9cu6wt7~mrjB-3-8h)zY=pF z^M{gQyb2)v)~_$n9@%>`HeMP!`D3OB4{_s_!=zC8e$yi*Ef=1UD*#Y`&_eC|M-4-c z(Z3RutDp%(sNRXR7znd9y^z@$1D%lHQp(9vZ@Vc!7RAsNJ(fNscVpURm-95(C$17n z!7w|d-d=uAtQJoAL_9~ezCo6`GP(^Qf__Wt#i;yNvSBWt=1!84g3gDd7cbnsg*_Qb zib)phVo%C3Bu78HM_dTwYtXU|qyOssJ;@fkji?MkC)hatAQC(cEZSSGW#B7~B8)4Bhv)_PK*aZHSyLLkbFdxULP zTZCMHn*mFDoSi^8h?Yid`%vs`D@AC8jqW6vcZghU$w~<4sn0o!&%(P3%E0Ui{EG$V468%f8D6x@W+5b`5aIC(?EL8i5ujbN*N zo-KWKX^%C1mAj27396s4t-uHWca+uasA_e>i(Dq7GL5X!7Z#EVm)uE6ejd6RNwX_1 z-Hl1K{&7kj>!uHGE(67&h-G(EV8l9YyTwb>OtGk52QVQZ^K2FD%#JXwoQ0R?9gOA5 zPf|mmXyKBT>e6kh!wY%WO=nQ5HbgWQRosjey*;6E>>OD>>3(+aj1w8r3Scf-6f z;S-{0Q`a6XmK#!RN7+sbuiP#$(z_1hS14m=R_InN_cxESJ#m-Ux5#*hHSj4WzY|CK zJY&E%7H47vN+~hY!}U!ESa?Ea+K%6C^_;`@$AYMdVtK$%Sv-_tB3jV7z91rp>rK8G zG9SB=jQzkq$g|}U^f^uF@D|3oM==x1pk@q7AFJh-biA701J)RGb3>oby)S@2pxsn| zo2MxSB19TOYj{mwy-ZF?W=1GkM}T|OOtBx;0Q;5AWROt-GiMrwA3 zX}i0&x-9eCQ8l%Rr3xUg@n-CFX9HsQ>0ExLrBz;RVszWH9RmvifC$kt<)5*<(sS_w zqAp#XoT-^Exwj_kxDp3XqD4HtXR`LQqZO!`P41bYSLf}?$?XxoD(FD+{-;gmA6zwS zT0(P1W7|YA+;{B5dtI`r&8@o{Dqf@>e?b^S1MN$uyQa|o)hn)Vh7bSq%r)fqv%EDG z^PWR-$OOHyuXj6Kcx_*L?N|8T6TV0hl}Xa@_YlWH)9vFZt(@H;`$59muav4_D#DN5 zi|)P6i@pO&y2kzHo&C?m*GKL49rNU)HNWHuR;^jut!^G$IO{8&#VqUn@TEm>^AtSE zeR>J)6D${2xu+1n6U~EOhF;t+VCTt^2I%XLwW`g!yN)|jpEUB(^f?QpOBKeBHW6AA zQPNZND300E5ufAj07Xwet6PwabLz zrz5e$MRC)jX6ipL6Jf@_CMqJ+RZ*DANDUOkyKI=$0HFn&Pb3u1^;JP8+7C%f`D|C5<0}490N=bMHqN zD8TFU;^J|5bTK-ymYCj1#$+i;cziL+cB{oLkYp)v?vn9(K=$b6$FPs*)2!+9{9f^~ z0y)7O%09%feEdk=01GK5$0v2|7J!}yG%iLA{5LpccYct*1+<~4XoG-I|KC^PZl?dK z0RAuI`G3$BslNP(r=yyB zss>QZQnCOqu1$}5x3A~Xomlvo%96Y4h`!+tnwx={XH6SS?ZBE>g7PJM8KohkYaF^bn*KcDv&w-6vbMuMWpH5&syO%+f3lKUcb#E%Xos#=eHs#S32)$DRG-W9zR_V2)%fV7tBirfKgMG=fm$L=cPk5ysT{?S*Pg7gAmc4ir#bf!GRSfICe5ct^iC+I|61c;+d~DIEJ#AGu#BkOTBM~w9 z36`xe3uQc_pXi^uLO1o{r>h=_x$FregoNX>FkfqUguM+?C`QKLiVX|45qf!qQ{iYs zw8S)@GS3KaG@$mTC@-MR`{+~z1Z1wcb9&(e!6hM4h@%}GUsYiP2g7FbMB2Ai10^57 z#r;DONyXF;uL3EeU)fGLCAa)&)w|%pLm;V3-2N=sF`e0_6F+?*SU}CLt~N?!?kMe3HM2tI@b^7@vmBW>sKu}3{K*H`%rjxsQ8y6 z;$xs=-xfKYMtQZ9k4f|x#To~>B5QMuYimlh=l&UW_`GcMsDQTQ>)#A3$DcauXs>Ro zUOfNjk7xekl)_0zY31b=bQ?tt^hz^SZ}{)f>|eihzMi9p>?>w^)aoFXOLe*7!`v4E zGe;C4r;AXb(Thtb?pwA-8x|5t!iSf$cQB8e;z{f1JuK*oXw-Ql%3?4HV$J_}QAly} zTUV23CBL#7(>VVhy51=~v#^cQjBVStZQH2Wwr$%^DySqC+qP}nNmXpkSN}iVGu<0kc z`Fj<$%0ZK=$bUcjoW{%ThD<6G1}&>`3b0yqf%B{uO=7I+-YH^m`0+u8e)P~n9NQUg zg;%4ZV7pO1;KErtNz^4f%X@h`iMH$yuBa3ejCjq>6>JOKAo187lt;j0q{Os{TM~pW znPq$y4j(EjxBlV#7b5!HXBl~Fg6a`Oq@lO$BtQ-GkqPT$`4UBsU-S?ofPHi71vI1V zwkh)0rsrr@CA^&QbGOZXQjnTP4>bk`3cnldxyCr^-7v?h;)mLsUF5_%AHFU?8N;?R znsQTF(n8vWF`jb@!hnHEf@mD!U;nb7t;23z%N6y=`Cd8@WdujLc^A%|SW%7Nn8k*h zeBz0`*nzrJ8b>^Pyf7mq*+WqeZFo(^)oqPf5#37U1xZ74how{G!zfoT0jUc?bIf|C z=iAHugV!s=1U{8M37JxKh`{gH@Zj=jJ>8-#$_H2H<2Il&(7Ugw?75MWhEd7|zyaTO zH6Uq18l?om58E=9V4P-I?^EJn2KR5D2-#E|Jb$C8@Zo5$aX5Tt(y23UPRHZmNLFx9 znG#`UV=p}pC@}3}S$?v2Q)I?(k5Mt1SUoPuiLU+BMK2ZnGb7GnL{Zvd<{+s#N6Dxq z{I0G>?rWQ9MB!p;z)mUl%`^aBKf3MxQN;PxL<%zf%VsY@tZ|6(6o+4k zmorl5+kOM#k?(?(lmXBlm)?6$`?pG*O!wVzkyC+E%g2gZeTTW=Id%qqLLvU7OxlR3 z9w*pLAq~0A5YNO3RfS;nh@~?C^lz!J9gtWfHBS?6N4KA?)OPYON8c(hgd4}HOYC2! zk@YibYLUujmt++qDYUT8w9)=p6&+d3+3fuR?Fbl$dftD@1br6# zux0fr{jN)e*`EtVt!wJc({h+kVL4mLBd`Wb8+kWb5(Be^;3+P|IovhAlCcF73?*WZ z?+L{w^2sUUkz?tHa&eqAE3(wY@_h?Q3~!c2^2v9=NEn5AV0em#*T}J^wHiX{o3|wip#dV5#DM!f@=jqv1hv6+W&% z#%jA;LgzH4G^dMHB3X}*%9bLl2SGTR-}8}dB80WbsB^NY@nh8x85b4&VcyNc9!NGr zCMR$0`89g-2MKSV{&eQg8;~|j5NN{8ta(8L#Wkq$^>RVqE=lQa zf$)b%_DLhf;wmLZv?O*E5(3c?%8f4lzkXG(bno(X780MKC#JOsS23(?7}NuF9`pgv z7};PUTc9_7d9*-2nD+~K=St4mU%uUa=)aGk$;Cw23{!k$e@JAuq!S!qsR_87l>b#6 z1LXsa*BAHwJ-c{TU7J=p%cuw0KUDnSHfix!`()>bbb3|n5hdC1LYLRL>a6I`BtDJb zoL0BK;8xR^y0vSSLZ=;e^&-_KJ#y1#>-A8X+8;PWI8Ac0k4Carx-WT#CZEEvS0bcX za5Zoodf0S88ReIT5qIVGq-`6;&Xe}W#ywY~5xB|*%IVco;fr1iy52)4V}ag@XoBu8 zVnR`kE`>e_TV%X!XCqj+`Orlscnk=L!1Qw#dFWy&h6wJlK2K;>UIR`Xw_68kMq*W9 z!q*@qsoJJ*vh#PhJ ztH$^|c%irzgvfb8I)Ps!5D)jGct>s8Q!VfI3deY?#0II$a^t*!8^+QQSY30^@(^VQ zd>z}h=>WVgapScJSU2&BWEo`+deu{x7HS1L-4PBC6)n3 zbbhCY53`wSr>REf*~vT9~hp{OOD zTRgQG!4-H1B#q_18liL?6?oNXk+mo4q`Tt|9cHDSeJ7yM%b{x^%qswy6-4cEvM zg@@P{FS4&xbQ^uJLVV;s(1|UwKf-V&C#~lrxUqtL_{pxdLOr|g+O$lA$M{-4m&xF5 zvaersXPcsV?Yr6J`>oCn^rW!`Ok``qIx=}UZ?o~`E9O~$XZq_jbNB28BimBQ>inL~ zsLs_H%w?j566UtikOJZ@-Qo~}Pr@8lqiE7c>vutn!u$Y<$qI(yEIq2>%h0Wf-d2*? z*q5w+P%R3h_am6@H@?W1>-W~wTCp+CL2tuz-z{OA!QV;dgEmw=nAS@aI+#x(A;VuV!u-u|J=9Ex59?fRPYvXs{a=aI|N z{`b-H`-p*z^hMPihfUOce}XQX+CGk|00?3k#i z_Lhj`+p!D%bnHd)%#U@C5~qcP5-0ngV@T$U{+#s!L!9jev7(^R9`!>&adbYGrMF#= zvSJrK>Jjr~d*;r~Ne>r9q$bFTR+~$8*tbkWvBm5P>z}t z+^)DnN8xR(I+(X}pBdgGNYnj(-pwV;<+T+Ro5}K|#T)#VDWni9pQ%ZE^`RAB%(e9L z{l5wgZ}jLbnD9VAzN$b#&8|RKe?mpk5oGl;^~I-SpMf)I$P}W`3Pqn^>^9?+XqGP2@OksGIfG zIWC2m_xhO;!T7-|Gh3n1I+mj0z*+npmOz@upM5$F7uD0{qx<+BxOWJrJpV|a!mcz5 zOi%$>kaln}40wyd+8lvI4NCgqdIiLmX=wU0p_HDovVoyA!jf|2*TBujDrFFeX)N%@ z^TPy%bBiFEptkj0%js+OCC=mv7tYRmi$+GxYZosy(_Yt%Sf2S;IqllwJZ@s)E091) zg1`?CbxI0BlUK*u&LMw%!VKsVH$_v_SfBBJX+@PGPmR400%gJK92X(xAzc`x5wbB| z_<=soB+Yk%=)G-~Js;PKbeDvCo&1Tz)>RFF;lf6EX)ap!f-U5NJj!7Oq+<#l#UTFq zh%AO8aN6Ua5(pyf_s|W4vQ*M6XN}W;_TgcG~EDHWWfPaC&9J~ z&R2dm0^g3Vs^@@e8efdZ^$di?z~*y}1k4b(x!~DXZlbd#$dHN!b_ZPZxuKd#b14bR z+6V<9%e~pfZoLD}{sZOc;S{nMDBu(T87<&S106OM0}|#9Z^vc+j>21EBnw6I0P}vO zceuYgk&aQ)kn7M-Y9Kc0RHwUwk?o5?L${(W; zS@V>#40IykfU|tY@`Va(zGdsfa2Y0FC1yhu^#;51v~^NcW6|S86t!Dfe*YB+SzC#QBHcy%5*{Gdt4i{$2@N^c)Fr2)d<05-9=oh?wr~+l)vAo zTK$1AF#QR#G0a;sh?TKXN-*>)KnOD!r?#GsCE3n6kC)(?ZY_eqwNek`n6Z%Ej^NN8 zgA#dJCk*9ZCxGDQ{Ok+2*|w)Y=NCxX<0+4_BS1D?cE$=CoSAUt^o9*DY^%i})y=<& zKR|KgYUIp!g-(uAH(B*+)wB7#)mdq9zGGw}_t>3=1Jqf1;#ItfN^HP92h>?$Woqjn!IL-xL`d&I>GzVOcjFd z=I)RYIDThH*V&c| zS=Y^)vDY0H0a1$pSH%K10c=6#Mvlx>_%jGtaX5Kp^SqA-U zM1&k;y)iy8?igR1EMi2Q?nyT-+L7Sx%U3wSu7L{tR+Ps65Y}!>Gq6KR3CK~+OSN{Y zShS4!nO*h#XQlw94(*gUGyF;MV!g%Lu#nUylT+Vzp2}eWSXy|o8WMBr*}iBGE9r!k zBeOdBs*zOSpG%`X#hO>RUVTFAE7@9ASpwbPeV4nxHrUI%rY2hOe%aA0n)m#h00FiQ*2 z;zY>Mpd?0XZbkH?@eI;$?*En3X6-}rY0T^&bV;ILvt;(Vr(v`#8|!juyL}KDx?kRu z-ASQ58q4o|Coq~I#5AfHzqCyLqjV`~92tmt&O9{WdX?0^l=@LdBhx(0Cn+Bi*tQ3!R%tv;rDsf}pcc+r1Zy=tV{`OEv zN5i~V6+q>nw@xDI{4A(}(n=ReeNR`u%ertSzRSWr75Dh5Q0<|-zg-O;P#ll{gF(#4 z5Z1*b5w!T>vp#dMcUq3q9)JmeZ$rm=8u~jIBzu|=H$-jpG(^%y(i3Eiia|d0^9Npz zEoVn}657A_2j2_0YYwA-Whvbqm-aLN%2K2+U=e$u6Hv?*>1O03><0*JdKFjtP!fJ} z`8Z&4>fB`hb{vYiE9dE;D~{>*d|sJ9j&HZ9`_R|dlvwo=)S&N??Wgx9OpiR=uF=h1 zf-#!T)QgsPjT!Frql^7(+BpG9z!lD)^qzB=GsZLT4)>L}bB@I*T)Jc_4}SM*qtXS` zUM^5l5jqL1qq3|Kh<)xZhq$;rl4&0ur@%Xx)q2g+!XJT{5Hoc)uj$kV$X}gN2t1?H7h#~UvHAvhUB$g&tM{j} zg()g9CV1%QX9wwk$!t@uc;?EyRdBj1p#{WPe7wvc_8t=f^LZ&aRS|A`CLJXraI98v zZEoabsde5>TTl7TljjC>P(63m;#Uu}xQNqP zvg5sIE)t)~j^N)C>TGO!!LxTj@#d-6)6;=vUaBNBgqb1ur=Yifm|emQA{3Rnk5=2?+wP%XTSL$4;R>f6sMg37EkU{7($t**k#JE5H2h(zWXnTmiyLv z=p=$zR)&P!wv;{Lg(P>IfdnsicKdg?EsD}66$dtdz$o|ujT1LT|rd@dFSHDIaBkL<4E#7v_^cqmz!C+8?I7Ccf zJ|s4X`@s9tWRZQY-_d-Xf~K-|d11Noj@TK0X%r3+WyMcZew`klT&0w(Rgxtv_*X9j zy@y#XjPEoQeUy;JUP~jtYBXdt+&`U4HJ0e1{*Nxb_eOwia-}>_K?wPKxD{`=|FvMd z0$l((VZap_*+zKG;vFJw$)q{>wgw^*g(Pgir zCC$P(ZSy_8qW*yfXi~S=LgS&0U=HwZkXfkI=d^0wwEwe7J&YLr!_^UN-V8?mj;1ia zs#rKx0z30>^zi2vf}=POIWR2-;OemdgR5&qpr;#k#RQF6KiaFi*#!wsU>AXGu`%2c z!uK&P79qVW;pOqPpCTbFwy0E?cBP-O^z|6;LK3Indl+?h}rzt*yo%Ynt&>vHu zi=GX_dIRH8+=zUB)?VeR3|n%w4r~c2_iD>Ey1}m~^g%ZoW+IxNuCY zlU`u=VXacd(-E~x05}7r7uQ0=I%VqfN9yo?lme|F)}E|9U)bI!!5Z9`{ba>`njwf6 zh!@?!7e9-HpHV{3RDbQj?#Kioh)wq26F=2t0;DE90I<%|ZC*rXiuG+h8^h#J;%v0Q ze}HuueE)!TrO~@SN)AmrW%GZ|>4~hRg?n=^LmDeo7}ETKl|c<5=hMXZTe3i(14mQKmFCu_q;%T4S9a?KsYqD*s2c~RXY*|WUI zdG+&&+!Zhfy1(~{%2Y^~5-_)|(r;jxc_A$fGQ5k*zWgL<0ccHm_apCvW^z|n$aMY$ zYBL3YtmW8@2-%JLhQb)8OC0?9{_dr$Ks|Q!LdkmTRyHws629s@pzV?T0+_|Ks0qMP z&+@-vXHxU#1L+ zqfi#e>=Xv%t^Efzz#|op$wF4}tdXkC@EfE#KOKqA-UexKhkYm``nn6Zd6B@g6G=EU zJ;fA0Q310$ype(;6g$X-{^sRc2tsk0rVl}+lj*09rx5ujx93k1pt7<(@Ivu_v^tcH zCW&hM%`$2Oh&6t}BjH_xn_pHWby^rNW@TObMB`)iiKg94y+Q^k-s#9ehb1I?5h#?& zeR&!Ia|_3h-zr@`91W3n3$&Bis0xDj)<^9rw9FZmu}2lB^0o%y#=hP=)|W{YriP*@ zpoQ~OhBY3??`|a!(vkslfT)nj+8X;Wgv6Fyx5pBk25vjov7nhv0VA+4Zbwe&!Sp=B z$AVA0%-?XfNNS~n#s(_MPM(#&7!w9Qxw?o3p2dDsxnq)vc;nyoiT$2fNB)RjjF#-g zetK^V1cMAmLW%R;j@XJ21tP_Xx&Lg!Mbju2Nc1!rq^Q_eC=N!guIf>do$D*W`Kf(S zZfx=UH!0){LJcESp>?#VdlF-!zmIL|EavA%cM};$qXs&X)Mj3A9o=JP zt-;1D%x#jW4M5FBy{j7kFhry_HVLLk|0REe$(C`Z68c&M_k;YPa6DEdn?FZEFX5J1 zZ#MMz6n&p4=$f!3>t@eBEkY`kA%-Ck>kxr+i76)0)PYHK5bdD$CG1Z*VjaP9OHt1O z15dGqt_nD>FaLp(EFBN|LnL{Y0oEMoG2r+xA^Z@?G8{hTQ%TJd(7zin#`xekKhOwt z9#TA!4XEau3OdE-69T4mpT4B%$74XAV*@)R$%~qH${>uzXE>^QvzsH;7SZgZBL#EneL+k@OyTV}yeK(y3=LBh52yG}iB2#2wBiIW~ zfW)yZigRHDVnpX|V?T?3g(Y_a9G5QkNw(h7bAaOjFQX$xW6 z8-27B3vlkzn4h{kq*o=G%K0{oHwnu%pE4A2Uo^`!R<^d>SQq@@8v?JDP1AOzXHI6y z5a;n<%ZF1iReG%FK6_%ZPG6`mxji~uZZc=fb9-w+*TKEy&T(A$nifXmc+7%CTksYd45Uai|HxP6xy^(c3Zs=zme*jVSdkcwi@LLtxm)P<&1tH~VzpW}TBzDA;W%jNaE9L>p4-sim@3#>|5LJ}UmP)kvu++XoxZo&Hq9Gx_3Yb0MXH@cRobK5Djd zW{wJGmf#~^YrmNTP~ZMSOP|O9w!wJed>;{~Ao><)@2*b(GcNt*E$G*Cut_6$yq9%{ z7`$bJ8o&NJ`Q_hxGB5cXybCkc3W*} z(Htptf_nynWu%N!wKqv^Pq>pNC^+!wB01|!5|yGKb?~Ir>QjuAl?GCbk_~uWDS3K$ zQC#6h+TxNusGr8AIqC*bIHE!{0`DeZ*#;Hf7SFLK544_Mk7PMZJBBkHPl=)p zkstF)pSO>a&$99?yDID)36 z44BELG&ZofmXB+ZQ+sd%e4nBzDgXIfbNLFtM!LPFv-62OBuOdC?!vK=qS=r8m-7$; zK}xG1yt=gJuQnYG)Ix0`IH=8aFn|6oxYK1+7a6&eS_Y(OH~da+=*&nZw+rJ6lly5j z#6IizTf?~b1I$hjJ=FlV(M|44q=ze2`1yWyJH4(Db__$jgBK7MVL8((mB#aji()>3 zEO|R6lm69Scb3@-zUDFshV^wcber(E*^I6=R1Z3%7=B;ByuBDIR5mhzX(Ij5K`Y_p zp4q(i{w;b8fy{4sjfCJS_7>h*lFFKFJryaQct1zF3CK654@M^e}`frFv zm(9vL9sjxIc$Rp7p?H>y%&(MqobCPspCmpKt8?xW(F|sfA} zK_#7;-+-qgWV$~uWcr(=#jZ0%NkHF|ho95LtJYPjOMr0pmrg(H2}TJbKrx(XK6>`z z(VxX?P0w*N_WV)2k}u}UJFz=itctDi@5u9a|yE(wY%LJ0V-sERYlQlu1}u4(cYmVSaNbwCG20n zskxHx9CAJg|5w4#*hOGcAKaht1 zuucB``g#PccLBR(<^YVZe{_jq@v!9B3pwEYstr z#&QU8Og(IWYPiuzzj+rCMQ7kN+q6rR-ZWM>ZJiYuvuXzE7lyuZ)Me3=5$Oz>(Wl5i zaqnomi|o%5x4+iz^;Fn)u-`EqVtmNpq!M5jOpv*$k`La0UGL!Icag(SQb4{Bi;_g; zvtQ8&8}hu{UFoGYdt*UiKyCL#WlG?=X|8~EVxU|yJB72I$fXKyP`*7!uG()@OO)Jr z9f3kQ46I>(hhO1FNF=Gv=J5mAUFnf?%7NTxC;}rsmbVrIriK*@3b`ynp}!Z7x``^VxlQ}gDztY9KUPD?gGP%r zmM8iWxeylaM>uzty}!hnj8R+xQ2S;Q>02;>$g=}DaEsnsd(yisra zD!GrCSQrd{VDC|yadL%YpBjcH(;WW@Tkcopp`B;1l>^6*=8E+~?6%J_2|(~EIw^Qw z1*(Wh5_%HZryyP$O~o1r2e(R9m{wH6yh`}nldHvy`o5qx=|*XvH^ItLi8B5sTxhJ+ z%W+kR+~$S^eN(G+UsN$0E7t;ls8BqFMV1gkwGy%#ubRM_&~|^pWL#iP&qj@4@ul*IwADSmCne*T6q-?D6;sZ3wC4G5IH=<(36 zp7bf(diQkK`17T*a^!h_kOAJ3;I?rblGWgjbHmLI3{q`ftGTlAP$6;1bMJ?TA)DES z<;jfc#FcgG4(xz%@P#)t$R{QOL{{FCO}Jq;4J>O`FCjqwtkTpF-Av-hc2NGZYzSZb z!}qv8YG(8oa-0L)1AX5h^h*d|9IB(R&@Z)0*JKXzMhH1$`SHujg4tgtjw~ynO5#he z!3ZAkT&ES|IF<@W7TDPgoghNen>svcZUws?irljgZ&V+=Qfh=Q=E1DmVebjP_%o|3 zA(7ZR;NkF(KS3fIR5HYwT^vi7{Sso-fwUGW6d`42xOpBmRn$;v1@Y5~?@95yK53K` z3jc0P$(`fMpLZRFmFSuscpK-g-T#bqmQGLJo;8@4j|xa+NnxL{ ze?!}AM7)axGtIj3Xyqv5Nzh?%o={@AV51daEnths(;R@4RXY?vra_)_2v8%*(3Eo} z3v9;Cx@+e`(WQ+_~-5(cNH{89`LCBHW1|3X&OL-cP<-<hcHPqB z_sK&G>rLkM9V{ajOKQFkbL8NB*wL|Ze`1{C5+Uoeuk|YBw8Uig`W=Xy6g80{HZMsm zWAeI2r4Y_sW2Z+G4l^?xCnUJnsFh@qHkQmK>|!uk>ADOV^}1e=dIt2xYpZiMh_2e( z5_W0-uJ23s4@Cie`=;vSd1n+xOw-If8@8DG60}J5FkSl9GFNXP11%>*wGN`sP*^Fk z0$8hKFkj#!$~7EceF_Xk6=SSE7XF~(OdbK&T*qPvKGv8K9TP$tuC3xE%KU5rc!p_( zZ_Sf3>etcNEt?tO2<8_sIv>wN|WcW=ZU9~%c6Cs)Z_ho zfCigtkX03m2n0T?ERBl~&U!c^Qy}88IZ18u60%#p=tC=|u;6hS&KUUt_ zHk?C~2fcRL@-mf!gs7p{$ijS7h4STU_G{_#2ekm76^di70yYk)@; zWnSQ;r=k_KnbKk$94qcK5owIwBxUgp+L%JsR?b8wc~iwKT2$0rsPD)QV0jQDBJs;$ zC<#O*R?lb=R|=6X@2Z{kVfAqqRI~NzkwG}eW}#rqpfv;9hVX5Xa^i@WA`_O7>eWmw zw9;5-u~kk|tR2U}-TD>ia*Oqpf#V)XPCP*s>EV(YaO*O`5mI1ivVM%Z(UQwJjyqc4 zlEC@dd&-=lv>G88cNE@slYX zUSY9m)&jIpK4Y?}ee2{JE5%47I5zR8FZ*{PB#@53*C z;p<$--+ZZeQ88O~P6SHY6J?Z>jsneTSMG!3v5J){6&_V15>Asd=mLv0cY`Z64hM&2A?Ipo*c zwyYRO7fMY(nqm{hA<*y5isCyrwY!brZc! zUD8g2>oI)2AhA*%IQ}a4S5@t&EwA2bmj8qO>t9>n(%DqSoR!Q=cbAf#gO2<$_1Ru? z-;)`yk(t$d3Xi9+Cnx?FROXh$7o$L@=?SCd;#sW0qVeh+`Y9U>^v7SW*s|^)qbd2BFzfW6vog;jb`}|p)eu6zUwBUWP!QcFwd))fO$Pc-R7?$|t z`K`QGe9_1cUwPAu7wN~1^zKabbS!i=8MO8wWP8^L*P2@*=ijxT^Yh~|c5$lKqRm!l zv}f;o;p|6f$KCfgu^CH&fW>GfTNfVeL+T|vN>i=NwFgBGe$@&YoL?r0#zo}8g|4>1 z`*Ku<$sprsxIsL8FCOlfEFSJpb8uM7h{YyTt>7enZe7G*xZJOan!Ljvf_Rnrso8?0 zW=KtI3@eAllU$*dQ(+&IL-|x9i5IQaUx@$DRx%UEE;`i{C0+v!1cb!`1cd$nwlTW7 zTG=v+7`d2nu>DtO(*Z!eM=-uSeWR=S>~5NpJ=YYBNqGWIMPq`HWt?4j@n=ael;~vD zIy2jzPdcBkYC@49aIeF3!H6G;aTO5U4*%VFgZT)z1Vte%+B$BuNET%x)k6Q22FsT9Gl zE0v!B5aHGlQ$C(@YUuXdieHlzS$E_-q`*;3q@rwX!udDs1mO%5h~_^9#l-(e(dy!1 zJS$@r2$+{CmX@iB4X=(uN{*JSj@U z&ZfXtP>&QG#h_VtxPM>Z#;;m&+f`;)n#jZ>07Y<89xe0=gI8CfD_5^>%&I?RQvIw~ z3zXpLI64n7V_7*gisb1JpIaarFzmd(w)0_KrU_ zc2xIKqi*;R{*e)mopfu^oJD8^^JCzhp*1{rLWewgYy**&`9e{+sp|8`>gWJ*4HtX) z7k1tU3~B3uhSdg9sH+F*YeA1{BmNSCTT#tXF+U=`_zK)yh_Swd)N4D}kQsOmxyUJ6weh z%^ygyW#f{K=!v#t&2>wGvpF_M&l~}g)q)W!eHR6zWd7-SLnoeY_T7OHX+(C z09S}!;luR@#ZZ1l;!SJN0@%jC=2rd-l7J{!Rr5)%cQIeDSwL3HLoiZIyGEnRML@zo zCMj4i+eI^DScfDX1^BJ{TclKdUw{(%$@a3lIOF;D5Z#PyvQ5C`XDugDrdSsWO>;^W zJIPKWW{_bpH%dt0GZ)uvUqnc2-4s@mbC!6zRKmYD(*@F zI7jG;&7nO(9z#dYG`}0p7)YgF{Hm#!);t!(jlx8=cpQ6zkf48JKr;ysSUl}?5yU># zfM$%GYVC?I;V_5nT=&Ll+8XA|yqmIJRpp5NxyPt=ZUt*Hhv9swMeDk z2bQ7e08>Jle4ECdoQifeMnt_;!*ba&^Xh7m6MHtQxUIR8c0UX_Q6t2(lDSfeR&cGE z{7p7v3ZXG{!4TxrfL~%PE7jMlp_H<0nEjTUh-2gi;hVzMo0!WWEw-E(qjiKfFqCe^ zVL9c`3ju@?Z;zX(Hs|_xv*uQ(gxI$2MVLpin?v2q3m_Ho5Bl!0P5|L`|= z(x{ZkIY*54Ia<&DP@y4f6Nh4S^UJMN74Jf?l;>%RwQRwh z8Hk=!5@-){i9#*q_SCl#xHd>Tp!uEX@x}8{!G185U6joL-ShGa0B0;@36@Ke-2&X6 ziwtewFfv?BUz9eUyAcV#crIAQx5PR$ls%*@I=D;1Y?H+%~kkcO@~s&56i1kp#^W3U?sRPlM8xM$y95&r%Q${Rq;uL z*7o_p9W7qdEe|5n!i1W-;%cna`;(_!%!&xNnC{*Q(e=81=vh}J6PUI&(&->LU_-vL zX+CO!O>Amb+{MKfd$WJDi|F3@+eXSVSpAWEHgP*Tnjp#-xYD`Of1B%48lnK3r*`U2 zf`sPU`CVjepT)#UTK9uPM9WD(-CVC|N~?PY=) z6Vk@zbeItKD0%cel$Zabj(-&qGJ{f7#AMh?biV zbt?%nW5Fe_HEwSekkmY7JB9hDS{sE0vh9~5p#q~0e+X4%QkeaW zZHCSf7v@P+tq0qb$4@L`l{h92pTy`&Rn>*(f)AK56-!rE{;jkCWBfyNS4 z{>4{klG9_cnaQZ!3{>s}{-nmTb_e_k>F6)FBHcdWnAChm9gDn@z z%$G8Z*g{-97I-I*I&OSG5vUSeGBFzukD$)1@Py#>3-13qjkK9!T9!hLF0FpH(u3Fu6L0$HiSWnU+>=o8E$OU(W#MO zD~L+ODmOd0I_bQ=6cs^<5ceIL5?LoI6xi|k^wIQKEFp|j*#7uz2%4FW!RYw-clj)( z?DpB3(out3N=(qT5Fb7EP>;K|^rU-r=KZUh$V~41p}S_*oYl^~$m>grv-2%eAy>2G z&8OuQw%WcY2{q~Qf40#eF$nB8cl^$`o{PSa=7VhobwlK$^)jc zc4+!_xjGDb)Ls@reUU`X!%%dv`CPlxCFmc66CM?x5KS4$=|9g@8Hrq)EGYV3TD8QV zfs#>i@(19lLh&#QOP)<#^p37#egYMlB%Ee_w2-J>XVZz3DU1hI@o+>+1d6P;2=#Tg zpHFfxLRWrl@KT~WZz#TM(d)KMO#@~s0syk?I5y0+jEc)8ua^#s24GsU{}?E@&Wo6l z7qlWkkAy0L*DEKAX$cn;+}j^kRas^u1oT(S-k#R;(>Qlnvo*9?avPTP9yP0Qu*n0^=Bo$e5I>q53bP3z4tqtXb*s~6I{QL_{JFgge`@{7E^`T= znjr@|uh94-p$J|_>e>EMn(%3JAzvuJ0>MXruC6aqV9xkrs<7t*>Qun1l0lIphQ=6*ao^wtNSE z?AA)(1ou`YBQTTVlTL|5LW-)WK8bMGst2kc(ws}{IxRXDkIfBbMH)T8l)2nS`W~TR zWrw0fz1p>&S^+||FvMK2%MFqa=8$QYkzAoZ2e_)zj=Fjr-}@iXV&j|;D@xbihTv`> zj&!4GaFtv}3?|FYlW~cpR`lkn89_gtW0KAug7;*Myz zq@Hh&TWUu>#0+Q3S^#^Un*U9Ya^dcOxbje}Vy#=pbC9=sG(8RPu)@hu=ZVKWXY++R zRSokDE^U;3Ic9Z9+>GB1QE`8gmMChmH8g8jDpwd*6J!(%851_1hqV|BsMCKO~3oe+fVezlO5}Q8= zTqesp`$8VoO1z3^h9hEWO#RDcO72ZOWhat`Tc~--xdYW8vQPKKq16NS=Tz@+E`}q6 z2lwKF$mPLaSgs+|kGT;|ch;OE&Am_yHvki3Z8IsAAvn*^jSrpe{=ZV!58p)TH`l$U zsGYHPkG@R*7kTd#Bx}QL>$Yuo&vy50&$eybwr$(CZO*oB+qP|M_xG=VoxRuE5$oKX zyAx4SRTmX?Io`~X&&aI4aSi>`2lK~5&>)H|=|vv-(r(uO=O8(Eu68r7S)~jR&BLFO zI7=7F9&b}3k5b>5fQHmZn4<)f56viryIEzif}vn_(SF?o2(TXCPXS+$Cs-|g<6pif zJ6z46!E)q_9Kr?q$&O!Pih{!+c5ufs)pIg7HONRUeU91~QCubfYE-krSZ8wE&LZHy zwPt>nLi5GJ(jf|Ux6v||qCXYQ?hW8?ZA0a-L_sWPI9&`_Qq_J}Z0KzG%d0I0&fo-4 z!jh&3aFFDLIbl8Ftn;_PpN0D&&&mXwi~1@FM|EwTU-Eg2HK=;6|+(X|8g!0D6 z(CCA-=mRX2VNk%;FoH2C-hOOuSbi|hgAnSV6;Xks6}SToL>36XU8r~@+wgnk4uZZq z3?d@OOCACHP#~FD5)R0lSXNtbMD#=~6j_X#sYLsqMGgwv?X_uL{IKgHkO9hF48f?b+POnNNS;B z?{I9St^o1X9?{45P{(rGJFx^xdv2(|k&C{fUMAcX~IBm6-Zonkl8o>0y&eBLHd&J?_KBZZX|E0^d3qA3*zg>FBKC}!qP!k$XR-* zy@%yP-E+*aH#=>oll_<6|^LwQU10b$QBBd*Unm=U#nl#Kphp`(!iR*}x@^@f*umTzvBcg8>a}B;j#p zE-ko?0rav>lO6G~242|d%S0f3u&)xu5n8YAT$2@A^$gH?Kvi8FD(b#g7Fz^JVZLQrFFgAzZNAW zg8Gm^ttEY0<9@YIgkfWrc!~jNJedGEe-3aMw0%Wg@d4tglCDP|q6q^UBeYe7Ibh0z z!_XtwI&R-BXQe}n(E|tg$VhJ%c zmiv26ci%V}IO-S0>jo|m6y}*GfRdjSC4A=$4kyp_(lcj>?z5kWk3Tu`MweSC2E@VT zK2UEaFds~xUI&drR}-uc*tspx5vi_gpFQ6cSPlkAw$Xi2Y?{=tnPruP3H_>=?H?85 z(H-{_j|2;A{ObDibeW_M!zMzz-zPzz9Cs<=nfWz~M5A!}7bB83Q&abv3Kd*Ei33Co zO(tx*Q}_ZSllav=FC3l^NfTUmCZSme3*ls)fQ|V6XOcc4nxnL|yFSl}I+ec8P$6GJ6rBU(ddkd<%du1~y;!;a?};ncm`91J4--J=RCK$vq5#l^K?_I= zJ<=4WtDv~%J(a(9Au*8g?dUYgon7$S-F9mF3=i)1{+y6HubWvAI*`UWvuuLQLiV!o zvj`l3-*b;ASvyA-CvJY&G%Yl|s(*X7QR_I-6<(ikRDk&&T$mEKeQv+?sBYK|C|?1= zHe)|s#r_ga+wOD~>chTDC)O1`ci=}QpQ6)_EnhZ+=3ft7K$g6|5;@l60Ly^3a_IeT zhM>j|y2jLuO5CIxC^n@=3mQE1PqNkKT`Sh0n5R_-1z*x_s{P%g`gVT%yBj#h8=}j0 zZvJC=zcJd(nRV?U&CW7A=k&{VE$^PBxEP&{QKu~Gfu`Q zjVR{;Fpx6(E^Zj*Yi9pgD4TRDBG48$1P=DAXeZXa{08`2*eDJp`>2c+io8BGLn*(d z8te(ZuL9?|V$Th(#a|QWwuj1{n@7jag?8ym_wQz}YI{JfGq}N~8?ADt232Mh>Tj0u zxx|B2RVN$waV>QBS{2XxD@E+VOs+B^0hmZFWoq7^o3k?#s=?Lu1)i93dy*&Lfd9LJ zoBna>zp6(UqCo)wv@iewi2g5^-r%3+?T?d#(SPylRjnM>gb}{5y$6NUhF$`QwKbc= z5OMqh^FYH8?dKZiN3m^v_0{s*fcZIIuQ%I~S5{bi%{b?$RQt!X8rq*Xu1;G`s-8A( zGj`j%pf78dgT90c*3JBjGmh5H=NYqR&~%rd>l8Z2d%eXDGZ13#Qq)h0% z*(PDkeup$S_(2dCz^C(--~kPz9Lx&FuaZR^VZ)L{7!pH4SCCM%?G0YPlrIVD8xivYjxJUZ(EkN>c3s%v1-O@fn#7E>zJ7oEhk@ z@OKjQp9lDj2Ev<{roIi9bB$a1R^Vix#E89U-7{yFfg~bu&XS~tdg)mlgEpltfEnLY6Kp*E}XuhdWz*i_uaikb3NZGE)3Olk!09-CNt~^bdzb~ zZJGSYTPm&1>`R;u4g`s2d}S8`Abio9_AH0#IpLOAv*O;2pNAx+R3@-rgiwdn_mh)! z3ZsUwV^RI!BI@W;@D6FFFtnHfizKueO#cFw6VG#58f<1sP2#*)8qDekOxnn+OV5#^ zBf0B4VCdV}VH`l&bTF1AA4V}DOpsN*qe#4JzF~?+7l2mXEU<6$K_k2?Z%QcFbEk=@ zSwI0H`WD8$hDx+aBCdQB!X<8_u>t$^iRi_hJ2ss+1c}M{UFpa{aB%`FH;94=1`kCh zX4EmeHF`*{S;6ITZ)&`z)TnpeE?L!ND&+{zj;uK=-Nrl=e-dhvbuCq7C!(fCQsWq{ znw>mnTL!r1k$qp{sTlj{$YL@MmJ>&G5@CTQ@Xd*;XqC(hlN34S(`c2~tM?9T`&?yB zJDhdp?qso#M$>_xvs3&z+q;r{RRWZ}_F{VJnAWVR%8f|;T_bNLZ2cQ|RC$jCyaRHN zgkEo~YtTJ+4u7Q%%|)E!vVYZXNZ$6kP`k<;tisfMMS!A~^;7NE`I4h~|+Y|ne(p%mhV z%(FiyYjVA0cIZE%4nh;{Sg?%jbDucf^0BWP&6zEsk9oXs8iSX|1os^ zN6rsWIdogV008vy{@Z%ZfBA9$Th9M4XHMQde{u*Q7@upsO2(BjS}cy^m*msDf}fb$EnV52-0SP$bF{}!OJ(LHg!0ZA0^oc&MpL>Vr;*i+u0sHc;K=N+Gw~`3KWe?MCwnk*i z*mhWUi|yHRpdSxovaFvyMU|vGGGcvXEK?o9Zv{2W7H(E0%B%*7e4JpE#F4$Ust`N4bZ}|Rh-OEmy^#eyuDGv+?KKejave87xO01QyVpQFh>>|1L)?f! zYm9jYut6swTP>~_w5U$AAme>IqnWt4etN#)ui_!$2Es@%ZNX|;I^oFFiND5DKvdb{ z)_Bmk^-C3&X&pAV?i6*h_J!0fgUmZkx`W=z7A>AN1=J*g<6>B$4CwpDou*|3e;3XI zCcmV%uc!GEfz;e7g`LBz+<=; zpYv4%YFEcNIcu|Qewek9+?_>?EXERFyK)L-@q=?$o)ssGMx0@`Ll~c>V;h$JOVxV? zmjD9!9D5Tj8%&ng;TAlqE_G!kpgPP}wdZBWisl^tI+tu-Wi)M`W$#r!xX-Zsaf|8; zsFxmg+{Oymbgz1;vkQYrtFr45Ut$1{5e7zWnC$J5Z96EJMv4f|Q|02w^kjiU8cJ}j zy}X3=V3DMg2BL^C|V^~dFAg`N#iEjp=Dk0ebNw(j*2T^T{d<8oW9m!`hQBfPJrOowUmJZG- z9E=8Ufg0u8wpjHQm#q5-s`gnY@5f~C17q(ckY*CK;D-_^h}qwYr4AtR8M^%OkVrzm z*ZI#IgCjhq@S|G7Ue|4P*-ml8+qhaZmPuEBwS{VE^3gWxiyOcII~@~Sj&`6y2LFi+ z4`Ctl2fZ#4E|=q!9yvrJJ!4{kA-Kn9xw#Rgt%-RlIgdBG(AR4x^qF>JPSez@Cu}Nb zI|f*%B2j1%%gC(i%wRNXD8pY>UgR&n3Qaho^A>Z}j$1mTE!!N^P=G(6>Uq_JpmH6Qm)>>S%4+~Df>kT(1-z^Nm zw~ATIvV2!W>_M7)SL5>dwx9B}bKUQYk`Jw|Rb!+^MFavpnr#g<$oJPpF2b&0u;wyW zh}SUi{1Bul4A$8XdvYh~J~pn@n*_!}pwhy{{J7nt#}Bt{93-P1X}%j9IkS?B#Py>p_ln z^#0WQ7yD{BVUo8=W;*$IymyQkugGEUAp^Yq+L&9XcMLU|ujHHswd1c*-Y#vks!r|R zKk*X+Q{E~gnZxF75g&kHkzyk!qujux4%9bK-T|zbbV|v5yuwnZMEb*Nref;FO zhtn$6*tqRnF`L;oCF}LXAuL$jZrvv6)0#Ffs<#*F`QX@`l--_A@m(5MAYX|y2ot7# zteAGNfwxt$20QY>i9ykfjM5#tD8j`wt^d85fpMk$!2UswTKNG0X#R(0Mo`buNYTv7 zNWjL**2db%+VMZfQ?CwKY-nF@FO-az>5x@fS700on_*_fEtd5Ge*V&RtCf|BrXY@U z*0u4pw~~iG+oWai)DFZeVwP=|8zB!5aGf$ag5yDW6_w%dOZLkaY1^D>& z+L{gY@nv+_g7NW!<{n|(h$dJOrzoE{K0+3jE8C;g>F&dkqfY>ofF{_^UKRMcL7JBY zU;LCnt+c+=6;B>hgYn}6y5t}e>!m9>DH_j*)BJHDBN#1`tIVTkL)O5`8`7;SPuYVP zwkAG}vkzd^YUFIb{MZ}8>|v;_f%`-PA%I7Dh1@+df1T7RaJayX*FC~_!-9UX-h~tZ zc!TOCQxv7UL{^~`7P?SoxvvWWZ6Jyzz#Ze>4+BBLkmQjDL>7Cmlqf8t1CHXFe2w9= zegKYvE%evYnMSzpTOsQp0=9M`mclo}FCwQw1EDqI`3fqeI z>X1pVWaKlp5S;fD%0@|-ms2;@k(zrV9ROn8=#Bww@QY=soATK~+hLr?;>R{}`f>4c z04bEZC2Q%PxJ5a)`3jn<>}8-%b1<+hA#tDRT}`?6tuM%XZu{LPR&|5<%WxuDRfZ{u z*bl%ie)cub7E%CL0trtwv|f`z36C%nIOc714pqwxMY_gArut0}GP5fsP&}8XVVy`~ zgRGw@rUYFpWg$Wik-*@rn>s)mEmIm$<~E`tl_!)BZ9)vE5~JML1hZGNK*h^M1g$0g zE#Og-`b{l#JqYMLI+n2FYyG+HyGo*I(hz(pec8wzVa;gqZI8^M&%{&V#}V*X^X;88 zeg%qR0+Q6l0LoYZKkjFMog8tDgW=bV8@;tCx5I%eR2rK03uH1o7LJvqnw@PCe%k& zp-JUIy$NpP`tdpl1eR+2|W0~dc-gj zs-i{Rql)3e&d~!9M<%hv&&>4I_FCki%+K_YFMkK`YjQ6xXUxnk8dK%B3i)WP`5)U3 z*X@oabjg4g)l4^2s11aFaFBI3rM-6eGBLr}v3o6daM(S;$lQvV?9tJrE}j0x?%l*t zf*n0%J~YjF{k0J_q0gq4#cv}mXl^o0?xYBNx1sNn8;L;+;Jv-g6RvG`O z*l)HeJ})3Z{lXYpA9Z|qZG?e@?Rm?1CsMB10iHDBo|5c91992@tbZHOGOL)jLvdD!J&h zBT{d9iwhDJ$ldX7@fGIq90LL%S4Ca2&C79(Ma0&&WV^qU62fRm=ADr<7Du0$NLU>D zue>H~vU!_SOh-U7T>a|=#;P^GBOUG}>a8E^t?X@_CPmWxP=#}qqG_Qe*Q}DsKgK@UfR%o|?J})HeX8-z3t9Ypd#UR5k}G zWn9=H+5UK5XJjc-Gd8CIS1UZ2Qt8}Jj=2#21qczSp#0hT>ud97|pm*_XW^TTBey3@=~lbMr~ z_dGAs79?)r^)wgVroT++sw7?3VC8`nN ze^LOdyiu@jwLUlhl3GmC@OD>(aPM5K$|*f@X}=XY_gQ&&_&;AX9zOY( ze_bp&!tVP}r zO3Z6grwrZAiJmSza5)Se-#RczD+ou%hNyQczH2YP8?p^3llY@^!tnhZDGS`57ogV%}Os@ z|41;vD15F+_1%`JF=h?k3_~&*{#orTiVDOh_gZ*h7r?W#6{ePI$pB?kw=Ja|jpt1b zN|r+^mf+c=BhN|sA|qhUhol%b%e}~!qo>P7dSy&a%n_0VR|^DUrjlm3yTDdMn*Mw+p=)N?%6nDODeZc&vya>Q}06wBO0ux6R;MoN{X=8ptJ=wX~8MGPD=tTz@9y9Lzr3X!lVZYwXiKCmmv z1)E&C(3!czH*0JH7cQMOKn2HoZ8|RCgMJMl@V%7ke+rjpVuyktd2x?C^~k2?Esg~& zVwz88LaCct88*$cSrBmR5dK+Jdv8i15U@w~I?~Y5Xv5M*Z4SdZ3|gYh`0$gav684z zrr-fM*tB*r<&ZAC=AWp~&$ZRF)$ z#*Lz?jH&*W$}EN*LC`Qf@|+M#FFk)))!6*7DPLPxuy@!L4&fI+a^ENx_WoVcQ?x>xM^UjheIv<0B21{#vk^1njMn9c$^q$VwW zv+|1>pN9=6&{Sd*GP_GwfWYyDsC@#31r`rPp~`gPuq5NyCpH)I8mM@&M+}jFufHAv z5*Y@&2SWaFyI|-gTGkcXdWxnt!Z|^`+ZWE!VGqtkvKIyT$q6r<1R3&);j{Yw9C*ab zPpCJySDZW`F4<@07A%P_^;C2+Ce}WowZqPr`gOKd9Z5d_m;64r!&Y%=vK|A~P@kiW zz~)Ao%m0sxtlgPygMY4n!x6zZ{YC!{cf}7~j`Imo-(O~(pK+z-kiMJm- zEjulmaYwwajnSYv6|^DxfaTy&G72^Z>7hxp7w}AqG`^(F9OU4=(va!GPiSHys)oPU zuVNTThgQ6Jl2N+M za)vtCOOixWgO0|^1mRNvCf`%oBy@Tw3nq9t&iG*6x_{!Mnee&e!skl(?@Q zL!jIir1&tNXwNKh(cU>$hp`DDIB!89RWIGn8L_Ncz%*fSVSi-hz$+^7_hoR$$ysgQ zw&E?-0Lx#hlN`i-Lvu$Y>Eb{je8FBQSjyGcXN{e}yZV$kdF+7!h`H9i*nz)TJea7Z z2(-vFgs%%I`IDLr`V;Ls-_Dw#J)r}`agcDKH|yejmDv$$-Kh{l-T3MvfzZMHvhkC{ zKo!V^ns)x%h&wD23~hKmbq8VqvgYoZAV*WId^ZpXnId9f^YhvWM@BM0!L3!ppnGEk zq-3~&;m}w`4V=>RsXHJ$q}M7t<2jUgBl$Eq=Z7#`X!tXPM|xER`mvsS2vLAwf>b-2 z3CQRi(l3~R%-C1cf^Mq`BZ5DFHYw;vN=k(b9+5xfO*|G)>L*ZkY9~k5PK*0d>f&+g z)p@gp@$!}1{JH6RJ@?Lf$eD%L@RqIORR?_|{ymTNVFvrv0Oq3}z*E_arw7Zut>`>V zXxsI8(H^%!yt1`Ij1dnxr9bsmu^U;^mM;DkLdDoiN2C(Mm}#s@ygAIY=lZw)#Dy?J z3wsGfJ5`sNt&|8r{I!Ej=Q@q!Qjzsi(KVa{Rax_P$v8;Ax{rIUwN))IjoR7}myah~ zN$118h*|PEUpH7R^1^V86|U7U@GiS_I93FM76S<@H*hF`v;fZPi6I#bz zyna6t^|0Lt@f2jFh4#fMrFCAIL(j*BXzQK^%2W-saBKlx-fl*m}pO32V^iv zwH2M0s_dynea1b3xg=V9j3<>n%Sn%I2{x$|N*m1a=4G^Y(7sIC1 z>*qM&#g_9i*7Vp8$iKs-3YPR!K-N5ADs~7afof$Z&B*MjikBiqp5DNpv?4b48G#4J z&dNu^EijGY05?*{&YA}#Y$}dros>lek34cZ%rOMWM85DQ%>OtnomA?gG46cbtX=H$ za6!&zeO@5XS$>RR=dL=XNKedTNy0cv>RIYIiRlV6ArW z*E`7_S54zecCbJK@Sf81hsU#bDiY? zqb+vD&}}z#*S@ff(e6iW@0*QHyHp9WnfJCI)gW+M|}clcvh)sh15y8mJe#djise7D9$^v z?4E|RaFcNeT)a{IBr0tkAgxpw3ZPvVLBGNh(goKMI)Sn|3wvRl)bT(Na+07PEw)6w z!?XQ0{a5ej&v3|PhydGEzJUsrciD;9EM3l6?x;Fu|9;Ph9)_-LnE4h7qfvZ%VDUHt zqMoJhxe?O^01}6Yv$`pZqvNDnwaIT9(Q1dkyAC)hrvGV3pGl8|4Gc*8(_dfzcS1W{ zC>Q6qwp|kwEU#WwikF)T`py}@siacO1F!=MkzkRcvsPM~9v0opT_CCU_D)V!#DTut zU8Cr+Ms$Mo4!xO9>ixdyS&oc0KmVy^+1B4bQ%QZ6(tB zizYzFbzEx#8JLAEAuOmM0=TAI!qUeeB{5TK#Y~DMz*}Q01&YHo8|CAhhWb?v50K$C zwO=3?9TgvbhYc*}J#=hvMGNp#U3WA(##j~E)` z4}buUNs4J^isjcvT3E=dv{RdKHb+QcgpL;SO*)#M#Zln;*)Y+dtCJTJr4#31l*q-4 z619qIO*y@sI~vU++<&|8Z^mzAzVBAFh%>tkTm&*Hk6a6ui4*ymwWfNsPJq{DFMH41 z&-CQCopS71pY-Q~rkzctoF1)^0NTREycY+x!qgJ>*82(f(FZXmS01}v)BP4{CV~#` z8jf(!f;e`5r&#)g6Y{G0t)dEl5mq-t z5pbj8aL~SE3*}Q9T2*2yI^@e@jQ0?J_jMw;?xo*NBN(c<1!rR!4Rg=MA^;JvV#wi$ zzy(4tJCV;GmX8~4lsVU*?)>U<=Zv&v_dZOAj8Uf8U;Y$RcrpZFq!)?5`N$;hbl7TSX z1x|Y6+e0$Wztl)56}3L74RHB80}az70=ZUzBb-*}(swKV1?UF2Y(caSNv8b8fI;!I z>34Wq{6sB(twIoC@CFmKEl*I%bP;!LgtK8KQ;#L~-@?xT72+<94klYGfNfxGOW);M z!~$xdYH)@G=AJv<-iHnme9shsJm>()J|l8g@jC3J`lAIqtpWXAWuiR?*jf{HfDN*k z)qMWu7W0vF2bN-vp;aq$oBZL;i6=3|wrpKo+@%)da19xP;Vs`a=q!-&eu$mMvA}2fc{j%{`(Wf6G6{YMOoat470kWT(%-}?~#=u9`B$LGDoU0!&*&F$h){r^Vi$t(1q2#F0K`% z%22MEKNM5Wst|@7!>Td-LG7yy?clh64HjID$#0swl|=k6;NcJtzh?nKDIWX+3soQv z#&aYa0L1u>u>C-uIQ!@UU`xd5VsIv&W1y1>;?XxSzosBs_yQRDgey?q*L2OG_|d|Ns4+p8v&(PEUO zWW9!}`R+!|mOnx5 zTX5!Ov}*O14kv=un6EMnQf7T9k5UnpqzS(Hgcew|!lzkISuq&kn%154jb)0aa#S5T zHvd8sP)`v4f(7|8y~46d-$ij;ZdtGPZc&_XLmm1!ez^(0yHbhMn6TWHB7H0GfW18m zeNA2;+b8r`3}dCQ2pQP`V0KJ04y0Y*IHNex21$ahW6=&jN9;?EZ9@HbxMoIEB02eo zl^p+JC4Y=B0DUtTBO?n-H=6%e>WT^IS^hI(6t=Oq(sOkDPuolFKd?#7{|B3#Yxuz? z2_OZak%$fo|BcuL2|9rXI^S)#yCD5wlS5LU1Pn_6OJeOF(_I@|497zZ>-GN6z~JnB z-QWQc%GDNr`DbtKZAItKy2muy=1CMFm}05}1&jo>RUB17V?UPHFD;$w<+Zk|qE$tB zPp==#OM>gi@@k~RqnwoAPb+V8g1NxKFW_MoveR9;RLE5ve2GXAHbE z#T+y!HLq?M3&ATdi6x;W#twD_Y@|^1@w~rV%y0+A=I~W7QU^EdxCSAC(53jaz^sHB z6i1dut^&&dRl=VT3GO>3rLN89V&$}*A~5qZecj{(z%GzeMZPuGL;J%DC7CQnW)E}z!%m*#|FDxe$zSAvKkVd~ z9TpNn?j$|?tZb>K3xeFG;KBo8 zZ`pQ!>@G^cf7nU!Je<_ZY~VlB%{VaTLVhk<948p!jqe3)CL3y7^U{PXPEpxmJA=HT#7?gw3EmoLsrrl1PO8GPV9u<+{V(4a&jOMEgAt;_?q^8^ys;wX)xfqKK%>zSvY6N2a+(AZKzTecL_718oOy|{%HEGK zB=&mX>{#<+gh8f|;20nGT4mCZZj60=5moo6CqbcilzU%g`S&&Jz&M=IuHXHIL;IY! z(?;pVAIg?d3n+ni!7;nbe#UZq`QM}6SZMUFA{&n8FGL!TsA*P_bw^yD%+CT8=NcN; zP!hpeYAdZGoeLO@65y#jsPL9t z7JPGFUVtVNbwsoN8eqsI=(cUWq8lWFjx-i@W0jC3z8 z?_k4W`JQ?#j6t=YeTsu!e~_KPE0mq`)B$mhL=N3vYe=fd^7`hP$}{VTMD>EH+mnZB zmWKB9J**K|grNEy$nmfJ8+U*yL9GKmpyZ&`K1M}SL=q7b2Fl6OC&U0R5!qkv-phg4 z2Tmn<%1ws#IpO@>NL6#A;1Qm#*+&7MX z%t5f8>oZd1amz~%&X|7|EbL_sEkmaPb3_!>pb$hxe=9&;_E?^?#1iSUi_SB)w))z^Ywdycz3>PD{6XrMxm;j>59Al8 z0og>&Pl5(;qY#Dq&)J5q%08_+rh-4yht&AR68E!n}O!;N`kMpFN(q~^%$sJ-vfc&L>`2>)yX z>w1=MI&iPweF&2NqGT#+t+?`X2(@|-tBSOI&v8VUVi(18 znnTjUFiKy@bM1np)db}RZXm_$#%>f?AO!`Vl_Orgb79`Jx1ERA8<$m%$Js4m=HPPqE)cSxX)^0n`i}? zoe8D>gxTFjT{cW$?o0*`pJ|e_mGpGJFKlHK)+=SMfU$NgA8mnWEDxGOAqKTn6FbPU zSFF&FxB9ml!pb0#>3YARl}KJ=8_PjKmELlyZ^rAbXed{Wofo`%M0Xq-sJi=lkdK{J zoK5CfgszYOA>(%t+ZUn<{l=Uz}uA9O@PG>52|9sb>>EUvaw6^?e)X&{xs z)R*i?e2IBi+6N?uPEH z?3H_Dk1yrb`)Il?!WoS(&rnZo(i!Epl@Vs^VpoeioJen+*KFB2WLS z-T&VsPr18?(rcR@PeLBknwMq!Ed4HC=xch_(4P^)&GR5qER)TP#b)ez1-Kow;zke* z@in0$X8ii|j$E(}n8)|a#jWaSe;1(}OWLkxm2xD@ zs`eFEQ2rTLhx}*luGtS>N4)O{GPp|^J}k?ujaBr#ogzaZrOV3-bAnA_MD~62HaNb# zh}0qtktE*=HRn1FYlYC`_;yUFuKv%kTB-%N>R2%#E?o_)1g~|#9jpLz6ytD7Xl2d^ z#kF60#pyfot74nvqyoMykVc1Oe)HNW*b z#(vtxkV<4}?y3A!sv(+^G=idoyJTjB;KD~fhLZ<@9gKjD^icX=MzfheiXIm!Xsn0& zd*2aNn6r3rzHb|}hcca)PFh3|0;4`s8U`gF?^EoSSf70@A2T^{upX3)4Rjm`$Dv4Z zkcku%Y@;WVx@y1|dO!K8v3GH*@K7d52E+Ie&3NLzS>WD15?RSGNWI@>i*LW<)aA2h zPPtz6fKX~LG1AU`{+vM$kb=Ia4)N#@&S?S!gMOVF!({0#Ad#mGu|+Y~;%->S71P29 zn&lINIj&*l65I^rW0h(KG*})^;7&9C!@H`%zY|YEQis0{*@#y?vZrQ$s&*NR;y=F? z`M7=>Va;v=aJO_YSG*f<#-!H}R&naIWQ!2zf^+_Ucx?0l^|>9ZVaWAlW$L7^esP!f z&8|yUoNH{Gve#T2mP70yaP-b>oQ`_N*D=t&;ofC|5m)6ycC~5E4)s5bGmYTD689r@ ze03yI2De8Sc6Xn|V;IwOi&i$*JDYy0ZJ@Pn(1-wh{+pMX9?8so;>BrTHg~N*if#w@ zkD~wjx_r;1HfxGJ5jTmbpp37Coz0txLUWGNV)$ceXj;5f`rax%X_=eDFW>ggiCOoG z*+h7}4VaNITXeDk&%2;P5d$LX#a!8og3~|25e(E^wi##nN3L#NtIJpGsQ?_`X4C@j z&X*d|v&v&SULH(k(Aw2t(k6>NTh3i{i$Bq0p)l%{vw)~}_S|mZg&;Mva;$(bK_gvy z?*%~;hv1{s)|fH-yhR7wzc{Kc2i#!n%6#mJ6g=9z$?bj&#A)Ty2;s%X2=8B!r;}2h zGV)2S=8N_AGaMSqU*KR_+ck3MtpAQY3I9jr>8;l9RS9|{!w_>W$9X-3TqCGU_d%J6 zU=<}SFWDw5%AK<3X9SdQWpL%(V}t(Tk2oDNz5WWMA+T(#K?z~3thg{(H}e$iXqC1^ z(Qi8_c6(q=Tr*QN{_n_B6A$B=Gd88N@G98OXqm27&W%NSyxN6<_B-KMkCXGNhF&w0 zwbHHecK4*Fy+FI-=ws%mAbE*6=xB|(l;KeoMg!#w(fS>e*gugc?d)dZ!$hJN1OsM|L}eWnFqyL(!wi1 znHU-3`jD3g?b}47%rQpj%&S)OXz=52c8(A8ZUy^e%g)`qotUhphfW-(H+4T(;$nY7 ztmhHIW^37%xSUMlMh9}(^|2vhkwo*3?pSlhnbSELNA|6Z$>_rTq{YYS3fvLd>2mS3 z`XHP$@)>;-8np7PapY#*y{qvMR%a_6YbF|0zj$K-dcew$xEX8()v{% z6>PJy)m2nc3GkZwoq}H|3c@Xqa~5ach_0PY%XZ~KDUq~^k#a`bhQCw6kKx%WQj z-TSFJPrX&^XAw=a9(o# zaMwr<#eKQ$mvHVJU&7QI36+IB$VPgfH28qEs4(S{nQDqz`dY6#eG_KEnIZN!engs* zy}b|`m~hBv-F_Jm#wkH`M1DB!jXm=nF&d+R!8t0`0GCvn;Sh-`7tNP}kaLiUS}YhTV0gJJQ1f)$x!G5~YH)0NfvZxHsy}*tVpHBA{ z>4`U^JrXEQI@sow^OLgUS6uq!0yOG}-VcanJ=WKpUMq_!3(Dq%VZ}hu_FvjhCG{X= zIK$-#nbO`qxPfvq>^7vynAZZM9OI3Kl}*&IQurLqm5bn6pHL)m01RbEJ=76{nrnW6 zx)bk`9dR8$5RI2=UB|le5kki0$g^eesaEcEK-n&^JdLTW5@nL-@OGG!PY`@bB=+Ci z<4{C15NgPcS7}L6k7mz7zUNL09-^hBaNTC>YGbow#Xa0w=i(`>W$V^ekH6NLCucd^ zAsZrso@*D|Q%s3uo6|@d96YhP=gNzwMjS3@rmX&41zcF_%8YmiX6jFdG6M}TIKg-M2L3~e5 zDxE`T$|9p48m?3yO+FlB!!8SD+Fz8pG}Vo0>uOQ_jS=JeOFX0~c~fR=(Qix{8^QN{`%==( z^LR#pCj+vvIgrlWoyq(;fube4$?B=7$ZHMBa`>n>CE%@C!>Pk0<};O$xW#39UAk;l z#WRb}X#EA2pc!@^D8y->qkcx)Gw<|ya&$hf@4EoTL9G#aA9nd{@H%+@08X+>3|)#+ zj?lvDwNfREvG7x2q6=bUGcZryBVM*H&i2GP-#q9@(3U0~q^A4~V+v$j<1z(9TlyPu z)c*d#`2vtp+7!7=ToThr6OY(ZRSTuk2$lg>|Cm|f{VNmzeLofDbF|7=vEz_?iCkN6 z1IL}3P4=~QOJ>rn!|rBDqcI zGpdx`pI|S!P8`R|8sU`H$&}8HZX5BmD5s<&PXkvMoz5%rr`Og%=BCLZNo-sW;lo&s zlGqA>Wuo<87!aVzg47? z9HcaeanCr*zbI};!@vyg)0EV4B;P5v<60R##31KKQNuS(ePrFmCaxNQ*rGe5C6?&< zV5^U>vu7^&dQdpNEf#zb!E}gPeIip;8iyL~*^=%g$FWLSF@^Vyq+l&Be2;=f6%4V- z+S@GIzu$~JH|(~SDm^Q*qtd~Z!`yLT+&LQg+hD+$(FF=oDQ>c>Lg3-GZySF6N$)Rd z{G*f_OihBRS-YT=SYuGik?M|LXkkp4sVbJGPN_6H-^9&7p~K4w&5^MYsms;-gYy0T zkCc!x!xkR->BuDHGmI3qf`n-zz9GDZm4q=++Ty$JLBv{5MF4~E1HR+7lsk4jeLHhiL|7R&vz+~E6QY%>{(F*7bNDI?eG zI=*U~`M@%q1pVbCntY=ne4L@#mk-once3v}Yrn-*{lr_hv$YMexygb{mQB%Av=K^m zs@LjN{wFUptn7HN!o%GXKQ}Y%X^lr_C$OU+Ev1*{ZdsvsW@*Dchl#BLfvFct6z152Gmb$*Js|L=5HyH`!>!ae!`cv8&-Hh#Td8P;jy4?QjIe#1pe>ZSE zVR{3Fs`!2&`+XNaV5J_pSHJ(33ovBmhNXax7`hA)5Y_)87i27)oMm0Coh@t(?Eeif zd~@1tNBVrZSKm$V7|z9)oR}%;`LPtE+v-xbDk1Y1d?A2J%2WWI;$PjK^M0)Z}k!ui4MqZFa{Z!m(V9ta5x#73Wxv zrkwi0T6PysA9g}|T_$Z=DT6p-n1v`RPmD(9hxE`dhg+C1SDs>NY=pHR^2Exk@NH81#dIVs{IS`wZA5?soC%LK>u&Iu>Cbvx?es0CGH4)zU-3tbIAz>EWS#?=5ex%BgT(QC_6O_J zt<}nanfL-T?3m2fRlLydgMQhfslWg}4Y`-5$!fg6`^%M=Hx$CbU7q!e^*9+nz3!UZ zSuG1XtBQ&q`ttSS@9lz?ImJ^M_b)eUq>v@6^BU#->d2)I8*IQH^Z+~As&EE5?D(W8 z4QaWwtl1K2+0LH_D?(?xuU)QZpsP`#{RF$(wr+b{7Asor@mD@`U#nX=VnW65J$0@O zdP*e^vLp1xMkFbeS>=+1IM+aFy>mjGtAz(Bh>=w`+@*+UAo;{L(} zsmjMW0m9P&w8Jb2OSP-+2f0j|AU;sZOx*I`NZ9#7c`Sd)H+*;HgNE%367x|tk^ffF z2Zb#IjAM$;o*bG0%8hKS%^$_W%|)1S3V)V2Ws~#@>IlaRb-uk&Obcj-(U)#`|Gqf@ zCh~xo4R!Rw>tM=&97gicd(vOK{k;@kb)m|V@yq$b!^7D!V$e&~Osu;DUXmn^Jx#&2 zi@7xThq7V*FAK_HI3!v`Qeqf$^Eoeyf#+r=TUQah2O29W2WZ>6(v=q7ToF9X)=yyb znjr^4i!}n)oywj+B5f~j+*jho$LehM=Y-NppQ$5=%0hrIL}Qf9UHxyyiZDs$HI97# z)hsIHb%Q{ro``Lk;!15{tuUJdyZK4+N8bW#@Tka*Gzhtg4Vm6FA@n(C`8^wKQS3d| zJqDfggtuURKh2Tzd{uNnxF~@8nEbUGv37?t)y~23mHXmpR~id^A>oMqzY+EP zk~dfuW7u*WyM+T41B-bJgH|+_rfHzE>u^{H1I}tN8ye@m@`uGJ>WZG|knU#MjPjUE z@Bag49L@NK&pg1cgafxGPvfm9N5140V+u|fh9W*KU0dJLR7YO^j-v9&u93W97M)mzkJOY1_rc-&TkMCqUQEGXRhD?Hg8Te1RxO zpH$UOeEfb~8@$)PN)6ZJ+59}cRRZ)V!@n`Zyz5M{@|(N5LF@1g2^k=*SbMOd7|S*xmvEm zhOko{j#vRbeE_4>BLP`-FGuVgk+;~BDDq*Cp};fo8uf=od@yJ#Uikn%lZ}+ScPJj7 zRmyY()Mjif0sIy{lo`}j9Z@v2VN^mcBeMQSG*_*+N}ux!Y-Bs^_ln+6zw{9z2n26K z{)W{!3lU7O4>sL~wl!(W>70G~RS{)oaF2A;&Q;bVX<37D9WbigEgx)UnU~)OTQ*Ml zu{(|%*tbBqhrJ%sl1QE(?{w5DG(X?rC-&(c(MiQ4BMJ#CNRnVod*;RW?Gw}sKYWUl zd)>PdDxzvmbn^3CR z-(FH@MsZ1N3%I(z)|74il9{}YD|m-Ve~KLfmt2=554OEgr{ot4SR5rFH{v5QoC5>r z=7^1X=eN%^EXJ)O(7x%?am%L7qG@;>M@b?UPvN)8=_k|@M+GAZy zVZ1iXy!P0j!Km7)zG%A7xI_^>x8(nHp3l)r5XOwFG^f{5t9nn64M(8=vT;QY0|{Cm z!-aSJ{Vvu{+t2a>i!H!fP$hAYGuPd_!KGoPbH46cm!!kq?9lQM?kHF1NY@S@<=bXe zoAMcEvihITg+ZE5*bZWc$%ox@NdiIWtrufj#q~h+1emaWqo1YwKt=7scwc-7`I^xo zt^CMoAWVOc7Fnz~m(!Q9aZ8f7D&+%V(xD|3?$K|~&RlQeqk7H{z~iNvjej@P@^CtT zdoQcP(!G@fGf40i>zHvqty3zAL(z#5uBghT($ z;T;qv>3?*X0id3QE4rH&zb$i>ISkV+rVy6x(N z1Fg^X;)A~ZLz6Dzdql?-L#c>xz&{$#G2#Ik97P6eZ^f#w_Dg;DA*vf@{7LIyV<;Rd3lU%p1tuB7VJ<2RIi3H@7!sYn8I$D975S%^ zM&scneGVhM;MsS~=Eb+a8@QBd&kSSEc{Hcb8U>2RM{4FLA{AfIbl^Uqa=cY6Wx_bI0T3S)5sK? z^6SmqxK5WtH?Md@yUNxy9aR=0>2Ay&SVo`OB&s!3_Fc>MW)qkcd9w>)&gIpO0#+#> z&bVD~&eT0|MNB_^&5g~rDmo0+uH1t_!K#hoKGK#+z zCo;(MkN2)AU%rbMTus2%#`cpE-gu7LLS%*J@ ze;$FuJu9aGpfhjAgANo>_=F zyH8jifToipy70KdX-Uid-Om3q$r^|obKv?%(Ntq-Alw$ypb=6FC2-b@sL zIV%ojcS+oIaIGp{Z_|x@`ygx~8 zV_NhvGW&g$IsKeuGke2PTbEfcW}>3H`0SQkIa3Du2qr_JZN}81g)}i4eRbldBEERA zurq@gl5iZEyCl%jj&95?<_TZp4a-c6y(l)xXn&tKmF0Si$lUF4_NsXcsj`m)>|=d5 zp0XJ_k5t$d?3!{RKX}%h_8d+4E?yonnMWhYxO(JeHbv!1SwI7*Zyg!qmcy*(ygj9+ zF^}(CP#|p{H74|kphz@fhZ=ZxI@tkt5fmJV>AnT!Y~@}XGt>Lf<6SbH9Vsd~NA$|1Ee;BbU-mo!V^(YNGq-fl1S?!;X4zl#oO}*(#Xqa!mA?dZe-^uZQRI9)+dL zD0AY z@+w*%)=it7X$FdXqGJNm3$-AVjn6J~A=xx%G2XrC8b#vnNXGEY=~;71c@qaO`_Jvv z%hR}^BxC*`jnY#H^`Wl?53})SR`;)n75MwuqNP^eAM%6?HvVRo{C&VQJ`&1n!EG~X z@>8-_-S^4O$uhzNQcT1I0eVDPD`X=>(av5s_ASmoE?<4ydS0}xPxki+_jo$Ctv(oS zUPtJOsNc&}hZm{$EzoY7Bi%Jcy&F}B?@iLVQ(G6*O?%I#)HAWI>R90>pk|3@eCPi} zQ*=@j_7TIx*bk2%@!^fJ(3d~f%i$sbte(7a+mkmJ$wVm2ab1o;kqL~(^C~wVIjfqo zmX%qb8kY(PJGwU0s+z9gqgO|o@Qsi|*!zp>``b6^2M{xESn_m{@z}BG10s%ipz8=% zSdZWUF(P5m{)nd+Fo_59)4cz7dN|(>sptSs4;x?>`F{&@DVZ3#I69ix8kzieOW$I# z3&r8vFPxbMGGxQJDZ8#k5<)gp<`#*C<@+dG;7cz&ccm-@pOoa^W=E=4i-}l0T}i~vphjz!m_k4tY8_xgO%eV>OM_%kb?h2I%3RWJjIN0AWa z(^_su*E0dOl@Zw0JbC!}==%aIY0##KVk;f)Z>CCrr-SdC1=H>1yu$p_>fMP9B@A;1 zg(16Ry&0F4RX&`EOEjuDrM^Mf*O{iP&8!yR@6xpf`w?=OaBJQA(GEg>lcFMFXk&KX z4uhVQ&sSq1SHHvO^pq)ARjySP5Inc8Dg+JBU)U+!5?U>{g2y0|NJw+AHlL@)Ortmc z1fIL}DY7l8Fbpmxh0Wef5awI32WHQJlc=e5$rZLg7rmd*8n=2;*l!@p7PsHda-=5Q zf#DNXQrf8H=!CFLPqh^&OC`H6DB84=jLi^{?8Tck;-&fFScEvS)Zme; z)%D(%|BvlJ_YPc@5ee*O}`;Q%t&WC`EfS(=*Zjfbte^h z^0*J>3>;uG=L3NnElR=n;HFh@*jT8PRdMFzQj<8IPV`afY6+=NcOb0y+Vg(!_<@%cMtEtw$+j7 zhQGlH0b-L0Cp~m9=#)FdVxcmttGOC=E~AoK0a-UQq3w6()E@oD%}IF8yJ5^f*z#i)WnM)(@W9d_DYtQ)>;`W zcu0%s3DA_R=1ZYBHJcl965=-3u)GGEv0jPxz&B2JpKgMsGC-1ALl^Sa6r@Zaq2{r) z^9BefY)rS8T^>~Rn>I6sR<*jZ(A~Xi>^m&0bhRY6ZK&qfoOPu-XrD<7oO$zY73r~x zmj|%lTCF?;;(f<__w4Df!A)8WAbSE+J-sgpdcW;#C;x=f;o)Y&?keBe8L|5-%_-bUW<8bbe5crbNfow9sa6z<9&g zH+jX+dzr{&byw=mFd+pxz3Q_%#<-8S)INXC5kAak`m|Es z$n=GJK%VDtM;BDAuQSkD)>Ml(dg$AJOlu@bffNP4#52CeURM(sGiGEo3u74h^hc32 z7m5UYjfZpn{JzenNdE{)0}H~rH7=PJ(Bz(|KNga-7wghLOu*{66S5MWRPIRB9QYZN z8B)qa%^kJ|7j%Pf8##<(Pzsa<$q**CcySI+6E`8n1y$5jZ5%-{Bn81vptb?(^rQaP zz1rAK^>q(l?eFhP0Kcc<#~iiuY0^Ks`QZ_S*QlpUUO_Q91!jXk+|6{RRzMdwF2fNG z+L@HXb3}?ck-$fSvtuxs8{1DAenKL%7I(aqW#kac;&l4LhdltStN+NTHL&2V!A0~O zhbhPZ$4idpC&<#zM!%nSTp0yrpQVeMb*h}?ptsQ%xTP1`RwjbIxD#Usb2SIo(TNuO zl3Ki zgN{Jce^#4R@3EU23aQ7^#g~k$I)+)4v#T^_3!vIj(4u+xNc0L6F<;l9x14TCgW0^*?O+T+==%}nWlLI7^v!UD5B7($qapUBA@d8y!rbr;iMNZy zfQ5|4nvW*YS@hxf8^`eoJv&?s(v>A6`3YCGQ^Z*C}&uF8lc!7 zvhV=Z>zY@F|5jdrlhH&B6cA7V8xRoF|8isd59K9d;303S4yaT8%Y@Og`a2Z%!Sf!8 z-$6dmk^tsP-i1Qa3YG}hg-Ka3e4djj#ij&`J%zlvm0qv)a_!ZnwQph_WaLGTMu~Io z@b>8Qa2nKJ`~KVc?9*gb6z;1#q?5q1#uU$@(?S<_Rd(?P&*h*-k(wlLKUkDU3I#W- zbaN%1ec$_io3(7Qf{B-1iHp@|7Wd}-xduR)ClMPLuF))iFF&_ozT798ci}|i8X;J9 zU6OScLl$D9AUd0!yMBfUv+$4nkOUxtth-sH0Dp)Cg{*+7ImNi>c}1+0uh-AZuBS1w zza|WIN?d}9@6{_ia_H$Hf70*Kg)@sm$w3!Cc5>`*OBp2&w;9q}@(PTD$w;<7f8-zf zpuIjycO0ui5C8!kcm>|k=mK9>vP0@zEEN2aQ1L+M5>n{!y%xbUjR-}_p(CI;^S7UoyDMU&wZ4y%1W?))%qvJ?JslyC&-M+fCO-C z6RBjL0v%;t`twWqA5Kuc#^B9~A}j95pDAdz;$%Qj$5SX_X}iknXKfrO80jLp&gtXSfNbk+!E+`&^vC^-?Eaz-LCPzgiq-$76dMvaQRCBx5ngFfOv zXiB*%3keR-J{ERK{;DJZ?#md`d~7p?OK$XvG1H(Wg62YV1sPFme8EF76U_kRYo5F2l- z%oA%s(s#?r3kptMJxtiL4Q#}r=4wW7dlK0&8GV|l@U+@3FEeG zvm2@C0vZ5RP~7@IIm}j8ZPXi{_q&mtZA4F$go+t*0EBS{Hb7^0luBT{GE>=~Q$e{x zm3uusQUjDfq}cgMb;0ZarJwBN92VzbS4#gC9^GX*-i%q|<8V&@+cP7_Kv*LygK?rv ztzvTZ;0&m*ME=G=l=92QVTibGe}eS|9)MAtj;8NuF;gZ-QWk8TBusFa%N9U{rHl;4 zl|P1bu(@_P9mZ2-;#jxnfNN)@tPI6p^_>Jc&Sj0ewV@Qa@d?LBs+f%obrMt@*bc&2 z#XeG1TUhr*$ne&oWj{BH=}ad!`3(I}Pw&w7?JcES{^~o2e=Gb6xQW546MtpVh0x|l z8vhds$DJa|uM9vCv#(Al0xMj#P9C!ZL4^?yByFjYw?&QjK_BI;Vs0~j98LbX>AJ9C zOYn)t$A33qvHk@OEQ5wR&`2Yn`^3V@k-Y?QoRg}z7mwrz2s36d06w4p>=}#OQi(Sf zIgXTy^Zcq{-^B1YiRov(ZS|&~hbz1Bl}Xb=*1enL^!L3YR%3Zgw3c+LJ(Sn_8U7v5-nfB7i#LlH+;N2Xhu8zP zRra&AJI$G1Ij71=N}$4$0OU~1Wjt%tR6L-nc8Svz#8cpj-D>x8RXZJ((WT0fp=r{a z>EWrgp@Z#NC=6~eL89D>ePjydbc~1yq$Cy`8lcxes<2ZJRBzA-z3Fx@=xR+b`=A5p zQ`pErDr_dXP_Z~=e_YClif#nOdKf*6-SnYFOk_=CeR!)0TEjG5wMGSWcBoRpNov%))&A$s(-9pM3?$wGp|4* zyC3Y3TuJ_>Z;JWjp^d*$;YhA3HrL4OrvnTHl=3$Vj2+KC$^had&Xgg{tb_FET%aZn z#G$}=NehYc_}l>awQ^_`CbEK?xv8L1Zq{{?YfNf#YRFavvlGuNiqV44;Y(d#JtIe4Lg{5w%r zZ!UK{=f_s)6TN4Ts%=)wvg!okwyM61KWC-C^0~BIj-g>1pTfghvw9yow;Ec1t5>;r z_c`^x;+>Diw)jqZc=o6+Y61w;k2O?pPc>F=D=j|f8@(1&40pHFbUZxDTU9Rqf9ICc-uM|8efn7v~KLDJR5NZFf zwT+mgiGvHkU-J0(f$76(V;t-A<(cO3umdJn4SB7j8H0q&8)_(}4oPa^{+PT;0_Hcd zw6mMZpv!IF)0U2;HztmR&C`PL0U~tI+tu64MUYyGT~<)&o3D9M>*jgkUY2LuqQKu6 z5j{@nx^vdqsC1Ev82tzmj60$@C#!5%9nrrQbm-Axj2tY6oh>_KzaMbyNwY*7iNWT* zX|^c5r~&YYO#k2yshlIfE;N<5L{>?OQJwaSZje7B?HUNY$~gguFmV$=ish1&JPyOQUs#EU;l0a$7mBC1UsdIDDC}?0V)(^13$Fdp%c6h`a)OqVHmf<28)I;w zmsZ{Pb)9804J@%|*XUD7{8_=WIbb(H23e~7jLV21sH2xWY#}>l*9&Y1Qdt9*61Ff- zMq0e9#dB5cAz-ojue9koXWeQo0a$w10Qj%1+Yc*t?hmVHDV?~`me6j9z4H#4|&A9B$syzikB2xuk7v8FjEh zy82_#1;$G=(FJhJE0(H)oMlF;gZ`gVJY-Yy(N*mlnVT{9E z)&RZ?<$Y+b{4n5yu(c(Cw5c$0tXXux#5YtHhvKjJ&VoGS@`D?`p%ktW;s2F3Nu?m$ zsN?0ks9Eiy*#q1W6KTtlTPQ|LWw=z!HM?G3Aw362qR0K^ck)0sc(pK-g9S!?s%EDc zK5qoJSK_9}7_#y6nj5z>lv%uD(YxBJxDn{kERs1-d{Ox+& z{2D=iSjrWV`z|Z3FSy`wWaRD-^xre?nsPJfs32HkBN%Q*V045*g6a4pD3NxKhvn*k zaqw_lgNy)%8E}p_*e@C7+c=$fYjyhAY_p^TG5KkGa8BAh@RC{j z{NbfBoY57yb2Eg5q$ssVA~Ktn<@^z$QWyYb1M6EUSjDpi(!=f9f;QN3$#Z@#XSW~Z zydHr;E*heHg$%9O3gCE-yDN4W@AJo7vIh=O5N@Z1!mrg+D|XAI-N= zZ$m#j`73N>|0Qf%0K(>MnFJtga)7JG%V=}0mLIH4gnBf2Pm+q| z-2;dxAq~Z38ZeNDqU=yh{;HS($^ic{86Jegwo(OK>Z3?;JAUkG5{e1D$iFH^zFu4e z*9oSja-s3H1sNFJdpOaVw6vl!S>t{m%93Q?km#VvUlKV69XL-Ci=9H35js3Bn8 zeh^`vK#KA{&fD`YL5%8nZKlyp6?~?isEYGugu%s4Cq4Tp)YiR*;AxOt*+HyMP~&N= z-L8x9?5%2F`X2kF(y_mmiyoZa}?r5rCk}30cF7U~pxdU)w5w4!VkW&ra}i`AYzAEPIRt^0J_` zQ16nxvhk}q$#X-J_p&(GRY{(^LcS>}vlq{K7G3uhex8HmWmMhkGKL{f#va-6u_+V< z|J;)81zf{CP*|)M9t+TE?B6)|W14%QI}zj2lj0HF$xG4ua4*>oz69TfO+s8Qq&iqTfj}PR7K$Yb zVPdY2ABuq;hEazdaEG#%1p=b@zjH(W#YnUOcp%uHe?5>A(?Ba} z4UZ1*@Glr$)X9eRDoSm@A>)<;hMZd8#czX1piZRn*#%>?3}rCHTG(x(7hY zVFyImzY5}JYFJ3=ClN|>`9(x8OVpnKtnOnG1D|o@KHPxiU?|?$)#-M7yC@2nZi$_Q z?1Lx9w8?e_2J2IQ8l7!nOT~cULTa~Mlm8I3bvL2J^*dHtkv@#Yn`GqJUQ<8Y3F&rS zw9PpBg%gTJOrmm!H#*m!W$-@Hw^;h?jt!Z0uRvNil^%$l z>S02eSsLbdLBBh5(%{DXxJNLil2l^+6uN)`H?i`@R<+)Q1j!;&11-#w=7|CiF1FZ@ zHY3WyfSH(a=|FHY>-aTA#MzBB`8Mn#0&F95BM~I@?Btg0cg2LZF^F0?xa%C5mq#=t zK;2GLO&uEnn!1n8>EcNu*KYnx0bgJ5NQwQE>K)JVQP2#n7m)V`zqxg0Lz9M$R)KgLlY~!Ur}hW?nJ!V+W)P#7R?Ux_HUqKY0SwMI&@kU! zV-TB2_FcdsGl6U{-E)-B1I48PHgH)4+!$`^w}#ZjsZI;$>XJE`Hp#BdA?BqR_b#gb+3 zEhbcqKrChOo|xJa3zGy-u>ny;ieq`D%wL9{=X)8Gr5qgaJ&Ry+0odw5xTmJIKr{In zN-e))&XVt`e^W_Gx%k0BSUW_buTT&T^wSt$2RWi@$xT;9V|Uu*7xPXkD$;M8k|oNH4W%rftUn$5?= zzA$jllc3+};#oU4vYzrUKov@tE0n?38Ab@#1&~tD18LIfX)x~J3kRw9`%t|k@wv4v zo)%upUh3QC6Gq#8A6U303S)vb=O)*OKF?HS%p^F>tJ?q_)S-^ez>Y_9u|-ZUPo?Q4 zU}l{*1kTHYetiJ{JnbyTJf~da>bhQ+&m28kxT!~-VgmkA%BU!8F=Om{c8;YyoZ*;g znPS<$AnUNe8HNBo<20y=J$Fk!gH26nb?QJeHC)slL#cB?Dg{%n6l4UfYHhZA0O1;{ zYp+AXSI{U#BIigD*Ph5oYeHr6NvuSU-GQ}llx`=;jO%@Vcm|HGBU;i53~)H&@{ z!P)#BUea)2qQE&NJ7AoZ(b3e70k`ZzCRAQq!$=S^dJEv-`3jpZEDuZ<){w#furPpU22(a&qV;I@YGHK#sWB-Zb4 zbuQN#|oepJHVbD_X7@DRXDG>zbw6b6$$Q#NuXAY0+ zLlI9iSa3@{r|tH?nMrwcSX1h>Wcz8yg^`!-Z)+ICHi(&ySh)Ai;#R^Ev19}7{h(ka zMr|Knfs*^ho#w#*6>2NJDyI#rkpgS|L{Oir8~i0#YIx+@M;J$wv;U5IB944=T$2ub zjdo;^q8y!P_%6ugtA|2M^R?z3Vvu{~s1;v_%6CS2Z8S5NKJ9Prggd@_EP{tDas$Sl zol|(xpS_1_71i*_#0m$(J>R7~%{%z)6WKQ6J~YT!#;Jv2wgo(Nzk-DSi(&=6GH2h$ zh4#VrPo6%d2r^4eT(69D8w}}9v!mB_$|h-tE3M3oU!gnpc`F+-qg)w1h4bqErH_nr zwRD>kSocozhsN>g&0+@5DkULiabpk&k5)Q?vcd%-%F>57^J+VW8y#Mgr(c$vnlwKV z#{3IO$<7?_UG{_=QZ6F@+V4a zxyK|(H}Uo1{IKksD7EC_l;UW4B!T#iP5D!#pva6tKKo@mTjQ}l=ugOO)2BqWJ3&=& zT(1mAS$~BuDXumY@C@ZPzl&sb}|I%C1fqBrutc%!*0oTI_ z0y%_UI{VYpq!9}F@m-SWa_&`%-t+1$BP8#-CEf)ptJ0M28m2x^{!L3=?bq^kF=SaL z68vGQ%Uy!1uJseI^(vjstJcM=rj;vG0>qgK*;2Sm#rdMGMf^#>jTPVjeCBK}=W#UI zFB)RE4{nw9dacSD{?z6W;eS`oYx<&`Nk(DA75R*UWp(rpWoT0A&UFNCdsE$?5ir@# z`=Q1?s}_PtFq$BPCzyXYyMKMckpJE0lOOP;{``Vw(O&-|u=~;zXU2H?S{*->GlYD7 z(6~9WOWV^L-N@y3t&gJ~U^|$Jw~~Oei*SV1_`$Ou8iox;q03Gd46En%_&>^CAbLOc z5&^7_H~{N|@_&(D%Fd1!wr2mq`}jAj@Bd63{~z8*!vDwW`#XmT1;_xqU6a-~5Dm!w z19Iw3a(&A6ng7e`Q=YPcybfh|4iY2?#i;SEgNv*@w>!7dX#=70`y*7PLNqQhNQ_?s z9pSR&imG6mJ*#*AYT2@&=0f+g)N}Wg#TTt_?tm3gxV~#xpk>RgtQ1xkW-h6WR5nn4 zZ;%C8g(s{9SbNT}MQq-L(#&$glyT^aJfW43N>$xo4W8dDK=}4{7r!r6Dtw$iM5Wc8 zqt({{0p84b#Ww+X>4g3j_t&D$tjVsK_L=rdU)aIFypK`QIYmEo z_aNQ5wyctW@jk`?ybsZTcpt61iq$VXQHiJE@K_*p_=5j1oWgqkGMuVW<8htzaV9Zy zRPrym0xrQqiS?^e)Gcc&p$2?sU*LGU5CD6aT&31xRO$l8+@XaQo}UKi z!AWsV=3G%XQx>I?R2|&~&x7&JS8YApj6kstl+_UuO^kq%V{q~)Qq=Vj)#T_!Rm7Y0 zRC(#IRG>O@kRwjG2*f#4tQ>Pn5&q7kTghRSW>FSem>@G4PseYez|_Yy>S(Lk#+c4< zO`Yw?p!Cr=ldFI^%%m0m6h4D;C%_zLY!}|yDgXd5qGs8weU8^WvuV5Y0Bgb)CBnBr zDmQ^y#=*;vk`gZt`2*eXYC$1KBpog1=Z1w?3j*d5=)CpsmvU(NLzg)P8m;>Ex^j=? z7O_=fid(nQHSJx)vjGT1evMJ zPBS-Zd{1GfS~H4keVDK^*Et2_>a!^P=)J^3qfC~o6P~6A%cuDPy{B)X`|&1G#x~ev z`AYoUh@7xp!M}+g4FKW?$@#hePf2$wu4i6EIHwdykYqph z8bJ&l;l6n`NB^u>IFqP|#4Y+e@b^ZBEl?kE-M2X}=LmSzPRP_`=5}h=5gaSu^ZT3V z1tUj{{9i%jwlXJJa3iI4|6(|`QX>EuPB#BAoF0Pz1pQ?=)$Zp47*6z)zWCAf+|~42 z`M5tkhUl<=kW&uZ@`KL$(0DoYtk**dQGBIjF8p%Y?CojVzG-ZA=)e95_^CPKK_$+4 zf5Gum-oCfi2dTx+&iJ(o0+~cB{5oX|GjCF*fDwIVK~9=Qtf&%6*Svh;-hT4zF)Ta1 z6AQWtAf6t!|MAe$)3^IgZ0kTaur&ESh6%R0hsZ$d7_f3|?V!ZhfrCWre#&KHnJCBX z*m8+dQ;IeAUHb3J@u3Q1z5MgC%LMadL%mNz-w9WjOl`9kQd_0R5U_1i`rsVBO(UKa zzXi3qvSee87*0kf9mE#)=lG+ytR_xTwMTs0F}?(wkI{%E0QrFc0|SXB9b?ec9Coh5 z(vykPPpey>=j>ll6dWohv(W&H1_6xEbID9?!;=HclV_U5FRyq5qu~7FHWBq zfYT?ArG)+ur!VF&rw{5K^1n@ZOS+mse}D-e4tS{pG6w&@B-a0YuS?lk*aEP9)`kW~ z{|*^w0yd8UO^=Ruw6aOofki10ZrM%D`S~b;DXZXY)*dGcl3@@jRH2beuh z{m>UuL1XBU`^>ZAx+Ur+gq{Eq6JzWSY#SiPEFnq`yQ9PxRP`!V-S*bw4PXrr?AI4C zwbu+eLzvCu^YT>#UcK3CR^kOM=stKQx7VkBndQ;MjLadACY5=pGZhI?(8c;ja-Grd z3BSiWPH8Y2vZLU4=>Czq<9c2KBSl$kWNwgTjT;OWI-eNtc9Zh|Q1*_&ne|cLZYSy3 zPCB-2+qP||W81cECmkCd+qP}{+|M&JXQt*o^;Vs#UH82|?9czb*ZQq>U94sbRj}%4 zB#F@6#cOmHNh<=_@PRitgwuz41=$uV^zYS)iZauSM;INZ!z@XNn$>=r=Wn*lY$&#& zny(T()s)(Gn`d88IqP6T`4^O=PLdExexcMY_(jV8CC98VBJ)nKVzo$Uow=fk7E#{_ z9i&CV&moLE5kXJ>mrZZH^iI+>(H%J<8q7xI^f_b%@NCqD#!0lFVS`0pif@HK-Gq(E zhb=JdfowA3|AYu0c-v|FASs|a$HUwY=&xpRa{%@KKm{SsyfZ>G#sG!w=k7Tmi=tvn zk~{l-sO|Ke{{ZAoXEV6s;#sNW?Hz;8h$F>PdE5zh9=vJw%q^rLON5)p96qlfl$u$? ze%wa53Cax3kY-U9Lj;p3Tk4X5cuCX#3HH3?uNqCNvmJsWj)zHAM^ZttWdK0@s&ye-1yEChGA z0(--|^Jz|)0K7-;E|v@s5^36?SLGbHo-9NF*J{RWGbdRV-@%sjtlK`z3|lzs?a;XM zoMbk)ithG_lp1-|!ivDi#(uN2o3=_Xv+IDL$4814`a`W9>Fbkk>KlNj%j~7Wm-2{q zV~Sy#XtZxMJ^k9E2}{Na18gt=ArPlsE=2+mtwG22z;yRkyP5=h*brG{|LBMWa%jby z!$uT~@5jgSJLcF^^D$wI5^Pvti@24Q8qT^pWn@}rWN9fTyt80VFR))nU#)sg*^xMg zw?P#2Sl#jY?`reFvX#Pokb}h=MHt1XfFlxY;M)7~x!}mVLOEc6UoZ_5K{t}yc?zWp zf_aK;ZJgXI4JVoeVIxW79pW-45HXI6kDUKxi6Q6u3D6PU<&6v+lp0dv1e6a3*2GIx5!vW2%*^AbA@9on~6-&4`mP~{HsZ;u4FRcWGO zax%|K%GG{GB}9=WP?nkdjiz0LF;J2D8>ZPy{fC#s-^eET7rA8-f%;ngb@W8frv{ye z8!mKeo8EEzLef#j*T*p#Die2w6yBgGm3FzA>(M#9Q;S}Goq#6cw}=AAuI=2F zEaOps%hLA9_@=Hcg+AXtH@RppAC@<*4|>4o;iatcGud1Y{Z|*kuZhs-aK+F%3(kVv z8LGOdm8700A|azN;gQ#e`{LNQ^@u#eob8JR^gWY>D-PRiMlUtE>-Y9HvbT4I1B8w) zwVc%+$o~Db?Dtr*3v4utAeH)7_w#{PxuE;pP8%BzZToDM9=RlUeY~zg{$zIrLNb8| zH|YV(1y@6F`N%-y1i9$tYjv;PIOA=cRu89w1$S3QyebcOP*%O|fj2SgZ*vQ@Acon$ z4}fl?aINLG6)FluIqn4EZ?#{IVARk(i!6Y+{9`?7nzcfh<(IKlLWXq(R`e_8m~T1^=`Y5W)7{##XV5 zzf$b{uWgNdo3%y>z$;x1u&2rX|KpV|V_^S(zSYH%zT97_Jd)RbE{g!#<{LIqD@X|t z7k88dWT_qPlCXw9NCfwo1H-Q=zuzAx#5<#GvIaccs4D4~3QHd!jXZdp%05q?vUfIn z165}(dv^+EEx7Xjkqb^R$gtTj2BV7>LkWl?{Ua9?x6aU&0|BJ#d&w3xs#HeKrbVj@ zFkb)21)=|u3q}JV9gm8a07%E|qTfHX#{3zIFZbq3+P_vAGg0=OA+xAn_^HNOA@aC1 zg>En^`^5_G-;R$z=YEC+^~cffG(s)%^?2OgEoy*rv-!95f5GcugqCfH1V+Cay=pBiLJTV4 zJ0#g(nIlUYFuoDG0SL!S8XIyHiA$kjJ9yxolT7W*8(!!J^F9UrdTBw#-|8Zx>^h)` zu@V*8_|(AV7$^ zvLbQ*86RwMX?LN$egTLEH)|&bA)epPbsQUF!6_-Ennbs~!K0UDd*+{MYycHq)V~!S zd`s7FT1HWK7(hkGJujatj6sn&nZ;Z<1pe>=i(8X!SqsNEaw#ejZ9Qt*vpZ7QxTwkd zEB`1(#hM<*n$OP%IpFJu<267u7+Gm~g@TzL_a7CVKW8vprzVpPMLyCc(cBbvXP_1`>kn>l%}36-rjziGY%qxn}fxC?W`neBhsez|4ET^th% zvK~K7&fR(9V)G5y=A<}_q(d)_jyu&T&D7_)wYOqb5E#aVqp237#Ugez$Bx8w?gfYj z$&I+B)ZUkL`vE0gJ@~Elza?GAyw7GsV_byO(vFM|wGNfY2GKvuoE^SA)ALdpI-*X+ z4gX+ysf3i7nG3@gjn!n3q46pJp21HqX#m7ATTn6Mof-4bAV&)M^SK|5J!yobFZ_Q| zz7&2*D~L>JRfGX+A2>GB3MtfUg=X*OgJU2%)_`AVrT2Z`n&x1iB8MwK-4Q z;V1$yj?&y9NuD$MF{gxu`S>s%*bF`}q^>*%0`a3H^25rUU`kpLeB@b}(de8tM8kO& z`4^Y^(i+Y(8fb?xl@a#33ycCRE>_qtpDp#gxr6o>DXmn>9r&>$g~ zJqCbJ;?^PrIIrvIwQ;$J&K@u;E~qp;r$DTKHagF3H5h~#&L2q%#ZWL3Wa6DHUm4fS z*u1q@+FoGh_Z@O4}< z2$SmwrRV$u=3RC!QfS%7z;^!gc^6(#;5sLWmQ7Ogy21Ic=?uS`_vV& zj@IBvpG_qOs4>bs8i|qcanbLLQK0Gq)&Zx#O)OgTPo`_R1JdIfKR|fUKK_96&Lh@4`tM3C5EtKA0=32{*)+xEiPziJ@*&AVQ1>(s}`OXys<5;}V9uV~jta!qQQ!e{Ec&Lp}r0UjKyL_Xy*Hh=^A+&#{%z&^|z zbHr}eAY}d>8GMu>ByuBnH-O3`(W6e(eWA6H00b13c%u^05ll6Np9?UOVl2N$WY!oK z;{E)*qTS|MQNu3ID!nh%jBGpkwsuw6^|hwwWyQe5ii(9D8V1|%XT!KhH)ngOzgxEE zgE@SkU0Qmd{SPYsHcS0Md5vm{uOBEf5|f9|MDJ-rwey5gKyupIx9icum9||AlNW0|OVmnT-4XFUn>EdfHbyV5A?0_y11WRB*SkAsgWD z?sk9?=!OV>gn2cZU`L#4Q)BXtck2pSc8W}Qlw~g?D9@#k%w@ z$XOST=^Jzwe@R0yz_-Z7sF`l_KjUdR!bmYWhwq8``NarFJ4EmS`IlNnvTKXsO))NE ztM=iS4m{+HAhpa{`a5+R1UY?%Xm=w`2Iy?uR40EBv1it+9atY?lssz@ZwhD?0}&B4 zR6Jd_!jnp`Oq>V?doa;TQYWWqOrUgKN)2T!q-mZ5v^8f}5}6>BYg9+&GP_cJk7;*6 zfpdSa<)y5L<@EHfAeUx|{FO3a!Ci-B>FO!RkTtfr)eL!&8$@d4C2yi`o^v4keV@Yu zn;6i_z|lUG$-o3I+_Qza z<OgjsnOJIsq5%GRC*C^~|@&6IgK504x>@cGqtOq#YRSF^4GEPvfsu2QJZu)*)g z)vD#svkb~Bj|Xa~z``jOTx5<$IBoU|miT!ZXU{l=(Y0e~D&iPpE2}dja)o}s`%bKz znylPX@sCvTb7+NxA@~av8*XbZF?e4X4Zu9`^r#jq2p4hurO0F#b48iE2rnq{nG)sb z=omVhjZ*?l7x3+Y5QdE%d) z{XIT?6ry!O5(99zpGmJ>R;KQ~}$9!u-9P z4R6EU2eCTnfScs0+yFZogsA88Y>Hw32fD;k6W~87x1Ag?XoW5bp$3qYhlsP%W{fTZ zO5jXd0{^J^G^qe9lc{9e?mr9?d#g{GmMy>LG2UAI*=aV$`K-32{C!{4wN_ixbVqE# z-*byqWQknE^vj^-xO>^`HoEzpj?P95_+FN-b#_Fu*jG;$zgZIXC@HZ?IbanOL73=@ zcYIJ2{w=e6$rZAy8IMO6t#IeecR=kX*&vXNz|T3FciI$TF!#pj#TjxhXxId`Yl*@#cide3!zc6(?Lso z(Y%(#oS2Eh$bv3 z^vW3>MJ3~yvNlK4`40d_TBEsK*x){1G05RAv(04SB$(E!n$zUMc3aC_JD}mfpvKFL z1kH|&C-mco)&_)Ses9YF`hDJAJ>9iGet0jt8EQLpU+XBYR@e)2OgQla9uv~RJ6l!izkG;^_KG$m9-F zrKxW3-raWN9&(&vn!-`1`@->tkWpb2>y+#IhEX}ZJ=Nj$v5vn}BT z8u&vF3D`rz0rZ0`2Y%OwVhgCSA>ZiJ$K}V{^ihF+J61rqX-_jyvt26$H)tTWf<&|{ z3+PEW1$MkyQh$xmo!$CKUK2%yLCP3B%KP;{zf#=P={~YR3jac&(bx2o6EgiMS`T^f zoPp2`CB64@d{%hgoIIG75xqN^BE35qXNk+(-r{C^AhBv`!7#7BaBQCOCJRa_9fWff zdd|kmsB~QZva{H_HJQM;l$gJ+Za9{}!?jd|g!juZ(A(hcXq4EuTCGdw)l!X6G_No! z&!$ny$Ld@U^Vq%gjG})spGJHzhQ)7SzZ*@FHOyatKF7^D8aQ_OY7$Ak*JEWxuGPY} zZ<_1+w2SNweCJ_%mJ+jYweNl1v8F>$TEty}R1?PCuvbgK{$};mA9OVyl>DMelKo!$ zRNL!%H$SYs+lM>AKzxxqCCkBKyarek=kiIZFmd?fyLy@fHC zt_f_Xpnpg3$IGJ}JspwD?$i1(&u`j>8*)KME26o{yeq`k8N4?_wd~;h#x2O3P$g-P zDME9M`*rNm20qQBqkh!^_;jO^TIRxFfaObT{_ZW|{Waj-Vfdc2`cT9eD|G|D4B^3{ zROR{itXap6?mk~t*Z;hHN1C2*Y3s340){;&yU!~x{T_oa{e&3*&dc9y!*Zi8EO?Lf z#0QG99~@YxMxZMZG+g>5|HMt>en~8|B%O?zL#+b#eo7`(?+3! zlF-Yn6vUn=tPB%_GEk_TZK~-YpKeLM_vh(bpqo%145S2!_4bxyMyw%blF z*w)<)+ibo!XF_WDPWo>O7O$HG6r4Y0x~k7p>`dTutdc2TD8m1tM3KhVtj7S4W!)cA z>1D_v z!|1{G?S)QF8W&Z$qZ(TxPk_HM3ns3G{yQO_mN{_yHzEGX^G`zDefbhXNMD(p`dUWAE)*V{gVSD*jD~qk;e`w}mGUAv|_4f)>)h z69LTH4k&3gd;CRctOnc?tUe<|n!GfhTELxuDUu3_@df!aOPwn65k603$H@qkX3=E+ zkiz8DoQzUnfR&|HNvmi}B^VB{NS|5~fc>j-i>YxSmGPzY{>yIWV=#s7%C=BD#6CJ! zwP4=1#ATk{ve|u(IcAC*VNCoxDGpM$w!@p$5+542j=6V$#GezEfrK-&B{9hokAA>4 zs6OAUkn{t;mJ7CN4mI;TBtuNY%8AE`&{HdFFCgB|gSQpuW|IJI^*rSiRj#2WpS&xr zYM2;+hay=+VZE^sVk;I_RghaXX;rQr704+?+yd{!n=%ICM;S_$9&Pe&SZv8Z^hk*o zs3yNDF?-b!Dp#fCGb~^K{F-U3%5jWosed&$Zw5#q#Lxr%PrH~UB0( z2$DXHo9+#>EF{CN%YC zOQaBdI`{aV)T@+HiQ2g!B}~O(Q@$RpTDov=*obPh%1CeFzHLV6)$aikVj(?!>l5rN zYm&aHF-%WDLac*Oi?hB~gi%LMo4XMMn$qr+!N?+8LZNZNDO_nGsxUM`PW1yI`PqAf z1W0~H2MO++$&a43&2oE_pR9I8anQBCW$qHN*36`ujc|@6IkYGx5*E#gxLOADv;dNy zwAwIBqbyc<$3>X#g;{81SzxM=OSLk*B}$f%$vGegSCLE2n(K~0?*Z`9P4-=G4eY^d zhuQ0tJ(Cwa4S<-y)7U+h`a1s5TPP(JPi;eh>rN;dPxNl3-1Bn9La@{r_4iY$penaQ z1I+;)y}l%&=rjP~UfpWm{H(NRTvdOA_pjuKSR$xnL;?CA$xr05S}8-U_DejpFTA$f zFr?k=ZU8J^LF)3UJ(q^9$+n-FTqT`uj)~Z1AblG0FMrHw3^L>z{~v%gEihb@5#=x_+3u(ym;91dYb@)26Py%^kV(!Sy(HTH=OEpD`Z z77*FfnzYPRB%`w4XZsoGp!=47Q>jgbUxN=UGRV#-M>Q{W#Dc3|4@2ecY;*;-j3_c6k-@;l+ zH@tufa{@b-al{7FdEh#B7C<3+nQmj#c^p^Hm4nERI1b+E-7#*M; zmzqcz#+gw)twT=#Bpv-gsCjZUqDkIvwX-L%+XMO&&pRq2q`17ukG<(uJxK6H%1+y> znu{ba*yiM`-OBUj5vXEW0rD+ag(SDl5=5HtA%~3!ot8isoe`KKOF_^V^$S=$9c2b{ zQ`ep%c=;yyR4#w%Y!px7+`Ged@q9UWP?@Y%tHhw3=;ascU6d0o2rx%8n76S-@gKMo zsi{VrRrQabelMfc-g_8Xo|`6=uR|)l&ov$MB+PqjS;{4(=nvfwy_SxP#W@B%O@2HhZY+~EcEsmr z=HmD-t7cSJ!dX7PIe_!iK%YEIX|$C=Cp)}~&74gwF3KpS&~;qzqP_FBS~Q=!l5@Y< zdv9L&RzW*4KaS#Ih5%E{SF80;c`W)*zj7e7TEc-j=T~kuDR)G}21X^I5ZDd3U$!;&av zs~SVw$eNe?#pdk=4s+X1^{dz2wEt$$lj+@`VRx0|LyeOG0-HP z>2P70VqqK1uDJBWgOm}{`7eNU_;c%ep$wPBGTTZq^s|_SqHX4DsB|PKOhwPH@35!$ zEM>>j-?5dtiO*FkrxHt1%b6ahC=DLRHy}R{=9KhqJhF(JiS%>IE($0l3|=JV$$0wc zOJZoKJ=>RZJQ`GIhv-9PrO1lZ&LB$g|r?i*sMs>dvo=LZtOz^bMxODk4 z|B;x@EfSw-q5*Ud6D^%ir540y`xKhHD;TyF)AZIE1_`6&*L-w>MYN4G+DemZp#?@5 zRm}9}ImjN!7wESX(xcLQ-UA?Vg7UQViE;QFda%(D5`$+2L)uMmTyl; zqX_fby4kkF?+_i7m_8aB&*Qaw+@`<0r|GZO@4j?gO1N}5Hj|I0oc!N*q>=@}vjl?< zNC%vyk}c6yUXTYPTC1dnLZyBnLdBJGh9!WY?_mf+z!(mg9s9FHvHlw3H?Ot?Lu0WT z5+zHa-20;*0-Qlq?wGxm46~Re-nC0s^{4GE)olcgDJ2E=3CRby@)v1JA_5{LVm_jF zL=d@xlqbKu8%csAY(eRx$>|fl?EJJ#rJz+d(dOd+&DNQg>aUl;*q|`dZ`8e}< zT2t{E-1t#Oe;7{wtI4kXd@J*+K;|$=1SSxK@Z_+K+gHL(_3i*S@JPGZwC#j3SQR1j z+;Aj|>(O_zi{uPp1;aXj+`dQb_J}Hvvi4Ja*NFIP+BmeKttE`|FlxCZZ3N8C@{rI$ z;8wgM!fG8XR!+TzRczq3`3&YDt^;r^rj7HzaY3!6L3oC@#HVWTz^|5%an=20v>I9E zxaf)tJY!-w>2C3gCE{h+1$Uza#To?Pxc$#U%&M^9i4+0MoN6{=Y-HMKKTATrs46l- zj`_XIIP+*LI0XGkV`w}}+Nb(VhZLPcm_sA^K6f>)Fb(Rw6sswd6VHCPP1wG9`C|r+ zOp;8rswTBy-(t}3=HuicC7|d;eku~5IopG61Oq3Hk&#dWJ1v&e31>i19ztp;A3LA~ zGz;EFjPm=CGr9>#*lg^m!B$*LpMq!sDRqM@MR<>i)=gl8Y1nF?uPG0LS!N&)tBBEi z7;`qvWH_OQC}?GXuY5e_S3kUc4a68GhVr2o%Wj^lQc#|&s>HC?R0tQOuzC?HL>9oo zdigIRI_a-7QfI2R-t0qw#Oe^J#~>QkTyBqM$?aXqV>9dTQH#)xi416I9`Y;6zAX_R z2-+^J@w5rOS#+iL{Ix7KUn&Vdq;JgHBf(gJY{t7)9j}L}$^aKUBNl>jt5o>-Ma~++ zdwR(LJ`tdwFi{lRw|2QUO>4>+*GNE;AuH<8B2KkI? zGBLFF+~y>(Za9UhzF``qGvpo4G4ab9qT668Z4A}}IJGbm;@WIPZRD*g3H~BZiICaA zu=^{{$@lirhO_s(G3~9D(q7#>jvk6+aT-zyL6UKwh7P0mck7^kWJuO4U3+fo2E-1; z{t@ACN0&+tbe^1HvzQyR>H(c@E2| z7#6tm^6(7MLEC_a^}&3&h9mHb)oDf$MMnpIzxQJ3^5Y0KlB9JUOq#IU1}Rx~l07P` zr)%3A^YTMj1$VRagr~V3^fDfG?(R)M>xR|_Um!T>1w24Fjy-b?ycUb#V6Q)FQd5_3 zbMzX>sUiV)6sD>E%?Ypm+?PAH7`T)TUn44Cgx+RxWC%42*<2nn*D70THG`MLdYdeB zKB^5gtfHf{zxm;Ie)j4_y6y~9NYI=Oo-O6OVnIJ3&c}>lsGO1-$T8oc)Qd&P%@i~1 zZ8IHxZPO6FOvaiHf04z{*WGO;*flAq^l77+-&b=-&u!C8hXdw#i%Qb0(?#dU#E*%A zeP_DA8~MjGFR=|Hs`DYClwW=_s`-hyeRN)#JENU&h8WeKtfaGSz^GEVbuw-ys`&9Y zU*Jjkg2|?!yY=RJ+hMtzn-f=a^(u|XJ8O5&oBH@3py^W44r148VA6?5?SuRs85tPH z&V5gZVuqLMzbg4Dglz19c9CrASKzNQL5*L{f50`tgM5c7bHDJt5y96pMf3+EpHJp& zGeqRydxbRK?(Gl()qRCkt6xJ;*n-7kh7S2>SF9iLcd?_tV8%vs8pPNhdjf{_pY$4} zvcy-lr&f(a(d&z>-^dWU{V(^%j-q7JB^xZqSHKyB_poFuqg>Q4_sB0dd}IipR|%kf zV)Vhyzyaq3Y$*5>Q>|m}d?#!1-38M%mQuu1`m0R2%=^T92}-5+k+);TGOuF~$D#GN z62q!LlZ%hAt#z_|I=hEMVZwarOlN;g?uZZb@w&;?Tpm*NJ0>R5snya)4p^%}vS)iO z29508>4_;mPrXQs26sQcCr#1-O3{G9C+50DEVBOkb~<^~-{f%!pbX)}@~@<$oPqQC zpm=Mf8|ug)2x=BWWY|zU&tZ$3t}|(7?)qpngdf>N)1wksp0|b42V(e67=@ZQqjw;l z@kU}+S#?zw^>W8QyUMK{0vL}^P35L0v*I&3U|l0O)@hJzmFlgHjz}GAtX;GcnXwnl zQU0(aB6=ev+t)2g(kd=_k_p#JDdM&S`3aU!HD3f!t20}ulwM1WIZH>s-+H@HS*emYyxF{Hdd>WJFr|w zeJIh$5~EH2*3UkcRYMT~SBYL|UccN>?pql*toa*~xI`?8hN^~lN{c_7IZd-ZSSW%y}Rvq~gAvlUs?$l+sPVyOkK+Kez( zkF2*zeS~pp*rK;;ZDNv>{vk&4FM9uK@JYu_W1S>skqM!zo627(w!ZKHCp`gl=MG`GS$IGMqk#V z=FQP2szB(IiIV#0CBs#^LMueEE@a*s<#XLIB6^G2Tq7Tnk7=VI`ZnG{`*4m|SS^Su zBQReMz^M16`9FQ-mkVz`oy$4BA~_g2>!dAVI`Oax&ySw1RZA#on@4H2mE zebC%*el)wZzGNH|5k1-esJd90C=kV4ztslshqsu1ft)X`y*Hb$3OPkpPx-g6X8>e#NP}q?aq}Sf;RW9x=`oz#MOFa`v;ZF2%D^yAp4H&cs;*{ zi_Br$%Gpxv#oJFo!)y(iv3=b|mu_%Of$VbTP729KgIxla_?V^pRC9z1k6T^!AYWcL zuX`V`w>}(}D{)>+1INqEnaK5YqaDogGflY87!7y8)Z}8Lj~GJZ zs?%fx#8FlqzKubh3bqaP0_ZLpy|>&cs|-jtpG(agdc*vfAV}$Fv0NBk=K`#%21=Cz zZe{c~sTy#Q;LrR_(6A=-Uqsihs8NlrzlmGD4Kblj(n9~LlSi}RL&rg1zqSi3{9*uX{ zR`0srqlAjN<*tb58ueBPw6Y}Lt|tC-z?z}9Wd4fl?-eWtSU^3?Ay+51fJb~?mfc&D zZ}2aUcl0735Ia&u)grWbgZ zwvOn44@fT?K|Kq$WhZn6$H@j%H5~dl%4QeQ%hpXO?Gl3%cgODJG~;0zOp32(IN;1- z0o<{=m8cZ?o5gFB_EfqF8%!&BpIL4W-CILWeZE z#LpXJYhuhuAS6(D2wZf@Js&SJABG;@jOjYNqJ9gP(E@Miv*Spx-O=+2D6zMP_-@1p zE`LdxxnW?R^yh5%+|4eki5#vz(h}GWa6Dv$B)P2{ysxqoS+;0f8rvk;mPYSZ1__s# zi8kXSO)4ccpK(oHZMcV$R>=Ol+4s*`V0`a@cTE6*eDnSI0r>l0+aUk*ED*ADF!|>g z@U-w;lT3ViK2{syJJ0QS`>DT||oXExW z>xt^y_N|Ac&={En7cRhp6?+4Ge?VE5b8O$fWJe=ire2`JSV;);P=a3KU}E4y?@EUv z#kuseb7!CLD&h90)?9;;>ZDpsLH5+0Sg|FQ%VNbDb1!n??#XXyr!wa{Yw|V!nD9l- zbWww1_>kWPA|&rkTVWHY@-db%mFLiO=jK>iT1V`dhXP6F z$#|$jG3Rd|-I<5#>a^$gt-;`3m(Q9CS`Z$(4stHX9F5M7j(TgF zZt-?Boh)-Zer0F(@qC)M4B}VG@Dd&m^mBEz8POy}usV%}0Dk{!b7-lRsa)_WgZO{9l&HB)?KE2AkKsEQ@1C^jQ!Y|Bv1=OcPqES&3D`r|<;JO*UPxF3NQC-@XN zYYJqx@TdY`w_4Lod8=tgMa@}a<->PeV#Vu`w2i(5WB!q<-+fo@WG-_Gc~dXXC4Xd- z^wulKiwi#&ll1;cg_lTo5{Z0y)%Na1P|KlqR-5dhS6(XlDNt^fmiuDudjlK2f(|=Q z*bqqauG7D$xS}p0-m1I}x*dW%zEyNk3N8Et8WOUDH=UkQFsOqUenL)j*~z0FJ^7=? z0;jRU=3W}Y>Q*Md4dkAx@v8&1IU0^bwTKSgpg?ubf~MZ8<+aCQ)q6e#CtYs_h7CoFxb_W z)3w_&-MOK{qcPpiz0u!}C<^XlY;qF1dUeLu*6?E)r5Zi++r43NX;9m$>j!(I)SF;! z(NLG3#b=r8I!S($tt}}V8{T^R(nIProt-UpM)R?nkDqqsYyAS6qdaxK$$8)DbEe{969jXi{oDWG&cu`i}rpC zpPpNfR?%QH$^+Q9_?G3W#lBGoPwlTK!A48B0~aN3ezB+X`pXoqOO7Ga^UF0s;p(n> zChBk7$YjGusB6PZzU|_-?=6YY$Ev$?R*U!V`pRC?I{C_7yS!BDuqD1Ian_%{J2g~9 zdWM@YSDY=rED+s51tgc|;o; z$&IVhRjaB|tfiQuv*(|$hL<`zhjV|YyVK3?`+Eg~y-taYQ_bX2u24Xcwivxar}bm2 z22WxNBF0#kJlW8V{f3MX(yMoM@raZM#OTM=h%e{3s)>m;-K9fStK<)0#B}l}WMi6n zPK!BLBin4|69WUMJ|MqiVa9kxH#5JziCT|USqSsVIKD7v8fz09`+ZBEF}vKlu{N70 z&4)$O4mOXU+0b(q!sSEUR9b@g962oWqIt!l%JmPyOJ|MIlozB5Mh^p*6bG_tLD=ti z!!z~YmCBD?BnI4nMAym<7M+NG@Qy|^IWzMCl6cv|Cah@} zF6~xO7vp8noQhh@hFa8^SX^*xh=7iJb7MoC{nmbdOJ-#0L7A55oeX-U^>-P17!_*1 zGn6(DOKUIrh||)jQ_jc_QnsBvP(>*uks7g97jX%kn!&O<&5Bh{_0!e!x?1-E*ugWk zvOoCGJ~&8F86(4p=u(+WG`z8-l7^ ztMA<+asL!7MM$Z7_C+-is#`iq@tLQ(u|nAYW}Kr9(|P%7aX-jS>0M9AF4GTXZL-Ws ziaqlKaVqR)W;A43JSRY9agp)PXN|et-TjRWARa5PFTBXDhEY_lX+vYxn+TCdZCihG z7;tDuq^oRJf=5R^q`Va;VN(RRcgTmOUd>5^rzO75F+g}Kf*2@`(QkU#agz5^vLDgJ zG&N$jC}Q5}qcF)6`x}ELoW@KiIqebK7+I|Rbl@KmT@ARQAdFWPY9V(*WPZz~Bpr@O zxk?8RfiBerel;eLp%ds4MHdEuy6`O4LJpTA6dRXTkokNfG)q89NJ6$PfmQ6Pdj5ti zEiDqx!+JlM0m`TI%(G4G{@q&2_ziDIZ7>`Ry;?=>e3o!H*3%*E{w zVZisYPD^R8{EP#6z#w8`26^x^1Aq8$4LZM|le3}!6vcKDnW@v1ZeBXG&?$WQ76b>D zb5jI0)R*PwO!>$>m1uk})R-r^=Vfdo%#3`3dj7c#BSi$5PB2yNiTNaKoFUTNN0O{z zZX>jHjpcNS!PHd6%LWZAb&0F|>FE|lg?3iSm%5wd{CfW0!`I*%XFxV0(3zD`jYwAf zwf$bHBuHCP5yuS#Qvd7qzzo(xOEc!v>#TKcqd;L+@p=U@&fG9>O3R6XARgYj+{Ra& zgJty_ZkqSpdHLx;aNO|Oyi*Mj8Od$xt0LWJt&G0?qKITEjCoI?qMBafU=kX~SKzWQ zZRSjUaLp<1&D@ZMY?EPcttr`2o3AW^@#gEe5%)6bOE?E74H zSk=9a+XWLh$7g!-L8t^gnGbQ5k!TxU5Ns_@z<8yVNFKn3?FbOnr0`l{Kn=X}cY=PNn!0aGQUh-2rP7Dc*j*z+Iy$}A)?Wk#VQE5}F2@J4UOhW3-Y4QHC`Rbf6_zla!!}R?y`YBt0ZqT3#Yc8#q0R>M!B8NjFm0Pi!H#D89FpQPXjUq(Xbk zGTK93AoZu+h98wMKO-lB{*azr11TBCV#dkx7VXmLSSJ5nBCjd=>t68$svdZ6o!7o| zWi%G;PZ5ehsPIJ3$_5M@KE&L2vW0iCpy`ItU4L*m_u-%-Z^uQnw77dGBM_7Aj9 zS6Y)FQ4*oJUfTHc5ff#2-Pil;Fl2P?#uSVAMzpJl4}fM0d@o z66e1xKt&xlxQ%x`(B1w}eXt39f^CsOf%xam7f*W_a7g4X zsh>n1M|gcTnh_fFJ&{DPF@j2-!KsadGkird>BPiNVGb9Wu z*m?5=nB?kJY`Ecqtu+~GmR@=I2{OkCnO=UJj8;kHJ48VqYhZA@SosLt@g4+Iyk|tv zd0b#=<*Ir*s%J@PDJ2@AxwJR}K>VhcEeLl8a;a;k_!yN=`YyUwjjsgS=~o*wfW;*5 zyjivA?kk1m@}~4L3S=R>$u-1DU@i^~zEGYpf+tbz=hd^ROcOMb{f%R@&kfft^D~aQ z$u=?2iH&Zn2^A`u^>rt3gEAM@W>U-kzw>t7$(QA0%h|`US$HKc@>VWws%ltxHwQ^J zS~d$XRv{&ain;e~);9BH+4G!DrpZ<+w$H6L{+6-gv@qj+1m99ZBtZ(W@7Rf!v@#Wo zC-dbj3v2u=RiQ&0%{Sc2;==D0{(>WQ-GuvFKs*rqFvk%4Mm`|)Dpf*<_4#F@G$Lkt z<(K!tVa3{%oo$MqLWNTPc>O-@C;M( zvqO=7XR3%tJCoHuyZ&5t!(+bs^|AKwEp_rOS+B=yO8yh%cm4t&71vYfnC)kxVvp(> z9-HdAN|v{mdXK*j^vew!`!UVmzgt!l<)4sxA%P)W=6OGceCgEKR%MuHRQ?e4U!oVH z-XB6=jbJ7Bq)c~-iY#jKz2F0V+d_LVKBiKdd=RMGq874go%ge8G4opfIGASXJ$FEg zk55c-vTa5v?*Xd15}s1c6=z&En-{R;_*5$_P#{I%dJ}E?Al7K3ZWySM1!g}c-t;af z5GhJjS{)F&zn1B_#nXK!xy8hP)8mQnPam`^*oLyOaTKA|!MHjIr-MhRFiYehUxXe;LvVjpITp%xosf+3s_ep%j)<0N;=91?EUg${&s zr^=%>^-v34&?U1uArD?UEDj#$@;RK#fQNv4*5n3=SXh5rB0b&f%vMa^R#+qP|M$F{M9-`KWo zYsbcpZQHgzJGPC?o1`kqKgpL{=bozj@z&`+-TgeUaxN-ljrLBgM_#Nbcuh4Hq&AL* z9kb3ig63aMbILYR^;5~~96(pJ02Q$ZO_fU>G5Y&_D#-|KXDyZPR=sr~k970ksoFZa z1)C_>)zrVOf%bMy)Y)*Pul%&nK_uGC%_hw{io)slI3Coc?KL0ek%cKWIFXOzBU0OS zvL#xscrW76*|7lU^__{Q78A22H$0KLp7$qC7tNw?rWbsa3@)wK9d_wjK|xP&oKY~n zw0)?u&CfgM&DG+~E8pdm`xBFjy~QHTo4JT_cfPw*!xV-G-dx9A42C_RGs=0iC~J zKYtjIIy?>}P>hb=?uRwJ?0J0IA3o*mophCuM`OVEqVw4%i}9KQL?Xr-Q4}2_C-p{9 zuQ5SCki|yfy1?JntGN}R$;R7Eid`XFBw(Rn$AV zd8=wJqdbpg6QpII+K9F91nQ8Td#CX3cLy0K7Vt|CjTCn*<&`Z~-q^ChW`t5?Z7Y?u zs`Y%DegkO7Cq+CPK}WIPZ+RMS$HqlYXTR<>?0sM;??JB@JMToibLKv&w^(?fx>efS zTlHzoKBTAhbR#rZ7PSkXW5ht(L+8^YF{Tj;9H zd|1wR;+^D?^U6QP>tfO0yT(gwLjb&nVfsJBcWl1dt4rg&El?Xd;r*&y;t>yv^Jc)! z$`C1l-0d|6WM^HdqsIHY;B`kYe^I$z*rHcP{xqc8Mc7a2X1uW(9?uBijxLj`qG}7u z=?_4yUn>&|@Kh6iroEqZ7xAfy)*IHYeRDMfQQt{?{=Oq@+DvQQ2H6n4ObrkuZvjsE zEO>wC{5^&2MoV}AVu{5@wxXZuR|%6^(f_DMTm_?1A>HE4s^vE$^2QS*vn#*Uu|<5` z4W8?>ylE!9HX~{BDYhrpq^(}%&DQgNKQq(UTY$OfOew;H;BZFio=fU}I%=Znol_w2 z3Y<6_T?#Dd&@FY%r+%=8!CcrLG?j5c zeo6~O(oy76k#av`Q?XmE(vujKcAJJo$>wE9K0!f_NE>VmxOcbKU`*I?PXm3TjAaUG zdJdnutIYu9g`>vRXsdk}HYrIrO5!1f1e_u$P5%6IY4^(U#*%V50tqCxIzL+LLly4! zFpzISzU^rjl?f~fQx=Ny)wf7H@}S}$Qv2saV;ZLBarvAj<}>{b`aHItG|~idiN#`v zH{q?!A5MfMa%2}{)$^`XaU7;HOVxzT*CsvH&ZokbR^WjSGl2i?EaQTnW{7hFcsP!L zT4(?wQZCV68#bV`T*DHYJ@Hqu0PD*}@wr`v!TF>h?&?2pVQ^rV1utB;Od3vE>h)#t zWUUHMjH16Eq{O?!4eNIqJaC^QaU9wUMoGSrWM`O)xG>BlG^ z1YMo^iR8xTXh4&_p9$|Xzq$7?%6rw9ZJlM(9blFDq*+=jCT8sJwFMr@x*z_6JKkF# zFE9Lr7Ue~F+zfhPqnK2kz|%$yH=yH_rQKFFsdwP~05DI#&38|~Na4B%L^~MoFVK27 z>6V)`kuRfAGwv*~Lb}+4u1*gzwfs~XDn1tcwhs^!^oWdRT;?94OJ+LaF;tK`eeA<} z;=Ge+mS_5<_DC%}_3o1>I1=N(m$JIsrnKbXAtz-CxH`0KxquT_1NS1|zUCgl_UYXY z^<5XSn5r2xmypU<*<7}+AnGYJDl@STO`?TP3F3(Mg za}jg-RP?dm3-OeK-;2WprW+IAR>^bZdUBEoXPF?XpEzXzF-g0bZnDuy!{23HA^&uU zl2-8siRb*%2Qv9p8kYj3QYc_d)~K&bOmqGJx6fVq7T-Wgg7xC#16vOx0^qk!n%8>=X_!F zmj_aRiyBW!4E^WRdvuj0lrHCkGc%dl(T0I_8SS1Qis0_n$u`e)CU?Oj@lr`rXt`~@^tP5Se40?b|*pc#yAm`sYzeVwO zR6LXMnL8Op_}@_PVMiR*y2eWE&wu|~!Uh!_d#zsdL(QUjG3uBxbtnFhRcpy z6rM?s<`yFo|4H;Pk~{8GlGNsFaoNfNAJ>$kKfxb9^*dYJZOj$YMV3X+!L+js*WZ(g zm^qdknX8Svt^{32nBx?K$ixMKW(I;BSf#aruN z@SZ>TAFHMUR-N-r+sf&uWm;)S)j@5a_~M*PKs$6^iDGPsBOH|;;r!BM;CJBp&ZnHe z%dxgwdy7eHvr>iTaLTUV1R-(w_n5$|Hb{cYU}L7-Ab<(OgGI6gaI5x(CIn~d!N4<6 zHwxi!M-)j&8-D7Z0)=emX2_Q5ES4c#6X-CDspNk;CV~<{mP=;HMj#)yFoJyK3UW3Y zH1-foEjA!TDI>-tZ}w@-lpSt3aB80xwo8gLoR;HUoW~84Iwm%&Kw&7{Lyr8Rjh-+R z=xaAW1|da9QOKJaDdfmVV$Fgqgr|q-H73a73k}^jTuVwZ$Av3*NJc_UF|dY3CNU^* zGSffiOcyvu<%c#w7#qG%J0fqGA$KqOx8alxJIe2aLgK?4i_!u_h@#V!(b|g>g}Nc2RT+M#&(90gO-C0!?;^kBneD>K@2+l0v4*b>yT2)^Rn4GnnC3`|PI%2Y+YGOHP>v z^@g69R%^e-zDK0N6fPhgBUir@5uSHOPl-P_HmsdJv!=x`UO9*K}OON-VS|gPFReE z@LNUEBf~INNpKl^_5|B{*eJ+e_-Ydob+qM!I>G-PtRYMDG|D=o7yRn_nwcPqy^r!@ zp@BLAdx`?jI8X;47f%@p%qZp8fbgowghEU#K2O5+~jMX)p1u1N68+IPB8 z$le`P(LQG`lt)YS?d19)WVTzSoYC1Jw29--k#j?FBm^@ghS9LH7wn_HJPD-)xcwm8 zlo66Mh<{yWtGIDN5<&tL8=0NS1Uyp3bh{Z}z8G^v`j}~#C$V@wKrT|ccf_L5L8TJ9 z{s5^#>S(W+_+&@nj;IW8g*!O9)zFs=hgP-qFR3bgi2X2!@HPjS zu)^Gy2+O9gvnJZSmww)Ss4(V1V6U43piRVHig)7Tj|`JqDbf8uWt96jZ;HI}HQKY> zyrx|8LtUh%|L{grKqh!p7p5f~Lvp{HQanllweeDV#M@nzi8-mp2*m4UM87O&~-(`rHHM~V4A?vMuE>E)up_P6kTSbyF63@DtH;2c?@ zf|+>Y>RuS=?gL8Yzx~uhJl#hkRGv05YzT`0|34=pJJ_Tygm-vEO!`B6T-^FeARF<1 z;))z0j3QU3H`eaC(H>YBBbbzkPf9SW!Ii_~-Noi)-#q^85jF4nAawGMp`=G?#Y}LL zw)7U`Sfa2_lAu z0!+S-7T*^Kf_SPDI`HGCF=p5}5m*J~jys2GnE|4vmYKMWPFNBIEco z5F`lqRFsVWE`IKmYV^~D5Wu0a%rTHV(MPE%p0R<`byx{VNLhb_;3{%dVq1={aZSC& zRp5m1?E~)I1@J~tp^hVsLHuNZ0HqQTAQvP4htRtWSa1PQMl3}3&&bvN*l!>I#u7$% z-v<{UBwIUnT@WUQG&Ru!3x#grFN14 zVY&@o0}>G>taEh}6_v;c{s#KV4{BHw`Ef?;Uz6`UaEX9;;`I$9v!Op4IphZ06Cx{{ z0z?oWh&M%~Z~BZIQ{2S29+$z|u$TR)EQ^{F3b@{-B9uS=X04UP({}q|oVw8GUI^q2 zBH2P1dkWwNh7}|h5DFegvuKQQ3G{l(iz;kER`ACj9|IiMSpzFH!@f7+=9;x|dW|%k z1it=EONChxx|5Psk{G!1;LFREIbZU$6B6tS)*9+rtK6SH&oNP3auW4pp+ENRZ9fu# z`f>OpP8Z`(r;o;NN;Pj4qD76j<|asxst-9N?vRhV0He?<*SNzzw7~`k*+2{w9O-=i z?x31Q@)UXL|HM*9e%P=P64-z^>vd2F>c|W4dE|-pMPb3zq&>KGaB|PrC}8X3k3A30tEEK8v8HZBBCyi2F@0Cw*N&1|33!9 zepK)cj+evLQDjUW>%AC6c&h`uAmnYEOUW|fz)4UM$q=a5fbRE4Ub1*3ENqc}0@Xm| zjMLMR8ZXbq0W{y`b+yk0Iryc=bBcBkJqwO<$wakBqwezZjOtrl#w2Tm)118*j5?i> zTD7L-#CSFmW5@jRhBevrL-ZBga!(2Tgt|}RCcw&wbnZiua`82m@boxg*74kK5RUFZWfnk3{4V2Ne8e~eFj<1`-RVdI=J4YES$Q$wp&cP>>_ zk3u-mY8&)j%kxnvhYHi($umwUHmlZ+U$Hz*6g1NOZ7p>I{b`cn8N&9aZ{5LX+3RXb z%4q0cug?g~-LaK>qoLnmUNBbu!wk{@>5zmg^uj>Nyry$jBL1O|=k&O6}_7N^s(gaYbdDB4L*$1nR{e>}1a`O|k+P2!p zlxqpqlsLvx`}u11T-bydGGm!R8&3Rnx<2tr5+ufn?xTd-%D}jp;xSAUy6RV1u&-fF zaxl&IBH!H_-(QjmTnMtL*k99b4vYDm(UAf}$Wii6M(VPY%VXhs!K_bm@lmr~7!E_rb3LFNK zupJk%^c=Wjp*D8?ia{LP_>8313dT^MnYGGc&F9=ont7_4WJZK+1e{`ccPB}N@G_+f zU!%g7-KwR41^$ohN8^K|IZl2dh6r~8s9Bp2RKsex73@9()ieDg^^(E*7JfXpx(0Dg#LztSRY96NJ5FL`F%51r^rgd|^K1fHgc*LVMxG7i#4+b?l zkV~RN*!#|ONS=o51v6$B|3a1ueLdIB0JG?UQFZEM8(g*5DgO>LGd9Q%h;OyzLvAUL z-Nb1X1Qa54zA7z^8jFv6zt`Lf@ha?3)11n_b+Eh4 zGAW&Fb=hfU=oBPC7pq%xk*<-fxUJtdFb45sb4vK#1Byj$fdw1m{O$J0U|w|#^|{cy zTGmLQQ9SmrleWQ*ISatbVyvuDvY3?)GR`@Ja#vPNl6Ih+VZKaJAgo0UFqg!R;vNiE zD-3)G7esZ{TpO8hOhmz8d|@aB-#v`MTwBT^i%VPl>!>?oDeF#oOc-=QBPL>~Tg_$w zyZmz7%=)hFt>wj$9)kjaNJ73zfJITv{0Bve3b_o;SCxyeSoNlT`0>}`r7CF4eeJb8 zA1Vf43Tr;dYDzGLiuK9qV83%)D93}x+nzx3B5 zZVnrHY2YnLp(8y5+}&0_Gi2~AN(;7NYmxy7orQ6QbN>3WB`k(vsx^iaHeq)^gsGi3 z@f0Iz^`yw`d-?ViSRMAzhX531#GKofFl&pgL6)DrL1(LH`89#xE~fJz8lA}Fsf?+GDpLs zVXPy{_tS%{^bK%ijr8e*>?-d-5LGTO!L#lolW{CROMH;oJFtbqD83ARcV_V)qZ^*j zYpQ9-sGGHajOP19a>(hfZ1~h9IsfQ}3J&ej6wVPiQ2?w`Ic!i>+L(|TFXSoH^(B#$ z?h4)YF~!IrM01;7v}UG)g>{KOt786W3!K;nY_&wJtH+|m}nL;ou_ZI#vZ^2AghW$bpvLk#K#BTnrG_gQl zXuaZ0GL)pzTij6L%<^tg%=yuzqXgjfb%(OVPBOvit!_wysGV0BmifZ5`d(L7zfuk%#@y$0Y294 z@&eo$;a-r)a$q$bF%*XJr0WDx9P1?5Ru|JkL@^HS+F5nP%Y2j(d`~xaVrsz8c91#0 zx=oa~hOJQFJ!w!jaC$fMeqHk2=>J9If6s$L-zTDpr6QahdS%YN)yUapzKsR{#cZ?E zS7Me4JIbT@nseP*?-=-UELaRc}*rjKp&pA+_%s0XZiCA19Q{SI5Olml(>o z?weaFL`Lwnd%;(-$s0Jrw4$SetyQirF|p)*K1H!~rvE(&oD}Yeh*`l-F;&i@lsDK$ zk!U#{l|i+5KOt~PRr;Xa{VaZQA=#ErS`W9I$+O+5(@_?*Y=yzuW?pptyWwDi;wTfa zeBxws`0{T4YUA6L@~qPQ)d$yBYjZZ7mq|p-OMj7OxW#oH2$8sk5~Hz;zx zwz?s*^Y8H71Naw4wt8|6q5xaOnag@<<6B>E;z~FrIAYs)H9?g1bs}SZO}Y$>(7x{r zsK8yg=j}KoX8%ZU0>>?DeyA8{6f&HoGgG?fbf*BertgXGdgM!I{YeKHo$ed2zRn?6 zbt@hu5UtXbFOpg#fJfE=olGQBWdlU1qM}nK9wm7iba;__BnjyNNDzIohENpUDh)wh z7zh-{<@yX?(Brqb(_CZH@ z^H%)WHoO?p>jC2U+x>0$_93Pu{(mldc29Bl1xwK-sKbp4eShk5ooBFN?vJ;mInEZnm7bAZ}ZR`I?_)P;MO>05;>pL^h?vcMuKJ_;hO| zd%ta&b^4NhCR}+g*7z>V!(J!oUCREl%Q;x2z5%-fp*)J7w_Ap%9ye(dwbU?!Y>Onx zh_KRKX2?(*1EMCIH`lYAlBuF0)(hDW>o<_<4?Q+Z{U*vj;x3cU@iS7g6D?yz4i>au zeCCa4pm0{la26Z#p&H*_mFMhM^GP=z+>9-xzMz6Iy~|D$e-H;2YTtcz~)Mrf;Def zN!>g|OElC#IGwa#6z#Ay$-oV#Se)Kuy2&Z!3U8zB-|6qDXk#9bLwd~va^&lw`26aQ z$)4Ju$%_K)>&KV!Y8f%Ii_J#bv9`UoI*oBqWSF_`wuJExZy^EDJQ|%!0}f>$xTOvO z?KChuJj4REJHo;)Zf7xH2z(j^>J~17Q2YlKeR0lBS`ws}Dg{k7`e>iZH7ru5)C7t@_0&v4!te@pz3I5<=0?fE&Yig}?`=ZiesL-YS zp+fn=(T-7>WzS_1ASl&HK`mAp~ zowd@Jd;r)hEkjgq)H=^Z0bD5Wo)gRs&XmY+Br8gH8(Lyttb+DBl740$AugZ#APLJM zvRfPDQ0@9y`25gA7i%ZJRt*~zgjy=quy_WB-~XA2R!ITte9=@k=3P3usv3jo?`@C&G+@AZ|pPfOxS zt4l7k(~5+#w>nDW$hsY@>ofDz!R@=~r;ASGfNmdKjqys9zsH=0)R4_fNM^uIv%&`z z3inp;Ix)G=)w(MnCJE^0R91TuG_n5d^mpm2zd|7HO&Z(;2ykEa8e=+2NH#0m7CNp` zOh9j;pat?W)g3VbP2TU8X@Rc`Sz|&tvtl|Muf1we-}VV(!z|LSPWLX23}+ay<5u z`)VWP%lB-z24EF~jJ(8JEI zw-L_2VtO-l&bU=t5XYh{;;2@ec-bIPCI#Xv_mlhb>&UXwHH1kW$^7v54(?blE7GPb z{5c6SWxZ0?C_zz;iLx$}#6&RE1T8Szym+5MSkP#CJVuOSSCiLn0<9cOjT*1<10=7} zLo9+Tpu}OU6@a1|bDG1^Bs;@Jin2b&OPOXQ3 z8|jZjr4aHi^DJh~0*c(`56+%qX{8mi?5S7G)Xoe{{i0VydkCvdf>kT_n7J2|CIu%5 z2}VI`z1!S-6^YruPl z?LVtVG&a%1km!}x7dW8+P3E-?e9>-qBrAN?}8vswU_qlOto2`CM7kV9d-_sj(S!f;y+&>5_MMvi&=-3 z58U%RGB01LsnoWY$&xGOUp+zKgTXN9>Z@t4!i7(c4{V{dI7UB;P&{Ao#i{OQSb^=T zn3Ffgk*w`gDsoO{c*@8{%U|s1CUetBorHlSV1?;uUs3OzXvgy4FnK2qW;=}2-#527 zgW%7rh$CpqbC;&KqG^nF1aeTBKscKSu7+{e8Dcwxy28V>y=btIpk5OKYfEP{$yYAx$KGtbs4=~;XH~*z zLTN|nu|WiSF;SDczr~PuSnh>{sFI>F?P$?K52c7kKnOE*11U#MTuRQ zr9C4$r7DDjnEq@q2`CJ^LEK|)X&lxSW8zRV2EJ?&nF}bqZ)J9$3a5I@-SQ z;V96*`xy30^G+wIqgMCUTR46kq^Ct*jmWO(hPcGcs&#srRo09e?(`W=~=KU03=#qV)mpa}_Q&y88Qa znTHPIKkJR#slF*5xH|&3aowr<<)55y3;7T0*2Bsk;>HfS)yL6vkm)tMV*_y9-a+?Y z>sa(s3ajISGwv@c(6%a926vr3i*=bd!yuQXIiBb@kTfRdEg; zL;s4_ERm#`_WM&LiLqTG?O7EL^JV{5I4Uhk52ZLGAzdo^ovkB_T}&of2D1eguaCNz zcA7A>zsRdQ&_^M-R2(6!EtpMR`|v>DZkuYl0dJ*U1N)>0$tLgJqjQulvjv9zIvU>^ z&=9OtO=L53>J&enOWO=XoIK!K>8NY{RbDy%!Y4cIQKvR9Wv#-}ltXA>Df5Q>We<%K zl>z)`O#G!2nnUwQCE6Zp+fe4-gx<*&wZ_SVZCQn;+w2I{Oc!gepCo$&qW?}g^RYM1 zO|Cyv&X-bugiuJP5O4Y17V>uaa8z6Ht9X*I94;KX^EiG>?$aLS+T?|-#*tRKE)&Oz zD#VTZND;+NqgioB`-{%pJwohE`_gqZ@(lPo207rgC-SYE0(9$c)nQcLZb{>#`8un= z;Jw!g$19C`oc1!B)S9zgUG&iOb7U6NGhtF4-Q|^0;3A-;lEcVbk*= z5Ie&yPF@{JuN>1rEUqvH#-ND-1)*e z8+t$;h`_G-vsQVSix)P5xhEaOfpsX&bYKG+&6IJw2DbozeX0i>C{xIb3Sz1^+d%!J zhI}W%`YBDj)v=U*as+1;*BS$m+x3Cy-z2SiovEr8D=m$jEq!-NN`oB0O^=3| zMeIrG4hLP>QgAoPYFTvBJ}9Aebn}zJ%yep8%1z2LhAo1BNxKEZuf^%=#3-q0nI^sC z%!hG>f;0lByD|hk{$YcK!ZH=i(pTG-{WV+b%)-6kOv(zV)Ocq?Y_!Dqz}B+ z`Hm6E0w+C;zy;!w(PoDGP3G;%+OCp`=yp?eecmMaZ8Cgz+obQtpX&dLb0#u!tSJN5 ztO?AO6rp(4c=|&8KTB|$1jeyBa6c)#77!5G|CP2&i5OV_htMc)=V)W#>}=xrKU4xb z-)`$%DBnL`pT?^Vo4e{}VyOkYUjAOBRnmA!+vjz!=Q}iQe{G|N6ezjtx1JrzdS(a_ zB4X?LkQEdonZlW9Q*qYB%8wcG4nyD0(t>u6ZBfkYi79b#>hkJu2c0>W0k(r6RQgO2 zQ-8iQrjh5`iu0wEz$9R!!j^XablJwSx+BORklqO>hqHq7$}{zxwJGh8?3bCEO~M%X z6{=cDZWhJ23O)86F%KyLG!rRDd%IBXEqk*MEWS<*{)#yFrRs!k_ar{ajtF2j6d$9u?ojX+#o9peBQSFre&Urp^hVNYgzMKB9VWDvD-2rUxF9P$R4F z6IKa~KxGi}Y%1q7b(;a-ph<6vgMNYIUw#BBGKmEZl*mea5aktAzh0LjQWQ08Kv5HR zI54bTbZ;qCmtPP_bD5%PlMWsNs@h<;SeVuSV-TqFE0AxBfPpdLWXJ~c+5yDt|>|=B2z)IvgH@>yDF;^}viK!Om@UvZEkdZC;eO%q2IGcQyizuVCX0(G0oc z#Q9x$xGzd>QSf+Q8iH?FhLzI9%CFv^V@UWx2+**|tke-Y`2=3N5aw8h%9kunK%E{| zQ)6#G_JKTmz_x3l%NT*8?3OdfI4zk?9o8>@+W%t_$nHL|IpEpGEDvs)Qf|`}J9Hf> z4ODD^c`GzXdkjpRF!cj2s^-YVBp)zuoZe0O*y^HE8?>X^^zrl6J@clc>QCYMm;jR5 zHPH$wY;DL<+f%6k4lpg-pr@ku1`G>@v@&oeqERq<$qQ=kDjc-|dNcjgvV+{Sg2R#g zMT<=TRjMh{&1$1iort_>hpVG8FM~}dyVLkuw12TfSL3rNow{=k_Qec;BHSo~UdR7c z0(}N!yE`=eRrzOSqL+-3+Wm8>qoB}j*D=~F569pf)@>NKw=G_cLr?`ZmyHeI5#GPQ zT?PmJhsGEgMV)QoLi?eeRmxK=s%I~EKDy7hC5nLi34HDL3~Vf0!HY-7Oi;G!vI4xg8$yUM;onM%?)}Z9c&6yejskF(2DGv`7)Xv_^Az|a zzDe~2^IQr9EATNK{n!^{KQP$A+g3lP ze7gV!c`cat0v9>0$*@&T6U&Lycch#G$)Zslo1zvxk0UUqa zelqop?7=Fo6kHUJo68CNRrSbt+rauhp+75~kmId3mQeGY@PjWre>Ck6(Xnc#eLV zGaW}+S%m(%K_h(D$XB;q$T6r&kqa_%^Qg+;Q5IRb`L-n}>9T^Q0tj@Hx_EYiz3xrj z3o81n0hP%uaK5sC5Boz=3g(o-l#cM}z=_`mcGJ6oaeA*~hBc~eFmPH%(X|HJP zlZ|SRcdO9;6604Hpv~Z0`A0-a>k>k(_68GAYAvFrSN=_@-2_RzBDxD@RUny&!Rzbv z(@s7(R3|SQX`v`$Rni0JXI09LsL@fTTy^dA9di2=R4tWoNR#oDO*d^A*P**Xypj^~ zKMq7)OwJ+$5oq9NZKi|e01J;5hybpH10$9CU^!k9BLG<7E|EN7I?;OjVyo<_xm_xRXFVR7Lru=eW&#YDzLCqmvWRbu#Mr;tl95#h#DY!7!DJr#0t($D@QkRx z?KYb5ssQ!Xl+Xz}{EW_yG~>HT3$mv7A?JOTj(g9hL`PW-+;Fh&VsG zm*%ay-LRIbu#=duhPu+^&@N}F@F-qj+$gqY13M+N8K^?T&}Zh;u#5NKGQ#lG=mSvF z@>bfuNJu<)uZ!MXa$9cI5n(u?Deb@6*n`*74Lz|LG?CuxF<%B`0F&w-eK#W^7tddEp!j;ir88O_k8&d?H6&*YW%zIxs6 z%1F$N<{Dkh2YEDY0ag92C2i${WXQI|jbJTrAPx8FA5^}iKq}<<70A`=y-?PbfcBsD z$?N3lmNkgt@+x&_;<;@s63rzP*}Vx>E%b2dbS#m4?Epu>$iy`Yj{E)>Y1ngMVH@bM zg?l60z7#+yZe{VX7~gp#(zB8I7@Ds1Se>C1H!#8E{50Xj@QYK|J3U#k+gE2&6m|4N z>*@yDt!@;|hE}@yGRp|o%Sv81vX^aN*S6GyXW`f>7oT2k%tyhIFh;3!;=!>M6>@(+ zeTxe-&CVE1O0n(dRWM!c;bSf!QQEB z67_8>-!8cO{ctrd%D*_4lV`-^8R~i|#5e#3Dwq9R4xztM2A8#e(zB^pgsUup?OY)} zAWG{-c`xf5l)J2I;}QdJ@tm_?C?wi$MBvg`jln`+=J=blg@h>AP;w80UeS`6##ykj zJ9N;iZ*AcMm-U$^m5=A^Z{?!4k{XST>Lec6muSlPAXoDoF#HO+&qYdLw|iaT+Y$-s ztKrROyD|1wdN35&@dJkOvEns1DuJ-I$)6lx?M@yj^7SLU^>6$b&n^3dYqOKKi(8e( z2lTz(e{ta5MMEHQBWmQ3Z+5hhKgrBGL~&-!eblyp?twpk90}w;$w`}q#fbye`B+FX zbwmWH8~}Mc3BJB0THov1%I(0)&VyFJuY*Dt_4kp{0RHKQy$vNxxD?yFD&A(GU+cy% z2yIsasoVrsCkf4$%5YmjG#y0z6qsx9GlSGfl$;rkxfT;fw90wz(=pdPH%80{d5+J2 zXWQ*HR2QQ70@O_ElRK&nl(@9zSgsr@bL`D+e<8CQ-gOCBKD@(6O>sG#-gpp1%uH@i zY$)m=sVq1IPULf@qPbFL5~=D9L|t`o5_{`vw@Lm?#QENsxGdwnV?_Ld;Vmi>Mq+)s zK=YFG`Q|;8yE{?43;C0^|2#8cvtXS|si&jBH+DL1Hc43RlBV+eVJzpE?Djg&d7bdI z5&r90g6A^M`3*VF872-}$B|0G9cxbk;J{(*b7Vbg4-@jG-Dh-E;mG!aNHa?GxW$A1 zZe+`ct8VxrT{O)}QjTAx0e(k~g|uu5b-$%McmIMm^x3EJ9#r!LsdtIk?b#2hCrA1n z(oj>dNJ<}(#`j*nA7?ulAL#3o^2_I5o*WrG zW+AaqJi**|8&^8q7-xWiuW+KY99K61J?}AOxYqV4xZ&AbnA;4%+N@twlB^lnxMd$z z+g4aTkC`X)t!H^(E?o<@L`9_*Jvp3ga-7Z{``Mma!l70?i-s5uvf2w70B~y7VGKex zn>L;D38&;%l_@N9R*se(3l3tm3L_5n@{qfhAwx{Y_aijSsGH>b1HTM*K#nNpYG3u( z4c69n;m*`ACt2~6m*s{FW}33=rG?CE8Om@jb8{B9L0D&X;UYr*POtC13&_PqcxP8F z9*MwLwS`h*gv#*mo63&Jc_M@X1X`SD*vh`iRKp1649>RIi*x@G;WD2QU>VXs$XZs?$*b$Bo(Nxr){J4q-@CGZSf*6su#^m)AGwB;JWRH}5!XZ1H>(4(<40;g83*l#twDUbq%2H(^u@g+GaXr`t z@Wb+1uk9>9{VWeLsZz63$Yp ziS(gIdA!zbtnSc|kI`QmG$2ZDU_PSaLlNNXD<_pgI+b4tFg}6~CUU;z1$KkyLgFqz zcB$L|7UY(@L!jVzQ$=W9bMr+Ah_j~nx$^<{w<29!FtbA@MDcW^?X8TfA7=XQm`Cqg zy*euW!7g_}ZlxIWBEoAIOYlFaSZ$TLtO9kuc2bX!qW+^*9DpCbL_9OYH4O7E#mBAU6@K6;p`|20s&!h5fn7;dZW00%WZ z;F0Jqj%%SnqOSQeGm+|FMzNCUnXLiCu#`U5>=n2DsL-!rSj@PWMx93b@kF3`4YCgO8hqw@EvaJ1! zKP`v;(ub<^MQ|BCl32=&0m3MNCO3FL^L;Cq%x|WG6|F~+yrXP1Gyz`l%G~Bhv||e- z)-CGb+(?0_m5M50*`Ed!s39wI?jBo2zUjM&cx2ai&mZN`w+c_zDkv>qrtTLcn_XGRryGlAG*)r%v zA%oZkd+kXeTG*+kjUYn^b-h|;6k=W!>}4XPV&rv}NLJYGW2bq~ApT)STB zT}{4en1aK^RrE5)zB$qr=&a*ZSZtayvq#*8`@w)yISmK9ZVSPSU^J&@v3P~qN36wj zLJR&Su!kvK7zJFM)|ZT|o4)bS5~EwWeIOtyQ^eaxr;p(egMvT+wTz69TR<|On=W1= zwwtHzT%6qsbrT+8in<~ZYn4C$yp$sv z*pKd&3af_}IE2I`LZOp+*zw7guG)OyMeDD`s8tZ0Y%z5KZE{ zE=$45%jM7)F>o5e-M^U~g*=c>wX`Imc86*SZZ_N9E;t}WdIP~wJm@45AO9+%n5~5h zZmKLf^qSl!6=eweFyUJOZAb0W++m&-!I)7CJ2rzU7mVK)iTQ*ThRQO@PG_-cYKe)mdZ6V5sk+Pn74jNV-m?Uqlsn?oFc9esBi6gfeH#(>dbwF# z@@^B#wDcE^BNcPLtL&(ou{MJGj9)yqg7pq8ue}Mk{Ykghug+|1&9E9yZes(Sa*PA+ zND3XEiF6E1u-5!v3r|dVhm%6CNHfmJ$bUf9lv0^a;@(@rr|2SUMfhqfK)hM8SrQ6p zpb)&!Lc68reg_JoG0N)3x$cmJ5&f_MO|fp*smvvMk?oMR?}$zu1SDO~S;Rw-?M-4# zDVmk0(v?kP(*@|rrjU$O8>kah4UFy~0|mB;At8Z}>pOB;o|@AAe}9-u<`!&H#Y+^x zU~9iIhY)ra#QZi^i-jGkJx{x-^VB)5d)s^c^EjaByX~(*CBWHQ1u%4i8^{;3-iHaC zATnyc4W_Q>FRV}K`AiOr;N?TP8wCS~FXBxQ-D=&8yjK@GXqKK2eO#lmEvzL*<9x8q zodvj55$JK)nDp|_Jq?NK$nN~98uGTtA2IDEe&2X4WQN7n zXz@n;`dgY@XscmXqgAw^=<6^7*b1E(`!b~)BoKNakwD6?mFq@qe7 zs%iwrV-aT&N4#UD3%NN}=ZI=csNmn<_zggz#~j{YF+Adpq5nqLI|YdntyzQRI%V6o zdCInJ`;=|lwr$(CZQC}cZucJ()6+9=si(}nGh%&9f&}WNZPw^reTu)TGm?vmC&j2H zc3HQItYLRACS>X4a7#R19(jWVMDxTEGVdHTBNmD0d+Qq*G{IRJf@+uBcrp<0!|uja zXxQngnNX?O5B$lJbCEVSRT{r2u4-~K{2}OF-k#${kby*?$x`I^qEc%a6^SQ?AJf;cf@;K?tjR?*SzY-zXq z+NaTwGY0QMJiX}xtz+YOMzq+GL1(Iz>&Ipv97D`vh9*FU>1ouKF=@W+RVuLFf?2i=UknhrMG z`va(vsx8H+k{iFw!+m_<4oQ}Q3m!iqb$!Z!{qs#6JFc5}y=u&0?WhjyjLC9;vrrc? z$~%hwacW2EkK-=vi#AssPstz-$u!IdJWy0to#g&x-Nf$-?-C7j80b#eE*MNR#DkyN zdy1iAl;Qjd7H=5hW_q*9mr=r{ap?-MI#t3c5Duuu}#}}jKL`v zj>O^2c#Jov0PfJCV?5rWr&6)~5$G^+X|Af$I);-@bJ9LxXoeM*ND_AqT+5p&cGH}4 zk|noLv+TkfC*G7&vPEHSU^ISVH@vVJ2!lDNY;WM~aExxx*yuvU74mdrQN3UX!tu|= z!pv-u7s%0syB^B`nVe3JT2vcO&Oz7Oq1@ZlQwoe@xcb#}qvdu>KgnL>3k&O5Loi;V z_&Tg{F_VNQ;}-D@&Ud@z@5?t1YcQlcgmvMqIsw-;%I2iv7RX|I_3FS^)iZrxI)B)P04;fg2)~NuU zX_T0Ss)WD1A9aZydzqfLalvzu`+zjR`&UaxFg>BJN4;tOwy~1nk0VVjnplxAB&0Cx zdu&TZ&J7u-%FABJ3=f17^K>O#KVIs@<#~6&q%0!j2Znu570_S z6#0#8m_pFlsdMnU+Q`p`VC17GP+#GzEQQm?Vd(7g)1IXnd4=fV%+T$Y92J$MxXcDI z%YJowR)xK?p!c_v>t>H!*~l-y+O-{)^l)tfq859ox*Oq-c!F{{BCTVp@xE5h=vBG!kL!xse1UF6W;R9s1#cm%Fv|^VN2v|1Beok*nI) z;%@gJUwDC1-G{xb23Z;=7s4zTZmk~~bj4bAnWA@9oIa=vYZe8#Ho`5%Z+`j0!>m303loZ5%ucHtaxrjc%=u6hkBG_3 zfd7b~F#BO3_(%z`KMg8WoQ0;kX%@!1Le)1I5eKf)6A`z^jv)>1e!54Ltw{6huz|X5 zAs;#^#{TDIwiv&{$mE}HEPh7#L`46GKlA9mj#T_lN^1Z77Y2NLrBb^2 z$L5B%L9jN}tey);Z`n!|3vBb^?&amyAG%vzS4tD|e^{=%DVP2fX-rouR7-Part~+n zVN9WGtO9jbpYF0;s)zPyYo6ruCPoD%?H@;-<^Ql;QEcnxsA;&)UKwkPL($c$n2-wZ zkuY>lUd)*01rAZ}F70dcAC|kFb2t)S`A+Jp6h`(tr4|8^*0(tF%CDp5_db-ug4;rP zp^{vaVrWjdvo^1|E@eT{9DY}h@+uv(GB!IVF$hlbSWJtgf{w|;Yc44^w6rtZdExr` z4GWil5eI9iOc3mbmF_+Cc21HQoiOauEO?;9{Hfn4YUuBSAar(!Dq^^EYClCA%Drda zSpJ!GDU2?rfJTD6)HvPs?5?MKcC9+@(tmW$1vz~vPA||?Nl%vj5KIFF10Qbr|@R>n6_*sXu?qD z3^kuK&vMd@f_qAhdmR23&snL4hpX47x)2^2LkeB~5>v_YfJNDqr;1bbHTM$FkB^%4 zM-pA$ip-H32f$kKIU8(4^{>!T8+bJ}5mh-4;kOy6KZd?v53Et2>RjqIl(*$7etcc4 z)+b3|-E{gjQrICK!_Wja9?d6AG0~(&S^I25`)42#C+7cEI##FiF*{0ysz!B({HXY< zUaG>(pkkDXb*J_}Br`5qL-w zRJqfJirMFoh;Kj>uu5#GI zF3)lsh6^-LiTQe3L-e)o(8nd9qCXJ$Yc&(putw(b+XK<>W^i(uIFqXTrV&f zQ4h+)wCUv3c^||m_kFFXwFk9AbI6DCTmT*<2_VvF0(N9BX!%*j$XloFy=d z))#x9J)$1`z%~v@l0>UP3gi+hwVmNHe0o&`i4dlAW9oD~AAF(T67xVnHxUNI(E}f6 z_{lK;<|r`C-|M*xh`m0#p+F>EC-a$s0EXBkNZ}EFV>hP#>nDbo$M3*ju1koiA-{_P zrsl60ht_0ai8hD!Au+{CdiwW6+5+A%T#7A@7n#QFb>F1mA{b5$%xt zx^FGd)pjscy@K!KUb*=s^Xk(Y3qD%e5*?d<wq4@*o91bT!(%h)bcX1Zgera5|p z;THY+R4D%6C5q_SAfQY((4b@MuvwG zD^a-E@1OuVH@u(nY9w(NbPbc8fknUZxlVt|-W){SgQNp_7CSza333hM+vP76U}m#D z*2IA;kB$;a;3g&aeI6dOl(i5SB2bq?>EyP8Lj|;gcjU!sIpdV085OFCDiMX)x zu`p|mF_U@0LB4O^51;BmxSGRUNdh2Sd{tt^l;e=`^a>Ikbi zS{?Rzf)6OG{`5dxtx$%Av3DGlT_tinOrd@^;?X*@FfD>~Bp?tH}<&{QlOIuy^gfle`4z zWDYptqQ4!j(4?~$kl?F7a$$?Ivbdnr&$9Oc*PaPQ(5yQcL{3d|@RPH`ZEUq0>y02R z_nG#Ja>u~JJNqG_ zcMgJAzH||DVYm;wWWO?YPa(rfMTcQeBgGfU<4x))>FPnX@((tdsTSJt_&=dBgd?jb z*wHU`VOh9mZHIO76d1qjb>zGT&jvSBnP2uglkBPEXJFqO`&F*?aiX6muq_(JeppgF z%V=eUTin@-ZC>{^>y}!v0kdN8TW&Qb7+Mx55f`m4n%7R1@M$*enB90;s*HW{{;+OB zk#1>bKW;&e*^s#;zBF;O%iED)SK>G(U&5mfXZUtDk|T>A*V+>r+GQVa+nEPcjgJDl zP^0g-IgZWUodbo#YIP@M-K_Qy_JFTKT6#1aa4GH0)Jj_)cs&mq;60pwUTbLl=elqTW5-J^Y(V{p&KecR^gFgd2{*%7>88DU$Vln01rA$3 zqiO)xrbl)eAnYca-GeMML-dv%R`NuIi|L|pUxGp%I4pTdT-YgkCRd8GqgHAh-hZ+p zK3oZHqQ_H{wk&>g$&Dak-D?lcsLx0ZmplQRxFrNvoAmWrAkeEU&!}wI!F9P+uOs7$ zo5NipNW3hb_}Z@iTQQj)GbrgLrhi;CR1Ik0#_ntZ008hEdzz`IKv#l9n1o!( zxRC1O;bB2h&Hg;vO?I6mU6o#1TZBiiUz9DrHOXR{*&l;DaKin2B{t@BBs3=iZf<_= z(f2?8si^6AdPfYk^@Y~uKo&E|1*l2O zRp2t*dG*9xcU0JJt+F)zNOQCX`*hJ%ah+KFW0RCCz^#95{Tv@K@+Tk(kbJm@(j-#8 zapmlh5~V=w6mrgrnOHl`Y@`kW>i!8_&eO$8^IN=Q89&@6`pj4Xf5y+ryO&n^t$25L zCO_x(Y^%;LKe$n;sLcOrdk4qX;y~Z@!4+zI?V?lCZ|>*)C_bc@5iiLxSKaG|4!F-Q zqizceXEh%RzL4dlUgyA!;V;ywBeR>8DN`e}F#xpt`r=PO3gpf%Htsq--;CF8-e9j> zW+?8L_j!0M0_rJYHm{Roy-CN^>we8>Hr|P??K@W-;~O_pg+x8{*+aBGYHM+bf@V%b~kFctgF3NH&DNcS8*BOebfVV$h&slFYbkz)KT zz-Rq{Ky1FfLAo005WaIQsm|cO8(+yQ2Y|O%8w>y67qm#6hf61O#3{9F;Vz1U;g}0 z6=30S$!!)a005UM008#?hDD09|ILs6xB5@p>Oa-Y-<_Y~>P6N8zwSL}#Q#(?$6`DD zRx=+?Sv5D8)}cqT3K*~iguPh*d^}Bxor3zsMTuv!B*8;WNxm>`ac?nIi9dOCZ7}+@ z(a)B-c?Z+dW|&@~DoCV1@8uSmx0g+T*DTqCrtvtJOfKnI^7mKE|=FBX; z`JKP5q^~UuTkdx*W6u-_;ne3T&?)uMC2<&e`_+h-fwXi=f5*(t9tl2Xw+@a(LeDMH zyyNWb=9%X0FHJfJm*#gXPXw?faUZso#$cQ$P^{PFj_=J~w1|F$jLu3o>i%{%&%L(k zv%-^A3Vo-pv9S~#wMDj88g0w`LL)a-MfA5xkgAbUOv4;Rl@4ZE30`~msb)8mMW`$9 zm%#_JS>wC$Y^3|KHeur@zN*||VUHTQC4YPVlC0r2dBxz~V1JFRXmiKO^nM7cq@AQ^ zDo8rl{3YB6g~g@iU_Pf+6SpUIUfj;RbVS{h z;i29CByw5^)300Hub_|^^q9=TfyHTdvKh(g)7wz-xR_hE^4Qp{j$`+A{;QGMBQQML zR9}Y==fkK_fZ)E3ld`+f9Acf2C(=FYjp^PVZpoq)WPqUJeg^r&w+u3XHRBd)7^{Zj z;!ZJI_^Suf2QWU~)wg>=TgzgOWmC+YLMcQ03vJPJ=RDiVgT-J01I_~y!CcB4MobMdtScOsD_4!;OZ96 zn>{kOogTBsL2l%0-RvAT_nzNzDJS=LQ2^L2W7fJivl<=rYi1@NuxXTcPqE{zG|~sn zKD*Xm##HP`%N)j?jFL9(d^UcAzry?c@j`*VVvFqmdTthxp$?N?A>aSDqRoaAz6S?7 z5a{&MDKB>rd`C$ilW=56)%sM}a{_Z^`YMYx+W{T_SubV1*vger{s)xMS-ATI{t_+| z)3%S!j@ z+87zeMB_KL6PWnB+_Dj+)x@Mz>Fx3)12E9>b7b$uJp$dg;QEts7b}MU))4gwOV4Q; zIWI6BAVz!;0DnD;(l?W|(t#k8w!xNIS`Ax@{&S(*!=ohlbAp_wI_fO1rgCIl^mU5C zJ26dyNdTSk=mci(%HxpA-M0|Md5QkRkbpxQj4$-6vuY$+jDJyrEF`|+kN#ZKSE1y8 z)~?Qb*7w+2A4vW(sgvRy)NHRjxEd>Z5 zK{4z%8-Eey$)&DVXVSIDUP^)&yx6sQ5WTH?tGW=#lyG!Olb6|$P}rg-2HUmRDkq4T z-b4%po<<1Y3MY!V8$HJcqpkBp$Kp;G%9#O;Kb{NSVF^FkDzSB{mHki(pw$(<7V}6@ z>NC$etjFIes!LP_`8H~2veTd=GpFNXKNm00Ky6+W@<>0zm|p zdrN)j!&;B{7GPaS@=$|QtM;K5Zb)S%LKUSpi;T#%rNJf5ugVU!9#u{?-ek$l(7Z*! z4T*7&p0x?Lu7NcDG^92{M^WTYLq(JuNP7NY%`-a%-Zd!Yxw55f4>Y0nmM&7g=%p*q zVt#Ir{Tka$tNaKx17?^VzS~RbN2DAxOn-qP58(r3J(I*j*CHlyRu?UK&|HLH58GguKv;brn)|!EW z<#ZVnL%SyzQh!<~0pJ@SJKco9)n-*x*;k1s%mV8SY>1k)DDhBVW$!Jh6qLYCKDRN@ zW8EaV-+Pl$XC$qNek2u0v?+Nj(%xVK^jYAq&pp8kVXbc0c-j?%3s8U!o>yAJ~~UgV{O6cJ74Xb{@Fj-bFCrQVh(? za$>%_*q`#6&}M*C_)+*EjIpG^d=5VPFDy90&w!F?K0&WkErf`D5;e_|HnRnB6($c| zqj`jpXyfF^q}py%0Uf~jy)>JNL)IuoEza+MF(0SXyJ0=aZz`T+@P@c6Zf;~BGrN8N z5q{09yH37K78_QFgST0XBSSrO9mEjIf*#}zWzIukZ5H;`_>*1!!sa()pD7zn=Ndg5 zk6!XC7TRw_mIcg}Lipw&ejR_n_TQ?4gwj$o6o{C!aLjr01r(FIH6tM1Pzy|m;&sH3 zX-2dvw3I(~51jH;t-c8dgiz&;V~dX;W*eK^G%=J9mI*VCv1Am=jJ45t z_WrW^m=}%6tDPH3g&3F{r0wsHu@PpZYu2{rdOZyakVGq>^4%5ugxn>+Wz6OU830yo znFZq)1R^|7$ZIE!l^7CsgugtC+tWMrNbrNd=eNJHQ{`8rOb{0{@Nsq$-Bi*I6xlok zo5Y`nj>p7ecxbXh8biO%n|O~IUxb>t(*i25WpK#ve|{EOi6dp@3_C-K;(82fauy(Z zGYrmZ{UB~Ywx6ZaT!pA3+BnMCXba}7Y(N4c5St5%J9ze0Ob(eZ8s{W%i*)n;rbjE* z&&q-y%?jWeyu0TlfHq;H)pRq1D!&ZmIu`e#gY){&?bb^{s4^dv40yp3cSA75X_s9) ztErXP;=8qtRrhGEM2wduSL_S)1Cwu_Wv>YlFPgCGk;^$N+71ef%f!y$gb85n@2+p!@nF%GxErq|qX&6YFCZsO#!xXCX@%OAs5-3`lBkz5wr&d1ht;*5i z_9Ce63U#}>8v$`As1^-&7!~OOwHg((qO=>Wz8-fuBX=WKR{{9jLb?%x@0deK01p1b z$-;KADZK7;S(1C+1y*L_lg67a@1}_rxw+5c7UxRWCcqs{0qPW-m4PIYfuC-qR&EO} zD4rR<5p3~UG9~n8UNwGID< zC0B8Ci@_ztZci`_(($%mV#$9SZz|HdE^@j)^or4SZeb`F-{ zA%L2Pxe4Z(#W;!I_e-xRBfhwHjKcXy(-dk;VC>M#jISA5e-IkoLn_qIf?)O#nu(0T zGr+A$VM{3QjKf(d}R9dUe9gs=>6C^1qcfo^`=}Mx8lb za%p_=+s4?-zmr${+yUDtQ8SYxw0kvL;mVF2N0avrtGQ77iUcX3D~4v{55wrdPFs?c zBDrX2sX1_c7t~6E)$J2rY<6K1{_@`ugZMDev9RSgP`kM$${a0PcA%m9z{jg6Dgxb8 zRW=U1xmWCmn4B;_8ksBlp3S35xVz8v5SmNYmI%nRjSIz~QGMj?+d!%P7JAKL0;b38 zXxY2Q|Na;?rS)oCrnKrN196!BBNsR z5)bdL_PjSj{1O!U*o}g}qJ~y!OWkpe{xZ2HPMItj{vm}-cmh*M9;WVze{7LYTd5ID zQU}}HSWJuBu71}%lRnnhz!)(IIx(QZF~Y(rUb;*-dEs({R6XWzR>d{kR;YJ8R&VB? zBlF0tD*Sm9+BiY7YU%rV2y31pTlbbETL&wts9~>XW)Jx4=w^rfVRlCTj*YyX)PGb3 zok>-VZ|JotB`qjFkfzj`L2pTUqh#<@&VSAkQrg(5gao;wN3dK(I93ncdpNy)J#p~K znfdbKd3kx;-03-L>xod)KRex_R~v)m+!y_6?mVkXjhuy}qqNz*Mfk=-XNL{t(#O;<;7MV#5*NkMUIYl zD_YgUCTy-^_J3bT*NtqR?4>t_bi;(PrNr@`aOZAb0bi_ea9)ao*F=LpKR(a4I{LAU zG)p5W&f_6CsB-&5W^8tRcs_j3SzxlVP^S@WI@MRkLlKgRe$p}Fgo`XR6V;eYxMf29 z9q-CY^bQ-X1&w zlWZ_;qG^?CN>^+uHY?GRcp`=Pmz*UlS{n2F%_g$E$Foq7Rc_no-h(-w{wXPGy_+Gr z2>nrp&j5>|+;T#3Tq@H=P4d(U^0_V$zKe-tz)ri(K_r`rxb2RRNNMWN_^*sf7j|-r7h+enR@54lj z^|w00RW+$pt1n9DuNTjI7ZpLj)=SM*g^O(6-`RQ{zTV%9wJKONboZ$4+B_7i?`Py% zKf2baUA(C%wfs3QWnlt+lgv?O{KwptLspJRm~FMMog*Zmc$I1uNs7k~4X5#Mz=97H zMzV)QGjiDk_RS*)AIQW00LGPiZoRHkQgZMmvqQE&@i;8s6E-CVGQodbqAC32g+J-T zZ^-1tiK%-?HC+cAwuJ~MSRW=KCowz7SFrGKqFsc9j!!x?{2DrMOQ6fOvcQsK>3io^ z?E4q%KvZ7IKSkm*RZuL5>x*A=?JwhoaoS>Gumbbco^*FnIk&k;VxdM=q(9)|f`eMg zO|VEn41EI}P$(NKksLIu=dc4S7^+UQAHh2Wcug5t^ESUHZjb zsKvi_lvt`IUal2!7m+@jmJMsas(_~~{+l+LRI%_dFWfbD9@^7MYC}8Qc{jwsFv#@R z*ZQD`f9H7jAx>1^anXKBrDTzQNu7a#Fg-d>pFo{`1`-NqzHBFa8a5PRTS)MMX(tEWQcD@UV|D(54)T+O3q3_mn^vnVM?;2x;MfRgEYBxZ!5yZl+B_=b&JJ=mC1|+ z&;GD;p@N>d18SZIhE|JMQA7pPE7CDagESH32o_)~;Vjn(K4iot9qHHo)!}mr0cg;S zCNMX8{VewihEOyo%`TVW7O~qFE))WZ1;G!k4JUsRNP3|uGh(#$Ouh8@3E9i2R zNLhcwFqs{RF{2QUIozY2s;X-xb^K0b?`?MM+O!GFGOjD6#x>4kT9Z6f`uq6DdB446OTHP2W>sv}CHv}#Lo5j}S$ zlQTruLqm^qTMDY63(v+rhYx&%`v-1~Wd;#p(DrB;w%f_Rs4kURzoc+EE|N3kEg^SEjiKL{InuBSFywcUoJC_NM z>**hQRGXYd-+9SR3?&o1szVy6Ei~0ojd^r2jA4iD%Wolv?3s(5YyMngE!SFPG!IZ| zjh%*zgDKq&EJ#dV{Lmd^*0CGWW7k5y+7dG0Tu~k>(T3C5N^m?==L%p}%?`}pirO#1 z`Z#=wgjH_#+m|Lr@3@-%MVt<^9nXGlIfs|x&oO|Cy9?xbZ)e4OD0Sg+h0hc|2+{O+ zA7Cu?o1)Ct+scjcf$XM!?nABn*R`!OytnTqG@1R>u4hMes5xF)W2+wYH}Gg)TqJ78 zem`xk&ver{QXdsSpq<-I=-F5B3|tQ2{roL=OgHX+3K?L%CTf0@Wji}ADzgpxQXF=l z5Z^FRCzTTuikc8XPYRtvoRb7s(W{MAA|b}8VtK5dOfDYDCt@i6t-%8pl7R)TdF~}@ z*(~vWEFB^cigWUO4=pW~vr-?Rz?{(bA2zV>U)xItI0|ciGMj)p?hP=)s;Y-&Ft+L1 zO`F5JS1d!jTQ@~Pf+Q7`fDW<^=6Q?Co;v+L>S+;t(%HWmqj`6H)TrF3?!#Yy$r3;R zg-gG%;~s~Up|~_Rxtk)+JtU`Z-)IU6zMg$_A9G9?yKeyOcT~61?yAzMKzWi-&x6^| zgb?JDa$P=PB6nS^xA(DSPeXG6QGvW~H}JeNrT-epuVeol_J2%_RE0i})Shz#eL>8+ z-+pB`*_sgNN+a|ktE!_vbOT6N@z_m@9?S6{wN86w5@thQsb~A`Tg^QEX^49E`Zc}j zm@@4A)(=gLrm}5vL@+YJx~Hhq(;w1d1cc5^WM74`v-z&qzrf5}i81&v%37H!$|qlS zMv{Go3^7FXnt?$T?)8O7c>XcqEtuZ~vu-ysTy+#*E`3W*>H+o!kejI`tgh#i2$?N2 z4BIU|@wnvt6;s8!F@mn#fouWM?b)|%AB1tqq?IirRvOA2q0Y%)zpM#j)3qD$mV~;A zkW*xk0!!QmB9F2{@aj?30)sw-*J%*EpJ@tA!%}S-uCt;0JHK?Kd(OWh$T6P>fgfxF4-tw6yZkBSznug2&Mhbhs zdPulHGny7;dn{?~e@!Zjy>YAbpxc|XPbSH zt#9|Jzkrm60e6{Xy^gARrT`bKx*M~?G}Co!q1Ria7N)pBc5xXxNRY?1HqAji&cR7I zS6{~9sujW~Z&-3zM}D-9?A|wt1OImbOgn@}#XF_YPYyQcuNzq?UYt&bh!3Ey{UvQ2 z5q>%`A2Et#0ui4Hmm?-br~|Im^fGw@T;csGLiU?(&m z*3q|{s@UOo9E4A*70UF?Z-XVz4K1T=Ad=W5P8NH0&jz5k23Ic$1<*2m#uGUQp{YPBkC|3Pi%^?uDKorgRa+*M$2%fb{?4~4l@6GklB-)k z4W-FsYtScR=t1(v%ur&Z?-VMbm>X90)IZA;pXp*?6Xbng-i0G>5os+A4m`*49)zfS z)^FFdZf1wmPGG*DhrsbKwYpNc&o+ZEHj{B#${CU_M1t4Y1ojIO2%NrIDv}ce>kxUn zB`s)Jp+1BICQLAL>?oAJ4-P5!IleCIOjj5LS}OP1FRv`CR!GAL?xfI2be~?|T`t)1 z+|@T5gH1Y$`fSySz;QxERm30^Y>4%{N4siAv{oo?SoznV+@e{cZx6lN=h*lje0r&@ z&Xdj->9XKD>^X`WuR{)eBz)-NkV(GzF6VlJi=8N?VUA6zmxWV=P5%aa4N!tZa`!=C zYR~SmlDjZTw!@;yIMwEm2p~E~i3l@of>5jlYzpDH)GuK9EMFocc_7V0~ zdfwvy;f-Vck#lz+-4Ww4?FL9YsC&A9| z93!`RZ*cyAekxYcUOOe_-Ed)qCYbjzy{$aFT#Voe#YMdimPjDwnp&*d=Z{?>>jOzU zB}0OFudk=DVm}FL@th_RM3a8s{1l}ib&GQh+)#%I+(i}w`lH|vCwX=($If{m7fUS- z74$gnj)HD9L$wP(4xZKdQM$3#29MU0AuOdqlyL|anLt1s5OnWW@DD8FaBKhs zZ%BR+1PSm6i}AJ!AkEANWl#l2Z8OlxAzkJ{ucb||p?>l(BaD#aveRSP-36-sWlQrd zw!O`g>>XPKzmuO)ObVE$1?)LEn8zA1=(6mnWa11E; zyXWBupH2=meeKO4T*H7KwhjWMKAR~$uTRpJNI+$`_(0S+b5B}jZb;xtNRqdv$0eKY zRhOwR;4xa&i~ioVOek$&{R=wMja6oa)_1|pUgBmMoU(|b3)B-ZiT{2_{3Tmsp&b$F!@@ycnB-Ks87iLc zNSJ#^-iP^{04sp&E1MM}0G#(BX~5|mc%3bn7uP?opw~qA@cbTx$CKWLeccPGT*+@w zQ<1%`7y;ceon{AD)(1QYui#l-_M);7%36ym+jQUd|?v2c3Y@E z8pF^v6Ce;mhZ{-<*@J9a&L~YaH_VnnhuJZ~Cew%nkEUBeP)=oobgqxh&Ajbj`&l%% zrnm1av&fNo%@k z^?-j9Ss+JXA%S3kz4|P{?m8J#$f@Os?R28f4y3<@chco3VE6EKEL(C{c z_oQ*|kF-@Pbeihn)7GJet6z>|!N02P|KQgO*Y<^yI^*tB$PG)UTyRc7 zfrxP&U3b6n30O6t|AAetn-*HPC(ycjM z0TJT;KS=goVd@n{C^-GUP%Poh)X9@sin`5wJnaNsK3B8OYfN$iSP$Ef{*4d^*~2Du zT2n|HnX)WXTcBn|C~W;z}3xa1OMh?|GEzF|JMxCR^RZSzNs;diM_s+@qY~=r&4}w zGDOgaeP(p;o(p9vNZAt#)ieA_pj-0>hWpjjz0;>(4R*%SQaD$hzTdY1uPuYx5w45H z?JOtn+_GQXZeT6DZ3W4^Q(bM*Vt`U7!TfFj=IOh8?CG5iTX^iMUZ6uI;~hxV;u4Sz zZ6X1x0@Zd5I=8H!u99>TC9y?aN$MXlON9H%esdxhd+2q|)>Ey?jKo=_aVd-4A1qsV zAa2ZMBneM}jyYcwJV_%6{c=vQl4*NqZ63GrYNAx-4(UmNiXCB6z|ecPb#^v&x&ddR z_UcWw_(Ad9>R`rGMR=`NO`-k@)0)vXy0#SmiGLpz@b^YYT5*Z36dNn6HMx`XDEJ)q z#&-RR_`9L-&aicc)u&)y@;5Nsy9i59_EQy&)Owh;-_YYw-Hbqze>d=86>9`l;ka>I z^J<>YLT@+5Ctwt+S3v7hVO%v45~Lh1sw&U{#3hccF}B+9ZN#MwUsuJlP2xy$R-q z)|ks8(~G#L2D<|PHk}wxnd*&nLac2;IrI+*MGB)}VqxF|WazsnVEXEHh8l((#BX(O z06%(LcH@em?M=sBR#2qQ4T=AmC3AfNIF#~K=prxL@Sc~E?0bnsYk^VUy|H2-9j7)= zeBiyvbBX8l%1t^vY|R7c)N>MCe!zW6eqv{upMu_WNajKJ4RbJ;@`}bDbIGeN&-0@t}lTL4+|t6w|6@I98gVt zGXG#D-(G2Wue<|~Racqbqn8qD-pjv}?%4k4)@-0Qs*Q&L0NA7h03iJT-I@+gR#y7< zZvV{?X#C&pQ(Y2P1}nmdtKzg+0WGe>maZtHZktQW7Svz`LSmPbfBLnLI&^0uK@i~r zURVpAXOyIf7q=cRT;QbcMl@Q^Jx`bR#?4!DU9`$o&9dLcP8+dzAn| zJw5Kv`%7z*r7PI%6KK=?5H>4WjADAEUo`h7Bn6mY{$Tx%sEQW86*m&Wxw?V*lF+BswK$jpr$CST-_erat<@{SOE-o=|QVo0NQQD_m13SE;Nzt%}wwlEd)I z47ux9>`&2(jKu6rKMigw^u+oVYi___?obk7Xiz!#3`P9_XCdgx6K#O1U+x7)YROSQ zuY~Z26RRCKAFpKO4ai{{9Y)ZF$RzG^S8N`zf0S5INutKIkEKBoBlCNcU<2FGpa7`d?*voCfc{OMjtUUI7jbg9?b{(4%LixEL7>i&mB>;0h0)Gc-m{QE zUs>cG_E4YrW+6W#9jJ>9RgfA~b=0b679Tj!84`bo5v>6m>egGt`ELm4<&|y5( zkxAo%d5ZgA1i(H<%p z5^H6lm5+$Mc&k6n@LXL9iaEujf_ySZ{Sof{^g5Qhs>n2&OCqwy|;Jf*5V% z*j(_@-5s$5?tTvKR?Y2fapmu$l`vct36jJtXr&1Xi|JVdZ`*sLDfCl1)n)nd zDST`O#yl$1Brm-3cYXisu`=xX?)@CA3Vwr)+$Q}y58C*wMf){+wTYO*ks4Wwy4*`O zrJKcOIN>|BM8yTAyYov%G&Y9O$SivcF2%D%3^YiWD7F)ikqo7yvVAILH*EWZ1uBVP z9a~M9uULxUibB*^N8-pMEu%`%pB|b>=AI3_VCu-pm^M z#biw0AMrLjRVTSH7IQKQ0O6e>qkh@@jl9GRJN&sLiOY5rWRQz@rdD z2?W4E`OPh#V!i;g{KASDhAq_dG%PT!SU$acA)tJ|`QznKV2+W0;>Y=}Dfj|LMoM0) zY>`Gf01-fYdzQAuM9a2T;42lu3Fhd#v5vVkY;UYrslabm1pHA&X})oPH7E!|Y(a#E zVXg1wU?)TIaAYq+hju1$3jaxUNe^^yp4b(^18xGj?#WpcD{){1L7$>AroBH>pqtXe z5*0g~aKRzbg@POnpUovzkJ|WCbmZJatP~?G0(-m6wB__UeW;~*EurrxawU(YuVxt) zvI(#f2w+<@z%)x2jB(Q&=aQ7}(<=;ea24NEIVMKho6!?X9gWF1S-%n>^ax&2?-XxG zsZGQc4!E1j*g?Z{e6%(4OPm>Uc66kNJztcEv7uP5YonKBdT_NganY{F#T11|!6_0> z*_{lk2a8J;8?waDwSgf0*amG_KLz-qFz&xE_G{F%oGsF-%~WwAwr-Lt%6hf;SM~&{ z{U{s3bV5fyl6PUNCRh-VSd}6B8bY8Eu$sZyIHuxE5O6QS!a4*MZ<)MVD*i=%=5Zn# zCWoaA+0&i7xr(4UT?2l2woTXmLoF&Xflt}-|4~rBzx5WCTuMmWI$Jxsf za>tgWFSV5{nSh<_{Zkfob;*#%@Yq;`-+~}EF=2V{<63mL_xgAEF7@Z+fO>Mz{s2VU zDZq3SCzEeb3AP+sHGcQ5cqlrb{;~3z4X!)nT>;LnlR(%o5M(Fa1?QcExET{y3qme0 zB8}kb?)?Yof34__4iR9#zySc9ssC?=kNK&$HH*)|K;y81j$KcT_c#ywR)* z(k_cUHnBTEWCj`nu+u`zgUm4kxDFA?lS{^&-1m$5&7;x8Xq?R3cb8o(N=Xd| zy#B?zTlaDsxz<2h7xTQj&sFbIFF`~E+llj0&C0u;s<;XFsB}@41Eon6eYNc<{5PvGx$3d$)}+Wq4O!9MRJpAcf;PHvoFinDdRu6@e?qpN^FUkNQ@AS1 z3hQ_r>qCqvfa(>0wQN{X1i1I&ow*S#0^!Kl8RGdUggSz~bdWM^Q7Eo_4PN1S7ToWm z+}XPmRNXqB*OL&-B#}5<3S~mks603Fuf|}Gio6J<(O4ZZVK|WJ*c+(uBHE{u!Ii>) z#NuPE{#FohT>|2IyGDWqwHTTf0wR2y(Z%R2N`h#H2#{dr*!TMwm|#kSqKwrXLQ?}X zSR78xXyiH&>?t3cDx9fI{Y!lTuEwDQqQuva_l zg1g>;dBdi9JIZ_aYh)BgbREmo7+aiX?VZf(wjra>H@e;k!tlv8%csu>G??4r_Tm>?oXLWc$M*nuHc&Vh?{cXK6URco7&Zm+SqT=2v+I^c_@WMAOwn@3x3Q@DCkBQ457TTb)*-i zkeW#x5JxiK4lHqWklZ9E)MD8#Sk1U)4~gdr!83~}ioq?ROi(_$(VJ`usw}NJ836SWtL8j&IOP^a%H^9&1tPEJoe=$DF5i1j$epghDA-Q1X}*U zk4IDKtRjVo)-Ik`h0{Pl9&qE9dA0zhBb1dV=L_qUnFYS_Hg1ppE!QG15?{HIGfPz2 z0~g%Fr$8E_$26L!y9|urFq5{}N-0@!o$*4ZfLlai5(1rLXWG(D5@YMqUQ_R)o`a53 zlyy-OcN{jvAmFx5YMQZ_98k;if85W)9H6Zm_aOP5ksrL}I!S9wXOSn7n(yU6i(No} zU3FcDxwKBRTYJw7M(M8AVg#s@4Q`RszhOZV{IfEOmHC04UD8@P5m&Js3buhnelp#> zp}MmMjUh#aNad1IL}&x0fLTnLhF6wct*iMXDfy^HWtC;#u6q9O65&`3 z<{IEqoqiEBeGE_-{cwEG_}=DKSnN8ef+Ry4KL23CsbEY#7k`^i|9&xeH$%Z1w~K7c z02hp}B=Ek%u1U>^zr~Dk!d?lOsq{}Fr{D&;`wwZJg_9t zDJ`8u0dFVMofrI6q4;uUqJo+GFf50$t7ToSU7gPFil7);9=&y>T7!k6u;5X zW$<+MczR_{jXy$1JUnzYBT0vW-bMtYC#hTxg8MMWovxDCBXwF8;=gw7jtMQuB1-cm z{cU@rBM+)Uhe2KM#s~=dSb~EJlh2*i?Jt-Frc2o#qspb(W913aC1BoXYXRT!)@>Lx zXVJ${Oy6>7Xd$TR(BO2aRdLMy2Ba2FPValG8Thn*%^&QQ#$_XPwQ7J)gk<;lr*TpF z8Y)Lp(;F!zLpq-W=&u<63k&--H&P7rE1uvxGRq5hF9f-ZQ3Qx0nY}y*66GRzh>-8#_#gprT=Hyd(g9b zf}W)Lb{>l6-jvXL9r}7vEW|dp}5eCyTpeHIf#Yo4#6Q1VHslBMJ>a#^h+HYbFL!<^dmYYVj)CyK{KfXJEldjFrSqO-sF z!q?smPjDyzfJ{jM0KEU#UXZKve-#coAIZN2gzx_#AjoZ*mC>~sl4WmB8?+4wgz@Tu z<{dhzt5X_|?2fF}kO+5Ff8MMn;ji_CO)yOz0;MAGYhA6Zp4V#=Io*v}jkRpMTc2)N zu`0flE!bp8D7t=al~!J;R%2~@R31T(7p)n?x%%RqWFNykLX70XEE)vx?_l74 zv2$U8#&C;*o~0)JUppP*eBhrL#eJDX(Lq&SH!srb_4JPwYpn{SefE$fk7~12#fBJC zKM^^Yg&BS0k>jgZjHFOZ!p*~mCd}z1!)bZq_~Uao8=?I< z3$suXXW3Hv=7>~ZruB-g3E_0(RUjQQWpgRP0~L4IhYBsOJ%s)3IRBBFpZszR5qxqG zxtx8mp#g1WCM1A==OCH6yssHhT@ay&2X|QrW@i%(2~c%V*iiE+%L1Cg;$X=31E7z> zocv`{sVg6(ub~UD-5_+9u1Uh*?=j?t6jQ0yxRzfk?nf_KxOs&$<8k+Zeklk%A&V~l z^&ykOG6=uZmc^L#*U+6*-3dy0@>1pL~lsulyI{lb&IEvWV0bCC=j zF|WbzYMthVa=4ngbTGB;sZR8L*l^z-1D+mi1CPKj5Crlvk=k0PQcdAhxq2;Ng$F3F)e5cEFs1R6A0XhK6&tt7Wvk*Z zFuKr_FT3@W6M}#JmaTt#U&4rtYsmYm5Kx86Y;|aIpK8GJy>L-jCcpX$TkdLteu32L zAX8y-ei)o7j_0%L-rZ*Qqa&YDk?ESqh(N@Oo$DTpY$({H424i$*tyacr4p|4!+!|m zcHxKD@_(QBxQ^+dNzj=PvJZ%F1+cP->r!BwfOw$5597ppj$g> z*CCH?QW8%^7z&0W6lx{UBtyljC;9qalS)miNcOFETgrKwNLSXyN|y(sd%?~t`CK{F zN$1>}C&ZTSO#}fw!5ZWKG{fuoP%`y?s8l|e2 zfY%SganoD%(c@N%&BBT;!EVIIbq%gp)gLiUDuVa)1r{3lhYJ!2& zHqcDOGOzE5eMuqkRHb#-M9l4&T5mr(s{;C4^;Ofn9To6eLf_eN6X;5vl`m>xcDcc7 zQIQe~?bfA@lwz|mR3+UIR&+IysXke|sDA9#mN*eK-b!MMKbx=q5 zGf%mr*nuKJ3ZT*>^crj+3PHXhz#1({45${UR zZWP)$_?Bk-(pyQoJY={Hynq2orG{ciCyt6YguW;XeHx9VT%H(d<_%(+7!l^M_%49P zTI53{R|-gzFHHrf0u}i^81>v_#Pb+9MJoY0w*@sM=dyJ+*2`!FFX>__XE-6& zRi(H;$RElnNFJ$BdefK*&1?XY%WR1!TZU zc`~~9K$Pefm*6OeJ%n9T#gPY~ISfai91N_6L(5P)3^4NULaAsx3_7MPktpP>5ZYoE zEp5=HwK~j;K2f&m5EnyA8KRhGiR#04YzOOy_SMj#6I96}K!L(IjWtX| zY=}Cr%xC&A{*_V$SN|%P= z9I|=A7Q1#ZkG)JQO;ub+)xP(s2Nyu~-H)WMXO7Oxa88oxv*cE9R95TM1q+M8$`V(| zN{~kGmNK%9aoB2PF;ft!sTF_az?7Z9;i}P|50eC$)I@CzF{-jXjF3K*gY20e=6ydK{vpr0d0 z@DfJSE}+QaHlv4$2ChpQOe~KhWsR7rCCfQ4=^Xk#C~ed?+MtUS_IGP?K#vknd^6$r z3oUnq0Ud|0W-LY^c0z@TTnsRn2>xl1#Q<9VT`h0B6ndhZ+@hYOZQNwvGfn%-pDOX# ztVb)~xZl+9-aPI{#;q5;f6U~>3L>Z44v&ie)CY!RpO^59;FV=+1AN$$XFv*}GQtNa zbSFfe#KmB&Oud2|jA2$sqIDRonr5n`!|h2kjt{mk-l_a>2~u|!2eKi$b(jzeIfNO; zfWZhF`?{ynmk2$O;N#Ugagn)1vX7`liBP9>PVgnR6-a%Rn7g7NLw=N7K1i;@W2aLm znR&-cqe`0b19x?V3gK=V>pBb+Wc+hO&w>!_Uw%jJx5*q`;`=7yNn+}OO3zj7PS6Uz z5qUXmiXL>;2*Wqd6f+e8UTHkIPd(IDOsrCV7!MGK=1q_?&S&$D`zKy7L8@RgVBPCd zD2p zSk4>8jNRUu?^mwXy=^BBOn-m9a_`o)T_xw$iA(jE(^H#h^+=<=nQ5B=7%NUq3r(*u9U2lWy~;%Lx3BN7~$V z%Jx?nNr-SdGvB4V0UuW57e8WPScd6|)xKEUU^)!DUs#Sj3Yic1MA^ERt0OOkR%Q2OpE}S~+a=`E2y*dB?{`C2ZQ8{W$je+bYMUFZ9{pE`*gpUyn7n=d0DXsUox) zvc~&GP41H%cuug82i`()g?LLvE@EL=8032D#4#{Cv5)-!Yx7By*lb1@`nPtJ1^~eP zKT1diQzuJ%lmAo^aXy?kINnc=>gTwcH%;o=gcrux0NntR2XF&p95*++J0~!R2WpL* z+iXFrh57AQzFarStpJ`@;DqO7mOowq6gq0<%U{v32|FTeV$DCaT`= zTI#B@3h%({Qx1rjd=_DCjJ)g4Dy)i$2`y#D4`o!#7b}@~ReAhNu)4U&+GnVj?|J~J zfteDhLKkM6{tYf#JBOHJ+EL29mn$y63cEz=US@;9EBxU3GTlrCnimfHS#SfZsBBY= zvDZh7k2@>Ql2n9~pO!>K+0W|ra&mh{V`T-(#YLA#0QOs9sEQya-{lwjs;8ajNjFHF z9QXy1n%s3aiQJ+OIq-_FtUUtD{Jn{Veq)cSpJ&>LmD9xZ}m9ko*z-m9b`OfC|^Zqv^7C+M9QGo>VWfrA^x zK!#KV6nWJUBq%J~?x2v4DjMqF-6lOwZ{)?|zRfq#HJgPYe|1&sv{k1@t zh6Z>ddSw0)`Z$Ho7?T9h8!3L|Mer~xg2vl4Jp`y8np%TAml-a9S|3n0r>VfR-0MrF z*!sP&3&}#23oHME4b$Gu>vK~}t~Sbg-qpJ)z<*?r+~q=tBgF&l0(5z#@V2`hSTPrQ z@u~6yBcxMQm7i5Xen$DF0akt(F+Xs;&Vtmet^`5V-kLrNvlZuH=XwOi-mqMcg=))x zl#4teBF7AnO%eNNt8Y?R36Z24DDA4V@ zJBaEUK+e}zF`0_XP2h>JV5a*Vj`qOQbjIO{U^PGbF>D%>8wmr(4^Jg)(T#Z^}M%JLk^6-`L9MhhxkqeVb1ysnx+=!B@|+q zWqC-yny?YK6}HO}m20Grl{^Q2sJbCD)CN5g4(e)vHe&mAfN_@wv1gpQAg*>UJYZ<3 zGyH<(+p;7)TT+n0llqxPO)hNZ#24HR(^Uyy-Pw69C8b8fJ6+CkWYky&l{)Meg^ z!5T=Q0Q8?lAeeVJj|x>fU|Yn2+2H09_&3M(UNp=Z192vZ13~xp9J{?aS&dpH7hKgt zI8ZmbILpWf)Q@UvC}Z?c59hZXhXj`#O-blXd3FX~r6nu*=VItkJWx3E%&uIqISY&5 z7ytK3(XvIkf21*^1T%pTB<=nid*V$hRRa1W3~wI1bFUpErgv}$unF39U7JENd$~j~ zOX)J-Cd>;U8CkBGry}}Qx?x^p5Yg>qSY4veVxv=WF>PE*u}0^B(4|T_N1qvukQS;^ zt4g`j14v&|PZ6T!-*FKX0U)5=OgJJwO+wbf+`)gOL$?&!5Tlbie z%SHEEoMB*U1zE`1UsYUX+)CYF@@xBbuP-*osf;0c@NEcq@Uqa#)e?aeC=n`|x>PuL z#-vlNE6b$kXReIvJ~$qQ_JU-_-Nppr6vW;Xf!skosc|rEai#}0&!w-05a-q^DLG!F zp0Q?6SmRmWY>*#uwuObTC>$rK67kN~kqCefxT*Y*fnB7~#d40UukQ z_|82gOm+^>0dXo&sw{hyjqD&E2Aga3m(<5N7+nZtN&cf}OC6a@Eq_yOV`VQ3s<@#d zI0G12*zz^x)3lr{D6dYMpMAGZ&xdjfr&17^9SR4vQoT^sOQXuImH&unsD;ZD(J)W- z1!u3}tX)@JbLP!*v4|EN?h+=Nah9bx{_`(Riz7p3F!Ffraw)PCW)h3q{=Y zo#V}C05ZGar$FW6r?MI3VmMAyA!`L<-}_v5+i}GQ9stN3|D((nTdY}YvLAO-q-@Dt z8_K7B>&evB8bKX2?z0|bfeX)tAmdfV)imx}KNrEOu-naf8$B_!fVGUXMY_?HXCF#sEU@H*rX8vz%@Tf-bxB zfMe5@m}ZikOPhlKgPHZqo{tR`yn9R5%^d0-iOV6^`&oo5mvv%2_m=dO5A$)?VjdC! z-~&;W{5SJx8cx(XLLy)ilNh{(h#B1jkSVNy@EqVNA`%_7v&-f7tNtM|T&f(x;*p9W z#a};DIYdb3mv)&~K8vtmPPn@Dt55J{VM6z8<8qIY(PqPAQ2%-2Tk9B*EEVpM5kdPW zVy*7s!2H;|iCt#Ju37)10H|HoH$t)r{b6m?_LqjHIF618T+yk>v^gVZ45Q{2<6e7J z`B`Qy@W_Ksb>|;Q6I@DPy0^X_kAZc`vp)77`8y9nl!3td-xo59C_ea*q6ANbG-z z_GH;mFsmqx$^OPztGHOg8r@XAzdtD}E%Tyt_f`LeHOnB?KGp!!u8))ci|ei4$6lRk zZ*Q6!gQJcveh=-86q}wR-{KqSF@8_>BB^LXP3>q)dT^7js^;foj*qIw_VlnGTE)pL zTdzaAx*~40)t1X=|Mn=Uj4fNlNvq$ofmX@(YqpT6+uZZJ#~&dxey0qOY6dfvYi$YM|xA=fM)>>n1RX^f=hK8$t;1O=y);&}yF5*9rQ;q$+ zEuBA9F6++y_*gyteop3W#p>lVoR}CnC57gHT8pO3ibU5HurmyUgZ!q=B)l`Z2Ko;E zYXLEXm49-^0R_pLmhDPprVn@7&v4f$^RT{s(%d_1 z?w$Xx~3c^sd zS#fhu(<-rwC|*EFWFRu}qW69H>SyAs(tN3@fE|UdW7LZbHR0;w#w9E+b3QdHA8$W} zdjF(CeU_Lm_#c*y*cZjGjkHPKLTvFA@Gp70npj%gn3Z7@t5o+@;_39)T@g=;2&Wbh z<`oTNRrT`vJsrQ^(k79D;^HmEAy9wnsAWX}Rqyhfzx(Q1Xp;?+RZ_q!(-6e|R6&FI z6T)18m&mGY4wm>;=BRBe_DHF7CS!90*G$`BXJgg1QJ~lWlljKonI8b+s>D~ZF7=#V z-{eHtfwe#DJ?PXy6I;XwY<%Sry`*#rAgaM_tHW6X$$G3@eMN!YV^%@Kc``IG4`x6_ zxP?W_I^zJkg56u{R;Y=-&U!LLzMB^9$ickk8~joY8oDlq64HjE@Y=w)pg|EW>a|f) zD~i|OQv`zUrj{(|i#qM%YC4OMfp4yEK6`_Ai{t0>3@xc-6>`@+bV5a5rTu$egxskV z(Ao+=E=Kb9&_62l#8FSt^HTlFs3M|O3SZ3JAE66FS3`4xQ1}{x`mTLI6Ytdo%pc#s z)fr#m_&NODFyE4=YpRI-3UpX3u4`T_X9 zR;=K9x^s^4CS{(!#ainlSwopDF&$n+Y?@GVc)DlIeYGGno5XSOFg7v67lHw@ZPW;}ueaHa}OFg|u?>10wzPW>2(v+D~|Y@953b z*+CUOgAMi+A5tZ->}(l6cxEGY&)EwKG>0{OxNA=NM!RZjG)%CSq%?8Wc*`xqcKV=J zb~jdlCqj@X>c0!c$C@w3^>h{jIyTU!>@V!dw9-UJAaatI(fJp3uJKpixU@$zRYdDsWD$1%KGSiNL9OyjK zfGp*g$zi_`D8Phl_F|agnso&Xa5$#;WB#L6NpF+2g?EDv7|vb7Agf!CA3g}|2R#E2=C zsHwC@dZhN8I?|@I27Fc-i@BeXm~+Jg5x#QISN*hPRP?o-SAfUlFz;tdY{~D0-Q(1bbq7k5sa=HdBKC!IN{KM-qibZVBJxSpKeFi;>OD z^}@x~L_hVs*VoLg$rlM_sdGx4)(6ShCF{*$C4v{!*88S7B34&!LxV$S-Ek?IX z1g*=yTy|hQBa%_6_V>*7K5C8|i!D4L9_ZC=_A9n)T}z(HwO***Fxc}XQ9As|j7V4t z!PFyJlsrNB4lxzYU5&VN)CO=yrO0zcAVoztV`(91h$Xz)$~6jZYlMWAX;PgYP@V2N z*oge2_2l{lfMgL@A?NC*%A)e1cDeHz$jWE+gOuO%C#JGX+fx}1)*@y zzxMtjZz^VeT1ab~KK)nKc98>=+~%vSRz(7*LEZ<9#7(5U**1cX1@brphwO zVxI0eDdDskNV4$FM46dJoZTKV*mr74BMFNdH!tWh#~XETu|_w;ckg`u<3&c`jL6WVz>IEIL3AgF1dvrn@~#h<33!WFJ0W2z z$xfu3ej;((2z_nbjFCq!70|$ch{bAVU~Vmkw`e3B@$|@9H@jj@K=uLc-B|=l_a+Uk z5$<1=Zd>a20P_olnGz3ls?{9&w2^hR*_L?xOqZ~pEjAxvy_%vu%)h~N2$f1(%(Q7H z7asn_0b`=qMOVV(+t27Y5Enf(7I0WkXQJ)e1<2S!O*>R!riNocsEI3$3PO6_p}1MQ z`**#vPR`c5eCF5Z2KtgJoKolN#&q;>eH}V?7FuHlt~g%{x_bB5-N75aD|-oKRg-;63CFL;3T9>Tf5K83xg|%D+@VLTTqiZ8)UE8% zW~+H5eo?;$m@|^%A*|yuNAMBcm7?vBq^PmAHgK*#eXmw6LP5>vI3i>iv97liY`m}Z zhD&S{5o;y9^vp$I4zw_y2}|L<10Od*7w*wl=@iZ^Px+$?TJ!%TFM2|X&sX|u%Foe| zF`g@9$KKP^zo}~unfp+A{iG%_1`L3-3*TAAiMg6u>Pn7Lo6Nz=ZjRfe8j(sh#DLpU zHk7EuDu1_2a#)&T#5PqZ>XE{#V4K{JQ-kT|`I=i@Hggd3>!^KNh$GG=7l-@yl`hqN znk%(Qu4$4a+SzGulS7=5F7%PWb}sFK+Em99rHnvV)084mhjsDxO1U=WN0>(Qlp@&6 z>vR%Be6TL~O_)>nPI6m~HtEH9=#fcN+%^sD1;yG^gIwn+e0z;H?!~EccwXutmtQkU z&4Iz{V3&N;r*(b5>DIZ1d#Eb+X0P*2T8KN{hAYC2lpS1K-xgG6xh8XRNmJYwCFlXh z0&3G0G1;eVK4*9LAY0RDz!ltsb&RL;7Q-Cu=YX<|dbqu22M+Yt5#bwJd(1GjOkXuC zt#G_oA(>rfD@bz&VyAkn3i8PoO=#-FK;6ciYz?OdN6_>@k7M(3Pf3D}&8-KQk!WOR ztLG#m@+i$#DQUAS5)8?Jq?@N|hzWqjpu9OTIt(pw0nu;=T(x*`%wDt<2fFVBA$Z50 z4Q9L7Xs-x+nyJAu4e}Gwq_)oI=d*|_iod%!UKF-xJ6I%3a}LplYK{PFQHw$gy@bEHd{Tuk^AZaE;MISxMF&bP2WWHqy{CG z+k20u0kd#a9Ief)G(HTp%|PddaVp*^PXiQPB)n}y|2o}*`)^OZY_#21YfM+~5SnCZ z1>*lWG3(;Z*x_jgZ{Mb8Dw8^A2U|G*d#x+roMi^6ZVlSaW@WcgXQn~ExjL~Ym=xH2 zak?_J?`F_fj=i;J$?F2p(i;lfZTkHm*AE>zJ6cB=(U#FzvPO*1%YzjJ5%*YV6ALXl z{rz5Kk?8%mb0CmsTzs1qriepmvVkCBbT`-nAx1wNMlhqAixMclXpe-YvA<~!7ta?# zZB)-2)7RWX06~uki~|dF>`ihQ3HZ#$MIp$dcXfwg5ZOvbO*D&aL=ag%dKOmdy1*&5 zS$ZQ49`lmaP- z%t@m@W2^4ZItfvF?D|t^eM9Pg$#TD{+N$FAxMVo?$j;qU~^SgF>Zs*EpV)>Oz|1(atI`HSL1j{T^Xif#@GR3*2MtcH`fNB zT9di^vQdkxC{7toaF00p{Xl~Qd#j8MQi(E{#i&h)_y={l)9coT`{bGX&E%i6apt=v z`BCUUH`2&KAa>Bgk^&);GT)90CZUvofb%+OmN((a5l*-RV zBOzFw)hLs7V)gJH+1tX3_FqUnmQ9zzQg6=9bkR85qyj;44k2_RmRe=gdMDgEem zQql@M8l-9;Y3d!*z-g%f=Y=n>l{&r;m!1D`U`fz$o#Yw~%`^z;1(kaI#$?kEP7>VL zKlbn(_P}VV0O^GpVHWpH#YxbNb_!q_&NQY!rOcdLw2-W$U2Y`^vDq_+FC<@$6KAg$ zDJ4wrP8Q^q_59ZSo1wBzmdprr=cf3pE#x=4dOpqpls z$GXDRgo-WS1X$e=30p~K9NUt&Sup6jk?3Miqg}Ekzn=!%^DBE5^}^%%-v0jB@;i(x zGoH_Ab05Y3aj>+Jtm$amojufRC-mX@c;G;{>Y#0Kj@Dj(4~C5PB%*c^Qrk@U;U-P3 zHMGSmtc}KW_<3p8y$q{oJ+j?y4Q!_Kg{??TK9XCOLY@bq^-;@Z9G&XV<`ZnK3()|Z zGv{a#!@3bpEIWT!m{Dh`Jt&bJvWv5@g7j=tv3rcEowJ%nH9Lx8_nI6(_orTlZ58V* zL>g@wgNhJivRwV^3uX|DFkCHzdD!5p=0D9B4v%a(Lz)u`Pjg^WUpzmJx#Xu)$jN>6 zBKCTHNBr<%_b0OX#+}cRA`17Wk2&pz{DtJovD`8oo%38BE`zb{FelKl+_v|q1^)QF zPBt>VML zST-kM_NhOHGr;}KSzf#=w&80lK8_;8f-pzFOA&>XH_~TUl++?)qvG@$Ng7`b&TOb} z^{!_h4`eK|`*rTVFWWq~d<#9md9WEp!1*tqr3Kh49zdrjGnJ{OMG1Di$g}ltsh(L` zF=b#ddC!Ul{eLUf8K&%5x^5edPT?kiCGMMR;L*5ud;hmuo%%0uDX=9vab#}&6+U{O z!DhDL4{~$0cr5Z8j?x43L9<+vIREYJ?I6i{I$VnR98=%}F^`%#nBzBf1+$UrtHUk7 z%87J2|KWrOH}R4K+N8)*c2x0CsAk)+k0#Az03xBfC>3nv%XNN)4jh3OS+zoiBZGpe z%^D&Cp&JhwcW&?6iqKmQT0;l$8@pcr31?^E+@C6Hw$@ND@B166mhBP1XZa+hF0zM8 z;cdtQs~saH^ncFB+Odm(9FTl+Aq%7_{XKg4v~*5ucrNrQG@!+{ApIcU^JCu57Wu68 ztA&@okL=m8ft49sfx(Koi@mlm&NremBmx?v5SJ=4)-oq_d6t%}Sqv8z57~HK=pXn6 z|LSl1DVV?&4_|k+>u-Ez$9oM(6|596Dx^YSw&mD!&=EIN2>vKiQR>KFWy>_wueHXkRek4RMEpz&i?zjPrIMkIrgW)+p){D(EF@8VJr-3 zHd8JWu|pS!Q)?@?w`5wlhr^i5-%@)KoQ)tAL!J~dD++ErL0ObE)Z5R+P|J{}@5Xn1_=+ev<`Ial|pH}&ganhW(@7gS%Jmg^2pi7M;mx3$c&JHH>bemceY zpD+Wz3~uC6GxPt%3{;-K8BbqYBeS{cS;w6y7QwA6RHj$yt5WGQ^$!^TZkNL`eHgjU#N){Q}tF;CZ1_?SVHji;SOQy<8r)?g;O7SO#EV$6<1DiVtpP_4+xv z-|#TIBIV-ZEHhw75UUe*fIsTWT6oeC(^aSb#88YU?N~t(=VuH&(KeB-m4__X zO+WmF$I)-Lb&K(;l&=|hiL^#k9gE&R+HEI((o(rJa4R;9f}ircZ( z!D2OqK%uNyzQ__=t)avj`#T?>nr!^vA>2PAzQw^-P^Qq~bC85Gf;u>aZfK=YU8mS5 ztfH!{uf@>md-BNMJdV5hi2A6qBWtXt1BDQC!D{`!rbJ*U;RPJ>l}DS*V6b9=){dM- zomX(ZotDhuDe%%il!PAZ#42t)&<|keBjm)WSc&qzif^g1)Bw@11puta;D^hERm%#X zB*fkKt1!UB8Bq7oWuHNgyR4?xYE<^175vivK+2@J1PONZeM@Ppx1#3?l^d65_zDlY z)vISu)_;ABoM*i24)zFrWRu>~pf#F+6nB6qJ=IK2fPYxIEIs)Y{ejc!40TnL)mia=NLfj<`WR+DTLD$oJH;tt+CYe3*|wtXa08QM3`Ut(0OUtEAOJV^-N zY<77nD#yjg^?~)WaphM3!Uno;cFEs-9hNO3Z{|E4d_C7s{VOPkirznE!HsuqyIPY= z8{l9(a`S-$fOaZxwEIJSu*4r`xQE00I_BU1xpNbf|G$T zmd$$6pDV3o36k1TTKo>S7uL0Jx!!>rvJ5YX-6ufjI+Jvv44mooJl7s4a0yVJb(t$H zfDhVmWGs!Aa_8(F3sM7+XlJ=?hvTfZLQq3NhkbtKa!_MaXdG7-$x0UtYHsn8bPn8>mm(y|`Rzp#NF%y**v@b4CD zp|5T4JvI3Y)q|v$#G9gWfcD3Mb%IWzeMymlf-n2qZq!#jC`K7&Tv2;kgSOKY$n|l=VkYH3)PRY`J{MBjELe;aNgI#qu}b%j{_sHWp4*=vHqE7j>d%| zJpJhH_pYi2Pm5ZY%yHn1m+^$;szVLiHTf@uaHAPSDYL~y2;ICbn5X9V5(UWn_K_zs zrkTdeRsh^m;0HJk*T6S8?VnV`XbgIVs3B@P_J;?SmseR&VFv|iJ(z|s=Lsia{zLs` zk)P!B{5pHSgMtf?W|XxE3rxh)QkuI_Mmfh+Vi}G(l3?z!ftIKD@BNs9cn-b2foD*r zYo_dm32NtJFYigSlmy(DS;3`^Az!nbV&=Fbl!nOm9U!2}snL0P)h~Z67Y(-;uXAk6 zj3h9QM_(L>h$Jp7#yRFGqNk1r3#S$%+vk@b7OxrZ=puc1mn}1Epv?$-0hc5g&JM! z^9cw0QZtF=E7aT7W)N@Mf&}a@h`UMzDug{A^D%KqF@gmEX$D^4fOi+i2q#lnHq;&~ zLB;Q3Bs+@67Q<<7--G!8gt1*w9VX6;;;I9hn4inSBVYvRr24B>VOSc~fro%KLh zS$+zantE;lLgw=HYOQI0Fs+{VaBjaeWu-%-pLgZM+hn`eVfa*n4#mD*T3)=+LKrX*bAqRAEJp5;xC9Wuny`$ zG(rxd=p?4Y+6RsG+cT~xiuRCxO9d$Eq*s+$H2nsvaK%&p5%(NWa@dP82K|kDpf)oOlRIqBZ)FZiHb6vy^l-|jvzXQ0ie{uKqfK7%Pbq~C4=MLj51(P+jnomcQIr|2Q=F-CqeT2MTlTo*T8zf? zIGOMWqNn1FE_JyB+XX7iQ9xc@k`s8F^-Dyj^C5K{+eiOPLjUJ`g_Xo);^_QXgj?e5 z;BQ(#ywFjr^P1b+UxF9LMChVMc%;j{xKnKdrO5WXPr^IT3($dp4oQJuSG@|mNlGS2 z;&ur1rilmheeYT9+W52zDW4i6_kyTEX@P*A~m+?ZM4@FsQA5i0B#n9nG4 zS}adyj4`s|zv-Q^?whqrdy)C43|=ji`|P4Iy?JYnUt{P$OL>Wz#_6ctvCSJ~Rtb~n z*U^3;UOrTsBpERdzirQORM1SK02|bR8tH#s5Cm1!pFnQJaqX3WbD+Ez&m=@)be)J- zM&xJpdO0i7^KESXX@A1cs&Eob%_p7kJbg<&P!-HDNo&BpXoJlp3{{}=Xo4E2dmnCP@Z4pENWVY4(Xc}%d5uCm;*-0MoYPk23Rf(C3&1TrHYKt%D=+M=WX-e+j zTTAwR9@5f~Qf9T%wg;=R&}`sql^cF+BW@r{>zhTlh01u6VYKUIui@e1JTfYE1w6VozJ zt;SttU<5Ld^SRbN9M*ZKLl@nQ6CPc&d^NtasK1*aV)j&;8fLM<{Wl_o;IKHuh0g+L ze(uF+EOmj|EKTPEJl1&+Ld$(1fH#G6E;u2KM`#d&eOo#=%dsY6dl)4g8%?T?bFTcz z$9>8RiHNT3w6U@paqsHvxudl;pl=TEX)STnnmOyT~MIQ9}dE$nRxJ4yW*pr{Vl3nSEIj4}HziG#Zgbp*>vO&gZLIo@OrZnTV*) z?0XNcsIL&=4Jvgo7XMxbF(v%$|4z~F*6~Ok`pvWIQTqQm&WSmhI=cSq>;ILWgX90J ztKZ+;Q~t{8#1B!pN!zWm0dNK70MZt-}mmSxaOwvU9OUefU;S$h{EaV7u*Q)|NiDZ-WAme8gn#F)12C}?FuCZ8 z@8QdL`Z;;O0X55FlR&y|h)a0_P*= zI+1adgs9eEJ}kuJ=y%(?*Ju^W=TN{z-XMJOfLJ)Vf@^gCPEL8apGxr0PgeM?^U-u9%*`|Azcxb%Z0}f8&78ap%WU$YX6JnmtMfhCCM%C+R0cntc09G_H z5Y@vewnj-YFgH>APctyYoH6*%r~JO}Jyo{TQdcqo@71^H45|x&$O~7rbg@UQK8Z{! z6)axI-b)^vm#$u4Rc!ekIS+w1pdJwV>JvN%$TXUP7N-L=pmLUnKtHftmSBYQKLBZV z2D*O|)L9=>J#0aiAc(o%$RGbfX_YR6|HgQzEJMRydhLkyI-9)E{WrqiG03)nUD7Pu zwr$(CZQJH4+c;(0wt337ZQE5-U*DdIzTFcu5$orU{cA<6%y=`O6fF2-yZCWlgW^hR z&ezl3zsCw~29Px9--%jCrzLU6nTNlrX<3XLd14Cip9m~&6r_00gL`0`4jZJI1FuBE!>3VLO6VZZjCEEYWD2}u1s=(Q za0G&g^X%shJ5^@^7s;}G{ezpp=7NZJ(tVw9^vl$B?9Ig6Wzq+vm=a~2?X%5y0N4`) zf<%VtehI*6slw%`50z*zgfVR>t==d5(@U7D*f)qOv(>jgStmFbI@45~)vPFWG&Wx+ zXoz87b{MMP1gtE)atG77+^IXqtddAXf@yY(;Rx!~VB{w9pwNH(T&SCTKp4uep9>k< zi*g=wrrZD{be=mpn?=Bv>e7Uq{9!9=%DehX!x+%O8pw!%R$iZ8 zMGNsclg}Vqyy-?Zdn!_^r}Mynqw|7tkcQ6EBUzE)Q3HWl{{idN4!jA$7$jM;dSW9w z_NwGE+3(yw#obK$RIrA^J;IDJ2$ZYvtw3-&UP zTWS6_B_GkA3^jTVT1}=c0;Sz|$Wo-$o55~=;G^+}mO&gpmcpvM+n#^!R3mBgnvL8bXy5uNh89B7tryR8!ZPkl z2CkO~-JyO0{RR9kDG?M&QK3qeZD$x{nLvqMT4hOrxmO3+rr*E& zl}GUGdO5*5{(3s|mAmt*rK;;CP4j}Pp4*%{OjqG41PTwqg182*|_hY zbr}ec_3VX@atx%<_IutO2vAF8Sjvm?&5%((JkGE( zx&z2Qpr$tZU7|sMlr4=VED%EAK*VeK2@TL6>$&F*WP|$B;$T9RKzn*M+YV>b^ucs*Od*03qH$>iiP+L}^sEToIK34({) z4%2##cjiS}^11!n?85*6Ty_2#V#o7*?P?ED(+(Npe8pW4;b9Frg9(cpl#^OQn%^N; zL>)v)QIdObs-fMv1A^K{K{5%4l$*REXV@J7(rQU<@diaT)IooBP|Ol#&$%Gb5XSI< zP*NV9ou#~Uycs#~bM`IB?fOI8WSH~`9c*Ax&gVj&*a$8C__Chs;Z$Vle-w5iO4wCs z08jDj=ES0c@ysALP0a%tpwJN%F+6X@%s_;}Qx*4PTmZ$pNTX#zqnu2`4ZiIuTy$A?rEDe*|cI}MA@m0d+QPzEu`mhXqbf( z9u1WEb*`8wD(aXnGn~yu49ERYh++nD4&Sc1M`iEx>V+ItUQ14p&Asq0G*A!sRPLJeS$L6NDu8Zcvj~#cwH_(>u z7w)=Kuh@$&%5QLeN|(BY!uuSlw>4qPi=O=)e2CLY1OKP%i%$_)oGs4wlY91m45%sX zy;>gNqCYD&x4AINU1P3ypp`y<`T&mg-?J5SD9<)hik4w?9R6dH?i~-1x+qf9D7kuL zZ|9`YWJS+$>#+GA;!OEeeOI9(ty$?sgg!|WYu0pj&6F}%gwmshpkAhhR<*9uR;$UO zzer&@HqWLqs$rBeL1Ni~lg08e98 z&CqMLs!;p#S!*F+FQM2Bw8Z?@)|u6H-fWm?*Y6obQ+IywvYJ4e z%?K{fm?eYUa7VQfpLcyMjHeULPNvhl)A~!__?+xY9c;5LIF6SAbc-EG^lQdIM@{#~ z?t%Q?nOJ|#7>b7;LuqNqI1Nej0EAJV(Q)HA9M{xla&09he>5;b@a%3Z6Vp;q_*o-@ z5Y-GlR~P~&rV&j0*<6)sQOQ_#9HTdywq35jEHtS6O}5OaotrDKcABTq%|rY#dAzBd z4$WllmtLTas`qZJf8dlKGH|}72qp!JGg;YuO+wtNAs$1Q?t#}OT*QpWh(o?jeO3RK zkdq04F(cEd_1rHk^)iW|K%xl#EE;(N-pHR&LL%f4?bAOW6S9=fIPW-2aw&rK1nEJ% z($Dd-c)5-u=lj60}-yA~PCqyhZ z9!4>|pB!lLnj87JOvvJFJhFmq13MGH0PQ*~4}!=HWPa%-X#-~eE)$`*Mjz;a1t+FC z;z5~%yb$iw#33;D#Cg8j%?z0F=_foCWOylC++c?8?;6BrTD;N6PUe~70@@%kpqJV7 zO>#gG*}sh7gW_L%v%v41@P_D4{W#(Gk9fk(z3@bQWadIo-VO$%d$7U}inXXmq+!P( z#PJGyEjf$?CFvk~3#qUS;}RQfxnha`$(r}b!R#cLeUKw=#kO7`f#6j^YQqM51}Jao z=L|eLS^b+R$D}Vc>&nWwbFva!F2{^&GrHP^L0vTop{N8mX9-%%)~KFs1wUfv&mL38 zUXXt|51-J?Z7nR5r{L%!B4K~U^uv+#^f~+i{O^T7wJpe;b9ev%jc@<}-2bnumW7M0 z&DHO0_Wmz2qU#f?TA4j*k=D)ML=VXTngO$oG#<#@+*w^+`Cs@h?r-Z4VsQJ)uQ%mT zogo5}W9(4o%B+sIS!*j!YfH%XuV1n^?9p*Wgx0tzxUTLB_Z1k@ed1&LVmygv!dnpX zU7P>^6Dm$zyo8cSLtx@gDjGH-q?0Nz-I0>g&xkK~B*IKNGH?_T6Jk~WX3V|WAO7nV z_2Ai7#B#xAVVgeDnQ83^nx3@UWl z?f2#3mgXI=)i@Lt9=cRGVy_Jqs|e=A0sry4uBe5^Z=`sPdIA$I{$DK>Q2!3Z!4r-p z@{$`vxehh@8+@{UakWdvk`BJL^TxlD&;WGbfID^Lh}hvo4T0v$XT=(tcF--g&gKa- zQ4B$Tki}Eizh>&?5Xp_7cOyRa1hawJZZGJI_HGKI4x{sZ(;&t~1Qj5u)BC4^0YA8_7Fdrn=>sw3!^yMO{D9M#kJp+M)F(Vse1yAeZ zY(k5Yjq!R*@sf)Z7{@0T7Ft~1JzeptzTrKpd!99|a2H2Ihd@@B5Wfj)~dvwuHF3E>*p4S>RPm&n{Rt0`$I_ z@>fli0tf#Gc6Rg9rN*jZ^ZHMq_NSMFs&$<;1y5T~SJjg}6%aPB@4I*?p}>R-^{{{@ zxa_Nr4nTmMEkhZE?o&<8I;;(bi_4J9{e(s7WB7qb%s>qFeOjPiALt3RyrgRG zOp8{-vRGs*SNg9Nin-6tekFsXM2NlhH8B9~%Ai#aL~N*J=^%KxWyG8{jlu={?OEK! zV8XT9L_BR9u<^>!gy4KO+AKVJWSifw_hVAsd|<&JUsCr%hw&FtpV&IQ=>s4cG6 zL!`S?lr}nqTOxXj31~;pg*%^rTc<+yBnc&z^98j^k7yOH@D5Hl_Qsn=h84_+*^<{2+#*j}5tg{Z8&8Fdg9|B-s*<>knM}fl4`m z?M&mtR(lAn6Vv2iD>adS{TNF?c9&(0t?M~ zE>->|RsBUqJGUc`)>YSN=gHjPLR^+5834%&0b7&`RcqueISu6bA2FMV4d8G#f1V%= zsDH#mM9BaeZSgx-V1o?d8Wcc#brqNzi&d2PE*ezfrTdI1vpAC3XO}f5WyjTv*x#|N zd^g`+Sa#K`JQHAz;Bg~VAgTrcl!ysPh!x-J2@A&i!F!86pTS^Xq3k&}mm1F6L9?Rl zF_H6iA9ijiY9)TSH zsf)3SD0;5%Ooit1@%m$cMwOOEr&?UVn9bsubBg?|Jt0W+(lC}gFaqlBe!!^Amrf@E zhb{?HH3VU-(x|Eo*KpAV-EZR5DH|P%!a;Bem#P%)P{LEo+*v$>Av$SnU6REUVwdTYuxU3g0MJWU7Wo5igxo%$JSmWmB(wD^wUTB%?2s7dH zFX`yKxJFjRCNIMiIuIN1kBJqxco7s6_GDd2oNEssuucr4ab!dt%^XvqVsjNyhtokE zfRSb>@p)SG+B^=n?Xw0qFE1x=+T3a3qhQ%HJy!U(AangAp`Vjhii(uupA;#+i1Me~kB+pFEzQcKX0t z2PAg9KURUYPvo)(%oW^XS==t1&8Y;H8S%7%g0#fZAlCF9=U?XcwqDqo)hbzPc+dTf z^e$KBlW^*sLu!TEDmw3jnOhnv5}WDLmy4C!Hb2;~5{W7+WRsXRk&|6+n}UQ6moDz) zR`s$ZgY|VK@;}2Wu0o{z&ssuMf&><`^BwHQ2bgO4fpR!D(Zj3$eXyE^v3{U;7Dl#C znz{OFgM~NlX6+`to`TL$>Qe|fkX0Gp!0Zo~fIJm@I5l9j;zED?Pe)p$;^XD^e8rGSe}p3v^J?{?HSAI^J9elTVA%n zU-0f8AUi`bOT@zsOPD82TGq2EF4&!}La~q1t&+?$nR|irt_&>JXQ!(#sBR1_b(qe8 z?x6xjzp&i~`W~-~p%gF@R+pP$iZCT^z%3^-Hu$*CL@Vm5cAC6azF>SY-#OmtT%G0W z;`slhGXc?WY*`nl8!`;$MF~!jBmo3IQrUt4-BiQ)V*&^Rz=+dt$CUaT9>bVPJSK4T zWthhL;M`9nD{@${dFgTv8iWeM2OW+(31JkamK!UypTjc2m|+}Z6jA@xofskLmB9>h zxe;ki{r!J}kzH7|t2*UVz0&A`Otb2rNS%RXl^%Cj_NsPC9o5DgOL{o?`YE*FC(7fO zv;p)E!@T^LBqqFWlq3E*`ZsU23i&P7%k`cBmE?;XOb^O&?=9liD_f;Qu4g)B<+~xR zzCO}b7_sV3z(ewNYiw*EVB&f`WURDDQwGV-4&-DpDvma`y#Q#SXWpZoT*$4IDx}yz z1MzrZEzcfUmyPr*U)#uyMlycwXLT(TfxfRhpt;kj#TT^K3SEIt8(=((l$K8=mCiwi z9u@P>SR;b^nKT1|-(d8XYs#Jqg+71x@~-7hU_rhz)!u@=ZyH8-{RI8|QyDF@yfdR% z1uv9Q=?PvnR}Aqp}C@D{^4>FbJ@bE!f6I&HS~4IZ&GbRTOv-ukgzisoomarH>=?*6r!UYDzh@kw zVsfKIjZNA0Q1RMnx}kVf$pn^9tq$L>ULCtnRC8i0d=)@`l|-(H;(KJQ%Fu(qv$(Tq)z(8A zLSu*r?|X;`KQ$QaMw|FpFT6%d??-0r!+y8_Vm8jeM`Z7JB$D9sSu;|kN%Our1~I-7 zspJ;=Yn6WB$LYEsl5rnD^nCf>*_#h5N*^J-8|m-$tnVds!`vrn-BBd5D ztSvMmgUS1pQq7J8v5}iG+c*VRtC#o=FJNjCy^oJo8=@T^4-HOAFOL~K`!I0Rf-yWi zCIFaOQz~rq*)-qBGCUw590>knMq&=<#UI+n1xGkomjI~yOEY7;i(1`5+_njue79=U zN!d$p!MpZ>=@v9O0>C6Q3R$p7a-+OTrXedpkEY#T-G@4TvjfpUu=n!;v~kg3d{dYQ zlblF`BJ)ZYQZ3YP!m=We@jyesbtt;FL4zAEJvNk)#4%1|l3nJGQ7(~37#8nrJXaW8 zV?ZJ77{q*9N@IrM#~1DAf$s$F8$;pIAt`al>IBmWaQ9cWf?f;^58K=F0=S zdrVCNxW1eu(*n4mb%k4xM&dmzJT>t>9{+43L5-IRROI0(t!Zfj;I8@8%2<7Ysb8cky zD3d^sc2b5K*r*(F)8Pmqo(;a_w&|_lY80uGk*>_ zuJ?(EE*UJZV5iYYnyELN88pxtcT(n|Ly^BEEGa5NxKMg@>NyJcT1+!0Qt@(#J#Hf1 z9*l7MzeQgqAWwS<|Dg z;vXlP0qp=X2Yzp)o6k?(o=J>i{@TXQDG*cLD?eXqiLfmJAmjp)P|ioMMAdwq>t7b= z6H?da)tYR4y60t9I*W5hA4=V7Vu@81_%q`b6_^>X`|VDNqM`O3LnSRI8L<`Tu#l3# zQsVY1u1x6^NzB6!9~E;-;4Y^;>bNt+8fWu0Dx-&gQjWlKbTWKtCT>&4Onw%kGG39o zhv}YWBRk8SgZMI6%vKs_4b5%1b(2-~sL0jn8~#HF+9)cE5kF;#YN*}j@q0UdM4e{^ z&dxEJK|ueLk1aanKlWN%@0*=Eo+Di^ZF*o9OllJ0?isOPn{50`2kLu-EO~no6aCKK zW3>{~r8ik$Y~A|yw&DiqTSboUwK{W6PKD@pWWY3#AssR!1TaM;%D0lPJtP%X+~apTPEUcbcUYm9(tsDppVDgDOa=N5Y7Ni-A^QGfo;8f&Nq zSYpGkL5~MB+q7ycaGfCanDzwFg8DG{6>|EPPwNe0?=hz9l$ZMo6}KLlb+3&}Ck0Hw zT(`%XyY1PkbUL$T4*-R~qRGUXkMUwp)+7q9J=EW0(zFj5ajJGv<>kH_m**w&lLhhT zpGeI+Eum2m;_&11DQr-*z${h~6na9&KIW^~gzP|#z->*i)^eBliFPB7nlSBdWN97J z2Cv}6(?3hZHVN;!^qoNPwSM^IBp7$Dd1S!gsJl2BS)*sZ}YUCZN&OAdtbxSI3aCR|#i81D8AheK*IDGhxDqmG~7h)BxgA^+7vgqUMprCs3ni2O|5}&Z@i`BW9rWfC&ihkOtkeG1#p!LPkV)pncJj zso)`3iAh+ZQg@MC(!_i5mBrmrF~C@~LgEZ)cX}KeM^*PV7$bK;5!kMqI@i5okz~d; zLgisucX84HUq+i4e5vNCG$s7xnNku!b^Atz%h#LuAp;_LI(9*E5s8inL~4Sa`~ zZ^nkF!r9x|rprCBsAg-vuus)OU(x{#buJv{)J72Kt)R7y@zuPbsZsIosXb5`B-@4z z+<8P=q6YpzU68L975gCw1e*#aRWaGInEX82w8GHM1pq|G*)n6@q@(G<W(FP$W#mUX6O z&|F@_b0ycoI0p(04l$;`gFWEQG(Uy5a4f(%UBSrD8E2clak9hBM=IP5a~)Nb-l8-k zO;{MSpjZHa!i1mnL=YvwJi#Ub@L-M|1tDP%#HF$;m}I5|p-x~&It*K>dFE#c07sP_ zj~?e%#GXAbnVm4V3@Lq!H-u(7k-1A9zEOzf$b=6BON5+Bi;f;V2Mbi`c8Ol8aYl>a zBimnUE5NN?0|1j#_;!-_JAt7xU}I7wpuh027>g+ykx|r3qLS@8=hf>&v81^^uUTw5 z+CW22LQ?q`$e2}ZH#pVR!si|LkFP<;5;HQnGhs;Y#zfz4ksF%5XN}Vm$$(4){Q=Po zv+M+cwKWo~%AkAx2ZC6GZ6sD#9uqNu{ZN{&7(hCLVEc`o-$TZswg83R!pcw|6ls^M z&_5LLF}oIiI>nd!@vz! zW7G(JOywPW@&LEQfb8rLC$%7@CPf0!%SdKYNxK3L%1HYdLFzBY+Au^j!OW4I!k*sW z#!3itbtfH|?MbR@XXOQW9J`)k@Ea36Qu)?(f}{wi%bN^Ut~W(`W!jr{H3_6CH|&)Z z6awJD2sQmG3hW=b8f^3FX+vZREC|`Ve!+o5h_IyK>$EUh04xB`l0;g??Rvr#z;}|` zErO)mH~4nmzKf;+qT&^khGZ-GNI;q7OvU|+F&@#J^A3BMXq2FaRKB2me*x|M=&%wC z(Vpr~59-(&B;Fwv;%@VJaKrQ%CXT6>C-mMHd5Q~9OGk^PJeTrYvrXFv^K_y~3UU2w zzUn-2^%{Cd@2GC~6XYQ6P#(0sCd#y*#V=HLf2{xQw~} z4}jQ>a$L}$W)9=gTP!|`oW}WNKx+UBYfAWri2u4)@W7I8XUn4@I8Pibrwt_eI|@+JkMX>QG!$XE zz;dhcVJieoc74OqWgL2phf!+zL#xg7%62%!R^ou4)K%e?fnrUAUc~W5>GU>t&=S_S~2;nvn6^M2RYE5n(7It;$hr79fT86*9N@_=l zfW6f$v`#CUV0(Xl=^3yB_7QQs>2_yVFmltR+x%Xm;DWgKcU506f1sNm$Q9S)4!&R~f8etvt{^r}c+Vls-0tdQ?)vBF zyVc?6JKc4Z=m?}n$Bt@hl!7n> zB4`}v0q(B;Yu^we2sTqz_h_6-`;>9vci&K6_{w|1uKgwy&1Lfsd?@>rUMpy1#f5z( ztuDK+a*s#(-|^jlBr-n7;)IYcTUZo%lbG5%XYXF!%gd^?k>(v2r_OHJU5h~!Qe|w0 z$i;ePzO@y=9e9bDs;XT_EN@{;3`f!)vcg!%V&n`xLGUJ`WC`HIck}RM3d?$y#V`CR z^n_4`A{f!9Kvbp_KTqdJm6hZ22I+JvQb$w}`@R#l0N^F_ezaeI^P39d=iG8acVbQz16xIjOy{H?b7f`)@u{+TO<&oBVG^_-mIng z!Q2(*E3`1N2Cq%?OG+1%V1mSUn35r#iUlU{+LrrRQDT*8zpB*6q3~BP;Qj!QoCoBS zT+-!@Whs>as7pr9N+W@C#V)a-$S&N`w?kvTvAmc+0Q_Lauri8N*-{Y8iN@nKXI;;N zhU%0Swdo+!KcmBd%cSOyxI$X^>cehkGRlszSSJEdRDc8os*%LV@3k`X#Xc-j& zF`Ef2xk^KWYA)*As5x_kDb}I-@^7(y@)``abOW!wOX$Lf#in(P3leAl`ZMThPBGAk z^M`4U@HH(!agFL?V4!eI45<5`g$V_4gH>XiXpsNMI3U@M{1=CzW7GD@Gu}4N&^+Fd z6&?{lV6a&2hnE2bUIu*(sz=f`^jsw2aYSD`qWus(FNfBg$I(J_293SFq)+J`MKDhj zqr{yvsk4=6`=0~@Kfe}nB$b@d6rQJ2v}h? z2nt*;qXkAVH5*V8iI-LHrMEYZ1?Nop@AVL_krH-^&O?qZP8u?2lngpJFRTs{3)!=x zGQ2ruOMUXIl>U=b$+h6pCgiApU7_;m@IRmGCN1j}7(uguii3>t#R{VQ%cH`{=wvYY z7d%iNkO=T|`s#NgXSJ$Vs`zq=XN*b+T4M%2BJS~`{zeBVzT9AVt9H>BK|JV~W9sM^ zJRE*XgcC|L4=nY;6Jpoi-7yt$EMr3oNRc29w_iB+UL}ccyEZ=g;!T$h6^1dwRQ0xd z!eCFC1pWvUaof}Zt<%FhH_U)Vm}`_#S;pEgZ@`fa!)o~tGI6J#_l1T*@+;{O^`^x` zcg53;7fdk3yQvY|K@GY_Gr92?ix|A7ol?E}RkEv&cbQwypPi<12#J<23dCdyUBOOXXc^Jg#OeC-TB;a4wEKTtD z%MOpaI>ohwY}1-PSlshX{Zc|&NpLrKEap!JSsncru5^7N>mW^oy|);3yaVVfzn?Ew zR9N2v*RayUCXSj6=)$?U*)6qApaK2Y`fzpZl&Y2c7ivg6G&7nt@K=|t)VMYoAH~G z;BJw!X?*TfPAX5^RZUczcS_cw^%Y^-l^lXNqKql)Z80;V^=;m@9r7;uYon7iJlc+@ zm@xM^V~rnB@NSqXh?dQ#b>i2=dfpNr`nxjKe8V=qE>;_`{6{vqCSG^^)l=~wt&|y@ zCd--UY~TEbs9R>P?!cpWQaur~rNlVY?Tkvb=uNi&)r#)Z-eTN>&tLkQ%RAR>j+tGI z4!uu#J^gH#hs4h7LW(jxpc3nZ7+AqZn$3k=~3WYRl^gH7HuVW zO`Z{{7oFVS+dxW095!<)En4Vr)M&=@&@F)FI z7)=zdkb(LE0WKktIDMi-HkbZ4c;cCafms>xV^3A0Dwl~QdRkga8?2_(HMwoyyXJd7 z!0)=3+i@$e`})&K_i3i>P>Yy*B@K7Q;D&uyZQ)3c1k2M&(fj_U^_^zjyH*Cs4jvXK z-Iou!T$%hr@A{pD52y59aoPLdC5rgjSV+LHL{Xvu0HFK-l_;`?4*#1kcrnB14#lBo@P!q^IuOU)NARb zdjm|l6sS-p2%_C-OTlo`q<-3OuVIT3!J@%rT=9-o0M+#{p$dPI0A8Ti(ISkd|C$$6 z{0=;_TNdgo+6kk&47{dz_?N#Sy7Q!uVfR0X_qT~S>?O~te*i$Mt5EZo?Q>74yp)&& z<|$AJ^Te8xxLIW@Mb^K8x&BZ$+1QM)Wfgc;5rXc9-4JtOjdgo9Ie@Kg@S z?|UpN@M;Y;^4A?JE>l$lx(UI-5c3+GE`q_W$~s)~kuA%1vq|KR56Lgk61)&2`5Nru z*g9dqHWjRhK&FeD-&M1#vyTg6;dQ}#>|{o^{f;uX)+a8ySv|#qx_TREoh}9f-K>`^ zFeMx1-$IwPE}cDEm#kfP_iNvKt=6&*v7+JWxpy}AdkZ5TSoiVE;2?L&%urMZxti_G z*%bVys5n@X@!D&X$^?CL;Zu3DKN;={(nR;1I$OCtm=U105hgUl0U(g9vY#_^^4rq- zS(J9k+RL zPhBrb=qcadi7FhVVnZ_0Oj=6I00pqaXw~YPI-Z(&iUrcD1xroe2_-4 ztH0&nZ=4FxiAvr96S@9TuiR1MadPs}6g*;Jz@_}oGMhZdp79jW<<_h2M6EIUPpba4 z2bZ2yqyoFZ5U|yI-7rj7^sCvYaezriOW}{8)s4sBgy!xfh`^rvW=4DRQm0sb0J6gO7D@73$aS!jb6 z%TMyqp)~wga)RxJ?D@<=R_C~hJ5?XpMh0`w_=ZtOdoq=(&lWZ_n2b83I;UNqiM)W5 zyveO(UdsX+++TArM5jclSal#yR^Guf!!WT3ybVe4;R>}I7sH?4$L;BP|9Ci=@FWUM zrbmoz4)zoO#2LqMmYj!sPREC`VUDHpZ>X)-QY)&iPY{%i*j@^szr>kqM5axI_ddOa zl31#2@zqkL+U~nyw1R1XtM-V~m!e6hqM+Co${rfWFM2%O0jz8qop{HY(5#Kc(U8~F z#&DoHbzIvIXcLppwoHv?;_PL$t>_^Dpu|}vP4LUgt~pe9P>7K8UkGcaqy0&XA|K#2 zvC*hA9%{}!!gRYNXf46EiR(S_WV0RHq}5^%POaJJy1#cj805<`%SiTa9&?Z~(( zmvY)$Ly|@jcG5v3n$DbG0#KM1!*E&5nw&qfbvmK7|6xEf7<*2UFq^5rtr2(ACpDf{ zO-im#ja^wE7#=p&EFp1j3k7B&G4o))5BGUdx=Fm0YzZ3*tr$fjE1U~bq-9Ojt@QEu562@YM`Crnlj z6lXl30xB08NpXQit8v4>{Q7dk^osgl>!T0nbIF@l}aPeE9~Ix-%v7t#dxIQ&w}20P1CN zsR(Iuu#`k*BGqmfY5q-YP!Bp3(pu6fR@QFOs5IZofawj8@r)9oF7@T*Q7t-#>xSc{ zottTcJG~zY6WTUzb9OGum!bP3>Gz53*Z=yIvOOiKPsd&MlF^s=VMXf0G_n0*WGF#y zxYhi0524X08~5D9H|Ps~W$flE*>~yZ2+C25NJzl){wXNXI%}gc3_o~m3uTbLKRJ7N z!hSkY$DgU?%hC7c>3x6w@qVh;!n*AGl2{@8P{Yi$=f~Rn6r5za-LHCmf1!TU?zo!L zhV|fr@o2{YV-cH@dizs1?PonKIFA4Hh5p~gOq_^b{V6m6z?&2R0M7p*W>j5_<;~2T zOPv^8Mi9BA`i1tDde-V-b;u7~f zk*priPe>&dRbEfF)=~U2(hed(e<&SMw}az!6W?K=z_)6jGE%t;1WMo|8RwaGoW=6{ zE$pymJS+^?h0XIb7l}T=|Fac{a}05%9UGttY`UMA02DJ?dTsF&ayAAK)kg4yMWI*w(SkKyAUU*N}anlz?n$=6)c=eAezdPSjCYw1!z zxhG_|wUt*P3F`fuzCij#^|GnxLPj=p8)?l)>R+th(0^Z*Zk_Yq`iX5uA;u+Uf6ESKGjOI!<-Awvz`(%jY|x-qcjEYz&JZhYs0j%H;M?-EsIt8t zQKmHNI<$$93nbDYaH?LyK_5i17^x2~u*=k>)geGSrTd4dA3y<=4t#&Ch1u!O~cvMH{aR3UqGD1^Z3N%)&!XIBL3kuBr z+_$?X;^8NP|76OG`VV>ZJOOM#pP8M)NcXe3X*rCfu>MU5Tf#XjsmnghAY8l~OUJrY z_jV2utW%oVg$ws)Sg?_qjiw^}dhH<39!^j^1LorUeT?|rQ)~-Y=yTyI4t$Ss_P}Un zBZMXD=z&poWQ_1@#C_y&1*7_bGC(<`{|Q%k$}^NF^aZ>gJyPL^B{K%5yf%U3zfe(> z!E~rX5-UMY#rxU5TNNJWH{GRyXN@a3J_KQpfSsgt%>iOAy2v*pFcCw6qWgOl#9I#b z{>_Xl=*62QAaCc0lSy6Rd7OnDggPHnn^=;xGJ;xD;-G~CNN)B%4C!PD;0l?%K)|dY ztcfqyc#cl?On90F0b=BE0ic`UIpG0PW~Zf2oC`b?W)V&h4e+L2AEIKOwfjo6I2F_R>HdSr0i`>Q-6fz=#m4 z=hZ?F2w}_3ArJYSFenSgAcRmK)rHRPzQO!pR8X<@`LM0OrKs2A)NyRbe-i*|z{E-X z7w-CqU<1Pt3KnrD96iIt5R^1cM2by?s7TEo{TNP0nBwAb7SRuffH=Dm)7h4XVSkqo z8zJgv$A`7lE15aBFgHn1ygb|C-yaew=K@fcY)V*{n7k=?u0Uv>jv5G%Ie*EQCA_7F zd1X#6P6N6T;`-0p&X9)yGQzeE;Z|o-`qyE^j=8!*Mnn?jT3Q>4&O5D@7PfL@a;}#( zhlIOB^bwr7D>`j-5OXj%BSfpuPsErCKIv$`Uy{}P=cEVNvIdWa#e>q*6j1G~{xIBi z85Zo-!%fhDv3NNMqa3&ZzDb-+Q<5EA`i)Kbk4+SG z_;GngdY@LDYy-7Re5X*b6Zrm_TI)50UB!h_1z|~5q-(kY5~5h#anpaxn?%e(6bu3J zuR+;zFhGyKJvDum_40L^*Zb?tFo5X{3q}eH)a$FRem7y_f)9Z*U9dkjK1M`fqn$p7<{mDxwGY~| zK5xqSOQg2%GFml2CzS5tQW|;!giH*bhqVtDtEk1mWMDY!8~AWdMe7|=JcAm_8l>yt zj%(k1-neG&?#^9vVwP@QXmzTjBbrgFyIKmewVVQMV1++LbmVC|E&6GA_KxWPL>{6( zQT<+il3_x8-Z?udNNohuf;CjQ}8 za{+yjXQCZgg8EDDrzqa}o$+&+$6T)@Knw(^=mteR1Fvwo9UPEJiA#1(GkEGNNYFp( zWiHb9L(DUw z!FND+GgCl)hbr2PzJ2As5(P~UNUuL64RN=|XrQN<#0h(0tc8n)aT4_h7qCfJvw(%8 zXt0Z9tlDGandk&w@!o&l*=v5JZ+k$CoUOMFg>@RQ7ed@eX{I19zAM)dX+SR12<_y6 zLP3D7jU_F+3AmLLblDq7wGyQrNNI+v;%IZ?r8~otpgagm;tyPuHcT8Gim^><%R7(b zNxDyi$iWd+$EH5r>*d^O&G&oF9x2@YG&#rQjfhtM4tK3UbMS?kuy@v7zY%NyF^GAp zrvAF_BWaB`2<#_zfVqu`VG4sVeXGe~xD02@Vsdeh5L>$sT;Uwr7U;MtIW?oD#a^cE z5XoFnG}a za;E|~T=5LcqL@nW8G9$X>fTQm?vn@i`EOTrC-!%y=E-X#_S_H4V0uUB2N;U~>CKG> z>+g*Q%s9j>?Jtdf!0CL<5bYJ7D#H7SMtbxvi^;EDmpl@@!R%Ysy>-x9mw+fZf?!b~ zty&&@c95Q*$8N)Cr|F~1;>Ba}8ou4aEuFgP`3h`&qN0ho!>;vs%J$7T*ms+{%hQRB z?=5NTu#BKYnRjJInD;;sK{^zQV3ZGgC>~`u=biumRtV$sw7|`90033q007wkABCV{ zWBot#pAK%nVDTTXHx#XxD>e`HON0eB*#IAZ$w9mT9{bkqPB;45dQf*O>lHM@_0F$r z_5>Ou>@Wca64|}05`F2y^!X_}F~d43{)+65=MPcfY>N|G=ezb5%ay-L>Phs&9R+0> z6LvV`;Gjhw9f#UOj=0-uNn+YU3-R%H5d|`(${t!tx^{Wyx+W50&wmX&YvN22)09Zn z-x+i54$ngP`rdfF|5Fo&M$kj#E*v{j>H`{iAZFFX6v_wGNbHDA~+Zf=t z!=0ajJl$g8qABcujn8)`4jL^fusXXdP!NfIcIB%gn$X1kWNECLlwWg!aFf(-$JPhK ze3#Q8dJALJ;{Rn_;>AzAH@jl-lX+Xt(5h4%_rYDyjWGG>i(nmo&GdED_O1nBuOXNx^49eC6wAYd23~hMS^i8*-Pb z@#QvPQ>sSgqO7-Yqtvr>`7EXQY_4F#6?b!4_7wy5ia1+>j_;lq*mQ*T-Ur&b=5?^+ z!r%>F;Sl$nits{)FE`l2@BMEGamQr;k@OMJ=CzEwXd?R0<&eI;Z-^Hqr40Ao@VLCN% zN2__oGEb|tl1-o-9O->QrMa;|h2xhvW8FS)sjH&ey#5W6`g*b>+C0N2e7JM+@L>7! z(lEqRD*aQo2hb$j>CKT@r4H+!odXo0*1SqBZS&Pp;^kt!xx}s%+;yp)BhTZOk>nb? zixCA5i5BI6h6qHa*u4C?L?;cFM*U3ksC}DWp2Dh_YMh1TQ09AGf6e+_L(4P$kvK2$ zVrvq~L@-F{FO)Sx>5n+~ONq?Rlb0+Hh;JfId@?(k!1n_wQe54$tis-HMx{jkw^M2&AsTZ10X4A!~7rKUb0(hTl@DFB#?pVYC zpqv53$WA3T74X}gWoUFC!iD<}MiLrz@d)SD;7>zN^cIXuVt|9(kT9V@?HhgH29Ng) zD9%VR8lrZ(e=kLD#QfO{q3D4Wf?x49B_4tYaUbs7F zM*7uVRf!JR2GJQ5b9Fg5S3`F9D&$?i%i57X|4o~ZJbs9Va;1t5_VSx-|MrDXM$8xN z4>i;z#{yFWCvGi=1W)ngFnP{LNZn!D*DR(0<1#=Xh9413RVk~=_qX3??xJZSYA=wc zr~JhT-7ilWkxY2C3ns8cB>?BAs!&PrSjP32@uI=NqD_9mVEWsLHtUS41z8Axq)I0M zQ%0VZz_wxK#fN2Dz>zloO?GP1C<7=}){#WIP-Wu|FI%mKmcOgJk>deYgGpf?+H1V; zJC_D{uM;XF2G*!grgzFt6FW-(WaY}%@h$O5uE|$Tv-7m!X>Xtfb_hlGg^EhyNmkbM z53bc0^#A8(hY3E zO}xbz!4!qY6(S1Vc+d^qC;_DsrcMI7@JNlFYp~svCAi(J8|T7-EEy5=Ap)iDtVHzv z9dv+6ahoL>=&6&SfmW0)itt?nFq?MTv4{x_-AI%lk&ARXv6AokG}kJj!}#C@{AX5&GbX**GwblOiZu*vgZcpY8s-TRHu?r<%O0b zIlX-+`Z9*Fa(1Mks!hMt^5m17U5O2S3PR^LH|KNkvvP|hX>%A$tByL z1C>8TyHyu?F={G^D27R{dYIwDN>U+%Gm%(ijH7+UCX;kc&=%HPHW1{a{46+gNQOCJ zUxj+M|A`%FaGeXil>0<|sclTFIL! z8uC9UpU*GN^UOLVMsJh9hW>Ob(+vJY?~o(MQy0_9#*xR|-nN7zvE)YsPNM*LXwQGJ zh;%zs(rJOb^Ph-zbRhsLeRli>0sKA;3HuyTYXY8r%VAnaQ*!Nrjg7`^0+F~60eUUC zrJ^m_nszf)ZUOG-;p`B93esq&Rts5KzD*RgL#CxW=)J~Cx@FYNZ7PSz6iudXo7vkt zN+(K?&=%%8HUw~brl-hl$z~R5hAOHRe|>`fP*5+EwVI%p=T!7~7k%4~yZcu4*Vzc$ z4=>3^-2iPl1L@0WT6e3j<^(R$T-th$zTo79nt_7TMpCpet}n@q_5`&5d_Qd)I^V4s zAh@YleXeNf<_ep$kd_JMW}v>s*p6HWic;Pts;m>=v`b_aIOs<ZL9*=Ps2AJVyXeo*z3pO^*8@S zZuJciDw_dAh03zX{&V0|r< z6Xp*=f1O~JfCq_pII`}Mh0#Q?;rs6Rbt6LsYpw#}Jxo}xS%)zo55G|#474{mDt?LT10ULHUs=tE+?yV((1*b!F zbb@C+g=8{L$e7I0de`(&@hwBLpt#X&Nb^v*>aNnInOI`hc^HU)-GN8g*YBRQcQ5DV zu0G-`+*58a_^4tpOAU>tQm!y*2%9PI23J`Ayi( zF!M3OsFl+>gp#~OU^Sj$E{h|ON>%BgC#e2xv9`U&o^EeJ#K)WiH1;>bTK38(1GJE* zozlyFpn-3J){R?^3fq){d>@*?#TSt75#&9Y?<9vX-wR3=dw$uRTj9`i#HgPlP`ya# zs?k<#HLhQv4t1xucR$ZCTYClc*$8*rKlHGEVGv!>ax)VxJWKcvGpL{hF*U;euF%qR zC6}J%M>Sk{I9LcTE|st0{UcaGv)NE|noOz`*=gmktOQjLpWq`@-;SHfiWE@@FGxgK zR-G+oU5>$3|K{-raNknnxDGKflk4%Eh~@zpm2ZjQZ)*l*I;GZ7E`V9F-5ot^-f)?9@9?V=fNzLn7Jx6uar_LI`m=fU z`SCZ+dI;%r%~>@g7D={aVD}~S8e05B=un;@#%uHBEkA7hOveX{f^RciYhwxel$4aK zli3wZCtHTKrWS}jFXal+qT<_PAi(Y03*01LlfV1VVU{OubGU9a%D}3$p>wa*@K*ca z4w=$`?wKbN_DZy?k35Qphna&0C1{F(jWxX#T-#km0w*hH8kk=#Y#t&6;2DE$v5^q1 zdMhO1+U5Hn-X+J$*El(^?Q`dgY}*Ewt?L*&Ng~(S(rn9p(6sZ z646BrQ(ZJD{YTz53$vWZ{dE-6@j*SqF^a6Q<$|_5*c~pI&rf3TYO9s6EP{^lcKMe3 zSh|2ebgvz#rT^odnuU3er;Nx%0Q|vFSo`6O>8QvOSH=owTrT}z&#m=jX^1GNmt1!= zmM>d)-owwE8Q#rouauC_PN!MdlN{bcr`bSajvEdpYL2ppFg$L$CmKhciinT*A+qmY zQXio$9(bT1L6fCb8+<>Vl0$tV3Z0sjh*Ncs-FN6l+ptL&2VLxgJ|*C@$JUvH@5|u% z?KAt%#eLV(!7I5i?H}hhh8wj6@S%tye%g>YJOp*O(N>uC`Po{i8$R!&QfKnGr36IQ zFglx)Lb_){!XYx6zbKw7%q9u==->aN@HqJ&)`vk7P4BPToze#YAo!nZSIxlM!q~vs z!p>IRz|r=%_V{0wN8B%`4YB8wdv)t%i=dN8<4YDB+&o~2%`JmNK+<--(nQT6Aj@Ep z;^E+(e}26$u1}By0s!PQebEu|uDd-qJ~vmE%I|7+t1-LRSVtRe7JoZeo7EcSk^)P* zd26jQY)|j|p`V&0VB)xXhG|#xTS{1MQ469ua&^o%tl5;!PAV>7SqlqeUe|o{*K01A zn`b|ye)VpPLYqk=HCLxXRI(zStX~gGm(W!s1Q$v1v8-*54Sjk)1mfAj%D80owMx4U<_6?@d z-K{4_D!l4ZMV_lX=PbG?KdF0XRcDq^q<2 z9%cw|!eRFaxP2BI$#Ae>N@62G{-*zX+)g)e$owbo_%n_8ssWtPs;jI}70bh>kdOE= zhj)~#?F*>S2ygu7cqfUMpYR_OrN4r)`ln18c$TW5^CF|3J&2wf+fl*26u^7h2gGNR zia&|%=6o^QpF#L?o_3|`>K`#n^(WWLZA$9KzacVixSPd3ujwTBs8VW7fv-7`K#tP` zeLyQ#-(}aHGGE9T9f1y{vU;jx><5iV3e%bIg?>V_F?q=~+ycQ(0gkVPx`i8z5+4Z| zSKJCE?9Guk13o}6)%ggp z^|UA5wIJOwmetDy&935h0Lt>H_buhvt0u+np6|G2&V|bzmFJ!h&rr7GyW5?Xx}TvV z+pFyC%QJQ+qG?Ltz0P&O)=t`dQ6W!NfVq>>0CN?tohJWMc2>*O&01o}eivao1OB~j zIhjQ*(e3{dKAZuEA6O!T0TPNfEcLciP?1qmJ)k_0Khgd}_<%(eCyiZ$553r7zS%Ks z4CKd+D`!`qKLG$t-NRS_pzCJ^^jE50fO}7B!cqvQ1Wb+BmO{4d5f}gc zrMopuqOIvf%A>L2y23+%`l$c!MOc^2cVEM$?m0W6xq&6KjRvEQV9eSt8;ts9jkeJ> zGINZ%YXo=yk>~XxBeIzh(9Qcdvb9siRN#FQvI3yyE7>{=!$V*~Cd20<060Hno|^ot zL38r~UdsW$2xwi;$-WPFj^)y9#IvSdC~;3cN>U@qOcJ){7-uZ-#XdFo-dKdoDyZQJS#enBv1zmYp$0Qf#4jd@Pbds=+Ag z*=#vB%$JrsJ7Qj2lEC=E+@VaEY?RZ_cZ6rao+WId@N$qumukoLfOXn|xOnRsYq*;h zSv;_IGA57>eYt4^l(bX_<#w35K>+&5b5p$AN!Reg|+oTyefCwek(N z^2snl%UOAbwGRlt3^JgMDu4RvOImS>u&DN?*W%?6wSHf&m67jiHV3n&pT<-|@s7;wjknt9DYFlLl? z7?RbcrgX~=Ba0Rp>I(jf(z(7zR<8OX-RY7U1*?~D(Cr<0ajt1FX&4lsSdq$@X-u_lxOP}>RBNUp;;T> zJV;wy0LFI&u~laSroeomX5tm1Qu4(dn{*Ml_#qU>4WNTtf{C>~Op+LxFHJD+btP0Z z7-A_KiRg#*C+-!?p;@SAYkmsfW~k-JOB5V59r-?TolZ81lsJs`IDo&J8W#@W!CXUu zbBHMZoixA#{lpCb@jzS2Mx3%ozSqD zdP?NUq82QmF(ZON1aiD^e}Q;J_J4HwAY@Fh4u6TaIj1g-ma`pIn?fKctjir+sWbk` zBV?7l1)>1ikSqHJxcS z1u_^Ud>~=*8<4SLAV*-%BqkzZs7r$l_TPRi%|YRf-)F?GxykRWlmgS%L2-vn5r!z7 z<28IlaDmypMRdj$V$Yr0rpzbf@FWCZs*cCSif3`a9a4kBNfIC;xQHY1ygq@Llf9?Z zO)2~vW&Uamik$9<9!(4e;)8gl8s0nzE@T!6uO?&C$>dPdk`0398&3zOv(G>R#W9i_ zN0BF8$|r#>38Sb56yUyGXbV9Qq47u(u`X`x6%5!kVJLrVA(#@kL&_Sh5b_sP>0xS~ z$EoY$)_bg48vF=%-Vy+g4r;wPS!Cgb1%pLOOXoEG6a%M-e#ASLn6WI)S@VG zpbE`A3N&9bVbA_DNeTkxeM`L31DiW?tji#8gD1h)SiizvE_~av>;-1pl5|ePapBuA zeh-J2?2Dj7^09egpRBNuGI(kyB+Jw#ov}aK54c4#UABS&rql;77_dP;l~D=wdR%Y( z)`D>!eMV63p}sXZy=P|yJGo8pv#KaUoXIrK5H7-nswCx10YMQw9Yr&IsPMqfROm_J zsr6N%`Q6*5nM)C^Vvt-Bjme&<$FvFlzOu9BA_8vJpnAja5@$MPWlaFXqJzphQ~ z=+UL>daJtd{%Fe0iD(t?zm)0%Wd8AmK82HeZZa^A$Q3B)^V}p90*K;3hMwqPfeJ4a z$*Wna3%nps&_dF%X(n3bDj93*Abs@Tkg5CMpf+0`& z#%g;f=zJ5MF=R#X*EZ)MpEq{JR|MfpttW^TpJHQQQt9SG6669%O=%N)E0IF6?Ifv+ zKO2pr)g&j+C%ZKmN0k~j8ko-dSeI2$?6G7YtQpoxhBb9-w{MGVYh|&CG%Z!kt96M@ zD=((fsT`@UUt5aaZ-C)1hrB!k9AcJ|DHaE^X621~*=$3BPGf(CNfuJ{rjlS*^ zZ#AH0cHSA9g=TKFHhV@a0{Rr+zii_$1DKm>+*IJUpc4r_=ua;VFsr^1Dm@Iz^x3=+RI77M_>g`}FqOHd>W_N4bJcbxO07u^l9cTNbwlhqCEq;_iqhQ; zk?!hHgWT1wwElt9VN2`o{Xpv)OKgF$0Ct~XyeL8b07&_AZerXcX#84jmp3BEe_kxl>LiL(d#f9~svK)Ntnofm zz;Uq$Q1*S*y+1Ndj=3W4E+=I=ZhJE__;LOU zHrGvcbyh<)^$P)%zdu%lFv7 zRq?y_1EBT)YPS6Uh~NK51&ce{x!C_#JoI-XnC;!^4Yh*#ip5aDz zZ$fF?g~FlCnnx}?SjIs;h2l+!vnF*6$6%Jc>9fBr!B77cOSZ6B9SXnR=83WJ75N!w z67yZk+2N|aAB3T)B-pzJf4+~p{TuxJH!7Oq{ceuzC-NH=MV1XOKl?zkbbhLAD59wNIaT;HF@_aq`&2xj z{N%)Mqj|!BfNNF1VY7o333x<+Gpe!kTnQEm65LCR=3!~h>fvUku}nNn9O#9H;9CK} z-K-fuQy0U-r1<5doWaEIYV^R=g@b1(l;{cUWaT+xjuQ~gC;O1C0rOE4jOkC&Q2^_u zh_H!P}NYKQh#eglpTY9pWe(lk(w8ap@$

    BjPk${#W2=XCeUZsKAqQ0lm)GzlD1Q_iqK- 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Ⓢ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 z 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℞UevYv+XS|5+q;ne1=O@WRl*20DhJ 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�cD-{w7 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 + + + + + + +All Classes (biweekly 0.3.1 API) + + + + + + + + + + + +All Classes +
    + + + + + +
    Action +
    +ActionMarshaller +
    +Attachment +
    +AttachmentMarshaller +
    +Attendee +
    +AttendeeMarshaller +
    +Base64 +
    +Biweekly +
    +Biweekly.ParserChainJsonReader +
    +Biweekly.ParserChainJsonString +
    +Biweekly.ParserChainTextReader +
    +Biweekly.ParserChainTextString +
    +Biweekly.ParserChainXmlDocument +
    +Biweekly.ParserChainXmlReader +
    +Biweekly.ParserChainXmlString +
    +Biweekly.WriterChainJson +
    +Biweekly.WriterChainText +
    +Biweekly.WriterChainXml +
    +CalendarScale +
    +CalendarScaleMarshaller +
    +CalendarUserType +
    +CannotParseException +
    +CaseClasses +
    +Categories +
    +CategoriesMarshaller +
    +Classification +
    +ClassificationMarshaller +
    +Comment +
    +CommentMarshaller +
    +Completed +
    +CompletedMarshaller +
    +Contact +
    +ContactMarshaller +
    +Created +
    +CreatedMarshaller +
    +DateDue +
    +DateDueMarshaller +
    +DateEnd +
    +DateEndMarshaller +
    +DateOrDateTimeProperty +
    +DateOrDateTimePropertyMarshaller +
    +DateStart +
    +DateStartMarshaller +
    +DateTimeComponents +
    +DateTimeProperty +
    +DateTimePropertyMarshaller +
    +DateTimeStamp +
    +DateTimeStampMarshaller +
    +DaylightSavingsTime +
    +DaylightSavingsTimeMarshaller +
    +Description +
    +DescriptionMarshaller +
    +Duration +
    +Duration.Builder +
    +DurationProperty +
    +DurationPropertyMarshaller +
    +Encoding +
    +EnumParameterValue +
    +EnumProperty +
    +ExceptionDates +
    +ExceptionDatesMarshaller +
    +ExceptionRule +
    +ExceptionRuleMarshaller +
    +FoldedLineReader +
    +FoldedLineWriter +
    +FoldingScheme +
    +FreeBusy +
    +FreeBusyMarshaller +
    +FreeBusyType +
    +Geo +
    +GeoMarshaller +
    +ICalComponent +
    +ICalComponentMarshaller +
    +ICalDataType +
    +ICalDateFormatter +
    +ICalendar +
    +ICalendarMarshaller +
    +ICalException +
    +ICalFloatFormatter +
    +ICalMarshallerRegistrar +
    +ICalParameterCaseClasses +
    +ICalParameters +
    +ICalProperty +
    +ICalPropertyMarshaller +
    +ICalPropertyMarshaller.DateParser +
    +ICalPropertyMarshaller.DateWriter +
    +ICalPropertyMarshaller.ListCallback +
    +ICalPropertyMarshaller.Result +
    +ICalPropertyMarshaller.SemiStructuredIterator +
    +ICalPropertyMarshaller.Splitter +
    +ICalPropertyMarshaller.StructuredIterator +
    +ICalRawReader +
    +ICalRawReader.ICalDataStreamListener +
    +ICalRawReader.StopReadingException +
    +ICalRawWriter +
    +ICalRawWriter.ParameterValueChangedListener +
    +ICalReader +
    +ICalWriter +
    +IntegerProperty +
    +IntegerPropertyMarshaller +
    +IOUtils +
    +ISOFormat +
    +JCalParseException +
    +JCalRawReader +
    +JCalRawReader.JCalDataStreamListener +
    +JCalRawWriter +
    +JCalReader +
    +JCalValue +
    +JCalWriter +
    +JsonValue +
    +LastModified +
    +LastModifiedMarshaller +
    +ListMultimap +
    +ListProperty +
    +ListPropertyMarshaller +
    +Location +
    +LocationMarshaller +
    +Method +
    +MethodMarshaller +
    +Observance +
    +Organizer +
    +OrganizerMarshaller +
    +ParticipationStatus +
    +PercentComplete +
    +PercentCompleteMarshaller +
    +Period +
    +Priority +
    +PriorityMarshaller +
    +ProductId +
    +ProductIdMarshaller +
    +Range +
    +RawComponent +
    +RawComponentMarshaller +
    +RawProperty +
    +RawPropertyMarshaller +
    +Recurrence +
    +Recurrence.Builder +
    +Recurrence.DayOfWeek +
    +Recurrence.Frequency +
    +RecurrenceDates +
    +RecurrenceDatesMarshaller +
    +RecurrenceId +
    +RecurrenceIdMarshaller +
    +RecurrenceProperty +
    +RecurrencePropertyMarshaller +
    +RecurrenceRule +
    +RecurrenceRuleMarshaller +
    +Related +
    +RelatedTo +
    +RelatedToMarshaller +
    +RelationshipType +
    +Repeat +
    +RepeatMarshaller +
    +RequestStatus +
    +RequestStatusMarshaller +
    +Resources +
    +ResourcesMarshaller +
    +Role +
    +Sequence +
    +SequenceMarshaller +
    +SkipMeException +
    +StandardTime +
    +StandardTimeMarshaller +
    +Status +
    +StatusMarshaller +
    +StringUtils +
    +StringUtils.JoinCallback +
    +StringUtils.JoinMapCallback +
    +Summary +
    +SummaryMarshaller +
    +TextListPropertyMarshaller +
    +TextProperty +
    +TextPropertyMarshaller +
    +TimezoneId +
    +TimezoneIdMarshaller +
    +TimezoneName +
    +TimezoneNameMarshaller +
    +TimezoneOffsetFrom +
    +TimezoneOffsetFromMarshaller +
    +TimezoneOffsetTo +
    +TimezoneOffsetToMarshaller +
    +TimezoneUrl +
    +TimezoneUrlMarshaller +
    +Transparency +
    +TransparencyMarshaller +
    +Trigger +
    +TriggerMarshaller +
    +Uid +
    +UidMarshaller +
    +Url +
    +UrlMarshaller +
    +UtcOffset +
    +UtcOffsetProperty +
    +UtcOffsetPropertyMarshaller +
    +VAlarm +
    +VAlarmMarshaller +
    +ValidationWarnings +
    +ValidationWarnings.WarningsGroup +
    +ValuedProperty +
    +Version +
    +VersionMarshaller +
    +VEvent +
    +VEventMarshaller +
    +VFreeBusy +
    +VFreeBusyMarshaller +
    +VJournal +
    +VJournalMarshaller +
    +VTimezone +
    +VTimezoneMarshaller +
    +VTodo +
    +VTodoMarshaller +
    +XCalDocument +
    +XCalElement +
    +XCalNamespaceContext +
    +Xml +
    +XmlMarshaller +
    +XmlUtils +
    +
    + + + diff --git a/libs/biweekly-0.3.1-javadoc/allclasses-noframe.html b/libs/biweekly-0.3.1-javadoc/allclasses-noframe.html new file mode 100644 index 000000000..bb2ac7a41 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/allclasses-noframe.html @@ -0,0 +1,464 @@ + + + + + + + +All Classes (biweekly 0.3.1 API) + + + + + + + + + + + +All Classes +
    + + + + + +
    Action +
    +ActionMarshaller +
    +Attachment +
    +AttachmentMarshaller +
    +Attendee +
    +AttendeeMarshaller +
    +Base64 +
    +Biweekly +
    +Biweekly.ParserChainJsonReader +
    +Biweekly.ParserChainJsonString +
    +Biweekly.ParserChainTextReader +
    +Biweekly.ParserChainTextString +
    +Biweekly.ParserChainXmlDocument +
    +Biweekly.ParserChainXmlReader +
    +Biweekly.ParserChainXmlString +
    +Biweekly.WriterChainJson +
    +Biweekly.WriterChainText +
    +Biweekly.WriterChainXml +
    +CalendarScale +
    +CalendarScaleMarshaller +
    +CalendarUserType +
    +CannotParseException +
    +CaseClasses +
    +Categories +
    +CategoriesMarshaller +
    +Classification +
    +ClassificationMarshaller +
    +Comment +
    +CommentMarshaller +
    +Completed +
    +CompletedMarshaller +
    +Contact +
    +ContactMarshaller +
    +Created +
    +CreatedMarshaller +
    +DateDue +
    +DateDueMarshaller +
    +DateEnd +
    +DateEndMarshaller +
    +DateOrDateTimeProperty +
    +DateOrDateTimePropertyMarshaller +
    +DateStart +
    +DateStartMarshaller +
    +DateTimeComponents +
    +DateTimeProperty +
    +DateTimePropertyMarshaller +
    +DateTimeStamp +
    +DateTimeStampMarshaller +
    +DaylightSavingsTime +
    +DaylightSavingsTimeMarshaller +
    +Description +
    +DescriptionMarshaller +
    +Duration +
    +Duration.Builder +
    +DurationProperty +
    +DurationPropertyMarshaller +
    +Encoding +
    +EnumParameterValue +
    +EnumProperty +
    +ExceptionDates +
    +ExceptionDatesMarshaller +
    +ExceptionRule +
    +ExceptionRuleMarshaller +
    +FoldedLineReader +
    +FoldedLineWriter +
    +FoldingScheme +
    +FreeBusy +
    +FreeBusyMarshaller +
    +FreeBusyType +
    +Geo +
    +GeoMarshaller +
    +ICalComponent +
    +ICalComponentMarshaller +
    +ICalDataType +
    +ICalDateFormatter +
    +ICalendar +
    +ICalendarMarshaller +
    +ICalException +
    +ICalFloatFormatter +
    +ICalMarshallerRegistrar +
    +ICalParameterCaseClasses +
    +ICalParameters +
    +ICalProperty +
    +ICalPropertyMarshaller +
    +ICalPropertyMarshaller.DateParser +
    +ICalPropertyMarshaller.DateWriter +
    +ICalPropertyMarshaller.ListCallback +
    +ICalPropertyMarshaller.Result +
    +ICalPropertyMarshaller.SemiStructuredIterator +
    +ICalPropertyMarshaller.Splitter +
    +ICalPropertyMarshaller.StructuredIterator +
    +ICalRawReader +
    +ICalRawReader.ICalDataStreamListener +
    +ICalRawReader.StopReadingException +
    +ICalRawWriter +
    +ICalRawWriter.ParameterValueChangedListener +
    +ICalReader +
    +ICalWriter +
    +IntegerProperty +
    +IntegerPropertyMarshaller +
    +IOUtils +
    +ISOFormat +
    +JCalParseException +
    +JCalRawReader +
    +JCalRawReader.JCalDataStreamListener +
    +JCalRawWriter +
    +JCalReader +
    +JCalValue +
    +JCalWriter +
    +JsonValue +
    +LastModified +
    +LastModifiedMarshaller +
    +ListMultimap +
    +ListProperty +
    +ListPropertyMarshaller +
    +Location +
    +LocationMarshaller +
    +Method +
    +MethodMarshaller +
    +Observance +
    +Organizer +
    +OrganizerMarshaller +
    +ParticipationStatus +
    +PercentComplete +
    +PercentCompleteMarshaller +
    +Period +
    +Priority +
    +PriorityMarshaller +
    +ProductId +
    +ProductIdMarshaller +
    +Range +
    +RawComponent +
    +RawComponentMarshaller +
    +RawProperty +
    +RawPropertyMarshaller +
    +Recurrence +
    +Recurrence.Builder +
    +Recurrence.DayOfWeek +
    +Recurrence.Frequency +
    +RecurrenceDates +
    +RecurrenceDatesMarshaller +
    +RecurrenceId +
    +RecurrenceIdMarshaller +
    +RecurrenceProperty +
    +RecurrencePropertyMarshaller +
    +RecurrenceRule +
    +RecurrenceRuleMarshaller +
    +Related +
    +RelatedTo +
    +RelatedToMarshaller +
    +RelationshipType +
    +Repeat +
    +RepeatMarshaller +
    +RequestStatus +
    +RequestStatusMarshaller +
    +Resources +
    +ResourcesMarshaller +
    +Role +
    +Sequence +
    +SequenceMarshaller +
    +SkipMeException +
    +StandardTime +
    +StandardTimeMarshaller +
    +Status +
    +StatusMarshaller +
    +StringUtils +
    +StringUtils.JoinCallback +
    +StringUtils.JoinMapCallback +
    +Summary +
    +SummaryMarshaller +
    +TextListPropertyMarshaller +
    +TextProperty +
    +TextPropertyMarshaller +
    +TimezoneId +
    +TimezoneIdMarshaller +
    +TimezoneName +
    +TimezoneNameMarshaller +
    +TimezoneOffsetFrom +
    +TimezoneOffsetFromMarshaller +
    +TimezoneOffsetTo +
    +TimezoneOffsetToMarshaller +
    +TimezoneUrl +
    +TimezoneUrlMarshaller +
    +Transparency +
    +TransparencyMarshaller +
    +Trigger +
    +TriggerMarshaller +
    +Uid +
    +UidMarshaller +
    +Url +
    +UrlMarshaller +
    +UtcOffset +
    +UtcOffsetProperty +
    +UtcOffsetPropertyMarshaller +
    +VAlarm +
    +VAlarmMarshaller +
    +ValidationWarnings +
    +ValidationWarnings.WarningsGroup +
    +ValuedProperty +
    +Version +
    +VersionMarshaller +
    +VEvent +
    +VEventMarshaller +
    +VFreeBusy +
    +VFreeBusyMarshaller +
    +VJournal +
    +VJournalMarshaller +
    +VTimezone +
    +VTimezoneMarshaller +
    +VTodo +
    +VTodoMarshaller +
    +XCalDocument +
    +XCalElement +
    +XCalNamespaceContext +
    +Xml +
    +XmlMarshaller +
    +XmlUtils +
    +
    + + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainJsonReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainJsonReader.html new file mode 100644 index 000000000..0c5db1551 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainJsonReader.html @@ -0,0 +1,351 @@ + + + + + + + +Biweekly.ParserChainJsonReader (biweekly 0.3.1 API) + + + + + + + + + + + + +


    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class Biweekly.ParserChainJsonReader

    +
    +java.lang.Object
    +  extended by biweekly.Biweekly.ParserChainJsonReader
    +
    +
    +
    Enclosing class:
    Biweekly
    +
    +
    +
    +
    public static class Biweekly.ParserChainJsonReader
    extends Object
    + + +

    +Chainer class for parsing JSON-encoded iCalendar data streams (jCal). +

    + +

    +

    +
    See Also:
    Biweekly.parseJson(InputStream), +Biweekly.parseJson(File), +Biweekly.parseJson(Reader)
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + List<ICalendar>all() + +
    +          Reads all iCalendar objects from the data stream.
    + ICalendarfirst() + +
    +          Reads the first iCalendar object from the data stream.
    + Biweekly.ParserChainJsonReaderregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Registers a component marshaller.
    + Biweekly.ParserChainJsonReaderregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Registers a property marshaller.
    + Biweekly.ParserChainJsonReaderwarnings(List<List<String>> warnings) + +
    +          Provides a list for putting the parser warnings into.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +register

    +
    +public Biweekly.ParserChainJsonReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +
    Registers a property marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +register

    +
    +public Biweekly.ParserChainJsonReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +
    Registers a component marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +warnings

    +
    +public Biweekly.ParserChainJsonReader warnings(List<List<String>> warnings)
    +
    +
    Provides a list for putting the parser warnings into. +

    +

    +
    +
    +
    +
    Parameters:
    warnings - the list object to populate (it is a + "list of lists"--each parsed ICalendar object has its own + warnings list) +
    Returns:
    this
    +
    +
    +
    + +

    +first

    +
    +public ICalendar first()
    +                throws IOException
    +
    +
    Reads the first iCalendar object from the data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the first iCalendar object or null if there are none +
    Throws: +
    JCalParseException - if the jCal syntax is incorrect (the JSON + syntax may be valid, but it is not in the correct jCal format). +
    JsonParseException - if the JSON syntax is incorrect +
    IOException - if there a problem reading from the data stream
    +
    +
    +
    + +

    +all

    +
    +public List<ICalendar> all()
    +                    throws IOException
    +
    +
    Reads all iCalendar objects from the data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the parsed iCalendar objects +
    Throws: +
    JCalParseException - if the jCal syntax is incorrect (the JSON + syntax may be valid, but it is not in the correct jCal format). +
    JsonParseException - if the JSON syntax is incorrect +
    IOException - if there's a problem reading from the data stream
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainJsonString.html b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainJsonString.html new file mode 100644 index 000000000..89a4276f0 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainJsonString.html @@ -0,0 +1,337 @@ + + + + + + + +Biweekly.ParserChainJsonString (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class Biweekly.ParserChainJsonString

    +
    +java.lang.Object
    +  extended by biweekly.Biweekly.ParserChainJsonString
    +
    +
    +
    Enclosing class:
    Biweekly
    +
    +
    +
    +
    public static class Biweekly.ParserChainJsonString
    extends Object
    + + +

    +Chainer class for parsing JSON-encoded iCalendar strings (jCal). +

    + +

    +

    +
    See Also:
    Biweekly.parseJson(String)
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + List<ICalendar>all() + +
    +          Reads all iCalendar objects from the data stream.
    + ICalendarfirst() + +
    +          Reads the first iCalendar object from the data stream.
    + Biweekly.ParserChainJsonStringregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Registers a component marshaller.
    + Biweekly.ParserChainJsonStringregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Registers a property marshaller.
    + Biweekly.ParserChainJsonStringwarnings(List<List<String>> warnings) + +
    +          Provides a list for putting the parser warnings into.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +register

    +
    +public Biweekly.ParserChainJsonString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +
    Registers a property marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +register

    +
    +public Biweekly.ParserChainJsonString register(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +
    Registers a component marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +warnings

    +
    +public Biweekly.ParserChainJsonString warnings(List<List<String>> warnings)
    +
    +
    Provides a list for putting the parser warnings into. +

    +

    +
    +
    +
    +
    Parameters:
    warnings - the list object to populate (it is a + "list of lists"--each parsed ICalendar object has its own + warnings list) +
    Returns:
    this
    +
    +
    +
    + +

    +first

    +
    +public ICalendar first()
    +
    +
    Reads the first iCalendar object from the data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the first iCalendar object or null if there are none
    +
    +
    +
    + +

    +all

    +
    +public List<ICalendar> all()
    +
    +
    Reads all iCalendar objects from the data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the parsed iCalendar objects
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainTextReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainTextReader.html new file mode 100644 index 000000000..a5b460c67 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainTextReader.html @@ -0,0 +1,374 @@ + + + + + + + +Biweekly.ParserChainTextReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class Biweekly.ParserChainTextReader

    +
    +java.lang.Object
    +  extended by biweekly.Biweekly.ParserChainTextReader
    +
    +
    +
    Enclosing class:
    Biweekly
    +
    +
    +
    +
    public static class Biweekly.ParserChainTextReader
    extends Object
    + + +

    +Chainer class for parsing plain text iCalendar data streams. +

    + +

    +

    +
    See Also:
    Biweekly.parse(InputStream), +Biweekly.parse(File), +Biweekly.parse(Reader)
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + List<ICalendar>all() + +
    +          Reads all iCalendar objects from the data stream.
    + Biweekly.ParserChainTextReadercaretDecoding(boolean enable) + +
    +          Sets whether the reader will decode parameter values that use + circumflex accent encoding (enabled by default).
    + ICalendarfirst() + +
    +          Reads the first iCalendar object from the data stream.
    + Biweekly.ParserChainTextReaderregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Registers a component marshaller.
    + Biweekly.ParserChainTextReaderregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Registers a property marshaller.
    + Biweekly.ParserChainTextReaderwarnings(List<List<String>> warnings) + +
    +          Provides a list for putting the parser warnings into.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +register

    +
    +public Biweekly.ParserChainTextReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +
    Registers a property marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +register

    +
    +public Biweekly.ParserChainTextReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +
    Registers a component marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +warnings

    +
    +public Biweekly.ParserChainTextReader warnings(List<List<String>> warnings)
    +
    +
    Provides a list for putting the parser warnings into. +

    +

    +
    +
    +
    +
    Parameters:
    warnings - the list object to populate (it is a + "list of lists"--each parsed ICalendar object has its own + warnings list) +
    Returns:
    this
    +
    +
    +
    + +

    +caretDecoding

    +
    +public Biweekly.ParserChainTextReader caretDecoding(boolean enable)
    +
    +
    Sets whether the reader will decode parameter values that use + circumflex accent encoding (enabled by default). This escaping + mechanism allows newlines and double quotes to be included in + parameter values. +

    +

    +
    +
    +
    +
    Parameters:
    enable - true to use circumflex accent decoding, false not to +
    Returns:
    this
    See Also:
    ICalRawReader.setCaretDecodingEnabled(boolean)
    +
    +
    +
    + +

    +first

    +
    +public ICalendar first()
    +                throws IOException
    +
    +
    Reads the first iCalendar object from the data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the first iCalendar object or null if there are none +
    Throws: +
    IOException - if there a problem reading from the data stream
    +
    +
    +
    + +

    +all

    +
    +public List<ICalendar> all()
    +                    throws IOException
    +
    +
    Reads all iCalendar objects from the data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the parsed iCalendar objects +
    Throws: +
    IOException - if there's a problem reading from the data stream
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainTextString.html b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainTextString.html new file mode 100644 index 000000000..1c0e1ff09 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainTextString.html @@ -0,0 +1,366 @@ + + + + + + + +Biweekly.ParserChainTextString (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class Biweekly.ParserChainTextString

    +
    +java.lang.Object
    +  extended by biweekly.Biweekly.ParserChainTextString
    +
    +
    +
    Enclosing class:
    Biweekly
    +
    +
    +
    +
    public static class Biweekly.ParserChainTextString
    extends Object
    + + +

    +Chainer class for parsing plain text iCalendar strings. +

    + +

    +

    +
    See Also:
    Biweekly.parse(String)
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + List<ICalendar>all() + +
    +          Reads all iCalendar objects from the data stream.
    + Biweekly.ParserChainTextStringcaretDecoding(boolean enable) + +
    +          Sets whether the reader will decode parameter values that use + circumflex accent encoding (enabled by default).
    + ICalendarfirst() + +
    +          Reads the first iCalendar object from the data stream.
    + Biweekly.ParserChainTextStringregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Registers a component marshaller.
    + Biweekly.ParserChainTextStringregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Registers a property marshaller.
    + Biweekly.ParserChainTextStringwarnings(List<List<String>> warnings) + +
    +          Provides a list for putting the parser warnings into.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +register

    +
    +public Biweekly.ParserChainTextString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +
    Registers a property marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +register

    +
    +public Biweekly.ParserChainTextString register(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +
    Registers a component marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +warnings

    +
    +public Biweekly.ParserChainTextString warnings(List<List<String>> warnings)
    +
    +
    Provides a list for putting the parser warnings into. +

    +

    +
    +
    +
    +
    Parameters:
    warnings - the list object to populate (it is a + "list of lists"--each parsed ICalendar object has its own + warnings list) +
    Returns:
    this
    +
    +
    +
    + +

    +caretDecoding

    +
    +public Biweekly.ParserChainTextString caretDecoding(boolean enable)
    +
    +
    Sets whether the reader will decode parameter values that use + circumflex accent encoding (enabled by default). This escaping + mechanism allows newlines and double quotes to be included in + parameter values. +

    +

    +
    +
    +
    +
    Parameters:
    enable - true to use circumflex accent decoding, false not to +
    Returns:
    this
    See Also:
    ICalRawReader.setCaretDecodingEnabled(boolean)
    +
    +
    +
    + +

    +first

    +
    +public ICalendar first()
    +
    +
    Reads the first iCalendar object from the data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the first iCalendar object or null if there are none
    +
    +
    +
    + +

    +all

    +
    +public List<ICalendar> all()
    +
    +
    Reads all iCalendar objects from the data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the parsed iCalendar objects
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainXmlDocument.html b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainXmlDocument.html new file mode 100644 index 000000000..db876e224 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainXmlDocument.html @@ -0,0 +1,337 @@ + + + + + + + +Biweekly.ParserChainXmlDocument (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class Biweekly.ParserChainXmlDocument

    +
    +java.lang.Object
    +  extended by biweekly.Biweekly.ParserChainXmlDocument
    +
    +
    +
    Enclosing class:
    Biweekly
    +
    +
    +
    +
    public static class Biweekly.ParserChainXmlDocument
    extends Object
    + + +

    +Chainer class for parsing XML-encoded iCalendar objects (xCal). +

    + +

    +

    +
    See Also:
    Biweekly.parseXml(Document)
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + List<ICalendar>all() + +
    +          Reads all iCalendar objects from the data stream.
    + ICalendarfirst() + +
    +          Reads the first iCalendar object from the data stream.
    + Biweekly.ParserChainXmlDocumentregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Registers a component marshaller.
    + Biweekly.ParserChainXmlDocumentregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Registers a property marshaller.
    + Biweekly.ParserChainXmlDocumentwarnings(List<List<String>> warnings) + +
    +          Provides a list for putting the parser warnings into.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +register

    +
    +public Biweekly.ParserChainXmlDocument register(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +
    Registers a property marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +register

    +
    +public Biweekly.ParserChainXmlDocument register(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +
    Registers a component marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +warnings

    +
    +public Biweekly.ParserChainXmlDocument warnings(List<List<String>> warnings)
    +
    +
    Provides a list for putting the parser warnings into. +

    +

    +
    +
    +
    +
    Parameters:
    warnings - the list object to populate (it is a + "list of lists"--each parsed ICalendar object has its own + warnings list) +
    Returns:
    this
    +
    +
    +
    + +

    +first

    +
    +public ICalendar first()
    +
    +
    Reads the first iCalendar object from the data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the first iCalendar object or null if there are none
    +
    +
    +
    + +

    +all

    +
    +public List<ICalendar> all()
    +
    +
    Reads all iCalendar objects from the data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the parsed iCalendar objects
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainXmlReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainXmlReader.html new file mode 100644 index 000000000..d89bd48db --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainXmlReader.html @@ -0,0 +1,349 @@ + + + + + + + +Biweekly.ParserChainXmlReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class Biweekly.ParserChainXmlReader

    +
    +java.lang.Object
    +  extended by biweekly.Biweekly.ParserChainXmlReader
    +
    +
    +
    Enclosing class:
    Biweekly
    +
    +
    +
    +
    public static class Biweekly.ParserChainXmlReader
    extends Object
    + + +

    +Chainer class for parsing XML-encoded iCalendar objects (xCal). +

    + +

    +

    +
    See Also:
    Biweekly.parseXml(InputStream), +Biweekly.parseXml(File), +Biweekly.parseXml(Reader)
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + List<ICalendar>all() + +
    +          Reads all iCalendar objects from the data stream.
    + ICalendarfirst() + +
    +          Reads the first iCalendar object from the data stream.
    + Biweekly.ParserChainXmlReaderregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Registers a component marshaller.
    + Biweekly.ParserChainXmlReaderregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Registers a property marshaller.
    + Biweekly.ParserChainXmlReaderwarnings(List<List<String>> warnings) + +
    +          Provides a list for putting the parser warnings into.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +register

    +
    +public Biweekly.ParserChainXmlReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +
    Registers a property marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +register

    +
    +public Biweekly.ParserChainXmlReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +
    Registers a component marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +warnings

    +
    +public Biweekly.ParserChainXmlReader warnings(List<List<String>> warnings)
    +
    +
    Provides a list for putting the parser warnings into. +

    +

    +
    +
    +
    +
    Parameters:
    warnings - the list object to populate (it is a + "list of lists"--each parsed ICalendar object has its own + warnings list) +
    Returns:
    this
    +
    +
    +
    + +

    +first

    +
    +public ICalendar first()
    +                throws IOException,
    +                       SAXException
    +
    +
    Reads the first iCalendar object from the data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the first iCalendar object or null if there are none +
    Throws: +
    IOException - if there a problem reading from the data stream +
    SAXException - if there's a problem parsing the XML
    +
    +
    +
    + +

    +all

    +
    +public List<ICalendar> all()
    +                    throws IOException,
    +                           SAXException
    +
    +
    Reads all iCalendar objects from the data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the parsed iCalendar objects +
    Throws: +
    IOException - if there's a problem reading from the data stream +
    SAXException - if there's a problem parsing the XML
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainXmlString.html b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainXmlString.html new file mode 100644 index 000000000..505235bcc --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.ParserChainXmlString.html @@ -0,0 +1,343 @@ + + + + + + + +Biweekly.ParserChainXmlString (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class Biweekly.ParserChainXmlString

    +
    +java.lang.Object
    +  extended by biweekly.Biweekly.ParserChainXmlString
    +
    +
    +
    Enclosing class:
    Biweekly
    +
    +
    +
    +
    public static class Biweekly.ParserChainXmlString
    extends Object
    + + +

    +Chainer class for parsing XML-encoded iCalendar objects (xCal). +

    + +

    +

    +
    See Also:
    Biweekly.parseXml(String)
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + List<ICalendar>all() + +
    +          Reads all iCalendar objects from the data stream.
    + ICalendarfirst() + +
    +          Reads the first iCalendar object from the data stream.
    + Biweekly.ParserChainXmlStringregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Registers a component marshaller.
    + Biweekly.ParserChainXmlStringregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Registers a property marshaller.
    + Biweekly.ParserChainXmlStringwarnings(List<List<String>> warnings) + +
    +          Provides a list for putting the parser warnings into.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +register

    +
    +public Biweekly.ParserChainXmlString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +
    Registers a property marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +register

    +
    +public Biweekly.ParserChainXmlString register(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +
    Registers a component marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +warnings

    +
    +public Biweekly.ParserChainXmlString warnings(List<List<String>> warnings)
    +
    +
    Provides a list for putting the parser warnings into. +

    +

    +
    +
    +
    +
    Parameters:
    warnings - the list object to populate (it is a + "list of lists"--each parsed ICalendar object has its own + warnings list) +
    Returns:
    this
    +
    +
    +
    + +

    +first

    +
    +public ICalendar first()
    +                throws SAXException
    +
    +
    Reads the first iCalendar object from the data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the first iCalendar object or null if there are none +
    Throws: +
    SAXException - if there's a problem parsing the XML
    +
    +
    +
    + +

    +all

    +
    +public List<ICalendar> all()
    +                    throws SAXException
    +
    +
    Reads all iCalendar objects from the data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the parsed iCalendar objects +
    Throws: +
    SAXException - if there's a problem parsing the XML
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.WriterChainJson.html b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.WriterChainJson.html new file mode 100644 index 000000000..1283334df --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.WriterChainJson.html @@ -0,0 +1,389 @@ + + + + + + + +Biweekly.WriterChainJson (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class Biweekly.WriterChainJson

    +
    +java.lang.Object
    +  extended by biweekly.Biweekly.WriterChainJson
    +
    +
    +
    Enclosing class:
    Biweekly
    +
    +
    +
    +
    public static class Biweekly.WriterChainJson
    extends Object
    + + +

    +Chainer class for writing to JSON-encoded iCalendar data streams (jCal). +

    + +

    +

    +
    See Also:
    Biweekly.writeJson(Collection), +Biweekly.writeJson(ICalendar...)
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + Stringgo() + +
    +          Writes the iCalendar objects to a string.
    + voidgo(File file) + +
    +          Writes the iCalendar objects to a file.
    + voidgo(OutputStream out) + +
    +          Writes the iCalendar objects to a data stream.
    + voidgo(Writer writer) + +
    +          Writes the iCalendar objects to a data stream.
    + Biweekly.WriterChainJsonindent(boolean indent) + +
    +          Sets whether or not to pretty-print the JSON.
    + Tregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Registers a component marshaller.
    + Tregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Registers a property marshaller.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +indent

    +
    +public Biweekly.WriterChainJson indent(boolean indent)
    +
    +
    Sets whether or not to pretty-print the JSON. +

    +

    +
    Parameters:
    indent - true to pretty-print it, false not to (defaults to + false) +
    Returns:
    this
    +
    +
    +
    + +

    +go

    +
    +public String go()
    +
    +
    Writes the iCalendar objects to a string. +

    +

    + +
    Returns:
    the iCalendar string +
    Throws: +
    IllegalArgumentException - if the marshaller class for a + component or property object cannot be found (only happens when an + experimental property/component marshaller is not registered with the + register method.)
    +
    +
    +
    + +

    +go

    +
    +public void go(OutputStream out)
    +        throws IOException
    +
    +
    Writes the iCalendar objects to a data stream. +

    +

    +
    Parameters:
    out - the output stream to write to +
    Throws: +
    IllegalArgumentException - if the marshaller class for a + component or property object cannot be found (only happens when an + experimental property/component marshaller is not registered with the + register method.) +
    IOException - if there's a problem writing to the output stream
    +
    +
    +
    + +

    +go

    +
    +public void go(File file)
    +        throws IOException
    +
    +
    Writes the iCalendar objects to a file. +

    +

    +
    Parameters:
    file - the file to write to +
    Throws: +
    IllegalArgumentException - if the marshaller class for a + component or property object cannot be found (only happens when an + experimental property/component marshaller is not registered with the + register method.) +
    IOException - if there's a problem writing to the file
    +
    +
    +
    + +

    +go

    +
    +public void go(Writer writer)
    +        throws IOException
    +
    +
    Writes the iCalendar objects to a data stream. +

    +

    +
    Parameters:
    writer - the writer to write to +
    Throws: +
    IllegalArgumentException - if the marshaller class for a + component or property object cannot be found (only happens when an + experimental property/component marshaller is not registered with the + register method.) +
    IOException - if there's a problem writing to the writer
    +
    +
    +
    + +

    +register

    +
    +public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +
    Registers a property marshaller. +

    +

    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +register

    +
    +public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +
    Registers a component marshaller. +

    +

    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.WriterChainText.html b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.WriterChainText.html new file mode 100644 index 000000000..39fa4733f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.WriterChainText.html @@ -0,0 +1,431 @@ + + + + + + + +Biweekly.WriterChainText (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class Biweekly.WriterChainText

    +
    +java.lang.Object
    +  extended by biweekly.Biweekly.WriterChainText
    +
    +
    +
    Enclosing class:
    Biweekly
    +
    +
    +
    +
    public static class Biweekly.WriterChainText
    extends Object
    + + +

    +Chainer class for writing to plain text iCalendar data streams. +

    + +

    +

    +
    See Also:
    Biweekly.write(Collection), +Biweekly.write(ICalendar...)
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + Biweekly.WriterChainTextcaretEncoding(boolean enable) + +
    +           + Sets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default).
    + Stringgo() + +
    +          Writes the iCalendar objects to a string.
    + voidgo(File file) + +
    +          Writes the iCalendar objects to a file.
    + voidgo(File file, + boolean append) + +
    +          Writes the iCalendar objects to a file.
    + voidgo(OutputStream out) + +
    +          Writes the iCalendar objects to a data stream.
    + voidgo(Writer writer) + +
    +          Writes the iCalendar objects to a data stream.
    + Tregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Registers a component marshaller.
    + Tregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Registers a property marshaller.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +caretEncoding

    +
    +public Biweekly.WriterChainText caretEncoding(boolean enable)
    +
    +

    + Sets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default). This escaping mechanism + allows for newlines and double quotes to be included in parameter + values. +

    + +

    + When disabled, the writer will replace newlines with spaces and + double quotes with single quotes. +

    +

    +

    +
    Parameters:
    enable - true to use circumflex accent encoding, false not to +
    Returns:
    this
    See Also:
    ICalRawWriter.setCaretEncodingEnabled(boolean)
    +
    +
    +
    + +

    +go

    +
    +public String go()
    +
    +
    Writes the iCalendar objects to a string. +

    +

    + +
    Returns:
    the iCalendar string +
    Throws: +
    IllegalArgumentException - if the marshaller class for a + component or property object cannot be found (only happens when an + experimental property/component marshaller is not registered with the + register method.)
    +
    +
    +
    + +

    +go

    +
    +public void go(OutputStream out)
    +        throws IOException
    +
    +
    Writes the iCalendar objects to a data stream. +

    +

    +
    Parameters:
    out - the output stream to write to +
    Throws: +
    IllegalArgumentException - if the marshaller class for a + component or property object cannot be found (only happens when an + experimental property/component marshaller is not registered with the + register method.) +
    IOException - if there's a problem writing to the output stream
    +
    +
    +
    + +

    +go

    +
    +public void go(File file)
    +        throws IOException
    +
    +
    Writes the iCalendar objects to a file. +

    +

    +
    Parameters:
    file - the file to write to +
    Throws: +
    IllegalArgumentException - if the marshaller class for a + component or property object cannot be found (only happens when an + experimental property/component marshaller is not registered with the + register method.) +
    IOException - if there's a problem writing to the file
    +
    +
    +
    + +

    +go

    +
    +public void go(File file,
    +               boolean append)
    +        throws IOException
    +
    +
    Writes the iCalendar objects to a file. +

    +

    +
    Parameters:
    file - the file to write to
    append - true to append to the end of the file, false to + overwrite it +
    Throws: +
    IllegalArgumentException - if the marshaller class for a + component or property object cannot be found (only happens when an + experimental property/component marshaller is not registered with the + register method.) +
    IOException - if there's a problem writing to the file
    +
    +
    +
    + +

    +go

    +
    +public void go(Writer writer)
    +        throws IOException
    +
    +
    Writes the iCalendar objects to a data stream. +

    +

    +
    Parameters:
    writer - the writer to write to +
    Throws: +
    IllegalArgumentException - if the marshaller class for a + component or property object cannot be found (only happens when an + experimental property/component marshaller is not registered with the + register method.) +
    IOException - if there's a problem writing to the writer
    +
    +
    +
    + +

    +register

    +
    +public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +
    Registers a property marshaller. +

    +

    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +register

    +
    +public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +
    Registers a component marshaller. +

    +

    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.WriterChainXml.html b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.WriterChainXml.html new file mode 100644 index 000000000..ff94d0c41 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.WriterChainXml.html @@ -0,0 +1,444 @@ + + + + + + + +Biweekly.WriterChainXml (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class Biweekly.WriterChainXml

    +
    +java.lang.Object
    +  extended by biweekly.Biweekly.WriterChainXml
    +
    +
    +
    Enclosing class:
    Biweekly
    +
    +
    +
    +
    public static class Biweekly.WriterChainXml
    extends Object
    + + +

    +Chainer class for writing xCal documents (XML-encoded iCalendar objects). +

    + +

    +

    +
    See Also:
    Biweekly.writeXml(Collection), +Biweekly.writeXml(ICalendar...)
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + Documentdom() + +
    +          Writes the xCal document to an XML DOM.
    + Stringgo() + +
    +          Writes the xCal document to a string.
    + voidgo(File file) + +
    +          Writes the xCal document to a file.
    + voidgo(OutputStream out) + +
    +          Writes the xCal document to an output stream.
    + voidgo(Writer writer) + +
    +          Writes the xCal document to a writer.
    + Biweekly.WriterChainXmlindent(int indent) + +
    +          Sets the number of indent spaces to use for pretty-printing.
    + Biweekly.WriterChainXmlregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Registers a component marshaller.
    + Biweekly.WriterChainXmlregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Registers a property marshaller.
    + Biweekly.WriterChainXmlregister(String parameterName, + ICalDataType dataType) + +
    +          Registers the data type of an experimental parameter.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +register

    +
    +public Biweekly.WriterChainXml register(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +
    Registers a property marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +register

    +
    +public Biweekly.WriterChainXml register(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +
    Registers a component marshaller. +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller +
    Returns:
    this
    +
    +
    +
    + +

    +register

    +
    +public Biweekly.WriterChainXml register(String parameterName,
    +                                        ICalDataType dataType)
    +
    +
    Registers the data type of an experimental parameter. Experimental + parameters use the "unknown" xCal data type by default. +

    +

    +
    Parameters:
    parameterName - the parameter name (e.g. "x-foo")
    dataType - the data type +
    Returns:
    this
    +
    +
    +
    + +

    +indent

    +
    +public Biweekly.WriterChainXml indent(int indent)
    +
    +
    Sets the number of indent spaces to use for pretty-printing. If not + set, then the XML will not be pretty-printed. +

    +

    +
    Parameters:
    indent - the number of spaces +
    Returns:
    this
    +
    +
    +
    + +

    +go

    +
    +public String go()
    +
    +
    Writes the xCal document to a string. +

    +

    + +
    Returns:
    the XML string +
    Throws: +
    IllegalArgumentException - if the marshaller class for a + component or property object cannot be found (only happens when an + experimental property/component marshaller is not registered with the + register method.)
    +
    +
    +
    + +

    +go

    +
    +public void go(OutputStream out)
    +        throws TransformerException
    +
    +
    Writes the xCal document to an output stream. +

    +

    +
    Parameters:
    out - the output stream to write to +
    Throws: +
    IllegalArgumentException - if the marshaller class for a + component or property object cannot be found (only happens when an + experimental property/component marshaller is not registered with the + register method.) +
    TransformerException - if there's a problem writing the XML
    +
    +
    +
    + +

    +go

    +
    +public void go(File file)
    +        throws TransformerException,
    +               IOException
    +
    +
    Writes the xCal document to a file. +

    +

    +
    Parameters:
    file - the file to write to +
    Throws: +
    IllegalArgumentException - if the marshaller class for a + component or property object cannot be found (only happens when an + experimental property/component marshaller is not registered with the + register method.) +
    TransformerException - if there's a problem writing the XML +
    IOException - if there's a problem writing to the file
    +
    +
    +
    + +

    +go

    +
    +public void go(Writer writer)
    +        throws TransformerException
    +
    +
    Writes the xCal document to a writer. +

    +

    +
    Parameters:
    writer - the writer to write to +
    Throws: +
    IllegalArgumentException - if the marshaller class for a + component or property object cannot be found (only happens when an + experimental property/component marshaller is not registered with the + register method.) +
    TransformerException - if there's a problem writing the XML
    +
    +
    +
    + +

    +dom

    +
    +public Document dom()
    +
    +
    Writes the xCal document to an XML DOM. +

    +

    + +
    Returns:
    the XML DOM
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.html b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.html new file mode 100644 index 000000000..0d7ad2fb3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/Biweekly.html @@ -0,0 +1,957 @@ + + + + + + + +Biweekly (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class Biweekly

    +
    +java.lang.Object
    +  extended by biweekly.Biweekly
    +
    +
    +
    +
    public class Biweekly
    extends Object
    + + +

    +

    + Contains static chaining factory methods for reading/writing iCalendar + objects. +

    + +

    + Writing an iCalendar object + +

    + ICalendar ical = new ICalendar();
    + 
    + //string
    + String icalString = Biweekly.write(ical).go();
    + 
    + //file
    + File file = new File("meeting.ics");
    + Biweekly.write(ical).go(file);
    + 
    + //output stream
    + OutputStream out = ...
    + Biweekly.write(ical).go(out);
    + out.close();
    + 
    + //writer (should be configured to use UTF-8 encoding)
    + Writer writer = ...
    + Biweekly.write(ical).go(writer);
    + writer.close();
    + 
    + +

    + +

    + Writing multiple iCalendar objects + +

    + ICalendar ical1 = new ICalendar();
    + ICalendar ical2 = new ICalendar();
    + 
    + String icalString = Biweekly.write(ical1, ical2).go();
    + 
    + +

    + +

    + Writing an XML-encoded iCalendar object (xCal)
    + +

    + //Call writeXml() instead of write()
    + ICalendar ical = new ICalendar();
    + String xml = Biweekly.writeXml(ical).indent(2).go();
    + 
    + +

    + +

    + Writing a JSON-encoded iCalendar object (jCal)
    + +

    + //Call writeJson() instead of write()
    + ICalendar ical = new ICalendar();
    + String json = Biweekly.writeJson(ical).go();
    + 
    + +

    + +

    + Reading an iCalendar object + +

    + ICalendar ical;
    + 
    + //string
    + String icalStr = ...
    + ical = Biweekly.parse(icalStr).first();
    + 
    + //file
    + File file = new File("meeting.ics");
    + ical = Biweekly.parse(file).first();
    + 
    + //input stream
    + InputStream in = ...
    + ical = Biweekly.parse(in).first();
    + in.close();  
    + 
    + //reader (should be configured to read UTF-8)
    + Reader reader = ...
    + ical = Biweekly.parse(reader).first();
    + reader.close();
    + 
    + +

    + +

    + Reading multiple iCalendar objects + +

    + String icalStr = ...
    + List<ICalendar> icals = Biweekly.parse(icalStr).all();
    + 
    + +

    + +

    + Reading an XML-encoded iCalendar object (xCal)
    + +

    + //Call parseXml() instead of parse()
    + String xml = ...
    + ICalendar ical = Biweekly.parseXml(xml).first();
    + 
    + +

    + +

    + Reading a JSON-encoded iCalendar object (Cal)
    + +

    + //Call parseJson() instead of parse()
    + String json = ...
    + ICalendar ical = Biweekly.parseJson(json).first();
    + 
    + +

    + +

    + Retrieving parser warnings + +

    + String icalStr = ...
    + List<List<String>> warnings = new ArrayList<List<String>>();
    + List<ICalendar> icals = Biweekly.parse(icalStr).warnings(warnings).all();
    + int i = 0;
    + for (List<String> icalWarnings : warnings){
    +   System.out.println("iCal #" + (i++) + " warnings:");
    +   for (String warning : icalWarnings){
    +     System.out.println(warning);
    +   }
    + }
    + 
    + +

    + +

    + The methods in this class make use of the following classes. These classes + can be used if greater control over the read/write operation is required: +

    + + + + + + + + + + + + + + + + + + + + + + + +
    ClassesSupports
    + streaming?
    TextICalReader / ICalWriteryes
    XMLXCalDocumentno
    JSONJCalReader / JCalWriteryes
    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Nested Class Summary
    +static classBiweekly.ParserChainJsonReader + +
    +          Chainer class for parsing JSON-encoded iCalendar data streams (jCal).
    +static classBiweekly.ParserChainJsonString + +
    +          Chainer class for parsing JSON-encoded iCalendar strings (jCal).
    +static classBiweekly.ParserChainTextReader + +
    +          Chainer class for parsing plain text iCalendar data streams.
    +static classBiweekly.ParserChainTextString + +
    +          Chainer class for parsing plain text iCalendar strings.
    +static classBiweekly.ParserChainXmlDocument + +
    +          Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +static classBiweekly.ParserChainXmlReader + +
    +          Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +static classBiweekly.ParserChainXmlString + +
    +          Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +static classBiweekly.WriterChainJson + +
    +          Chainer class for writing to JSON-encoded iCalendar data streams (jCal).
    +static classBiweekly.WriterChainText + +
    +          Chainer class for writing to plain text iCalendar data streams.
    +static classBiweekly.WriterChainXml + +
    +          Chainer class for writing xCal documents (XML-encoded iCalendar objects).
    + + + + + + + + + + + + + + +
    +Field Summary
    +static StringURL + +
    +          The project webpage.
    +static StringVERSION + +
    +          The version of the library.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static Biweekly.ParserChainTextReaderparse(File file) + +
    +          Parses an iCalendar file.
    +static Biweekly.ParserChainTextReaderparse(InputStream in) + +
    +          Parses an iCalendar data stream.
    +static Biweekly.ParserChainTextReaderparse(Reader reader) + +
    +          Parses an iCalendar data stream.
    +static Biweekly.ParserChainTextStringparse(String ical) + +
    +          Parses an iCalendar object string.
    +static Biweekly.ParserChainJsonReaderparseJson(File file) + +
    +          Parses a jCal data stream (JSON-encoded iCalendar objects).
    +static Biweekly.ParserChainJsonReaderparseJson(InputStream in) + +
    +          Parses a jCal data stream (JSON-encoded iCalendar objects).
    +static Biweekly.ParserChainJsonReaderparseJson(Reader reader) + +
    +          Parses a jCal data stream (JSON-encoded iCalendar objects).
    +static Biweekly.ParserChainJsonStringparseJson(String json) + +
    +          Parses a jCal data stream (JSON-encoded iCalendar objects).
    +static Biweekly.ParserChainXmlDocumentparseXml(Document document) + +
    +          Parses an xCal document (XML-encoded iCalendar objects).
    +static Biweekly.ParserChainXmlReaderparseXml(File file) + +
    +          Parses an xCal document (XML-encoded iCalendar objects) from a file.
    +static Biweekly.ParserChainXmlReaderparseXml(InputStream in) + +
    +          Parses an xCal document (XML-encoded iCalendar objects) from an input + stream.
    +static Biweekly.ParserChainXmlReaderparseXml(Reader reader) + +
    +           + Parses an xCal document (XML-encoded iCalendar objects) from a reader.
    +static Biweekly.ParserChainXmlStringparseXml(String xml) + +
    +          Parses an xCal document (XML-encoded iCalendar objects) from a string.
    +static Biweekly.WriterChainTextwrite(Collection<ICalendar> icals) + +
    +          Writes multiple iCalendar objects to a data stream.
    +static Biweekly.WriterChainTextwrite(ICalendar... icals) + +
    +          Writes multiple iCalendar objects to a data stream.
    +static Biweekly.WriterChainJsonwriteJson(Collection<ICalendar> icals) + +
    +          Writes an xCal document (XML-encoded iCalendar objects).
    +static Biweekly.WriterChainJsonwriteJson(ICalendar... icals) + +
    +          Writes an xCal document (XML-encoded iCalendar objects).
    +static Biweekly.WriterChainXmlwriteXml(Collection<ICalendar> icals) + +
    +          Writes an xCal document (XML-encoded iCalendar objects).
    +static Biweekly.WriterChainXmlwriteXml(ICalendar... icals) + +
    +          Writes an xCal document (XML-encoded iCalendar objects).
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +VERSION

    +
    +public static final String VERSION
    +
    +
    The version of the library. +

    +

    +
    +
    +
    + +

    +URL

    +
    +public static final String URL
    +
    +
    The project webpage. +

    +

    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +parse

    +
    +public static Biweekly.ParserChainTextString parse(String ical)
    +
    +
    Parses an iCalendar object string. +

    +

    +
    Parameters:
    ical - the iCalendar data +
    Returns:
    chainer object for completing the parse operation
    +
    +
    +
    + +

    +parse

    +
    +public static Biweekly.ParserChainTextReader parse(File file)
    +
    +
    Parses an iCalendar file. +

    +

    +
    Parameters:
    file - the iCalendar file +
    Returns:
    chainer object for completing the parse operation
    +
    +
    +
    + +

    +parse

    +
    +public static Biweekly.ParserChainTextReader parse(InputStream in)
    +
    +
    Parses an iCalendar data stream. +

    +

    +
    Parameters:
    in - the input stream +
    Returns:
    chainer object for completing the parse operation
    +
    +
    +
    + +

    +parse

    +
    +public static Biweekly.ParserChainTextReader parse(Reader reader)
    +
    +
    Parses an iCalendar data stream. +

    +

    +
    Parameters:
    reader - the reader +
    Returns:
    chainer object for completing the parse operation
    +
    +
    +
    + +

    +write

    +
    +public static Biweekly.WriterChainText write(ICalendar... icals)
    +
    +
    Writes multiple iCalendar objects to a data stream. +

    +

    +
    Parameters:
    icals - the iCalendar objects to write +
    Returns:
    chainer object for completing the write operation
    +
    +
    +
    + +

    +write

    +
    +public static Biweekly.WriterChainText write(Collection<ICalendar> icals)
    +
    +
    Writes multiple iCalendar objects to a data stream. +

    +

    +
    Parameters:
    icals - the iCalendar objects to write +
    Returns:
    chainer object for completing the write operation
    +
    +
    +
    + +

    +parseXml

    +
    +public static Biweekly.ParserChainXmlString parseXml(String xml)
    +
    +
    Parses an xCal document (XML-encoded iCalendar objects) from a string. +

    +

    +
    Parameters:
    xml - the XML string +
    Returns:
    chainer object for completing the parse operation
    +
    +
    +
    + +

    +parseXml

    +
    +public static Biweekly.ParserChainXmlReader parseXml(File file)
    +
    +
    Parses an xCal document (XML-encoded iCalendar objects) from a file. +

    +

    +
    Parameters:
    file - the XML file +
    Returns:
    chainer object for completing the parse operation
    +
    +
    +
    + +

    +parseXml

    +
    +public static Biweekly.ParserChainXmlReader parseXml(InputStream in)
    +
    +
    Parses an xCal document (XML-encoded iCalendar objects) from an input + stream. +

    +

    +
    Parameters:
    in - the input stream +
    Returns:
    chainer object for completing the parse operation
    +
    +
    +
    + +

    +parseXml

    +
    +public static Biweekly.ParserChainXmlReader parseXml(Reader reader)
    +
    +

    + Parses an xCal document (XML-encoded iCalendar objects) from a reader. +

    +

    + Note that use of this method is discouraged. It ignores the character + encoding that is defined within the XML document itself, and should only + be used if the encoding is undefined or if the encoding needs to be + ignored for whatever reason. The parseXml(InputStream) method + should be used instead, since it takes the XML document's character + encoding into account when parsing. +

    +

    +

    +
    Parameters:
    reader - the reader +
    Returns:
    chainer object for completing the parse operation
    +
    +
    +
    + +

    +parseXml

    +
    +public static Biweekly.ParserChainXmlDocument parseXml(Document document)
    +
    +
    Parses an xCal document (XML-encoded iCalendar objects). +

    +

    +
    Parameters:
    document - the XML document +
    Returns:
    chainer object for completing the parse operation
    +
    +
    +
    + +

    +writeXml

    +
    +public static Biweekly.WriterChainXml writeXml(ICalendar... icals)
    +
    +
    Writes an xCal document (XML-encoded iCalendar objects). +

    +

    +
    Parameters:
    icals - the iCalendar object(s) to write +
    Returns:
    chainer object for completing the write operation
    +
    +
    +
    + +

    +writeXml

    +
    +public static Biweekly.WriterChainXml writeXml(Collection<ICalendar> icals)
    +
    +
    Writes an xCal document (XML-encoded iCalendar objects). +

    +

    +
    Parameters:
    icals - the iCalendar objects to write +
    Returns:
    chainer object for completing the write operation
    +
    +
    +
    + +

    +parseJson

    +
    +public static Biweekly.ParserChainJsonString parseJson(String json)
    +
    +
    Parses a jCal data stream (JSON-encoded iCalendar objects). +

    +

    +
    Parameters:
    json - the JSON data +
    Returns:
    chainer object for completing the parse operation
    +
    +
    +
    + +

    +parseJson

    +
    +public static Biweekly.ParserChainJsonReader parseJson(File file)
    +
    +
    Parses a jCal data stream (JSON-encoded iCalendar objects). +

    +

    +
    Parameters:
    file - the JSON file +
    Returns:
    chainer object for completing the parse operation
    +
    +
    +
    + +

    +parseJson

    +
    +public static Biweekly.ParserChainJsonReader parseJson(InputStream in)
    +
    +
    Parses a jCal data stream (JSON-encoded iCalendar objects). +

    +

    +
    Parameters:
    in - the input stream +
    Returns:
    chainer object for completing the parse operation
    +
    +
    +
    + +

    +parseJson

    +
    +public static Biweekly.ParserChainJsonReader parseJson(Reader reader)
    +
    +
    Parses a jCal data stream (JSON-encoded iCalendar objects). +

    +

    +
    Parameters:
    reader - the reader +
    Returns:
    chainer object for completing the parse operation
    +
    +
    +
    + +

    +writeJson

    +
    +public static Biweekly.WriterChainJson writeJson(ICalendar... icals)
    +
    +
    Writes an xCal document (XML-encoded iCalendar objects). +

    +

    +
    Parameters:
    icals - the iCalendar object(s) to write +
    Returns:
    chainer object for completing the write operation
    +
    +
    +
    + +

    +writeJson

    +
    +public static Biweekly.WriterChainJson writeJson(Collection<ICalendar> icals)
    +
    +
    Writes an xCal document (XML-encoded iCalendar objects). +

    +

    +
    Parameters:
    icals - the iCalendar objects to write +
    Returns:
    chainer object for completing the write operation
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/ICalDataType.html b/libs/biweekly-0.3.1-javadoc/biweekly/ICalDataType.html new file mode 100644 index 000000000..376b9d76e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/ICalDataType.html @@ -0,0 +1,595 @@ + + + + + + + +ICalDataType (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class ICalDataType

    +
    +java.lang.Object
    +  extended by biweekly.ICalDataType
    +
    +
    +
    +
    public class ICalDataType
    extends Object
    + + +

    +Defines the data type of a property's value. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.29-50
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Field Summary
    +static ICalDataTypeBINARY + +
    +           
    +static ICalDataTypeBOOLEAN + +
    +           
    +static ICalDataTypeCAL_ADDRESS + +
    +           
    +static ICalDataTypeDATE + +
    +           
    +static ICalDataTypeDATE_TIME + +
    +           
    +static ICalDataTypeDURATION + +
    +           
    +static ICalDataTypeFLOAT + +
    +           
    +static ICalDataTypeINTEGER + +
    +           
    +static ICalDataTypePERIOD + +
    +           
    +static ICalDataTypeRECUR + +
    +           
    +static ICalDataTypeTEXT + +
    +           
    +static ICalDataTypeTIME + +
    +           
    +static ICalDataTypeURI + +
    +           
    +static ICalDataTypeUTC_OFFSET + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static Collection<ICalDataType>all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +static ICalDataTypefind(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static ICalDataTypeget(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + StringgetName() + +
    +          Gets the name of the data type.
    + StringtoString() + +
    +           
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +BINARY

    +
    +public static final ICalDataType BINARY
    +
    +
    +
    +
    +
    + +

    +BOOLEAN

    +
    +public static final ICalDataType BOOLEAN
    +
    +
    +
    +
    +
    + +

    +CAL_ADDRESS

    +
    +public static final ICalDataType CAL_ADDRESS
    +
    +
    +
    +
    +
    + +

    +DATE

    +
    +public static final ICalDataType DATE
    +
    +
    +
    +
    +
    + +

    +DATE_TIME

    +
    +public static final ICalDataType DATE_TIME
    +
    +
    +
    +
    +
    + +

    +DURATION

    +
    +public static final ICalDataType DURATION
    +
    +
    +
    +
    +
    + +

    +FLOAT

    +
    +public static final ICalDataType FLOAT
    +
    +
    +
    +
    +
    + +

    +INTEGER

    +
    +public static final ICalDataType INTEGER
    +
    +
    +
    +
    +
    + +

    +PERIOD

    +
    +public static final ICalDataType PERIOD
    +
    +
    +
    +
    +
    + +

    +RECUR

    +
    +public static final ICalDataType RECUR
    +
    +
    +
    +
    +
    + +

    +TEXT

    +
    +public static final ICalDataType TEXT
    +
    +
    +
    +
    +
    + +

    +TIME

    +
    +public static final ICalDataType TIME
    +
    +
    +
    +
    +
    + +

    +URI

    +
    +public static final ICalDataType URI
    +
    +
    +
    +
    +
    + +

    +UTC_OFFSET

    +
    +public static final ICalDataType UTC_OFFSET
    +
    +
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getName

    +
    +public String getName()
    +
    +
    Gets the name of the data type. +

    +

    + +
    Returns:
    the name of the data type (e.g. "text")
    +
    +
    +
    + +

    +toString

    +
    +public String toString()
    +
    +
    +
    Overrides:
    toString in class Object
    +
    +
    +
    +
    +
    +
    + +

    +find

    +
    +public static ICalDataType find(String value)
    +
    +
    Searches for a parameter value that is defined as a static constant in + this class. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object or null if not found
    +
    +
    +
    + +

    +get

    +
    +public static ICalDataType get(String value)
    +
    +
    Searches for a parameter value and creates one if it cannot be found. All + objects are guaranteed to be unique, so they can be compared with + == equality. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object
    +
    +
    +
    + +

    +all

    +
    +public static Collection<ICalDataType> all()
    +
    +
    Gets all of the parameter values that are defined as static constants in + this class. +

    +

    + +
    Returns:
    the parameter values
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/ICalException.html b/libs/biweekly-0.3.1-javadoc/biweekly/ICalException.html new file mode 100644 index 000000000..169497d4f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/ICalException.html @@ -0,0 +1,265 @@ + + + + + + + +ICalException (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class ICalException

    +
    +java.lang.Object
    +  extended by java.lang.Throwable
    +      extended by java.lang.Exception
    +          extended by java.lang.RuntimeException
    +              extended by biweekly.ICalException
    +
    +
    +
    All Implemented Interfaces:
    Serializable
    +
    +
    +
    Direct Known Subclasses:
    CannotParseException, ICalRawReader.StopReadingException, JCalParseException, SkipMeException
    +
    +
    +
    +
    public class ICalException
    extends RuntimeException
    + + +

    +The common base exception that all exceptions inherit from. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    See Also:
    Serialized Form
    +
    + +

    + + + + + + + + + + + + + + +
    +Constructor Summary
    ICalException() + +
    +           
    ICalException(String message) + +
    +           
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class java.lang.Throwable
    fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalException

    +
    +public ICalException()
    +
    +
    +
    + +

    +ICalException

    +
    +public ICalException(String message)
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/ICalendar.html b/libs/biweekly-0.3.1-javadoc/biweekly/ICalendar.html new file mode 100644 index 000000000..ea2810521 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/ICalendar.html @@ -0,0 +1,1141 @@ + + + + + + + +ICalendar (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class ICalendar

    +
    +java.lang.Object
    +  extended by biweekly.component.ICalComponent
    +      extended by biweekly.ICalendar
    +
    +
    +
    +
    public class ICalendar
    extends ICalComponent
    + + +

    +

    + Represents an iCalendar object. +

    + +

    + Examples: + +

    + ICalendar ical = new ICalendar();
    + 
    + VEvent event = new VEvent();
    + event.setSummary("Team Meeting");
    + Date start = ...;
    + event.setDateStart(start);
    + Date end = ...;
    + event.setDateEnd(end);
    + ical.addEvent(event);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.ICalComponent
    components, properties
    +  + + + + + + + + + + +
    +Constructor Summary
    ICalendar() + +
    +           + Creates a new iCalendar object.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddEvent(VEvent event) + +
    +          Adds an event.
    + voidaddFreeBusy(VFreeBusy freeBusy) + +
    +          Adds a free/busy entry.
    + voidaddJournal(VJournal journal) + +
    +          Adds a journal entry.
    + voidaddTimezone(VTimezone timezone) + +
    +          Adds a timezone.
    + voidaddTodo(VTodo todo) + +
    +          Adds a to-do.
    + CalendarScalegetCalendarScale() + +
    +          Gets the calendar system that this iCalendar object uses.
    + List<VEvent>getEvents() + +
    +          Gets the events.
    + List<VFreeBusy>getFreeBusies() + +
    +          Gets the free/busy entries.
    + List<VJournal>getJournals() + +
    +          Gets the journal entries.
    + MethodgetMethod() + +
    +          Gets the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity.
    + ProductIdgetProductId() + +
    +          Gets the name of the application that created the iCalendar object.
    + List<VTimezone>getTimezones() + +
    +          Gets the timezones.
    + List<VTodo>getTodos() + +
    +          Gets the to-dos.
    + VersiongetVersion() + +
    +          Gets the min/max versions a consumer must support in order to + successfully parse the iCalendar object.
    + voidsetCalendarScale(CalendarScale calendarScale) + +
    +          Sets the calendar system that this iCalendar object uses.
    + voidsetMethod(Method method) + +
    +          Sets the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity.
    + MethodsetMethod(String method) + +
    +          Sets the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity.
    + voidsetProductId(ProductId prodId) + +
    +          Sets the name of the application that created the iCalendar object.
    + ProductIdsetProductId(String prodId) + +
    +          Sets the application that created the iCalendar object.
    + voidsetVersion(Version version) + +
    +          Sets the min/max versions a consumer must support in order to + successfully parse the iCalendar object.
    + ValidationWarningsvalidate() + +
    +          Checks this iCalendar object for data consistency problems or deviations + from the spec.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the component for data consistency problems or deviations from the + spec.
    + Stringwrite() + +
    +          Marshals this iCalendar object to its plain text representation.
    + voidwrite(File file) + +
    +          Marshals this iCalendar object to its plain text representation.
    + voidwrite(OutputStream out) + +
    +          Marshals this iCalendar object to its plain text representation.
    + voidwrite(Writer writer) + +
    +          Marshals this iCalendar object to its plain text representation.
    + StringwriteJson() + +
    +          Marshals this iCalendar object to its JSON representation (jCal).
    + voidwriteJson(File file) + +
    +          Marshals this iCalendar object to its JSON representation (jCal).
    + voidwriteJson(OutputStream out) + +
    +          Marshals this iCalendar object to its JSON representation (jCal).
    + voidwriteJson(Writer writer) + +
    +          Marshals this iCalendar object to its JSON representation (jCal).
    + StringwriteXml() + +
    +          Marshals this iCalendar object to its XML representation (xCal).
    + voidwriteXml(File file) + +
    +          Marshals this iCalendar object to its XML representation (xCal).
    + voidwriteXml(OutputStream out) + +
    +          Marshals this iCalendar object to its XML representation (xCal).
    + voidwriteXml(Writer writer) + +
    +          Marshals this iCalendar object to its XML representation (xCal).
    + + + + + + + +
    Methods inherited from class biweekly.component.ICalComponent
    addComponent, addExperimentalComponent, addExperimentalProperty, addExperimentalProperty, addProperty, checkOptionalCardinality, checkRequiredCardinality, getComponent, getComponents, getComponents, getExperimentalComponent, getExperimentalComponents, getExperimentalComponents, getExperimentalProperties, getExperimentalProperties, getExperimentalProperty, getProperties, getProperties, getProperty, removeExperimentalComponents, removeExperimentalProperty, removeProperties, setComponent, setComponent, setExperimentalComponents, setExperimentalProperty, setExperimentalProperty, setProperty, setProperty, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalendar

    +
    +public ICalendar()
    +
    +

    + Creates a new iCalendar object. +

    +

    + The following properties are auto-generated on object creation. These + properties must be present in order for the iCalendar object to be + valid: +

      +
    • Version - Set to the default iCalendar version ("2.0").
    • +
    • ProductId - Set to a value that represents this library.
    • +
    +

    +

    +

    + + + + + + + + +
    +Method Detail
    + +

    +getVersion

    +
    +public Version getVersion()
    +
    +
    Gets the min/max versions a consumer must support in order to + successfully parse the iCalendar object. All ICalendar objects + are initialized with a version of "2.0" (the default version). It is a + required property. +

    +

    + +
    Returns:
    the version
    Specification Reference:
    RFC 5545 p.79-80
    +
    +
    +
    + +

    +setVersion

    +
    +public void setVersion(Version version)
    +
    +
    Sets the min/max versions a consumer must support in order to + successfully parse the iCalendar object. All ICalendar objects + are initialized with a version of "2.0" (the default version). It is a + required property. +

    +

    +
    Parameters:
    version - the version
    Specification Reference:
    RFC 5545 p.79-80
    +
    +
    +
    + +

    +getProductId

    +
    +public ProductId getProductId()
    +
    +
    Gets the name of the application that created the iCalendar object. All + ICalendar objects are initialized with a product ID representing + this library. It is a required property. +

    +

    + +
    Returns:
    the property instance or null if not set
    Specification Reference:
    RFC 5545 p.78-9
    +
    +
    +
    + +

    +setProductId

    +
    +public void setProductId(ProductId prodId)
    +
    +
    Sets the name of the application that created the iCalendar object. All + ICalendar objects are initialized with a product ID representing + this library. It is a required property. +

    +

    +
    Parameters:
    prodId - the property instance or null to remove
    Specification Reference:
    RFC 5545 p.78-9
    +
    +
    +
    + +

    +setProductId

    +
    +public ProductId setProductId(String prodId)
    +
    +
    Sets the application that created the iCalendar object. All + ICalendar objects are initialized with a product ID representing + this library. +

    +

    +
    Parameters:
    prodId - a unique string representing the application (e.g. + "-//Company//Application//EN") or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.78-9
    +
    +
    +
    + +

    +getCalendarScale

    +
    +public CalendarScale getCalendarScale()
    +
    +
    Gets the calendar system that this iCalendar object uses. If none is + specified, then the calendar is assumed to be in Gregorian format. +

    +

    + +
    Returns:
    the calendar system or null if not set
    Specification Reference:
    RFC 5545 p.76-7
    +
    +
    +
    + +

    +setCalendarScale

    +
    +public void setCalendarScale(CalendarScale calendarScale)
    +
    +
    Sets the calendar system that this iCalendar object uses. If none is + specified, then the calendar is assumed to be in Gregorian format. +

    +

    +
    Parameters:
    calendarScale - the calendar system or null to remove
    Specification Reference:
    RFC 5545 p.76-7
    +
    +
    +
    + +

    +getMethod

    +
    +public Method getMethod()
    +
    +
    Gets the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity. +

    +

    + +
    Returns:
    the property or null if not set
    Specification Reference:
    RFC 5545 p.77-8
    +
    +
    +
    + +

    +setMethod

    +
    +public void setMethod(Method method)
    +
    +
    Sets the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity. +

    +

    +
    Parameters:
    method - the property or null to remove
    Specification Reference:
    RFC 5545 p.77-8
    +
    +
    +
    + +

    +setMethod

    +
    +public Method setMethod(String method)
    +
    +
    Sets the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity. +

    +

    +
    Parameters:
    method - the method or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.77-8
    +
    +
    +
    + +

    +getEvents

    +
    +public List<VEvent> getEvents()
    +
    +
    Gets the events. +

    +

    + +
    Returns:
    the events
    +
    +
    +
    + +

    +addEvent

    +
    +public void addEvent(VEvent event)
    +
    +
    Adds an event. +

    +

    +
    Parameters:
    event - the event
    +
    +
    +
    + +

    +getTodos

    +
    +public List<VTodo> getTodos()
    +
    +
    Gets the to-dos. +

    +

    + +
    Returns:
    the to-dos
    +
    +
    +
    + +

    +addTodo

    +
    +public void addTodo(VTodo todo)
    +
    +
    Adds a to-do. +

    +

    +
    Parameters:
    todo - the to-do
    +
    +
    +
    + +

    +getJournals

    +
    +public List<VJournal> getJournals()
    +
    +
    Gets the journal entries. +

    +

    + +
    Returns:
    the journal entries
    +
    +
    +
    + +

    +addJournal

    +
    +public void addJournal(VJournal journal)
    +
    +
    Adds a journal entry. +

    +

    +
    Parameters:
    journal - the journal entry
    +
    +
    +
    + +

    +getFreeBusies

    +
    +public List<VFreeBusy> getFreeBusies()
    +
    +
    Gets the free/busy entries. +

    +

    + +
    Returns:
    the free/busy entries
    +
    +
    +
    + +

    +addFreeBusy

    +
    +public void addFreeBusy(VFreeBusy freeBusy)
    +
    +
    Adds a free/busy entry. +

    +

    +
    Parameters:
    freeBusy - the free/busy entry
    +
    +
    +
    + +

    +getTimezones

    +
    +public List<VTimezone> getTimezones()
    +
    +
    Gets the timezones. +

    +

    + +
    Returns:
    the timezones
    +
    +
    +
    + +

    +addTimezone

    +
    +public void addTimezone(VTimezone timezone)
    +
    +
    Adds a timezone. +

    +

    +
    Parameters:
    timezone - the timezone
    +
    +
    +
    + +

    +validate

    +
    +public ValidationWarnings validate()
    +
    +
    Checks this iCalendar object for data consistency problems or deviations + from the spec. These problems will not prevent the iCalendar object from + being written to a data stream, but may prevent it from being parsed + correctly by the consuming application. These problems can largely be + avoided by reading the Javadocs of the component and property classes, or + by being familiar with the iCalendar standard. +

    +

    + +
    Returns:
    the validation warnings
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalComponent
    +
    Checks the component for data consistency problems or deviations from the + spec. Meant to be overridden by child classes. +

    +

    +
    Overrides:
    validate in class ICalComponent
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the component belongs + to
    warnings - the list to add the warnings to
    +
    +
    +
    + +

    +write

    +
    +public String write()
    +
    +
    Marshals this iCalendar object to its plain text representation. +

    +

    + +
    Returns:
    the plain text representation
    +
    +
    +
    + +

    +write

    +
    +public void write(File file)
    +           throws IOException
    +
    +
    Marshals this iCalendar object to its plain text representation. +

    +

    +
    Parameters:
    file - the file to write to +
    Throws: +
    IOException - if there's an I/O problem
    +
    +
    +
    + +

    +write

    +
    +public void write(OutputStream out)
    +           throws IOException
    +
    +
    Marshals this iCalendar object to its plain text representation. +

    +

    +
    Parameters:
    out - the data stream to write to +
    Throws: +
    IOException - if there's an I/O problem
    +
    +
    +
    + +

    +write

    +
    +public void write(Writer writer)
    +           throws IOException
    +
    +
    Marshals this iCalendar object to its plain text representation. +

    +

    +
    Parameters:
    writer - the data stream to write to +
    Throws: +
    IOException - if there's an I/O problem
    +
    +
    +
    + +

    +writeXml

    +
    +public String writeXml()
    +
    +
    Marshals this iCalendar object to its XML representation (xCal). If the + iCalendar object contains user-defined property or component objects, use + the Biweekly class instead, in order to register the marshaller + classes. +

    +

    + +
    Returns:
    the XML document +
    Throws: +
    IllegalArgumentException - if the iCalendar object contains + user-defined property or component objects
    +
    +
    +
    + +

    +writeXml

    +
    +public void writeXml(File file)
    +              throws TransformerException,
    +                     IOException
    +
    +
    Marshals this iCalendar object to its XML representation (xCal). If the + iCalendar object contains user-defined property or component objects, use + the Biweekly class instead, in order to register the marshaller + classes. +

    +

    +
    Parameters:
    file - the file to write to +
    Throws: +
    IllegalArgumentException - if the iCalendar object contains + user-defined property or component objects +
    TransformerException - if there's an I/O problem +
    IOException - if the file cannot be written to
    +
    +
    +
    + +

    +writeXml

    +
    +public void writeXml(OutputStream out)
    +              throws TransformerException
    +
    +
    Marshals this iCalendar object to its XML representation (xCal). If the + iCalendar object contains user-defined property or component objects, use + the Biweekly class instead, in order to register the marshaller + classes. +

    +

    +
    Parameters:
    out - the data stream to write to +
    Throws: +
    IllegalArgumentException - if the iCalendar object contains + user-defined property or component objects +
    TransformerException - if there's an I/O problem
    +
    +
    +
    + +

    +writeXml

    +
    +public void writeXml(Writer writer)
    +              throws TransformerException
    +
    +
    Marshals this iCalendar object to its XML representation (xCal). If the + iCalendar object contains user-defined property or component objects, use + the Biweekly class instead, in order to register the marshaller + classes. +

    +

    +
    Parameters:
    writer - the data stream to write to +
    Throws: +
    IllegalArgumentException - if the iCalendar object contains + user-defined property or component objects +
    TransformerException - if there's an I/O problem
    +
    +
    +
    + +

    +writeJson

    +
    +public String writeJson()
    +
    +
    Marshals this iCalendar object to its JSON representation (jCal). If the + iCalendar object contains user-defined property or component objects, use + the Biweekly class instead, in order to register the marshaller + classes. +

    +

    + +
    Returns:
    the JSON string +
    Throws: +
    IllegalArgumentException - if the iCalendar object contains + user-defined property or component objects
    +
    +
    +
    + +

    +writeJson

    +
    +public void writeJson(File file)
    +               throws IOException
    +
    +
    Marshals this iCalendar object to its JSON representation (jCal). If the + iCalendar object contains user-defined property or component objects, use + the Biweekly class instead, in order to register the marshaller + classes. +

    +

    +
    Parameters:
    file - the file to write to +
    Throws: +
    IllegalArgumentException - if the iCalendar object contains + user-defined property or component objects +
    IOException - if there's a problem writing to the file
    +
    +
    +
    + +

    +writeJson

    +
    +public void writeJson(OutputStream out)
    +               throws IOException
    +
    +
    Marshals this iCalendar object to its JSON representation (jCal). If the + iCalendar object contains user-defined property or component objects, use + the Biweekly class instead, in order to register the marshaller + classes. +

    +

    +
    Parameters:
    out - the data stream to write to +
    Throws: +
    IllegalArgumentException - if the iCalendar object contains + user-defined property or component objects +
    IOException - if there's a problem writing to the output stream
    +
    +
    +
    + +

    +writeJson

    +
    +public void writeJson(Writer writer)
    +               throws IOException
    +
    +
    Marshals this iCalendar object to its JSON representation (jCal). If the + iCalendar object contains user-defined property or component objects, use + the Biweekly class instead, in order to register the marshaller + classes. +

    +

    +
    Parameters:
    writer - the data stream to write to +
    Throws: +
    IllegalArgumentException - if the iCalendar object contains + user-defined property or component objects +
    IOException - if there's a problem writing to the writer
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/ValidationWarnings.WarningsGroup.html b/libs/biweekly-0.3.1-javadoc/biweekly/ValidationWarnings.WarningsGroup.html new file mode 100644 index 000000000..6cf256d31 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/ValidationWarnings.WarningsGroup.html @@ -0,0 +1,404 @@ + + + + + + + +ValidationWarnings.WarningsGroup (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class ValidationWarnings.WarningsGroup

    +
    +java.lang.Object
    +  extended by biweekly.ValidationWarnings.WarningsGroup
    +
    +
    +
    Enclosing class:
    ValidationWarnings
    +
    +
    +
    +
    public static class ValidationWarnings.WarningsGroup
    extends Object
    + + +

    +Holds the validation warnings of a property or component. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + +
    +Constructor Summary
    ValidationWarnings.WarningsGroup(ICalComponent component, + List<ICalComponent> componentHierarchy, + List<String> messages) + +
    +          Creates a new set of validation warnings for a component.
    ValidationWarnings.WarningsGroup(ICalProperty property, + List<ICalComponent> componentHierarchy, + List<String> messages) + +
    +          Creates a new set of validation warnings for a property.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + ICalComponentgetComponent() + +
    +          Gets the component object that caused the validation warnings.
    + List<ICalComponent>getComponentHierarchy() + +
    +          Gets the hierarchy of components that the property or component + belongs to.
    + List<String>getMessages() + +
    +          Gets the warning messages.
    + ICalPropertygetProperty() + +
    +          Gets the property object that caused the validation warnings.
    + StringtoString() + +
    +           + Outputs each message in this warnings group as a newline-delimited + string.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ValidationWarnings.WarningsGroup

    +
    +public ValidationWarnings.WarningsGroup(ICalProperty property,
    +                                        List<ICalComponent> componentHierarchy,
    +                                        List<String> messages)
    +
    +
    Creates a new set of validation warnings for a property. +

    +

    +
    Parameters:
    property - the property that caused the warnings
    componentHierarchy - the hierarchy of components that the + property belongs to
    messages - the warning messages
    +
    +
    + +

    +ValidationWarnings.WarningsGroup

    +
    +public ValidationWarnings.WarningsGroup(ICalComponent component,
    +                                        List<ICalComponent> componentHierarchy,
    +                                        List<String> messages)
    +
    +
    Creates a new set of validation warnings for a component. +

    +

    +
    Parameters:
    component - the component that caused the warnings
    componentHierarchy - the hierarchy of components that the + component belongs to
    messages - the warning messages
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getProperty

    +
    +public ICalProperty getProperty()
    +
    +
    Gets the property object that caused the validation warnings. +

    +

    + +
    Returns:
    the property object or null if a component caused the + warnings.
    +
    +
    +
    + +

    +getComponent

    +
    +public ICalComponent getComponent()
    +
    +
    Gets the component object that caused the validation warnings. +

    +

    + +
    Returns:
    the component object or null if a property caused the + warnings.
    +
    +
    +
    + +

    +getComponentHierarchy

    +
    +public List<ICalComponent> getComponentHierarchy()
    +
    +
    Gets the hierarchy of components that the property or component + belongs to. +

    +

    + +
    Returns:
    the component hierarchy
    +
    +
    +
    + +

    +getMessages

    +
    +public List<String> getMessages()
    +
    +
    Gets the warning messages. +

    +

    + +
    Returns:
    the warning messages
    +
    +
    +
    + +

    +toString

    +
    +public String toString()
    +
    +

    + Outputs each message in this warnings group as a newline-delimited + string. Each line includes the component hierarchy and the name of + the property/component. For example: +

    + +
    + [ICalendar > VEvent > VAlarm]: Email alarms must have at least one attendee.
    + [ICalendar > VEvent > VAlarm]: The trigger must specify which date field its duration is relative to.
    + 
    +

    +

    +
    Overrides:
    toString in class Object
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/ValidationWarnings.html b/libs/biweekly-0.3.1-javadoc/biweekly/ValidationWarnings.html new file mode 100644 index 000000000..cf4611616 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/ValidationWarnings.html @@ -0,0 +1,465 @@ + + + + + + + +ValidationWarnings (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly +
    +Class ValidationWarnings

    +
    +java.lang.Object
    +  extended by biweekly.ValidationWarnings
    +
    +
    +
    All Implemented Interfaces:
    Iterable<ValidationWarnings.WarningsGroup>
    +
    +
    +
    +
    public class ValidationWarnings
    extends Object
    implements Iterable<ValidationWarnings.WarningsGroup>
    + + +

    +

    + Holds the validation warnings of an iCalendar object. +

    +

    + Examples: + +

    + //validate an iCalendar object
    + ValidationWarnings warnings = ical.validate();
    + 
    + //print all warnings to a string:
    + System.out.println(warnings.toString());
    + //sample output:
    + //[ICalendar]: ProductId is not set (it is a required property).
    + //[ICalendar > VEvent > DateStart]: DateStart must come before DateEnd.
    + //[ICalendar > VEvent > VAlarm]: The trigger must specify which date field its duration is relative to.
    + 
    + //iterate over each warnings group
    + //this gives you access to the property/component object and its parent components
    + for (WarningsGroup group : warnings) {
    +        ICalProperty prop = group.getProperty();
    +        if (prop == null) {
    +                //then it was a component that caused the warnings
    +                ICalComponent comp = group.getComponent();
    +        }
    + 
    +        //get parent components
    +        List<ICalComponent> hierarchy = group.getComponentHierarchy();
    + 
    +        //get warning messages
    +        List<String> messages = group.getMessages();
    + }
    + 
    + //you can also get the warnings of specific properties/components
    + List<WarningsGroup> dtstartWarnings = warnings.getByProperty(DateStart.class);
    + List<WarningsGroup> veventWarnings = warnings.getByComponent(VEvent.class);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    See Also:
    ICalendar.validate()
    +
    + +

    + + + + + + + + + + + +
    +Nested Class Summary
    +static classValidationWarnings.WarningsGroup + +
    +          Holds the validation warnings of a property or component.
    +  + + + + + + + + + + +
    +Constructor Summary
    ValidationWarnings(List<ValidationWarnings.WarningsGroup> warnings) + +
    +          Creates a new validation warnings list.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + List<ValidationWarnings.WarningsGroup>getByComponent(Class<? extends ICalComponent> componentClass) + +
    +          Gets all validation warnings of a given component.
    + List<ValidationWarnings.WarningsGroup>getByProperty(Class<? extends ICalProperty> propertyClass) + +
    +          Gets all validation warnings of a given property.
    + List<ValidationWarnings.WarningsGroup>getWarnings() + +
    +          Gets all the validation warnings.
    + booleanisEmpty() + +
    +          Determines whether there are any validation warnings.
    + Iterator<ValidationWarnings.WarningsGroup>iterator() + +
    +          Iterates over each warning group (same as calling + getWarnings().iterator()).
    + StringtoString() + +
    +           + Outputs all validation warnings as a newline-delimited string.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ValidationWarnings

    +
    +public ValidationWarnings(List<ValidationWarnings.WarningsGroup> warnings)
    +
    +
    Creates a new validation warnings list. +

    +

    +
    Parameters:
    warnings - the validation warnings
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getByProperty

    +
    +public List<ValidationWarnings.WarningsGroup> getByProperty(Class<? extends ICalProperty> propertyClass)
    +
    +
    Gets all validation warnings of a given property. +

    +

    +
    +
    +
    +
    Parameters:
    propertyClass - the property (e.g. DateStart.class) +
    Returns:
    the validation warnings
    +
    +
    +
    + +

    +getByComponent

    +
    +public List<ValidationWarnings.WarningsGroup> getByComponent(Class<? extends ICalComponent> componentClass)
    +
    +
    Gets all validation warnings of a given component. +

    +

    +
    +
    +
    +
    Parameters:
    componentClass - the component (e.g. VEvent.class) +
    Returns:
    the validation warnings
    +
    +
    +
    + +

    +getWarnings

    +
    +public List<ValidationWarnings.WarningsGroup> getWarnings()
    +
    +
    Gets all the validation warnings. +

    +

    +
    +
    +
    + +
    Returns:
    the validation warnings
    +
    +
    +
    + +

    +isEmpty

    +
    +public boolean isEmpty()
    +
    +
    Determines whether there are any validation warnings. +

    +

    +
    +
    +
    + +
    Returns:
    true if there are none, false if there are one or more
    +
    +
    +
    + +

    +toString

    +
    +public String toString()
    +
    +

    + Outputs all validation warnings as a newline-delimited string. For + example: +

    + +
    + [ICalendar]: ProductId is not set (it is a required property).
    + [ICalendar > VEvent > DateStart]: DateStart must come before DateEnd.
    + [ICalendar > VEvent > VAlarm]: The trigger must specify which date field its duration is relative to.
    + 
    +

    +

    +
    Overrides:
    toString in class Object
    +
    +
    +
    +
    +
    +
    + +

    +iterator

    +
    +public Iterator<ValidationWarnings.WarningsGroup> iterator()
    +
    +
    Iterates over each warning group (same as calling + getWarnings().iterator()). +

    +

    +
    Specified by:
    iterator in interface Iterable<ValidationWarnings.WarningsGroup>
    +
    +
    + +
    Returns:
    the iterator
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainJsonReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainJsonReader.html new file mode 100644 index 000000000..b505eba07 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainJsonReader.html @@ -0,0 +1,221 @@ + + + + + + + +Uses of Class biweekly.Biweekly.ParserChainJsonReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.Biweekly.ParserChainJsonReader

    +
    + + + + + + + + + +
    +Packages that use Biweekly.ParserChainJsonReader
    biweekly  
    +  +

    + + + + + +
    +Uses of Biweekly.ParserChainJsonReader in biweekly
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly that return Biweekly.ParserChainJsonReader
    +static Biweekly.ParserChainJsonReaderBiweekly.parseJson(File file) + +
    +          Parses a jCal data stream (JSON-encoded iCalendar objects).
    +static Biweekly.ParserChainJsonReaderBiweekly.parseJson(InputStream in) + +
    +          Parses a jCal data stream (JSON-encoded iCalendar objects).
    +static Biweekly.ParserChainJsonReaderBiweekly.parseJson(Reader reader) + +
    +          Parses a jCal data stream (JSON-encoded iCalendar objects).
    + Biweekly.ParserChainJsonReaderBiweekly.ParserChainJsonReader.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainJsonReaderBiweekly.ParserChainJsonReader.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainJsonReaderBiweekly.ParserChainJsonReader.warnings(List<List<String>> warnings) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainJsonString.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainJsonString.html new file mode 100644 index 000000000..3662fddbf --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainJsonString.html @@ -0,0 +1,205 @@ + + + + + + + +Uses of Class biweekly.Biweekly.ParserChainJsonString (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.Biweekly.ParserChainJsonString

    +
    + + + + + + + + + +
    +Packages that use Biweekly.ParserChainJsonString
    biweekly  
    +  +

    + + + + + +
    +Uses of Biweekly.ParserChainJsonString in biweekly
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly that return Biweekly.ParserChainJsonString
    +static Biweekly.ParserChainJsonStringBiweekly.parseJson(String json) + +
    +          Parses a jCal data stream (JSON-encoded iCalendar objects).
    + Biweekly.ParserChainJsonStringBiweekly.ParserChainJsonString.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainJsonStringBiweekly.ParserChainJsonString.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainJsonStringBiweekly.ParserChainJsonString.warnings(List<List<String>> warnings) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainTextReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainTextReader.html new file mode 100644 index 000000000..cf966c651 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainTextReader.html @@ -0,0 +1,229 @@ + + + + + + + +Uses of Class biweekly.Biweekly.ParserChainTextReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.Biweekly.ParserChainTextReader

    +
    + + + + + + + + + +
    +Packages that use Biweekly.ParserChainTextReader
    biweekly  
    +  +

    + + + + + +
    +Uses of Biweekly.ParserChainTextReader in biweekly
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly that return Biweekly.ParserChainTextReader
    + Biweekly.ParserChainTextReaderBiweekly.ParserChainTextReader.caretDecoding(boolean enable) + +
    +           
    +static Biweekly.ParserChainTextReaderBiweekly.parse(File file) + +
    +          Parses an iCalendar file.
    +static Biweekly.ParserChainTextReaderBiweekly.parse(InputStream in) + +
    +          Parses an iCalendar data stream.
    +static Biweekly.ParserChainTextReaderBiweekly.parse(Reader reader) + +
    +          Parses an iCalendar data stream.
    + Biweekly.ParserChainTextReaderBiweekly.ParserChainTextReader.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainTextReaderBiweekly.ParserChainTextReader.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainTextReaderBiweekly.ParserChainTextReader.warnings(List<List<String>> warnings) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainTextString.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainTextString.html new file mode 100644 index 000000000..4579d82ce --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainTextString.html @@ -0,0 +1,213 @@ + + + + + + + +Uses of Class biweekly.Biweekly.ParserChainTextString (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.Biweekly.ParserChainTextString

    +
    + + + + + + + + + +
    +Packages that use Biweekly.ParserChainTextString
    biweekly  
    +  +

    + + + + + +
    +Uses of Biweekly.ParserChainTextString in biweekly
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly that return Biweekly.ParserChainTextString
    + Biweekly.ParserChainTextStringBiweekly.ParserChainTextString.caretDecoding(boolean enable) + +
    +           
    +static Biweekly.ParserChainTextStringBiweekly.parse(String ical) + +
    +          Parses an iCalendar object string.
    + Biweekly.ParserChainTextStringBiweekly.ParserChainTextString.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainTextStringBiweekly.ParserChainTextString.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainTextStringBiweekly.ParserChainTextString.warnings(List<List<String>> warnings) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainXmlDocument.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainXmlDocument.html new file mode 100644 index 000000000..465bb2b66 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainXmlDocument.html @@ -0,0 +1,205 @@ + + + + + + + +Uses of Class biweekly.Biweekly.ParserChainXmlDocument (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.Biweekly.ParserChainXmlDocument

    +
    + + + + + + + + + +
    +Packages that use Biweekly.ParserChainXmlDocument
    biweekly  
    +  +

    + + + + + +
    +Uses of Biweekly.ParserChainXmlDocument in biweekly
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly that return Biweekly.ParserChainXmlDocument
    +static Biweekly.ParserChainXmlDocumentBiweekly.parseXml(Document document) + +
    +          Parses an xCal document (XML-encoded iCalendar objects).
    + Biweekly.ParserChainXmlDocumentBiweekly.ParserChainXmlDocument.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainXmlDocumentBiweekly.ParserChainXmlDocument.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainXmlDocumentBiweekly.ParserChainXmlDocument.warnings(List<List<String>> warnings) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainXmlReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainXmlReader.html new file mode 100644 index 000000000..bfb7fb52f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainXmlReader.html @@ -0,0 +1,223 @@ + + + + + + + +Uses of Class biweekly.Biweekly.ParserChainXmlReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.Biweekly.ParserChainXmlReader

    +
    + + + + + + + + + +
    +Packages that use Biweekly.ParserChainXmlReader
    biweekly  
    +  +

    + + + + + +
    +Uses of Biweekly.ParserChainXmlReader in biweekly
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly that return Biweekly.ParserChainXmlReader
    +static Biweekly.ParserChainXmlReaderBiweekly.parseXml(File file) + +
    +          Parses an xCal document (XML-encoded iCalendar objects) from a file.
    +static Biweekly.ParserChainXmlReaderBiweekly.parseXml(InputStream in) + +
    +          Parses an xCal document (XML-encoded iCalendar objects) from an input + stream.
    +static Biweekly.ParserChainXmlReaderBiweekly.parseXml(Reader reader) + +
    +           + Parses an xCal document (XML-encoded iCalendar objects) from a reader.
    + Biweekly.ParserChainXmlReaderBiweekly.ParserChainXmlReader.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainXmlReaderBiweekly.ParserChainXmlReader.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainXmlReaderBiweekly.ParserChainXmlReader.warnings(List<List<String>> warnings) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainXmlString.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainXmlString.html new file mode 100644 index 000000000..96eb2d090 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.ParserChainXmlString.html @@ -0,0 +1,205 @@ + + + + + + + +Uses of Class biweekly.Biweekly.ParserChainXmlString (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.Biweekly.ParserChainXmlString

    +
    + + + + + + + + + +
    +Packages that use Biweekly.ParserChainXmlString
    biweekly  
    +  +

    + + + + + +
    +Uses of Biweekly.ParserChainXmlString in biweekly
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly that return Biweekly.ParserChainXmlString
    +static Biweekly.ParserChainXmlStringBiweekly.parseXml(String xml) + +
    +          Parses an xCal document (XML-encoded iCalendar objects) from a string.
    + Biweekly.ParserChainXmlStringBiweekly.ParserChainXmlString.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainXmlStringBiweekly.ParserChainXmlString.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainXmlStringBiweekly.ParserChainXmlString.warnings(List<List<String>> warnings) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.WriterChainJson.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.WriterChainJson.html new file mode 100644 index 000000000..c1c833291 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.WriterChainJson.html @@ -0,0 +1,197 @@ + + + + + + + +Uses of Class biweekly.Biweekly.WriterChainJson (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.Biweekly.WriterChainJson

    +
    + + + + + + + + + +
    +Packages that use Biweekly.WriterChainJson
    biweekly  
    +  +

    + + + + + +
    +Uses of Biweekly.WriterChainJson in biweekly
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly that return Biweekly.WriterChainJson
    + Biweekly.WriterChainJsonBiweekly.WriterChainJson.indent(boolean indent) + +
    +          Sets whether or not to pretty-print the JSON.
    +static Biweekly.WriterChainJsonBiweekly.writeJson(Collection<ICalendar> icals) + +
    +          Writes an xCal document (XML-encoded iCalendar objects).
    +static Biweekly.WriterChainJsonBiweekly.writeJson(ICalendar... icals) + +
    +          Writes an xCal document (XML-encoded iCalendar objects).
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.WriterChainText.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.WriterChainText.html new file mode 100644 index 000000000..51e5f06b1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.WriterChainText.html @@ -0,0 +1,199 @@ + + + + + + + +Uses of Class biweekly.Biweekly.WriterChainText (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.Biweekly.WriterChainText

    +
    + + + + + + + + + +
    +Packages that use Biweekly.WriterChainText
    biweekly  
    +  +

    + + + + + +
    +Uses of Biweekly.WriterChainText in biweekly
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly that return Biweekly.WriterChainText
    + Biweekly.WriterChainTextBiweekly.WriterChainText.caretEncoding(boolean enable) + +
    +           + Sets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default).
    +static Biweekly.WriterChainTextBiweekly.write(Collection<ICalendar> icals) + +
    +          Writes multiple iCalendar objects to a data stream.
    +static Biweekly.WriterChainTextBiweekly.write(ICalendar... icals) + +
    +          Writes multiple iCalendar objects to a data stream.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.WriterChainXml.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.WriterChainXml.html new file mode 100644 index 000000000..9643f649c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.WriterChainXml.html @@ -0,0 +1,222 @@ + + + + + + + +Uses of Class biweekly.Biweekly.WriterChainXml (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.Biweekly.WriterChainXml

    +
    + + + + + + + + + +
    +Packages that use Biweekly.WriterChainXml
    biweekly  
    +  +

    + + + + + +
    +Uses of Biweekly.WriterChainXml in biweekly
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly that return Biweekly.WriterChainXml
    + Biweekly.WriterChainXmlBiweekly.WriterChainXml.indent(int indent) + +
    +          Sets the number of indent spaces to use for pretty-printing.
    + Biweekly.WriterChainXmlBiweekly.WriterChainXml.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.WriterChainXmlBiweekly.WriterChainXml.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.WriterChainXmlBiweekly.WriterChainXml.register(String parameterName, + ICalDataType dataType) + +
    +          Registers the data type of an experimental parameter.
    +static Biweekly.WriterChainXmlBiweekly.writeXml(Collection<ICalendar> icals) + +
    +          Writes an xCal document (XML-encoded iCalendar objects).
    +static Biweekly.WriterChainXmlBiweekly.writeXml(ICalendar... icals) + +
    +          Writes an xCal document (XML-encoded iCalendar objects).
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.html new file mode 100644 index 000000000..866f721fd --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/Biweekly.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.Biweekly (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.Biweekly

    +
    +No usage of biweekly.Biweekly +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ICalDataType.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ICalDataType.html new file mode 100644 index 000000000..86dd7c83b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ICalDataType.html @@ -0,0 +1,1265 @@ + + + + + + + +Uses of Class biweekly.ICalDataType (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.ICalDataType

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use ICalDataType
    biweekly  
    biweekly.component  
    biweekly.io.json  
    biweekly.io.xml  
    biweekly.parameter  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ICalDataType in biweekly
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Fields in biweekly declared as ICalDataType
    +static ICalDataTypeICalDataType.BINARY + +
    +           
    +static ICalDataTypeICalDataType.BOOLEAN + +
    +           
    +static ICalDataTypeICalDataType.CAL_ADDRESS + +
    +           
    +static ICalDataTypeICalDataType.DATE + +
    +           
    +static ICalDataTypeICalDataType.DATE_TIME + +
    +           
    +static ICalDataTypeICalDataType.DURATION + +
    +           
    +static ICalDataTypeICalDataType.FLOAT + +
    +           
    +static ICalDataTypeICalDataType.INTEGER + +
    +           
    +static ICalDataTypeICalDataType.PERIOD + +
    +           
    +static ICalDataTypeICalDataType.RECUR + +
    +           
    +static ICalDataTypeICalDataType.TEXT + +
    +           
    +static ICalDataTypeICalDataType.TIME + +
    +           
    +static ICalDataTypeICalDataType.URI + +
    +           
    +static ICalDataTypeICalDataType.UTC_OFFSET + +
    +           
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly that return ICalDataType
    +static ICalDataTypeICalDataType.find(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static ICalDataTypeICalDataType.get(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    +  +

    + + + + + + + + + +
    Methods in biweekly that return types with arguments of type ICalDataType
    +static Collection<ICalDataType>ICalDataType.all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +  +

    + + + + + + + + + +
    Methods in biweekly with parameters of type ICalDataType
    + Biweekly.WriterChainXmlBiweekly.WriterChainXml.register(String parameterName, + ICalDataType dataType) + +
    +          Registers the data type of an experimental parameter.
    +  +

    + + + + + +
    +Uses of ICalDataType in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type ICalDataType
    + RawPropertyICalComponent.addExperimentalProperty(String name, + ICalDataType dataType, + String value) + +
    +          Adds an experimental property to this component.
    + RawPropertyICalComponent.setExperimentalProperty(String name, + ICalDataType dataType, + String value) + +
    +          Adds an experimental property to this component, removing all existing + properties that have the same name.
    +  +

    + + + + + +
    +Uses of ICalDataType in biweekly.io.json
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.io.json with parameters of type ICalDataType
    + voidJCalRawReader.JCalDataStreamListener.readProperty(List<String> componentHierarchy, + String propertyName, + ICalParameters parameters, + ICalDataType dataType, + JCalValue value) + +
    +          Called when a property is read.
    + voidJCalRawWriter.writeProperty(String propertyName, + ICalDataType dataType, + JCalValue value) + +
    +          Writes a property to the current component.
    + voidJCalRawWriter.writeProperty(String propertyName, + ICalParameters parameters, + ICalDataType dataType, + JCalValue value) + +
    +          Writes a property to the current component.
    +  +

    + + + + + +
    +Uses of ICalDataType in biweekly.io.xml
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.io.xml with parameters of type ICalDataType
    + List<String>XCalElement.all(ICalDataType dataType) + +
    +          Gets all the values of a given data type.
    + XCalElementXCalElement.append(ICalDataType dataType) + +
    +          Adds an empty value.
    + ElementXCalElement.append(ICalDataType dataType, + String value) + +
    +          Adds a value.
    + XCalElementXCalElement.child(ICalDataType dataType) + +
    +          Gets the first child element with the given data type.
    + List<XCalElement>XCalElement.children(ICalDataType dataType) + +
    +          Gets all child elements with the given data type.
    + StringXCalElement.first(ICalDataType dataType) + +
    +          Gets the first value of the given data type.
    + voidXCalDocument.registerParameterDataType(String parameterName, + ICalDataType dataType) + +
    +          Registers the data type of an experimental parameter.
    +  +

    + + + + + +
    +Uses of ICalDataType in biweekly.parameter
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter that return ICalDataType
    + ICalDataTypeICalParameters.getValue() + +
    +          Gets the data type of the property's value (for example, "text" or + "datetime").
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter with parameters of type ICalDataType
    + voidICalParameters.setValue(ICalDataType value) + +
    +          Sets the data type of the property's value (for example, "text" or + "datetime").
    +  +

    + + + + + +
    +Uses of ICalDataType in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return ICalDataType
    + ICalDataTypeRawProperty.getDataType() + +
    +           
    +  +

    + + + + + + + + +
    Constructors in biweekly.property with parameters of type ICalDataType
    RawProperty(String name, + ICalDataType dataType, + String value) + +
    +           
    +  +

    + + + + + +
    +Uses of ICalDataType in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Fields in biweekly.property.marshaller declared as ICalDataType
    +protected  ICalDataTypeICalPropertyMarshaller.defaultDataType + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return ICalDataType
    +protected  ICalDataTypeAttachmentMarshaller._dataType(Attachment property) + +
    +           
    +protected  ICalDataTypeExceptionDatesMarshaller._dataType(ExceptionDates property) + +
    +           
    +protected  ICalDataTypeRawPropertyMarshaller._dataType(RawProperty property) + +
    +           
    +protected  ICalDataTypeRecurrenceDatesMarshaller._dataType(RecurrenceDates property) + +
    +           
    +protected  ICalDataTypeICalPropertyMarshaller._dataType(T property) + +
    +           + Determines the data type of a property instance.
    +protected  ICalDataTypeDateOrDateTimePropertyMarshaller._dataType(T property) + +
    +           
    +protected  ICalDataTypeTriggerMarshaller._dataType(Trigger property) + +
    +           
    + ICalDataTypeICalPropertyMarshaller.dataType(T property) + +
    +          Determines the data type of a property instance.
    + ICalDataTypeICalPropertyMarshaller.getDefaultDataType() + +
    +          Gets the property's default data type.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type ICalDataType
    +protected  XmlXmlMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  VersionVersionMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TUtcOffsetPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TriggerTriggerMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TTextPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RequestStatusRequestStatusMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TRecurrencePropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RecurrenceDatesRecurrenceDatesMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TListPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TIntegerPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TICalPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  GeoGeoMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  FreeBusyFreeBusyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  ExceptionDatesExceptionDatesMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  DurationPropertyDurationPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TDateTimePropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TDateOrDateTimePropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  AttachmentAttachmentMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  XmlXmlMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  VersionVersionMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TUtcOffsetPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TriggerTriggerMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TTextPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RequestStatusRequestStatusMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TRecurrencePropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RecurrenceDatesRecurrenceDatesMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RawPropertyRawPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TListPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TIntegerPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected abstract  TICalPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  GeoGeoMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  FreeBusyFreeBusyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  DurationPropertyDurationPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TDateTimePropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TDateOrDateTimePropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  AttachmentAttachmentMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected static CannotParseExceptionICalPropertyMarshaller.missingXmlElements(ICalDataType... dataTypes) + +
    +          Creates a CannotParseException, indicating that the XML elements + that the parser expected to find are missing from the property's XML + element.
    + ResourcesResourcesMarshaller.newInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    +protected abstract  TListPropertyMarshaller.newInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    +protected  ExceptionDatesExceptionDatesMarshaller.newInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    + CategoriesCategoriesMarshaller.newInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    + ICalPropertyMarshaller.Result<T>ICalPropertyMarshaller.parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters) + +
    +          Unmarshals a property's value from a JSON data stream (jCal).
    + ICalPropertyMarshaller.Result<T>ICalPropertyMarshaller.parseText(String value, + ICalDataType dataType, + ICalParameters parameters) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  StringTextListPropertyMarshaller.readValue(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected abstract  VListPropertyMarshaller.readValue(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  DateExceptionDatesMarshaller.readValue(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Constructors in biweekly.property.marshaller with parameters of type ICalDataType
    ICalPropertyMarshaller(Class<T> clazz, + String propertyName, + ICalDataType defaultDataType) + +
    +          Creates a new marshaller.
    ICalPropertyMarshaller(Class<T> clazz, + String propertyName, + ICalDataType defaultDataType, + QName qname) + +
    +          Creates a new marshaller.
    ListPropertyMarshaller(Class<T> clazz, + String propertyName, + ICalDataType dataType) + +
    +           
    TextPropertyMarshaller(Class<T> clazz, + String propertyName, + ICalDataType dataType) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ICalException.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ICalException.html new file mode 100644 index 000000000..a0494e371 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ICalException.html @@ -0,0 +1,254 @@ + + + + + + + +Uses of Class biweekly.ICalException (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.ICalException

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use ICalException
    biweekly.io  
    biweekly.io.json  
    biweekly.io.text  
    +  +

    + + + + + +
    +Uses of ICalException in biweekly.io
    +  +

    + + + + + + + + + + + + + +
    Subclasses of ICalException in biweekly.io
    + classCannotParseException + +
    +          Thrown during the unmarshalling of an iCalendar property to signal that the + property's value could not be parsed (for example, being unable to parse a + date string).
    + classSkipMeException + +
    +          Thrown during the reading or writing of an iCalendar property to show that + the property should not be written to the iCalendar data stream or not be + included in the parsed ICalendar object.
    +  +

    + + + + + +
    +Uses of ICalException in biweekly.io.json
    +  +

    + + + + + + + + + +
    Subclasses of ICalException in biweekly.io.json
    + classJCalParseException + +
    +          Thrown during the parsing of a JSON-encoded iCalendar object (jCal) when the + jCal object is not formatted in the correct way (the JSON syntax is valid, + but it's not in the correct jCal format).
    +  +

    + + + + + +
    +Uses of ICalException in biweekly.io.text
    +  +

    + + + + + + + + + +
    Subclasses of ICalException in biweekly.io.text
    +static classICalRawReader.StopReadingException + +
    +          Instructs an ICalRawReader to stop reading from the data stream + when thrown from an ICalRawReader.ICalDataStreamListener implementation.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ICalendar.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ICalendar.html new file mode 100644 index 000000000..17dec92d9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ICalendar.html @@ -0,0 +1,489 @@ + + + + + + + +Uses of Class biweekly.ICalendar (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.ICalendar

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use ICalendar
    biweekly  
    biweekly.component.marshaller  
    biweekly.io.json  
    biweekly.io.text  
    biweekly.io.xml  
    +  +

    + + + + + +
    +Uses of ICalendar in biweekly
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly that return ICalendar
    + ICalendarBiweekly.ParserChainTextString.first() + +
    +           
    + ICalendarBiweekly.ParserChainXmlString.first() + +
    +           
    + ICalendarBiweekly.ParserChainXmlDocument.first() + +
    +           
    + ICalendarBiweekly.ParserChainJsonString.first() + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly that return types with arguments of type ICalendar
    + List<ICalendar>Biweekly.ParserChainTextString.all() + +
    +           
    + List<ICalendar>Biweekly.ParserChainXmlString.all() + +
    +           
    + List<ICalendar>Biweekly.ParserChainXmlDocument.all() + +
    +           
    + List<ICalendar>Biweekly.ParserChainJsonString.all() + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly with parameters of type ICalendar
    +static Biweekly.WriterChainTextBiweekly.write(ICalendar... icals) + +
    +          Writes multiple iCalendar objects to a data stream.
    +static Biweekly.WriterChainJsonBiweekly.writeJson(ICalendar... icals) + +
    +          Writes an xCal document (XML-encoded iCalendar objects).
    +static Biweekly.WriterChainXmlBiweekly.writeXml(ICalendar... icals) + +
    +          Writes an xCal document (XML-encoded iCalendar objects).
    +  +

    + + + + + + + + + + + + + + + + + +
    Method parameters in biweekly with type arguments of type ICalendar
    +static Biweekly.WriterChainTextBiweekly.write(Collection<ICalendar> icals) + +
    +          Writes multiple iCalendar objects to a data stream.
    +static Biweekly.WriterChainJsonBiweekly.writeJson(Collection<ICalendar> icals) + +
    +          Writes an xCal document (XML-encoded iCalendar objects).
    +static Biweekly.WriterChainXmlBiweekly.writeXml(Collection<ICalendar> icals) + +
    +          Writes an xCal document (XML-encoded iCalendar objects).
    +  +

    + + + + + +
    +Uses of ICalendar in biweekly.component.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.component.marshaller that return ICalendar
    +protected  ICalendarICalendarMarshaller._newInstance() + +
    +           
    +  +

    + + + + + +
    +Uses of ICalendar in biweekly.io.json
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.json that return ICalendar
    + ICalendarJCalReader.readNext() + +
    +          Reads the next iCalendar object from the JSON data stream.
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.json with parameters of type ICalendar
    + voidJCalWriter.write(ICalendar ical) + +
    +          Writes an iCalendar object to the data stream.
    +  +

    + + + + + +
    +Uses of ICalendar in biweekly.io.text
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.text that return ICalendar
    + ICalendarICalReader.readNext() + +
    +          Reads the next iCalendar object.
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.text with parameters of type ICalendar
    + voidICalWriter.write(ICalendar ical) + +
    +          Writes an iCalendar object to the data stream.
    +  +

    + + + + + +
    +Uses of ICalendar in biweekly.io.xml
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.xml that return ICalendar
    + ICalendarXCalDocument.parseFirst() + +
    +          Parses the first ICalendar object from the xCal document.
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.xml that return types with arguments of type ICalendar
    + List<ICalendar>XCalDocument.parseAll() + +
    +          Parses all the ICalendar objects from the xCal document.
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.xml with parameters of type ICalendar
    + voidXCalDocument.add(ICalendar ical) + +
    +          Adds an iCalendar object to the xCal document.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ValidationWarnings.WarningsGroup.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ValidationWarnings.WarningsGroup.html new file mode 100644 index 000000000..a15be41d4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ValidationWarnings.WarningsGroup.html @@ -0,0 +1,250 @@ + + + + + + + +Uses of Class biweekly.ValidationWarnings.WarningsGroup (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.ValidationWarnings.WarningsGroup

    +
    + + + + + + + + + + + + + +
    +Packages that use ValidationWarnings.WarningsGroup
    biweekly  
    biweekly.component  
    +  +

    + + + + + +
    +Uses of ValidationWarnings.WarningsGroup in biweekly
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly that return types with arguments of type ValidationWarnings.WarningsGroup
    + List<ValidationWarnings.WarningsGroup>ValidationWarnings.getByComponent(Class<? extends ICalComponent> componentClass) + +
    +          Gets all validation warnings of a given component.
    + List<ValidationWarnings.WarningsGroup>ValidationWarnings.getByProperty(Class<? extends ICalProperty> propertyClass) + +
    +          Gets all validation warnings of a given property.
    + List<ValidationWarnings.WarningsGroup>ValidationWarnings.getWarnings() + +
    +          Gets all the validation warnings.
    + Iterator<ValidationWarnings.WarningsGroup>ValidationWarnings.iterator() + +
    +          Iterates over each warning group (same as calling + getWarnings().iterator()).
    +  +

    + + + + + + + + +
    Constructor parameters in biweekly with type arguments of type ValidationWarnings.WarningsGroup
    ValidationWarnings(List<ValidationWarnings.WarningsGroup> warnings) + +
    +          Creates a new validation warnings list.
    +  +

    + + + + + +
    +Uses of ValidationWarnings.WarningsGroup in biweekly.component
    +  +

    + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type ValidationWarnings.WarningsGroup
    + List<ValidationWarnings.WarningsGroup>ICalComponent.validate(List<ICalComponent> hierarchy) + +
    +          Checks the component for data consistency problems or deviations from the + spec.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ValidationWarnings.html b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ValidationWarnings.html new file mode 100644 index 000000000..c987228f2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/class-use/ValidationWarnings.html @@ -0,0 +1,182 @@ + + + + + + + +Uses of Class biweekly.ValidationWarnings (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.ValidationWarnings

    +
    + + + + + + + + + +
    +Packages that use ValidationWarnings
    biweekly  
    +  +

    + + + + + +
    +Uses of ValidationWarnings in biweekly
    +  +

    + + + + + + + + + +
    Methods in biweekly that return ValidationWarnings
    + ValidationWarningsICalendar.validate() + +
    +          Checks this iCalendar object for data consistency problems or deviations + from the spec.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/DaylightSavingsTime.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/DaylightSavingsTime.html new file mode 100644 index 000000000..852afa074 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/DaylightSavingsTime.html @@ -0,0 +1,287 @@ + + + + + + + +DaylightSavingsTime (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component +
    +Class DaylightSavingsTime

    +
    +java.lang.Object
    +  extended by biweekly.component.ICalComponent
    +      extended by biweekly.component.Observance
    +          extended by biweekly.component.DaylightSavingsTime
    +
    +
    +
    +
    public class DaylightSavingsTime
    extends Observance
    + + +

    +

    + Defines a daylight savings time range within a VTimezone. +

    +

    + Examples: + +

    + VTimezone timezone = new VTimezone("Eastern Standard Time");
    + DaylightSavingsTime daylight = new DaylightSavingsTime();
    + DateTimeComponents components = new DateTimeComponents(1999, 4, 4, 2, 0, 0, false);
    + daylight.setDateStart(components);
    + daylight.setTimezoneOffsetFrom(-5, 0);
    + daylight.setTimezoneOffsetTo(-4, 0);
    + timezone.addDaylightSavingsTime(daylight);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.62-71
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.ICalComponent
    components, properties
    +  + + + + + + + + + + +
    +Constructor Summary
    DaylightSavingsTime() + +
    +           
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.component.Observance
    addComment, addComment, addExceptionDates, addRecurrenceDates, addTimezoneName, addTimezoneName, getComments, getDateStart, getExceptionDates, getRecurrenceDates, getRecurrenceRule, getTimezoneNames, getTimezoneOffsetFrom, getTimezoneOffsetTo, setDateStart, setDateStart, setRecurrenceRule, setRecurrenceRule, setTimezoneOffsetFrom, setTimezoneOffsetFrom, setTimezoneOffsetTo, setTimezoneOffsetTo, validate
    + + + + + + + +
    Methods inherited from class biweekly.component.ICalComponent
    addComponent, addExperimentalComponent, addExperimentalProperty, addExperimentalProperty, addProperty, checkOptionalCardinality, checkRequiredCardinality, getComponent, getComponents, getComponents, getExperimentalComponent, getExperimentalComponents, getExperimentalComponents, getExperimentalProperties, getExperimentalProperties, getExperimentalProperty, getProperties, getProperties, getProperty, removeExperimentalComponents, removeExperimentalProperty, removeProperties, setComponent, setComponent, setExperimentalComponents, setExperimentalProperty, setExperimentalProperty, setProperty, setProperty, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DaylightSavingsTime

    +
    +public DaylightSavingsTime()
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/ICalComponent.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/ICalComponent.html new file mode 100644 index 000000000..155819f6d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/ICalComponent.html @@ -0,0 +1,1072 @@ + + + + + + + +ICalComponent (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component +
    +Class ICalComponent

    +
    +java.lang.Object
    +  extended by biweekly.component.ICalComponent
    +
    +
    +
    Direct Known Subclasses:
    ICalendar, Observance, RawComponent, VAlarm, VEvent, VFreeBusy, VJournal, VTimezone, VTodo
    +
    +
    +
    +
    public abstract class ICalComponent
    extends Object
    + + +

    +The base class for iCalendar components. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + +
    +Field Summary
    +protected  ListMultimap<Class<? extends ICalComponent>,ICalComponent>components + +
    +           
    +protected  ListMultimap<Class<? extends ICalProperty>,ICalProperty>properties + +
    +           
    +  + + + + + + + + + + +
    +Constructor Summary
    ICalComponent() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddComponent(ICalComponent component) + +
    +          Adds a sub-component to this component.
    + RawComponentaddExperimentalComponent(String name) + +
    +          Adds an experimental sub-component to this component.
    + RawPropertyaddExperimentalProperty(String name, + ICalDataType dataType, + String value) + +
    +          Adds an experimental property to this component.
    + RawPropertyaddExperimentalProperty(String name, + String value) + +
    +          Adds an experimental property to this component.
    + voidaddProperty(ICalProperty property) + +
    +          Adds a property to this component.
    +protected  voidcheckOptionalCardinality(List<String> warnings, + Class<? extends ICalProperty>... classes) + +
    +          Utility method for validating that there is no more than one instance of + each of the given properties.
    +protected  voidcheckRequiredCardinality(List<String> warnings, + Class<? extends ICalProperty>... classes) + +
    +          Utility method for validating that there is exactly one instance of each + of the given properties.
    + + + + + +
    +<T extends ICalComponent> +
    +T
    +
    getComponent(Class<T> clazz) + +
    +          Gets the first component of a given class.
    + ListMultimap<Class<? extends ICalComponent>,ICalComponent>getComponents() + +
    +          Gets all the sub-components associated with this component.
    + + + + + +
    +<T extends ICalComponent> +
    +List<T>
    +
    getComponents(Class<T> clazz) + +
    +          Gets all components of a given class.
    + RawComponentgetExperimentalComponent(String name) + +
    +          Gets the first experimental sub-component with a given name.
    + List<RawComponent>getExperimentalComponents() + +
    +          Gets all experimental sub-components associated with this component.
    + List<RawComponent>getExperimentalComponents(String name) + +
    +          Gets all experimental sub-component with a given name.
    + List<RawProperty>getExperimentalProperties() + +
    +          Gets all experimental properties associated with this component.
    + List<RawProperty>getExperimentalProperties(String name) + +
    +          Gets all experimental properties with a given name.
    + RawPropertygetExperimentalProperty(String name) + +
    +          Gets the first experimental property with a given name.
    + ListMultimap<Class<? extends ICalProperty>,ICalProperty>getProperties() + +
    +          Gets all the properties associated with this component.
    + + + + + +
    +<T extends ICalProperty> +
    +List<T>
    +
    getProperties(Class<T> clazz) + +
    +          Gets all properties of a given class.
    + + + + + +
    +<T extends ICalProperty> +
    +T
    +
    getProperty(Class<T> clazz) + +
    +          Gets the first property of a given class.
    + voidremoveExperimentalComponents(String name) + +
    +          Removes all experimental sub-components that have the given name.
    + voidremoveExperimentalProperty(String name) + +
    +          Removes all experimental properties that have the given name.
    + voidremoveProperties(Class<? extends ICalProperty> clazz) + +
    +          Removes properties from the iCalendar object.
    + + + + + +
    +<T extends ICalComponent> +
    +void
    +
    setComponent(Class<T> clazz, + T component) + +
    +          Replaces all components of a given class with the given component.
    + voidsetComponent(ICalComponent component) + +
    +          Replaces all components of a given class with the given component.
    + RawComponentsetExperimentalComponents(String name) + +
    +          Adds an experimental sub-component to this component, removing all + existing components that have the same name.
    + RawPropertysetExperimentalProperty(String name, + ICalDataType dataType, + String value) + +
    +          Adds an experimental property to this component, removing all existing + properties that have the same name.
    + RawPropertysetExperimentalProperty(String name, + String value) + +
    +          Adds an experimental property to this component, removing all existing + properties that have the same name.
    + + + + + +
    +<T extends ICalProperty> +
    +void
    +
    setProperty(Class<T> clazz, + T property) + +
    +          Replaces all existing properties of the given class with a single + property instance.
    + voidsetProperty(ICalProperty property) + +
    +          Replaces all existing properties of the given class with a single + property instance.
    + List<ValidationWarnings.WarningsGroup>validate(List<ICalComponent> hierarchy) + +
    +          Checks the component for data consistency problems or deviations from the + spec.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the component for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +components

    +
    +protected final ListMultimap<Class<? extends ICalComponent>,ICalComponent> components
    +
    +
    +
    +
    +
    + +

    +properties

    +
    +protected final ListMultimap<Class<? extends ICalProperty>,ICalProperty> properties
    +
    +
    +
    +
    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalComponent

    +
    +public ICalComponent()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getProperty

    +
    +public <T extends ICalProperty> T getProperty(Class<T> clazz)
    +
    +
    Gets the first property of a given class. +

    +

    +
    Parameters:
    clazz - the property class +
    Returns:
    the property or null if not found
    +
    +
    +
    + +

    +getProperties

    +
    +public <T extends ICalProperty> List<T> getProperties(Class<T> clazz)
    +
    +
    Gets all properties of a given class. +

    +

    +
    Parameters:
    clazz - the property class +
    Returns:
    the properties
    +
    +
    +
    + +

    +getProperties

    +
    +public ListMultimap<Class<? extends ICalProperty>,ICalProperty> getProperties()
    +
    +
    Gets all the properties associated with this component. +

    +

    + +
    Returns:
    the properties
    +
    +
    +
    + +

    +addProperty

    +
    +public void addProperty(ICalProperty property)
    +
    +
    Adds a property to this component. +

    +

    +
    Parameters:
    property - the property to add
    +
    +
    +
    + +

    +setProperty

    +
    +public void setProperty(ICalProperty property)
    +
    +
    Replaces all existing properties of the given class with a single + property instance. +

    +

    +
    Parameters:
    property - the property (must not be null)
    +
    +
    +
    + +

    +setProperty

    +
    +public <T extends ICalProperty> void setProperty(Class<T> clazz,
    +                                                 T property)
    +
    +
    Replaces all existing properties of the given class with a single + property instance. If the property instance is null, then all instances + of that property will be removed. +

    +

    +
    Parameters:
    clazz - the property class (e.g. "Version.class")
    property - the property or null to remove
    +
    +
    +
    + +

    +removeProperties

    +
    +public void removeProperties(Class<? extends ICalProperty> clazz)
    +
    +
    Removes properties from the iCalendar object. +

    +

    +
    Parameters:
    clazz - the class of the properties to remove (e.g. "Version.class")
    +
    +
    +
    + +

    +getExperimentalProperty

    +
    +public RawProperty getExperimentalProperty(String name)
    +
    +
    Gets the first experimental property with a given name. +

    +

    +
    Parameters:
    name - the property name (e.g. "X-ALT-DESC") +
    Returns:
    the property or null if none were found
    +
    +
    +
    + +

    +getExperimentalProperties

    +
    +public List<RawProperty> getExperimentalProperties(String name)
    +
    +
    Gets all experimental properties with a given name. +

    +

    +
    Parameters:
    name - the property name (e.g. "X-ALT-DESC") +
    Returns:
    the properties
    +
    +
    +
    + +

    +getExperimentalProperties

    +
    +public List<RawProperty> getExperimentalProperties()
    +
    +
    Gets all experimental properties associated with this component. +

    +

    + +
    Returns:
    the properties
    +
    +
    +
    + +

    +addExperimentalProperty

    +
    +public RawProperty addExperimentalProperty(String name,
    +                                           String value)
    +
    +
    Adds an experimental property to this component. +

    +

    +
    Parameters:
    name - the property name (e.g. "X-ALT-DESC")
    value - the property value +
    Returns:
    the property object that was created
    +
    +
    +
    + +

    +addExperimentalProperty

    +
    +public RawProperty addExperimentalProperty(String name,
    +                                           ICalDataType dataType,
    +                                           String value)
    +
    +
    Adds an experimental property to this component. +

    +

    +
    Parameters:
    name - the property name (e.g. "X-ALT-DESC")
    dataType - the property's data type (e.g. "text") or null if unknown
    value - the property value +
    Returns:
    the property object that was created
    +
    +
    +
    + +

    +setExperimentalProperty

    +
    +public RawProperty setExperimentalProperty(String name,
    +                                           String value)
    +
    +
    Adds an experimental property to this component, removing all existing + properties that have the same name. +

    +

    +
    Parameters:
    name - the property name (e.g. "X-ALT-DESC")
    value - the property value +
    Returns:
    the property object that was created
    +
    +
    +
    + +

    +setExperimentalProperty

    +
    +public RawProperty setExperimentalProperty(String name,
    +                                           ICalDataType dataType,
    +                                           String value)
    +
    +
    Adds an experimental property to this component, removing all existing + properties that have the same name. +

    +

    +
    Parameters:
    name - the property name (e.g. "X-ALT-DESC")
    dataType - the property's data type (e.g. "text") or null if unknown
    value - the property value +
    Returns:
    the property object that was created
    +
    +
    +
    + +

    +removeExperimentalProperty

    +
    +public void removeExperimentalProperty(String name)
    +
    +
    Removes all experimental properties that have the given name. +

    +

    +
    Parameters:
    name - the component name (e.g. "X-ALT-DESC")
    +
    +
    +
    + +

    +getComponent

    +
    +public <T extends ICalComponent> T getComponent(Class<T> clazz)
    +
    +
    Gets the first component of a given class. +

    +

    +
    Parameters:
    clazz - the component class +
    Returns:
    the component or null if not found
    +
    +
    +
    + +

    +getComponents

    +
    +public <T extends ICalComponent> List<T> getComponents(Class<T> clazz)
    +
    +
    Gets all components of a given class. +

    +

    +
    Parameters:
    clazz - the component class +
    Returns:
    the components
    +
    +
    +
    + +

    +getComponents

    +
    +public ListMultimap<Class<? extends ICalComponent>,ICalComponent> getComponents()
    +
    +
    Gets all the sub-components associated with this component. +

    +

    + +
    Returns:
    the sub-components
    +
    +
    +
    + +

    +addComponent

    +
    +public void addComponent(ICalComponent component)
    +
    +
    Adds a sub-component to this component. +

    +

    +
    Parameters:
    component - the component to add
    +
    +
    +
    + +

    +setComponent

    +
    +public void setComponent(ICalComponent component)
    +
    +
    Replaces all components of a given class with the given component. +

    +

    +
    Parameters:
    component - the component (must not be null)
    +
    +
    +
    + +

    +setComponent

    +
    +public <T extends ICalComponent> void setComponent(Class<T> clazz,
    +                                                   T component)
    +
    +
    Replaces all components of a given class with the given component. If the + component instance is null, then all instances of that component will be + removed. +

    +

    +
    Parameters:
    clazz - the component's class
    component - the component or null to remove
    +
    +
    +
    + +

    +getExperimentalComponent

    +
    +public RawComponent getExperimentalComponent(String name)
    +
    +
    Gets the first experimental sub-component with a given name. +

    +

    +
    Parameters:
    name - the component name (e.g. "X-PARTY") +
    Returns:
    the component or null if none were found
    +
    +
    +
    + +

    +getExperimentalComponents

    +
    +public List<RawComponent> getExperimentalComponents(String name)
    +
    +
    Gets all experimental sub-component with a given name. +

    +

    +
    Parameters:
    name - the component name (e.g. "X-PARTY") +
    Returns:
    the components
    +
    +
    +
    + +

    +getExperimentalComponents

    +
    +public List<RawComponent> getExperimentalComponents()
    +
    +
    Gets all experimental sub-components associated with this component. +

    +

    + +
    Returns:
    the sub-components
    +
    +
    +
    + +

    +addExperimentalComponent

    +
    +public RawComponent addExperimentalComponent(String name)
    +
    +
    Adds an experimental sub-component to this component. +

    +

    +
    Parameters:
    name - the component name (e.g. "X-PARTY") +
    Returns:
    the component object that was created
    +
    +
    +
    + +

    +setExperimentalComponents

    +
    +public RawComponent setExperimentalComponents(String name)
    +
    +
    Adds an experimental sub-component to this component, removing all + existing components that have the same name. +

    +

    +
    Parameters:
    name - the component name (e.g. "X-PARTY") +
    Returns:
    the component object that was created
    +
    +
    +
    + +

    +removeExperimentalComponents

    +
    +public void removeExperimentalComponents(String name)
    +
    +
    Removes all experimental sub-components that have the given name. +

    +

    +
    Parameters:
    name - the component name (e.g. "X-PARTY")
    +
    +
    +
    + +

    +validate

    +
    +public final List<ValidationWarnings.WarningsGroup> validate(List<ICalComponent> hierarchy)
    +
    +
    Checks the component for data consistency problems or deviations from the + spec. These problems will not prevent the component from being written to + a data stream, but may prevent it from being parsed correctly by the + consuming application. These problems can largely be avoided by reading + the Javadocs of the component class, or by being familiar with the + iCalendar standard. +

    +

    +
    Parameters:
    hierarchy - the hierarchy of components that the component belongs + to +
    Returns:
    a list of warnings or an empty list if no problems were found
    See Also:
    ICalendar.validate()
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Checks the component for data consistency problems or deviations from the + spec. Meant to be overridden by child classes. +

    +

    +
    Parameters:
    components - the hierarchy of components that the component belongs + to
    warnings - the list to add the warnings to
    +
    +
    +
    + +

    +checkRequiredCardinality

    +
    +protected void checkRequiredCardinality(List<String> warnings,
    +                                        Class<? extends ICalProperty>... classes)
    +
    +
    Utility method for validating that there is exactly one instance of each + of the given properties. +

    +

    +
    Parameters:
    warnings - the list to add the warnings to
    classes - the properties to check
    +
    +
    +
    + +

    +checkOptionalCardinality

    +
    +protected void checkOptionalCardinality(List<String> warnings,
    +                                        Class<? extends ICalProperty>... classes)
    +
    +
    Utility method for validating that there is no more than one instance of + each of the given properties. +

    +

    +
    Parameters:
    warnings - the list to add the warnings to
    classes - the properties to check
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/Observance.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/Observance.html new file mode 100644 index 000000000..554a99b29 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/Observance.html @@ -0,0 +1,789 @@ + + + + + + + +Observance (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component +
    +Class Observance

    +
    +java.lang.Object
    +  extended by biweekly.component.ICalComponent
    +      extended by biweekly.component.Observance
    +
    +
    +
    Direct Known Subclasses:
    DaylightSavingsTime, StandardTime
    +
    +
    +
    +
    public abstract class Observance
    extends ICalComponent
    + + +

    +Parent class for the "daylight" and "standard" timezone observances. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    See Also:
    DaylightSavingsTime, +StandardTime
    Specification Reference:
    RFC 5545 p.62-71
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.ICalComponent
    components, properties
    +  + + + + + + + + + + +
    +Constructor Summary
    Observance() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddComment(Comment comment) + +
    +          Adds a comment to the timezone observance.
    + CommentaddComment(String comment) + +
    +          Adds a comment to the timezone observance.
    + voidaddExceptionDates(ExceptionDates exceptionDates) + +
    +          Adds a list of exceptions to the timezone observance.
    + voidaddRecurrenceDates(RecurrenceDates recurrenceDates) + +
    +          Adds a list of dates/periods that help define the recurrence rule of this + timezone observance (if one is defined).
    + TimezoneNameaddTimezoneName(String timezoneName) + +
    +          Adds a traditional, non-standard name for the timezone observance.
    + voidaddTimezoneName(TimezoneName timezoneName) + +
    +          Adds a traditional, non-standard name for the timezone observance.
    + List<Comment>getComments() + +
    +          Gets the comments attached to the timezone observance.
    + DateStartgetDateStart() + +
    +          Gets the date that the timezone observance starts.
    + List<ExceptionDates>getExceptionDates() + +
    +          Gets the list of exceptions to the timezone observance.
    + List<RecurrenceDates>getRecurrenceDates() + +
    +          Gets the list of dates/periods that help define the recurrence rule of + this timezone observance (if one is defined).
    + RecurrenceRulegetRecurrenceRule() + +
    +          Gets how often the timezone observance repeats.
    + List<TimezoneName>getTimezoneNames() + +
    +          Gets the traditional, non-standard names for the timezone observance.
    + TimezoneOffsetFromgetTimezoneOffsetFrom() + +
    +          Gets the UTC offset that the timezone observance transitions from.
    + TimezoneOffsetTogetTimezoneOffsetTo() + +
    +          Gets the UTC offset that the timezone observance transitions to.
    + voidsetDateStart(DateStart dateStart) + +
    +          Sets the date that the timezone observance starts.
    + DateStartsetDateStart(DateTimeComponents components) + +
    +          Sets the date that the timezone observance starts.
    + RecurrenceRulesetRecurrenceRule(Recurrence recur) + +
    +          Sets how often the timezone observance repeats.
    + voidsetRecurrenceRule(RecurrenceRule recurrenceRule) + +
    +          Sets how often the timezone observance repeats.
    + TimezoneOffsetFromsetTimezoneOffsetFrom(Integer hour, + Integer minute) + +
    +          Sets the UTC offset that the timezone observance transitions from.
    + voidsetTimezoneOffsetFrom(TimezoneOffsetFrom timezoneOffsetFrom) + +
    +          Sets the UTC offset that the timezone observance transitions from.
    + TimezoneOffsetTosetTimezoneOffsetTo(Integer hour, + Integer minute) + +
    +          Sets the UTC offset that the timezone observance transitions to.
    + voidsetTimezoneOffsetTo(TimezoneOffsetTo timezoneOffsetTo) + +
    +          Sets the UTC offset that the timezone observance transitions to.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the component for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.component.ICalComponent
    addComponent, addExperimentalComponent, addExperimentalProperty, addExperimentalProperty, addProperty, checkOptionalCardinality, checkRequiredCardinality, getComponent, getComponents, getComponents, getExperimentalComponent, getExperimentalComponents, getExperimentalComponents, getExperimentalProperties, getExperimentalProperties, getExperimentalProperty, getProperties, getProperties, getProperty, removeExperimentalComponents, removeExperimentalProperty, removeProperties, setComponent, setComponent, setExperimentalComponents, setExperimentalProperty, setExperimentalProperty, setProperty, setProperty, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Observance

    +
    +public Observance()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getDateStart

    +
    +public DateStart getDateStart()
    +
    +
    Gets the date that the timezone observance starts. +

    +

    + +
    Returns:
    the start date or null if not set
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +setDateStart

    +
    +public void setDateStart(DateStart dateStart)
    +
    +
    Sets the date that the timezone observance starts. +

    +

    +
    Parameters:
    dateStart - the start date or null to remove
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +setDateStart

    +
    +public DateStart setDateStart(DateTimeComponents components)
    +
    +
    Sets the date that the timezone observance starts. +

    +

    +
    Parameters:
    components - the raw components of the start date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +getTimezoneOffsetTo

    +
    +public TimezoneOffsetTo getTimezoneOffsetTo()
    +
    +
    Gets the UTC offset that the timezone observance transitions to. +

    +

    + +
    Returns:
    the UTC offset or null if not set
    Specification Reference:
    RFC 5545 p.105-6
    +
    +
    +
    + +

    +setTimezoneOffsetTo

    +
    +public void setTimezoneOffsetTo(TimezoneOffsetTo timezoneOffsetTo)
    +
    +
    Sets the UTC offset that the timezone observance transitions to. +

    +

    +
    Parameters:
    timezoneOffsetTo - the UTC offset or null to remove
    Specification Reference:
    RFC 5545 p.105-6
    +
    +
    +
    + +

    +setTimezoneOffsetTo

    +
    +public TimezoneOffsetTo setTimezoneOffsetTo(Integer hour,
    +                                            Integer minute)
    +
    +
    Sets the UTC offset that the timezone observance transitions to. +

    +

    +
    Parameters:
    hour - the hour offset (e.g. "-5")
    minute - the minute offset (e.g. "0") +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.105-6
    +
    +
    +
    + +

    +getTimezoneOffsetFrom

    +
    +public TimezoneOffsetFrom getTimezoneOffsetFrom()
    +
    +
    Gets the UTC offset that the timezone observance transitions from. +

    +

    + +
    Returns:
    the UTC offset or null if not set
    Specification Reference:
    RFC 5545 p.104-5
    +
    +
    +
    + +

    +setTimezoneOffsetFrom

    +
    +public void setTimezoneOffsetFrom(TimezoneOffsetFrom timezoneOffsetFrom)
    +
    +
    Sets the UTC offset that the timezone observance transitions from. +

    +

    +
    Parameters:
    timezoneOffsetFrom - the UTC offset or null to remove
    Specification Reference:
    RFC 5545 p.104-5
    +
    +
    +
    + +

    +setTimezoneOffsetFrom

    +
    +public TimezoneOffsetFrom setTimezoneOffsetFrom(Integer hour,
    +                                                Integer minute)
    +
    +
    Sets the UTC offset that the timezone observance transitions from. +

    +

    +
    Parameters:
    hour - the hour offset (e.g. "-5")
    minute - the minute offset (e.g. "0") +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.104-5
    +
    +
    +
    + +

    +getRecurrenceRule

    +
    +public RecurrenceRule getRecurrenceRule()
    +
    +
    Gets how often the timezone observance repeats. +

    +

    + +
    Returns:
    the recurrence rule or null if not set
    Specification Reference:
    RFC 5545 p.122-32
    +
    +
    +
    + +

    +setRecurrenceRule

    +
    +public RecurrenceRule setRecurrenceRule(Recurrence recur)
    +
    +
    Sets how often the timezone observance repeats. +

    +

    +
    Parameters:
    recur - the recurrence rule or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.122-32
    +
    +
    +
    + +

    +setRecurrenceRule

    +
    +public void setRecurrenceRule(RecurrenceRule recurrenceRule)
    +
    +
    Sets how often the timezone observance repeats. +

    +

    +
    Parameters:
    recurrenceRule - the recurrence rule or null to remove
    Specification Reference:
    RFC 5545 p.122-32
    +
    +
    +
    + +

    +getComments

    +
    +public List<Comment> getComments()
    +
    +
    Gets the comments attached to the timezone observance. +

    +

    + +
    Returns:
    the comments
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +addComment

    +
    +public void addComment(Comment comment)
    +
    +
    Adds a comment to the timezone observance. +

    +

    +
    Parameters:
    comment - the comment to add
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +addComment

    +
    +public Comment addComment(String comment)
    +
    +
    Adds a comment to the timezone observance. +

    +

    +
    Parameters:
    comment - the comment to add +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +getRecurrenceDates

    +
    +public List<RecurrenceDates> getRecurrenceDates()
    +
    +
    Gets the list of dates/periods that help define the recurrence rule of + this timezone observance (if one is defined). +

    +

    + +
    Returns:
    the recurrence dates
    Specification Reference:
    RFC 5545 p.120-2
    +
    +
    +
    + +

    +addRecurrenceDates

    +
    +public void addRecurrenceDates(RecurrenceDates recurrenceDates)
    +
    +
    Adds a list of dates/periods that help define the recurrence rule of this + timezone observance (if one is defined). +

    +

    +
    Parameters:
    recurrenceDates - the recurrence dates
    Specification Reference:
    RFC 5545 p.120-2
    +
    +
    +
    + +

    +getTimezoneNames

    +
    +public List<TimezoneName> getTimezoneNames()
    +
    +
    Gets the traditional, non-standard names for the timezone observance. +

    +

    + +
    Returns:
    the timezone observance names
    Specification Reference:
    RFC 5545 p.103-4
    +
    +
    +
    + +

    +addTimezoneName

    +
    +public void addTimezoneName(TimezoneName timezoneName)
    +
    +
    Adds a traditional, non-standard name for the timezone observance. +

    +

    +
    Parameters:
    timezoneName - the timezone observance name
    Specification Reference:
    RFC 5545 p.103-4
    +
    +
    +
    + +

    +addTimezoneName

    +
    +public TimezoneName addTimezoneName(String timezoneName)
    +
    +
    Adds a traditional, non-standard name for the timezone observance. +

    +

    +
    Parameters:
    timezoneName - the timezone observance name (e.g. "EST") +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.103-4
    +
    +
    +
    + +

    +getExceptionDates

    +
    +public List<ExceptionDates> getExceptionDates()
    +
    +
    Gets the list of exceptions to the timezone observance. +

    +

    + +
    Returns:
    the list of exceptions
    Specification Reference:
    RFC 5545 p.118-20
    +
    +
    +
    + +

    +addExceptionDates

    +
    +public void addExceptionDates(ExceptionDates exceptionDates)
    +
    +
    Adds a list of exceptions to the timezone observance. Note that this + property can contain multiple dates. +

    +

    +
    Parameters:
    exceptionDates - the list of exceptions
    Specification Reference:
    RFC 5545 p.118-20
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalComponent
    +
    Checks the component for data consistency problems or deviations from the + spec. Meant to be overridden by child classes. +

    +

    +
    Overrides:
    validate in class ICalComponent
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the component belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/RawComponent.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/RawComponent.html new file mode 100644 index 000000000..c95f18fb8 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/RawComponent.html @@ -0,0 +1,289 @@ + + + + + + + +RawComponent (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component +
    +Class RawComponent

    +
    +java.lang.Object
    +  extended by biweekly.component.ICalComponent
    +      extended by biweekly.component.RawComponent
    +
    +
    +
    +
    public class RawComponent
    extends ICalComponent
    + + +

    +A component that does not have a marshaller associated with it. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.ICalComponent
    components, properties
    +  + + + + + + + + + + +
    +Constructor Summary
    RawComponent(String name) + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    + StringgetName() + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.component.ICalComponent
    addComponent, addExperimentalComponent, addExperimentalProperty, addExperimentalProperty, addProperty, checkOptionalCardinality, checkRequiredCardinality, getComponent, getComponents, getComponents, getExperimentalComponent, getExperimentalComponents, getExperimentalComponents, getExperimentalProperties, getExperimentalProperties, getExperimentalProperty, getProperties, getProperties, getProperty, removeExperimentalComponents, removeExperimentalProperty, removeProperties, setComponent, setComponent, setExperimentalComponents, setExperimentalProperty, setExperimentalProperty, setProperty, setProperty, validate, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RawComponent

    +
    +public RawComponent(String name)
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getName

    +
    +public String getName()
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/StandardTime.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/StandardTime.html new file mode 100644 index 000000000..fbd13d847 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/StandardTime.html @@ -0,0 +1,287 @@ + + + + + + + +StandardTime (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component +
    +Class StandardTime

    +
    +java.lang.Object
    +  extended by biweekly.component.ICalComponent
    +      extended by biweekly.component.Observance
    +          extended by biweekly.component.StandardTime
    +
    +
    +
    +
    public class StandardTime
    extends Observance
    + + +

    +

    + Defines a standard time range within a VTimezone. +

    +

    + Examples: + +

    + VTimezone timezone = new VTimezone("Eastern Standard Time");
    + StandardTime standard = new StandardTime();
    + DateTimeComponents components = new DateTimeComponents(1998, 10, 25, 2, 0, 0, false);
    + standard.setDateStart(components);
    + standard.setTimezoneOffsetFrom(-4, 0);
    + standard.setTimezoneOffsetTo(-5, 0);
    + timezone.addStandardTime(standard);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.62-71
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.ICalComponent
    components, properties
    +  + + + + + + + + + + +
    +Constructor Summary
    StandardTime() + +
    +           
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.component.Observance
    addComment, addComment, addExceptionDates, addRecurrenceDates, addTimezoneName, addTimezoneName, getComments, getDateStart, getExceptionDates, getRecurrenceDates, getRecurrenceRule, getTimezoneNames, getTimezoneOffsetFrom, getTimezoneOffsetTo, setDateStart, setDateStart, setRecurrenceRule, setRecurrenceRule, setTimezoneOffsetFrom, setTimezoneOffsetFrom, setTimezoneOffsetTo, setTimezoneOffsetTo, validate
    + + + + + + + +
    Methods inherited from class biweekly.component.ICalComponent
    addComponent, addExperimentalComponent, addExperimentalProperty, addExperimentalProperty, addProperty, checkOptionalCardinality, checkRequiredCardinality, getComponent, getComponents, getComponents, getExperimentalComponent, getExperimentalComponents, getExperimentalComponents, getExperimentalProperties, getExperimentalProperties, getExperimentalProperty, getProperties, getProperties, getProperty, removeExperimentalComponents, removeExperimentalProperty, removeProperties, setComponent, setComponent, setExperimentalComponents, setExperimentalProperty, setExperimentalProperty, setProperty, setProperty, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +StandardTime

    +
    +public StandardTime()
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/VAlarm.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/VAlarm.html new file mode 100644 index 000000000..d83b3764c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/VAlarm.html @@ -0,0 +1,994 @@ + + + + + + + +VAlarm (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component +
    +Class VAlarm

    +
    +java.lang.Object
    +  extended by biweekly.component.ICalComponent
    +      extended by biweekly.component.VAlarm
    +
    +
    +
    +
    public class VAlarm
    extends ICalComponent
    + + +

    +

    + Defines a reminder for an event or to-do task. This class contains static + factory methods to aid in the construction of valid alarms. +

    + +

    + Examples: + +

    + //audio alarm
    + Trigger trigger = ...
    + Attachment sound = ...
    + VAlarm audio = VAlarm.audio(trigger, sound);
    + 
    + //display alarm
    + Trigger trigger = ...
    + String message = "Meeting at 1pm";
    + VAlarm display = VAlarm.display(trigger, message);
    + 
    + //email alarm
    + Trigger trigger = ...
    + String subject = "Reminder: Meeting at 1pm";
    + String body = "Team,\n\nThe team meeting scheduled for 1pm is about to start.  Snacks will be served!\n\nThanks,\nJohn";
    + List<String> to = Arrays.asList("janedoe@example.com", "bobsmith@example.com");
    + VAlarm email = VAlarm.email(trigger, subject, body, to);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.71-6
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.ICalComponent
    components, properties
    +  + + + + + + + + + + +
    +Constructor Summary
    VAlarm(Action action, + Trigger trigger) + +
    +          Creates a new alarm.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddAttachment(Attachment attachment) + +
    +          Adds an attachment to the alarm.
    + voidaddAttendee(Attendee attendee) + +
    +          Adds a person who will be emailed when the alarm fires (only applicable + for EMAIL alarms).
    +static VAlarmaudio(Trigger trigger) + +
    +          Creates an audio alarm.
    +static VAlarmaudio(Trigger trigger, + Attachment sound) + +
    +          Creates an audio alarm.
    +static VAlarmdisplay(Trigger trigger, + String displayText) + +
    +          Creates a display alarm.
    +static VAlarmemail(Trigger trigger, + String subject, + String body, + List<String> recipients) + +
    +          Creates an email alarm.
    +static VAlarmemail(Trigger trigger, + String subject, + String body, + String... recipients) + +
    +          Creates an email alarm.
    + ActiongetAction() + +
    +          Gets the type of action to invoke when the alarm is triggered.
    + List<Attachment>getAttachments() + +
    +          Gets any attachments that are associated with the alarm.
    + List<Attendee>getAttendees() + +
    +          Gets the people who will be emailed when the alarm fires (only applicable + for EMAIL alarms).
    + DescriptiongetDescription() + +
    +           + Gets a detailed description of the alarm.
    + DurationPropertygetDuration() + +
    +          Gets the length of the pause between alarm repetitions.
    + RepeatgetRepeat() + +
    +          Gets the number of times an alarm should be repeated after its initial + trigger.
    + SummarygetSummary() + +
    +           + Gets the summary of the alarm.
    + TriggergetTrigger() + +
    +          Gets when the alarm will be triggered.
    + voidsetAction(Action action) + +
    +          Sets the type of action to invoke when the alarm is triggered.
    + voidsetDescription(Description description) + +
    +           + Sets a detailed description of the alarm.
    + DescriptionsetDescription(String description) + +
    +           + Sets a detailed description of the alarm.
    + DurationPropertysetDuration(Duration duration) + +
    +          Sets the length of the pause between alarm repetitions.
    + voidsetDuration(DurationProperty duration) + +
    +          Sets the length of the pause between alarm repetitions.
    + voidsetRepeat(int count, + Duration pauseDuration) + +
    +          Sets the repetition information for the alarm.
    + RepeatsetRepeat(Integer count) + +
    +          Sets the number of times an alarm should be repeated after its initial + trigger.
    + voidsetRepeat(Repeat repeat) + +
    +          Sets the number of times an alarm should be repeated after its initial + trigger.
    + SummarysetSummary(String summary) + +
    +           + Sets the summary of the alarm.
    + voidsetSummary(Summary summary) + +
    +           + Sets the summary of the alarm.
    + voidsetTrigger(Trigger trigger) + +
    +          Sets when the alarm will be triggered.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the component for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.component.ICalComponent
    addComponent, addExperimentalComponent, addExperimentalProperty, addExperimentalProperty, addProperty, checkOptionalCardinality, checkRequiredCardinality, getComponent, getComponents, getComponents, getExperimentalComponent, getExperimentalComponents, getExperimentalComponents, getExperimentalProperties, getExperimentalProperties, getExperimentalProperty, getProperties, getProperties, getProperty, removeExperimentalComponents, removeExperimentalProperty, removeProperties, setComponent, setComponent, setExperimentalComponents, setExperimentalProperty, setExperimentalProperty, setProperty, setProperty, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +VAlarm

    +
    +public VAlarm(Action action,
    +              Trigger trigger)
    +
    +
    Creates a new alarm. Consider using one of the static factory methods + instead. +

    +

    +
    Parameters:
    action - the alarm action (e.g. "email")
    trigger - the trigger
    +
    + + + + + + + + +
    +Method Detail
    + +

    +audio

    +
    +public static VAlarm audio(Trigger trigger)
    +
    +
    Creates an audio alarm. +

    +

    +
    Parameters:
    trigger - the trigger +
    Returns:
    the alarm
    +
    +
    +
    + +

    +audio

    +
    +public static VAlarm audio(Trigger trigger,
    +                           Attachment sound)
    +
    +
    Creates an audio alarm. +

    +

    +
    Parameters:
    trigger - the trigger
    sound - a sound to play when the alarm triggers +
    Returns:
    the alarm
    +
    +
    +
    + +

    +display

    +
    +public static VAlarm display(Trigger trigger,
    +                             String displayText)
    +
    +
    Creates a display alarm. +

    +

    +
    Parameters:
    trigger - the trigger
    displayText - the display text +
    Returns:
    the alarm
    +
    +
    +
    + +

    +email

    +
    +public static VAlarm email(Trigger trigger,
    +                           String subject,
    +                           String body,
    +                           String... recipients)
    +
    +
    Creates an email alarm. +

    +

    +
    Parameters:
    trigger - the trigger
    subject - the email subject
    body - the email body
    recipients - the email address(es) to send the alert to +
    Returns:
    the alarm
    +
    +
    +
    + +

    +email

    +
    +public static VAlarm email(Trigger trigger,
    +                           String subject,
    +                           String body,
    +                           List<String> recipients)
    +
    +
    Creates an email alarm. +

    +

    +
    Parameters:
    trigger - the trigger
    subject - the email subject
    body - the email body
    recipients - the email address(es) to send the alert to +
    Returns:
    the alarm
    +
    +
    +
    + +

    +getAttachments

    +
    +public List<Attachment> getAttachments()
    +
    +
    Gets any attachments that are associated with the alarm. +

    +

    + +
    Returns:
    the attachments
    Specification Reference:
    RFC 5545 p.80-1
    +
    +
    +
    + +

    +addAttachment

    +
    +public void addAttachment(Attachment attachment)
    +
    +
    Adds an attachment to the alarm. Note that AUDIO alarms should only have + 1 attachment. +

    +

    +
    Parameters:
    attachment - the attachment to add
    Specification Reference:
    RFC 5545 p.80-1
    +
    +
    +
    + +

    +getDescription

    +
    +public Description getDescription()
    +
    +

    + Gets a detailed description of the alarm. The description should be more + detailed than the one provided by the Summary property. +

    +

    + This property has different meanings, depending on the alarm action: +

      +
    • DISPLAY - the display text
    • +
    • EMAIL - the body of the email message
    • +
    • all others - a general description of the alarm
    • +
    +

    +

    +

    + +
    Returns:
    the description or null if not set
    Specification Reference:
    RFC 5545 p.84-5
    +
    +
    +
    + +

    +setDescription

    +
    +public void setDescription(Description description)
    +
    +

    + Sets a detailed description of the alarm. The description should be more + detailed than the one provided by the Summary property. +

    +

    + This property has different meanings, depending on the alarm action: +

      +
    • DISPLAY - the display text
    • +
    • EMAIL - the body of the email message
    • +
    • all others - a general description of the alarm
    • +
    +

    +

    +

    +
    Parameters:
    description - the description or null to remove
    Specification Reference:
    RFC 5545 p.84-5
    +
    +
    +
    + +

    +setDescription

    +
    +public Description setDescription(String description)
    +
    +

    + Sets a detailed description of the alarm. The description should be more + detailed than the one provided by the Summary property. +

    +

    + This property has different meanings, depending on the alarm action: +

      +
    • DISPLAY - the display text
    • +
    • EMAIL - the body of the email message
    • +
    • all others - a general description of the alarm
    • +
    +

    +

    +

    +
    Parameters:
    description - the description or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.84-5
    +
    +
    +
    + +

    +getSummary

    +
    +public Summary getSummary()
    +
    +

    + Gets the summary of the alarm. +

    +

    + This property has different meanings, depending on the alarm action: +

      +
    • EMAIL - the subject line of the email
    • +
    • all others - a one-line summary of the alarm
    • +
    +

    +

    +

    + +
    Returns:
    the summary or null if not set
    Specification Reference:
    RFC 5545 p.93-4
    +
    +
    +
    + +

    +setSummary

    +
    +public void setSummary(Summary summary)
    +
    +

    + Sets the summary of the alarm. +

    +

    + This property has different meanings, depending on the alarm action: +

      +
    • EMAIL - the subject line of the email
    • +
    • all others - a one-line summary of the alarm
    • +
    +

    +

    +

    +
    Parameters:
    summary - the summary or null to remove
    Specification Reference:
    RFC 5545 p.93-4
    +
    +
    +
    + +

    +setSummary

    +
    +public Summary setSummary(String summary)
    +
    +

    + Sets the summary of the alarm. +

    +

    + This property has different meanings, depending on the alarm action: +

      +
    • EMAIL - the subject line of the email
    • +
    • all others - a one-line summary of the alarm
    • +
    +

    +

    +

    +
    Parameters:
    summary - the summary or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.93-4
    +
    +
    +
    + +

    +getAttendees

    +
    +public List<Attendee> getAttendees()
    +
    +
    Gets the people who will be emailed when the alarm fires (only applicable + for EMAIL alarms). +

    +

    + +
    Returns:
    the email recipients
    Specification Reference:
    RFC 5545 p.107-9
    +
    +
    +
    + +

    +addAttendee

    +
    +public void addAttendee(Attendee attendee)
    +
    +
    Adds a person who will be emailed when the alarm fires (only applicable + for EMAIL alarms). +

    +

    +
    Parameters:
    attendee - the email recipient
    Specification Reference:
    RFC 5545 p.107-9
    +
    +
    +
    + +

    +getAction

    +
    +public Action getAction()
    +
    +
    Gets the type of action to invoke when the alarm is triggered. +

    +

    + +
    Returns:
    the action or null if not set
    Specification Reference:
    RFC 5545 p.132-3
    +
    +
    +
    + +

    +setAction

    +
    +public void setAction(Action action)
    +
    +
    Sets the type of action to invoke when the alarm is triggered. +

    +

    +
    Parameters:
    action - the action or null to remove
    Specification Reference:
    RFC 5545 p.132-3
    +
    +
    +
    + +

    +getDuration

    +
    +public DurationProperty getDuration()
    +
    +
    Gets the length of the pause between alarm repetitions. +

    +

    + +
    Returns:
    the duration or null if not set
    Specification Reference:
    RFC 5545 p.99
    +
    +
    +
    + +

    +setDuration

    +
    +public void setDuration(DurationProperty duration)
    +
    +
    Sets the length of the pause between alarm repetitions. +

    +

    +
    Parameters:
    duration - the duration or null to remove
    Specification Reference:
    RFC 5545 p.99
    +
    +
    +
    + +

    +setDuration

    +
    +public DurationProperty setDuration(Duration duration)
    +
    +
    Sets the length of the pause between alarm repetitions. +

    +

    +
    Parameters:
    duration - the duration or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.99
    +
    +
    +
    + +

    +getRepeat

    +
    +public Repeat getRepeat()
    +
    +
    Gets the number of times an alarm should be repeated after its initial + trigger. +

    +

    + +
    Returns:
    the repeat count or null if not set
    Specification Reference:
    RFC 5545 p.133
    +
    +
    +
    + +

    +setRepeat

    +
    +public void setRepeat(Repeat repeat)
    +
    +
    Sets the number of times an alarm should be repeated after its initial + trigger. +

    +

    +
    Parameters:
    repeat - the repeat count or null to remove
    Specification Reference:
    RFC 5545 p.133
    +
    +
    +
    + +

    +setRepeat

    +
    +public Repeat setRepeat(Integer count)
    +
    +
    Sets the number of times an alarm should be repeated after its initial + trigger. +

    +

    +
    Parameters:
    count - the repeat count (e.g. "2" to repeat it two more times after + it was initially triggered, for a total of three times) or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.133
    +
    +
    +
    + +

    +setRepeat

    +
    +public void setRepeat(int count,
    +                      Duration pauseDuration)
    +
    +
    Sets the repetition information for the alarm. +

    +

    +
    Parameters:
    count - the repeat count (e.g. "2" to repeat it two more times after + it was initially triggered, for a total of three times)
    pauseDuration - the length of the pause between repeats
    Specification Reference:
    RFC 5545 p.133
    +
    +
    +
    + +

    +getTrigger

    +
    +public Trigger getTrigger()
    +
    +
    Gets when the alarm will be triggered. +

    +

    + +
    Returns:
    the trigger time or null if not set
    Specification Reference:
    RFC 5545 p.133-6
    +
    +
    +
    + +

    +setTrigger

    +
    +public void setTrigger(Trigger trigger)
    +
    +
    Sets when the alarm will be triggered. +

    +

    +
    Parameters:
    trigger - the trigger time or null to remove
    Specification Reference:
    RFC 5545 p.133-6
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalComponent
    +
    Checks the component for data consistency problems or deviations from the + spec. Meant to be overridden by child classes. +

    +

    +
    Overrides:
    validate in class ICalComponent
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the component belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/VEvent.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/VEvent.html new file mode 100644 index 000000000..5864df8a1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/VEvent.html @@ -0,0 +1,2430 @@ + + + + + + + +VEvent (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component +
    +Class VEvent

    +
    +java.lang.Object
    +  extended by biweekly.component.ICalComponent
    +      extended by biweekly.component.VEvent
    +
    +
    +
    +
    public class VEvent
    extends ICalComponent
    + + +

    +

    + Defines a scheduled activity, such as a meeting that's two hours long. +

    +

    + Examples: + +

    + VEvent event = new VEvent();
    + Date start = ...
    + event.setDateStart(start);
    + Date end = ...
    + event.setDateEnd(end);
    + event.setSummary("Team Meeting");
    + event.setLocation("Room 21C");
    + event.setCreated(new Date());
    + event.setRecurrenceRule(new Recurrence.Builder(Frequency.WEEKLY).build());
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.52-5
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.ICalComponent
    components, properties
    +  + + + + + + + + + + +
    +Constructor Summary
    VEvent() + +
    +           + Creates a new event.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddAlarm(VAlarm alarm) + +
    +          Adds an alarm to this event.
    + voidaddAttachment(Attachment attachment) + +
    +          Adds an attachment to the event.
    + voidaddAttendee(Attendee attendee) + +
    +          Adds a person who is attending the event.
    + AttendeeaddAttendee(String email) + +
    +          Adds a person who is attending the event.
    + voidaddCategories(Categories categories) + +
    +          Adds a list of "tags" or "keywords" that describe the event.
    + CategoriesaddCategories(List<String> categories) + +
    +          Adds a list of "tags" or "keywords" that describe the event.
    + CategoriesaddCategories(String... categories) + +
    +          Adds a list of "tags" or "keywords" that describe the event.
    + voidaddComment(Comment comment) + +
    +          Adds a comment to the event.
    + CommentaddComment(String comment) + +
    +          Adds a comment to the event.
    + voidaddContact(Contact contact) + +
    +          Adds a contact to the event.
    + ContactaddContact(String contact) + +
    +          Adds a contact to the event.
    + voidaddExceptionDates(ExceptionDates exceptionDates) + +
    +          Adds a list of exceptions to the recurrence rule defined in the event (if + one is defined).
    + voidaddExceptionRule(ExceptionRule exceptionRule) + +
    +           + Adds an exception for the RecurrenceRule property.
    + ExceptionRuleaddExceptionRule(Recurrence recur) + +
    +           + Adds an exception for the RecurrenceRule property.
    + voidaddRecurrenceDates(RecurrenceDates recurrenceDates) + +
    +          Adds a list of dates/periods that help define the recurrence rule of this + event (if one is defined).
    + voidaddRelatedTo(RelatedTo relatedTo) + +
    +          Adds a component that the event is related to.
    + RelatedToaddRelatedTo(String uid) + +
    +          Adds a component that the event is related to.
    + ResourcesaddResources(List<String> resources) + +
    +          Adds a list of resources that are needed for the event.
    + voidaddResources(Resources resources) + +
    +          Adds a list of resources that are needed for the event.
    + ResourcesaddResources(String... resources) + +
    +          Adds a list of resources that are needed for the event.
    + List<VAlarm>getAlarms() + +
    +          Gets the alarms that are assigned to this event.
    + List<Attachment>getAttachments() + +
    +          Gets any attachments that are associated with the event.
    + List<Attendee>getAttendees() + +
    +          Gets the people who are attending the event.
    + List<Categories>getCategories() + +
    +          Gets a list of "tags" or "keywords" that describe the event.
    + ClassificationgetClassification() + +
    +          Gets the level of sensitivity of the event data.
    + List<Comment>getComments() + +
    +          Gets the comments attached to the event.
    + List<Contact>getContacts() + +
    +          Gets the contacts associated with the event.
    + CreatedgetCreated() + +
    +          Gets the date-time that the event was initially created.
    + DateEndgetDateEnd() + +
    +          Gets the date that the event ends.
    + DateStartgetDateStart() + +
    +          Gets the date that the event starts.
    + DateTimeStampgetDateTimeStamp() + +
    +          Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the event was + last modified (the LastModified property also holds this + information).
    + DescriptiongetDescription() + +
    +          Gets a detailed description of the event.
    + DurationPropertygetDuration() + +
    +          Gets the duration of the event.
    + List<ExceptionDates>getExceptionDates() + +
    +          Gets the list of exceptions to the recurrence rule defined in the event + (if one is defined).
    + List<ExceptionRule>getExceptionRules() + +
    +           + Gets the exceptions for the RecurrenceRule property.
    + GeogetGeo() + +
    +          Gets a set of geographical coordinates.
    + LastModifiedgetLastModified() + +
    +          Gets the date-time that the event was last changed.
    + LocationgetLocation() + +
    +          Gets the physical location of the event.
    + OrganizergetOrganizer() + +
    +          Gets the organizer of the event.
    + PrioritygetPriority() + +
    +          Gets the priority of the event.
    + List<RecurrenceDates>getRecurrenceDates() + +
    +          Gets the list of dates/periods that help define the recurrence rule of + this event (if one is defined).
    + RecurrenceIdgetRecurrenceId() + +
    +          Gets the original value of the DateStart property if the event is + recurring and has been modified.
    + RecurrenceRulegetRecurrenceRule() + +
    +          Gets how often the event repeats.
    + List<RelatedTo>getRelatedTo() + +
    +          Gets the components that the event is related to.
    + RequestStatusgetRequestStatus() + +
    +          Gets the response to a scheduling request.
    + List<Resources>getResources() + +
    +          Gets the resources that are needed for the event.
    + SequencegetSequence() + +
    +          Gets the revision number of the event.
    + StatusgetStatus() + +
    +          Gets the status of the event.
    + SummarygetSummary() + +
    +          Gets the summary of the event.
    + TransparencygetTransparency() + +
    +          Gets whether an event is visible to free/busy time searches.
    + UidgetUid() + +
    +          Gets the unique identifier for this event.
    + UrlgetUrl() + +
    +          Gets a URL to a resource that contains additional information about the + event.
    + voidincrementSequence() + +
    +          Increments the revision number of the event.
    + voidsetClassification(Classification classification) + +
    +          Sets the level of sensitivity of the event data.
    + ClassificationsetClassification(String classification) + +
    +          Sets the level of sensitivity of the event data.
    + voidsetCreated(Created created) + +
    +          Sets the date-time that the event was initially created.
    + CreatedsetCreated(Date created) + +
    +          Sets the date-time that the event was initially created.
    + DateEndsetDateEnd(Date dateEnd) + +
    +          Sets the date that the event ends.
    + voidsetDateEnd(DateEnd dateEnd) + +
    +          Sets the date that the event ends.
    + DateStartsetDateStart(Date dateStart) + +
    +          Sets the date that the event starts (required if no Method + property is defined).
    + voidsetDateStart(DateStart dateStart) + +
    +          Sets the date that the event starts (required if no Method + property is defined).
    + DateTimeStampsetDateTimeStamp(Date dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the event was + last modified (the LastModified property also holds this + information).
    + voidsetDateTimeStamp(DateTimeStamp dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the event was + last modified (the LastModified property also holds this + information).
    + voidsetDescription(Description description) + +
    +          Sets a detailed description of the event.
    + DescriptionsetDescription(String description) + +
    +          Sets a detailed description of the event.
    + DurationPropertysetDuration(Duration duration) + +
    +          Sets the duration of the event.
    + voidsetDuration(DurationProperty duration) + +
    +          Sets the duration of the event.
    + voidsetGeo(Geo geo) + +
    +          Sets a set of geographical coordinates.
    + LastModifiedsetLastModified(Date lastModified) + +
    +          Sets the date-time that the event was last changed.
    + voidsetLastModified(LastModified lastModified) + +
    +          Sets the date-time that event was last changed.
    + voidsetLocation(Location location) + +
    +          Sets the physical location of the event.
    + LocationsetLocation(String location) + +
    +          Sets the physical location of the event.
    + voidsetOrganizer(Organizer organizer) + +
    +          Sets the organizer of the event.
    + OrganizersetOrganizer(String email) + +
    +          Sets the organizer of the event.
    + PrioritysetPriority(Integer priority) + +
    +          Sets the priority of the event.
    + voidsetPriority(Priority priority) + +
    +          Sets the priority of the event.
    + RecurrenceIdsetRecurrenceId(Date originalStartDate) + +
    +          Sets the original value of the DateStart property if the event is + recurring and has been modified.
    + voidsetRecurrenceId(RecurrenceId recurrenceId) + +
    +          Sets the original value of the DateStart property if the event is + recurring and has been modified.
    + RecurrenceRulesetRecurrenceRule(Recurrence recur) + +
    +          Sets how often the event repeats.
    + voidsetRecurrenceRule(RecurrenceRule recurrenceRule) + +
    +          Sets how often the event repeats.
    + voidsetRequestStatus(RequestStatus requestStatus) + +
    +          Sets the response to a scheduling request.
    + SequencesetSequence(Integer sequence) + +
    +          Sets the revision number of the event.
    + voidsetSequence(Sequence sequence) + +
    +          Sets the revision number of the event.
    + voidsetStatus(Status status) + +
    +          Sets the status of the event.
    + SummarysetSummary(String summary) + +
    +          Sets the summary of the event.
    + voidsetSummary(Summary summary) + +
    +          Sets the summary of the event.
    + TransparencysetTransparency(Boolean transparent) + +
    +          Sets whether an event is visible to free/busy time searches.
    + voidsetTransparency(Transparency transparency) + +
    +          Sets whether an event is visible to free/busy time searches.
    + UidsetUid(String uid) + +
    +          Sets the unique identifier for this event.
    + voidsetUid(Uid uid) + +
    +          Sets the unique identifier for this event.
    + UrlsetUrl(String url) + +
    +          Sets a URL to a resource that contains additional information about the + event.
    + voidsetUrl(Url url) + +
    +          Sets a URL to a resource that contains additional information about the + event.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the component for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.component.ICalComponent
    addComponent, addExperimentalComponent, addExperimentalProperty, addExperimentalProperty, addProperty, checkOptionalCardinality, checkRequiredCardinality, getComponent, getComponents, getComponents, getExperimentalComponent, getExperimentalComponents, getExperimentalComponents, getExperimentalProperties, getExperimentalProperties, getExperimentalProperty, getProperties, getProperties, getProperty, removeExperimentalComponents, removeExperimentalProperty, removeProperties, setComponent, setComponent, setExperimentalComponents, setExperimentalProperty, setExperimentalProperty, setProperty, setProperty, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +VEvent

    +
    +public VEvent()
    +
    +

    + Creates a new event. +

    +

    + The following properties are auto-generated on object creation. These + properties must be present in order for the event to be valid: +

    +

    +

    +

    + + + + + + + + +
    +Method Detail
    + +

    +getUid

    +
    +public Uid getUid()
    +
    +
    Gets the unique identifier for this event. This component object comes + populated with a UID on creation. This is a required property. +

    +

    + +
    Returns:
    the UID or null if not set
    Specification Reference:
    RFC 5545 p.117-8
    +
    +
    +
    + +

    +setUid

    +
    +public void setUid(Uid uid)
    +
    +
    Sets the unique identifier for this event. This component object comes + populated with a UID on creation. This is a required property. +

    +

    +
    Parameters:
    uid - the UID or null to remove
    Specification Reference:
    RFC 5545 p.117-8
    +
    +
    +
    + +

    +setUid

    +
    +public Uid setUid(String uid)
    +
    +
    Sets the unique identifier for this event. This component object comes + populated with a UID on creation. This is a required property. +

    +

    +
    Parameters:
    uid - the UID or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.117-8
    +
    +
    +
    + +

    +getDateTimeStamp

    +
    +public DateTimeStamp getDateTimeStamp()
    +
    +
    Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the event was + last modified (the LastModified property also holds this + information). This event object comes populated with a + DateTimeStamp property that is set to the current time. This is a + required property. +

    +

    + +
    Returns:
    the date time stamp or null if not set
    Specification Reference:
    RFC 5545 p.137-8
    +
    +
    +
    + +

    +setDateTimeStamp

    +
    +public void setDateTimeStamp(DateTimeStamp dateTimeStamp)
    +
    +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the event was + last modified (the LastModified property also holds this + information). This event object comes populated with a + DateTimeStamp property that is set to the current time. This is a + required property. +

    +

    +
    Parameters:
    dateTimeStamp - the date time stamp or null to remove
    Specification Reference:
    RFC 5545 p.137-8
    +
    +
    +
    + +

    +setDateTimeStamp

    +
    +public DateTimeStamp setDateTimeStamp(Date dateTimeStamp)
    +
    +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the event was + last modified (the LastModified property also holds this + information). This event object comes populated with a + DateTimeStamp property that is set to the current time. This is a + required property. +

    +

    +
    Parameters:
    dateTimeStamp - the date time stamp or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.137-8
    +
    +
    +
    + +

    +getDateStart

    +
    +public DateStart getDateStart()
    +
    +
    Gets the date that the event starts. +

    +

    + +
    Returns:
    the start date or null if not set
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +setDateStart

    +
    +public void setDateStart(DateStart dateStart)
    +
    +
    Sets the date that the event starts (required if no Method + property is defined). +

    +

    +
    Parameters:
    dateStart - the start date or null to remove
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +setDateStart

    +
    +public DateStart setDateStart(Date dateStart)
    +
    +
    Sets the date that the event starts (required if no Method + property is defined). +

    +

    +
    Parameters:
    dateStart - the start date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +getClassification

    +
    +public Classification getClassification()
    +
    +
    Gets the level of sensitivity of the event data. If not specified, the + data within the event should be considered "public". +

    +

    + +
    Returns:
    the classification level or null if not set
    Specification Reference:
    RFC 5545 p.82-3
    +
    +
    +
    + +

    +setClassification

    +
    +public void setClassification(Classification classification)
    +
    +
    Sets the level of sensitivity of the event data. If not specified, the + data within the event should be considered "public". +

    +

    +
    Parameters:
    classification - the classification level or null to remove
    Specification Reference:
    RFC 5545 p.82-3
    +
    +
    +
    + +

    +setClassification

    +
    +public Classification setClassification(String classification)
    +
    +
    Sets the level of sensitivity of the event data. If not specified, the + data within the event should be considered "public". +

    +

    +
    Parameters:
    classification - the classification level (e.g. "CONFIDENTIAL") or + null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.82-3
    +
    +
    +
    + +

    +getDescription

    +
    +public Description getDescription()
    +
    +
    Gets a detailed description of the event. The description should be more + detailed than the one provided by the Summary property. +

    +

    + +
    Returns:
    the description or null if not set
    Specification Reference:
    RFC 5545 p.84-5
    +
    +
    +
    + +

    +setDescription

    +
    +public void setDescription(Description description)
    +
    +
    Sets a detailed description of the event. The description should be more + detailed than the one provided by the Summary property. +

    +

    +
    Parameters:
    description - the description or null to remove
    Specification Reference:
    RFC 5545 p.84-5
    +
    +
    +
    + +

    +setDescription

    +
    +public Description setDescription(String description)
    +
    +
    Sets a detailed description of the event. The description should be more + detailed than the one provided by the Summary property. +

    +

    +
    Parameters:
    description - the description or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.84-5
    +
    +
    +
    + +

    +getGeo

    +
    +public Geo getGeo()
    +
    +
    Gets a set of geographical coordinates. +

    +

    + +
    Returns:
    the geographical coordinates or null if not set
    Specification Reference:
    RFC 5545 p.85-7
    +
    +
    +
    + +

    +setGeo

    +
    +public void setGeo(Geo geo)
    +
    +
    Sets a set of geographical coordinates. +

    +

    +
    Parameters:
    geo - the geographical coordinates or null to remove
    Specification Reference:
    RFC 5545 p.85-7
    +
    +
    +
    + +

    +getLocation

    +
    +public Location getLocation()
    +
    +
    Gets the physical location of the event. +

    +

    + +
    Returns:
    the location or null if not set
    Specification Reference:
    RFC 5545 p.87-8
    +
    +
    +
    + +

    +setLocation

    +
    +public void setLocation(Location location)
    +
    +
    Sets the physical location of the event. +

    +

    +
    Parameters:
    location - the location or null to remove
    Specification Reference:
    RFC 5545 p.87-8
    +
    +
    +
    + +

    +setLocation

    +
    +public Location setLocation(String location)
    +
    +
    Sets the physical location of the event. +

    +

    +
    Parameters:
    location - the location (e.g. "Room 101") or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.87-8
    +
    +
    +
    + +

    +getPriority

    +
    +public Priority getPriority()
    +
    +
    Gets the priority of the event. +

    +

    + +
    Returns:
    the priority or null if not set
    Specification Reference:
    RFC 5545 p.89-90
    +
    +
    +
    + +

    +setPriority

    +
    +public void setPriority(Priority priority)
    +
    +
    Sets the priority of the event. +

    +

    +
    Parameters:
    priority - the priority or null to remove
    Specification Reference:
    RFC 5545 p.89-90
    +
    +
    +
    + +

    +setPriority

    +
    +public Priority setPriority(Integer priority)
    +
    +
    Sets the priority of the event. +

    +

    +
    Parameters:
    priority - the priority ("0" is undefined, "1" is the highest, "9" + is the lowest) or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.89-90
    +
    +
    +
    + +

    +getStatus

    +
    +public Status getStatus()
    +
    +
    Gets the status of the event. +

    +

    + +
    Returns:
    the status or null if not set
    Specification Reference:
    RFC 5545 p.92-3
    +
    +
    +
    + +

    +setStatus

    +
    +public void setStatus(Status status)
    +
    +
    Sets the status of the event. +

    + Valid event status codes are: +

      +
    • TENTATIVE
    • +
    • CONFIRMED
    • +
    • CANCELLED
    • +
    +

    +

    +

    +
    Parameters:
    status - the status or null to remove
    Specification Reference:
    RFC 5545 p.92-3
    +
    +
    +
    + +

    +getSummary

    +
    +public Summary getSummary()
    +
    +
    Gets the summary of the event. +

    +

    + +
    Returns:
    the summary or null if not set
    Specification Reference:
    RFC 5545 p.93-4
    +
    +
    +
    + +

    +setSummary

    +
    +public void setSummary(Summary summary)
    +
    +
    Sets the summary of the event. +

    +

    +
    Parameters:
    summary - the summary or null to remove
    Specification Reference:
    RFC 5545 p.93-4
    +
    +
    +
    + +

    +setSummary

    +
    +public Summary setSummary(String summary)
    +
    +
    Sets the summary of the event. +

    +

    +
    Parameters:
    summary - the summary or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.93-4
    +
    +
    +
    + +

    +getTransparency

    +
    +public Transparency getTransparency()
    +
    +
    Gets whether an event is visible to free/busy time searches. If the event + does not have this property, it should be considered visible ("opaque"). +

    +

    + +
    Returns:
    the transparency or null if not set
    Specification Reference:
    RFC 5545 p.101-2
    +
    +
    +
    + +

    +setTransparency

    +
    +public void setTransparency(Transparency transparency)
    +
    +
    Sets whether an event is visible to free/busy time searches. +

    +

    +
    Parameters:
    transparency - the transparency or null to remove
    Specification Reference:
    RFC 5545 p.101-2
    +
    +
    +
    + +

    +setTransparency

    +
    +public Transparency setTransparency(Boolean transparent)
    +
    +
    Sets whether an event is visible to free/busy time searches. +

    +

    +
    Parameters:
    transparent - true to hide the event, false to make it visible it, + or null to remove the property +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.101-2
    +
    +
    +
    + +

    +getOrganizer

    +
    +public Organizer getOrganizer()
    +
    +
    Gets the organizer of the event. +

    +

    + +
    Returns:
    the organizer or null if not set
    Specification Reference:
    RFC 5545 p.111-2
    +
    +
    +
    + +

    +setOrganizer

    +
    +public void setOrganizer(Organizer organizer)
    +
    +
    Sets the organizer of the event. +

    +

    +
    Parameters:
    organizer - the organizer or null to remove
    Specification Reference:
    RFC 5545 p.111-2
    +
    +
    +
    + +

    +setOrganizer

    +
    +public Organizer setOrganizer(String email)
    +
    +
    Sets the organizer of the event. +

    +

    +
    Parameters:
    email - the organizer's email address (e.g. "johndoe@example.com") + or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.111-2
    +
    +
    +
    + +

    +getRecurrenceId

    +
    +public RecurrenceId getRecurrenceId()
    +
    +
    Gets the original value of the DateStart property if the event is + recurring and has been modified. Used in conjunction with the Uid + and Sequence properties to uniquely identify a recurrence + instance. +

    +

    + +
    Returns:
    the recurrence ID or null if not set
    Specification Reference:
    RFC 5545 p.112-4
    +
    +
    +
    + +

    +setRecurrenceId

    +
    +public void setRecurrenceId(RecurrenceId recurrenceId)
    +
    +
    Sets the original value of the DateStart property if the event is + recurring and has been modified. Used in conjunction with the Uid + and Sequence properties to uniquely identify a recurrence + instance. +

    +

    +
    Parameters:
    recurrenceId - the recurrence ID or null to remove
    Specification Reference:
    RFC 5545 p.112-4
    +
    +
    +
    + +

    +setRecurrenceId

    +
    +public RecurrenceId setRecurrenceId(Date originalStartDate)
    +
    +
    Sets the original value of the DateStart property if the event is + recurring and has been modified. Used in conjunction with the Uid + and Sequence properties to uniquely identify a recurrence + instance. +

    +

    +
    Parameters:
    originalStartDate - the original start date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.112-4
    +
    +
    +
    + +

    +getUrl

    +
    +public Url getUrl()
    +
    +
    Gets a URL to a resource that contains additional information about the + event. +

    +

    + +
    Returns:
    the URL or null if not set
    Specification Reference:
    RFC 5545 p.116-7
    +
    +
    +
    + +

    +setUrl

    +
    +public void setUrl(Url url)
    +
    +
    Sets a URL to a resource that contains additional information about the + event. +

    +

    +
    Parameters:
    url - the URL or null to remove
    Specification Reference:
    RFC 5545 p.116-7
    +
    +
    +
    + +

    +setUrl

    +
    +public Url setUrl(String url)
    +
    +
    Sets a URL to a resource that contains additional information about the + event. +

    +

    +
    Parameters:
    url - the URL (e.g. "http://example.com/resource.ics") or null to + remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.116-7
    +
    +
    +
    + +

    +getRecurrenceRule

    +
    +public RecurrenceRule getRecurrenceRule()
    +
    +
    Gets how often the event repeats. +

    +

    + +
    Returns:
    the recurrence rule or null if not set
    Specification Reference:
    RFC 5545 p.122-32
    +
    +
    +
    + +

    +setRecurrenceRule

    +
    +public RecurrenceRule setRecurrenceRule(Recurrence recur)
    +
    +
    Sets how often the event repeats. +

    +

    +
    Parameters:
    recur - the recurrence rule or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.122-32
    +
    +
    +
    + +

    +setRecurrenceRule

    +
    +public void setRecurrenceRule(RecurrenceRule recurrenceRule)
    +
    +
    Sets how often the event repeats. +

    +

    +
    Parameters:
    recurrenceRule - the recurrence rule or null to remove
    Specification Reference:
    RFC 5545 p.122-32
    +
    +
    +
    + +

    +getDateEnd

    +
    +public DateEnd getDateEnd()
    +
    +
    Gets the date that the event ends. +

    +

    + +
    Returns:
    the end date or null if not set
    Specification Reference:
    RFC 5545 p.95-6
    +
    +
    +
    + +

    +setDateEnd

    +
    +public void setDateEnd(DateEnd dateEnd)
    +
    +
    Sets the date that the event ends. This must NOT be set if a + DurationProperty is defined. +

    +

    +
    Parameters:
    dateEnd - the end date or null to remove
    Specification Reference:
    RFC 5545 p.95-6
    +
    +
    +
    + +

    +setDateEnd

    +
    +public DateEnd setDateEnd(Date dateEnd)
    +
    +
    Sets the date that the event ends. This must NOT be set if a + DurationProperty is defined. +

    +

    +
    Parameters:
    dateEnd - the end date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.95-6
    +
    +
    +
    + +

    +getDuration

    +
    +public DurationProperty getDuration()
    +
    +
    Gets the duration of the event. +

    +

    + +
    Returns:
    the duration or null if not set
    Specification Reference:
    RFC 5545 p.99
    +
    +
    +
    + +

    +setDuration

    +
    +public void setDuration(DurationProperty duration)
    +
    +
    Sets the duration of the event. This must NOT be set if a DateEnd + is defined. +

    +

    +
    Parameters:
    duration - the duration or null to remove
    Specification Reference:
    RFC 5545 p.99
    +
    +
    +
    + +

    +setDuration

    +
    +public DurationProperty setDuration(Duration duration)
    +
    +
    Sets the duration of the event. This must NOT be set if a DateEnd + is defined. +

    +

    +
    Parameters:
    duration - the duration or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.99
    +
    +
    +
    + +

    +getCreated

    +
    +public Created getCreated()
    +
    +
    Gets the date-time that the event was initially created. +

    +

    + +
    Returns:
    the creation date-time or null if not set
    Specification Reference:
    RFC 5545 p.136
    +
    +
    +
    + +

    +setCreated

    +
    +public void setCreated(Created created)
    +
    +
    Sets the date-time that the event was initially created. +

    +

    +
    Parameters:
    created - the creation date-time or null to remove
    Specification Reference:
    RFC 5545 p.136
    +
    +
    +
    + +

    +setCreated

    +
    +public Created setCreated(Date created)
    +
    +
    Sets the date-time that the event was initially created. +

    +

    +
    Parameters:
    created - the creation date-time or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.136
    +
    +
    +
    + +

    +getLastModified

    +
    +public LastModified getLastModified()
    +
    +
    Gets the date-time that the event was last changed. +

    +

    + +
    Returns:
    the last modified date or null if not set
    Specification Reference:
    RFC 5545 p.138
    +
    +
    +
    + +

    +setLastModified

    +
    +public void setLastModified(LastModified lastModified)
    +
    +
    Sets the date-time that event was last changed. +

    +

    +
    Parameters:
    lastModified - the last modified date or null to remove
    Specification Reference:
    RFC 5545 p.138
    +
    +
    +
    + +

    +setLastModified

    +
    +public LastModified setLastModified(Date lastModified)
    +
    +
    Sets the date-time that the event was last changed. +

    +

    +
    Parameters:
    lastModified - the last modified date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.138
    +
    +
    +
    + +

    +getSequence

    +
    +public Sequence getSequence()
    +
    +
    Gets the revision number of the event. The organizer can increment this + number every time he or she makes a significant change. +

    +

    + +
    Returns:
    the sequence number
    Specification Reference:
    RFC 5545 p.138-9
    +
    +
    +
    + +

    +setSequence

    +
    +public void setSequence(Sequence sequence)
    +
    +
    Sets the revision number of the event. The organizer can increment this + number every time he or she makes a significant change. +

    +

    +
    Parameters:
    sequence - the sequence number
    Specification Reference:
    RFC 5545 p.138-9
    +
    +
    +
    + +

    +setSequence

    +
    +public Sequence setSequence(Integer sequence)
    +
    +
    Sets the revision number of the event. The organizer can increment this + number every time he or she makes a significant change. +

    +

    +
    Parameters:
    sequence - the sequence number +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.138-9
    +
    +
    +
    + +

    +incrementSequence

    +
    +public void incrementSequence()
    +
    +
    Increments the revision number of the event. The organizer can increment + this number every time he or she makes a significant change. +

    +

    +
    Specification Reference:
    RFC 5545 p.138-9
    +
    +
    +
    + +

    +getAttachments

    +
    +public List<Attachment> getAttachments()
    +
    +
    Gets any attachments that are associated with the event. +

    +

    + +
    Returns:
    the attachments
    Specification Reference:
    RFC 5545 p.80-1
    +
    +
    +
    + +

    +addAttachment

    +
    +public void addAttachment(Attachment attachment)
    +
    +
    Adds an attachment to the event. +

    +

    +
    Parameters:
    attachment - the attachment to add
    Specification Reference:
    RFC 5545 p.80-1
    +
    +
    +
    + +

    +getAttendees

    +
    +public List<Attendee> getAttendees()
    +
    +
    Gets the people who are attending the event. +

    +

    + +
    Returns:
    the attendees
    Specification Reference:
    RFC 5545 p.107-9
    +
    +
    +
    + +

    +addAttendee

    +
    +public void addAttendee(Attendee attendee)
    +
    +
    Adds a person who is attending the event. +

    +

    +
    Parameters:
    attendee - the attendee
    Specification Reference:
    RFC 5545 p.107-9
    +
    +
    +
    + +

    +addAttendee

    +
    +public Attendee addAttendee(String email)
    +
    +
    Adds a person who is attending the event. +

    +

    +
    Parameters:
    email - the attendee's email address +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.107-9
    +
    +
    +
    + +

    +getCategories

    +
    +public List<Categories> getCategories()
    +
    +
    Gets a list of "tags" or "keywords" that describe the event. +

    +

    + +
    Returns:
    the categories
    Specification Reference:
    RFC 5545 p.81-2
    +
    +
    +
    + +

    +addCategories

    +
    +public void addCategories(Categories categories)
    +
    +
    Adds a list of "tags" or "keywords" that describe the event. Note that a + single property can hold multiple keywords. +

    +

    +
    Parameters:
    categories - the categories to add
    Specification Reference:
    RFC 5545 p.81-2
    +
    +
    +
    + +

    +addCategories

    +
    +public Categories addCategories(String... categories)
    +
    +
    Adds a list of "tags" or "keywords" that describe the event. +

    +

    +
    Parameters:
    categories - the categories to add +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.81-2
    +
    +
    +
    + +

    +addCategories

    +
    +public Categories addCategories(List<String> categories)
    +
    +
    Adds a list of "tags" or "keywords" that describe the event. +

    +

    +
    Parameters:
    categories - the categories to add +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.81-2
    +
    +
    +
    + +

    +getComments

    +
    +public List<Comment> getComments()
    +
    +
    Gets the comments attached to the event. +

    +

    + +
    Returns:
    the comments
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +addComment

    +
    +public void addComment(Comment comment)
    +
    +
    Adds a comment to the event. +

    +

    +
    Parameters:
    comment - the comment to add
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +addComment

    +
    +public Comment addComment(String comment)
    +
    +
    Adds a comment to the event. +

    +

    +
    Parameters:
    comment - the comment to add +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +getContacts

    +
    +public List<Contact> getContacts()
    +
    +
    Gets the contacts associated with the event. +

    +

    + +
    Returns:
    the contacts
    Specification Reference:
    RFC 5545 p.109-11
    +
    +
    +
    + +

    +addContact

    +
    +public void addContact(Contact contact)
    +
    +
    Adds a contact to the event. +

    +

    +
    Parameters:
    contact - the contact
    Specification Reference:
    RFC 5545 p.109-11
    +
    +
    +
    + +

    +addContact

    +
    +public Contact addContact(String contact)
    +
    +
    Adds a contact to the event. +

    +

    +
    Parameters:
    contact - the contact (e.g. "ACME Co - (123) 555-1234") +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.109-11
    +
    +
    +
    + +

    +getExceptionDates

    +
    +public List<ExceptionDates> getExceptionDates()
    +
    +
    Gets the list of exceptions to the recurrence rule defined in the event + (if one is defined). +

    +

    + +
    Returns:
    the list of exceptions
    Specification Reference:
    RFC 5545 p.118-20
    +
    +
    +
    + +

    +addExceptionDates

    +
    +public void addExceptionDates(ExceptionDates exceptionDates)
    +
    +
    Adds a list of exceptions to the recurrence rule defined in the event (if + one is defined). Note that this property can contain multiple dates. +

    +

    +
    Parameters:
    exceptionDates - the list of exceptions
    Specification Reference:
    RFC 5545 p.118-20
    +
    +
    +
    + +

    +getRequestStatus

    +
    +public RequestStatus getRequestStatus()
    +
    +
    Gets the response to a scheduling request. +

    +

    + +
    Returns:
    the response
    Specification Reference:
    RFC 5545 p.141-3
    +
    +
    +
    + +

    +setRequestStatus

    +
    +public void setRequestStatus(RequestStatus requestStatus)
    +
    +
    Sets the response to a scheduling request. +

    +

    +
    Parameters:
    requestStatus - the response
    Specification Reference:
    RFC 5545 p.141-3
    +
    +
    +
    + +

    +getRelatedTo

    +
    +public List<RelatedTo> getRelatedTo()
    +
    +
    Gets the components that the event is related to. +

    +

    + +
    Returns:
    the relationships
    Specification Reference:
    RFC 5545 p.115-6
    +
    +
    +
    + +

    +addRelatedTo

    +
    +public void addRelatedTo(RelatedTo relatedTo)
    +
    +
    Adds a component that the event is related to. +

    +

    +
    Parameters:
    relatedTo - the relationship
    Specification Reference:
    RFC 5545 p.115-6
    +
    +
    +
    + +

    +addRelatedTo

    +
    +public RelatedTo addRelatedTo(String uid)
    +
    +
    Adds a component that the event is related to. +

    +

    +
    Parameters:
    uid - the UID of the other component +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.115-6
    +
    +
    +
    + +

    +getResources

    +
    +public List<Resources> getResources()
    +
    +
    Gets the resources that are needed for the event. +

    +

    + +
    Returns:
    the resources
    Specification Reference:
    RFC 5545 p.91
    +
    +
    +
    + +

    +addResources

    +
    +public void addResources(Resources resources)
    +
    +
    Adds a list of resources that are needed for the event. Note that a + single property can hold multiple resources. +

    +

    +
    Parameters:
    resources - the resources to add
    Specification Reference:
    RFC 5545 p.91
    +
    +
    +
    + +

    +addResources

    +
    +public Resources addResources(String... resources)
    +
    +
    Adds a list of resources that are needed for the event. +

    +

    +
    Parameters:
    resources - the resources to add (e.g. "easel", "projector") +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.91
    +
    +
    +
    + +

    +addResources

    +
    +public Resources addResources(List<String> resources)
    +
    +
    Adds a list of resources that are needed for the event. +

    +

    +
    Parameters:
    resources - the resources to add (e.g. "easel", "projector") +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.91
    +
    +
    +
    + +

    +getRecurrenceDates

    +
    +public List<RecurrenceDates> getRecurrenceDates()
    +
    +
    Gets the list of dates/periods that help define the recurrence rule of + this event (if one is defined). +

    +

    + +
    Returns:
    the recurrence dates
    Specification Reference:
    RFC 5545 p.120-2
    +
    +
    +
    + +

    +addRecurrenceDates

    +
    +public void addRecurrenceDates(RecurrenceDates recurrenceDates)
    +
    +
    Adds a list of dates/periods that help define the recurrence rule of this + event (if one is defined). +

    +

    +
    Parameters:
    recurrenceDates - the recurrence dates
    Specification Reference:
    RFC 5545 p.120-2
    +
    +
    +
    + +

    +getAlarms

    +
    +public List<VAlarm> getAlarms()
    +
    +
    Gets the alarms that are assigned to this event. +

    +

    + +
    Returns:
    the alarms
    Specification Reference:
    RFC 5545 p.71-6
    +
    +
    +
    + +

    +addAlarm

    +
    +public void addAlarm(VAlarm alarm)
    +
    +
    Adds an alarm to this event. +

    +

    +
    Parameters:
    alarm - the alarm
    Specification Reference:
    RFC 5545 p.71-6
    +
    +
    +
    + +

    +getExceptionRules

    +
    +public List<ExceptionRule> getExceptionRules()
    +
    +

    + Gets the exceptions for the RecurrenceRule property. +

    +

    + Note that this property has been removed from the latest version of the + iCal specification. Its use should be avoided. +

    +

    +

    + +
    Returns:
    the exception rules
    Specification Reference:
    RFC 2445 p.114-15
    +
    +
    +
    + +

    +addExceptionRule

    +
    +public ExceptionRule addExceptionRule(Recurrence recur)
    +
    +

    + Adds an exception for the RecurrenceRule property. +

    +

    + Note that this property has been removed from the latest version of the + iCal specification. Its use should be avoided. +

    +

    +

    +
    Parameters:
    recur - the exception rule to add +
    Returns:
    the property that was created
    Specification Reference:
    RFC 2445 p.114-15
    +
    +
    +
    + +

    +addExceptionRule

    +
    +public void addExceptionRule(ExceptionRule exceptionRule)
    +
    +

    + Adds an exception for the RecurrenceRule property. +

    +

    + Note that this property has been removed from the latest version of the + iCal specification. Its use should be avoided. +

    +

    +

    +
    Parameters:
    exceptionRule - the exception rule to add
    Specification Reference:
    RFC 2445 p.114-15
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalComponent
    +
    Checks the component for data consistency problems or deviations from the + spec. Meant to be overridden by child classes. +

    +

    +
    Overrides:
    validate in class ICalComponent
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the component belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/VFreeBusy.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/VFreeBusy.html new file mode 100644 index 000000000..1c5e8dd70 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/VFreeBusy.html @@ -0,0 +1,1087 @@ + + + + + + + +VFreeBusy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component +
    +Class VFreeBusy

    +
    +java.lang.Object
    +  extended by biweekly.component.ICalComponent
    +      extended by biweekly.component.VFreeBusy
    +
    +
    +
    +
    public class VFreeBusy
    extends ICalComponent
    + + +

    +

    + Defines a collection of time ranges that describe when the person is + available or unavailable. +

    +

    + Examples: + +

    + VFreeBusy freebusy = new VFreeBusy();
    + 
    + Date start = ...
    + Date end = ...
    + freebusy.addFreeBusy(FreeBusyType.FREE, start, end);
    + 
    + start = ...
    + Duration duration = Duration.builder().hours(2).build();
    + freebusy.addFreeBusy(FreeBusyType.BUSY, start, duration);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.59-62
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.ICalComponent
    components, properties
    +  + + + + + + + + + + +
    +Constructor Summary
    VFreeBusy() + +
    +           + Creates a new free/busy component.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddAttendee(Attendee attendee) + +
    +          Adds a person who is involved in the free/busy entry.
    + voidaddComment(Comment comment) + +
    +          Adds a comment to the free/busy entry.
    + CommentaddComment(String comment) + +
    +          Adds a comment to the free/busy entry.
    + ContactaddContact(String contact) + +
    +          Sets the contact for the free/busy entry.
    + voidaddFreeBusy(FreeBusy freeBusy) + +
    +          Adds a list of time periods for which the person is free or busy (for + example, "free" between 1pm-3pm and 4pm-5pm).
    + FreeBusyaddFreeBusy(FreeBusyType type, + Date start, + Date end) + +
    +          Adds a single time period for which the person is free or busy (for + example, "free" between 1pm-3pm).
    + FreeBusyaddFreeBusy(FreeBusyType type, + Date start, + Duration duration) + +
    +          Adds a single time period for which the person is free or busy (for + example, "free" for 2 hours after 1pm).
    + List<Attendee>getAttendees() + +
    +          Gets the people who are involved in the free/busy entry.
    + List<Comment>getComments() + +
    +          Gets the comments attached to the free/busy entry.
    + ContactgetContact() + +
    +          Gets the contact associated with the free/busy entry.
    + DateEndgetDateEnd() + +
    +          Gets the date that the free/busy entry ends.
    + DateStartgetDateStart() + +
    +          Gets the date that the free/busy entry starts.
    + DateTimeStampgetDateTimeStamp() + +
    +          Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the free/busy + entry was last modified (the LastModified property also holds + this information).
    + List<FreeBusy>getFreeBusy() + +
    +          Gets the person's availabilities over certain time periods (for example, + "free" between 1pm-3pm, but "busy" between 3pm-4pm).
    + OrganizergetOrganizer() + +
    +          Gets the person requesting the free/busy time.
    + RequestStatusgetRequestStatus() + +
    +          Gets the response to a scheduling request.
    + UidgetUid() + +
    +          Gets the unique identifier for this free/busy entry.
    + UrlgetUrl() + +
    +          Gets a URL to a resource that contains additional information about the + free/busy entry.
    + voidsetContact(Contact contact) + +
    +          Sets the contact for the free/busy entry.
    + DateEndsetDateEnd(Date dateEnd) + +
    +          Sets the date that the free/busy entry ends.
    + voidsetDateEnd(DateEnd dateEnd) + +
    +          Sets the date that the free/busy entry ends.
    + DateStartsetDateStart(Date dateStart) + +
    +          Sets the date that the free/busy entry starts.
    + voidsetDateStart(DateStart dateStart) + +
    +          Sets the date that the free/busy entry starts.
    + DateTimeStampsetDateTimeStamp(Date dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the free/busy + entry was last modified (the LastModified property also holds + this information).
    + voidsetDateTimeStamp(DateTimeStamp dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the free/busy + entry was last modified (the LastModified property also holds + this information).
    + voidsetOrganizer(Organizer organizer) + +
    +          Sets the person requesting the free/busy time.
    + OrganizersetOrganizer(String email) + +
    +          Sets the person requesting the free/busy time.
    + voidsetRequestStatus(RequestStatus requestStatus) + +
    +          Sets the response to a scheduling request.
    + UidsetUid(String uid) + +
    +          Sets the unique identifier for this free/busy entry.
    + voidsetUid(Uid uid) + +
    +          Sets the unique identifier for this free/busy entry.
    + UrlsetUrl(String url) + +
    +          Sets a URL to a resource that contains additional information about the + free/busy entry.
    + voidsetUrl(Url url) + +
    +          Sets a URL to a resource that contains additional information about the + free/busy entry.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the component for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.component.ICalComponent
    addComponent, addExperimentalComponent, addExperimentalProperty, addExperimentalProperty, addProperty, checkOptionalCardinality, checkRequiredCardinality, getComponent, getComponents, getComponents, getExperimentalComponent, getExperimentalComponents, getExperimentalComponents, getExperimentalProperties, getExperimentalProperties, getExperimentalProperty, getProperties, getProperties, getProperty, removeExperimentalComponents, removeExperimentalProperty, removeProperties, setComponent, setComponent, setExperimentalComponents, setExperimentalProperty, setExperimentalProperty, setProperty, setProperty, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +VFreeBusy

    +
    +public VFreeBusy()
    +
    +

    + Creates a new free/busy component. +

    +

    + The following properties are auto-generated on object creation. These + properties must be present in order for the free/busy component to + be valid: +

    +

    +

    +

    + + + + + + + + +
    +Method Detail
    + +

    +getUid

    +
    +public Uid getUid()
    +
    +
    Gets the unique identifier for this free/busy entry. This component + object comes populated with a UID on creation. This is a required + property. +

    +

    + +
    Returns:
    the UID or null if not set
    Specification Reference:
    RFC 5545 p.117-8
    +
    +
    +
    + +

    +setUid

    +
    +public void setUid(Uid uid)
    +
    +
    Sets the unique identifier for this free/busy entry. This component + object comes populated with a UID on creation. This is a required + property. +

    +

    +
    Parameters:
    uid - the UID or null to remove
    Specification Reference:
    RFC 5545 p.117-8
    +
    +
    +
    + +

    +setUid

    +
    +public Uid setUid(String uid)
    +
    +
    Sets the unique identifier for this free/busy entry. This component + object comes populated with a UID on creation. This is a required + property. +

    +

    +
    Parameters:
    uid - the UID or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.117-8
    +
    +
    +
    + +

    +getDateTimeStamp

    +
    +public DateTimeStamp getDateTimeStamp()
    +
    +
    Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the free/busy + entry was last modified (the LastModified property also holds + this information). This free/busy object comes populated with a + DateTimeStamp property that is set to the current time. This is a + required property. +

    +

    + +
    Returns:
    the date time stamp or null if not set
    Specification Reference:
    RFC 5545 p.137-8
    +
    +
    +
    + +

    +setDateTimeStamp

    +
    +public void setDateTimeStamp(DateTimeStamp dateTimeStamp)
    +
    +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the free/busy + entry was last modified (the LastModified property also holds + this information). This free/busy object comes populated with a + DateTimeStamp property that is set to the current time. This is a + required property. +

    +

    +
    Parameters:
    dateTimeStamp - the date time stamp or null to remove
    Specification Reference:
    RFC 5545 p.137-8
    +
    +
    +
    + +

    +setDateTimeStamp

    +
    +public DateTimeStamp setDateTimeStamp(Date dateTimeStamp)
    +
    +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the free/busy + entry was last modified (the LastModified property also holds + this information). This free/busy object comes populated with a + DateTimeStamp property that is set to the current time. This is a + required property. +

    +

    +
    Parameters:
    dateTimeStamp - the date time stamp or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.137-8
    +
    +
    +
    + +

    +getContact

    +
    +public Contact getContact()
    +
    +
    Gets the contact associated with the free/busy entry. +

    +

    + +
    Returns:
    the contact or null if not set
    Specification Reference:
    RFC 5545 p.109-11
    +
    +
    +
    + +

    +setContact

    +
    +public void setContact(Contact contact)
    +
    +
    Sets the contact for the free/busy entry. +

    +

    +
    Parameters:
    contact - the contact or null to remove
    Specification Reference:
    RFC 5545 p.109-11
    +
    +
    +
    + +

    +addContact

    +
    +public Contact addContact(String contact)
    +
    +
    Sets the contact for the free/busy entry. +

    +

    +
    Parameters:
    contact - the contact (e.g. "ACME Co - (123) 555-1234") +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.109-11
    +
    +
    +
    + +

    +getDateStart

    +
    +public DateStart getDateStart()
    +
    +
    Gets the date that the free/busy entry starts. +

    +

    + +
    Returns:
    the start date or null if not set
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +setDateStart

    +
    +public void setDateStart(DateStart dateStart)
    +
    +
    Sets the date that the free/busy entry starts. +

    +

    +
    Parameters:
    dateStart - the start date or null to remove
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +setDateStart

    +
    +public DateStart setDateStart(Date dateStart)
    +
    +
    Sets the date that the free/busy entry starts. +

    +

    +
    Parameters:
    dateStart - the start date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +getDateEnd

    +
    +public DateEnd getDateEnd()
    +
    +
    Gets the date that the free/busy entry ends. +

    +

    + +
    Returns:
    the end date or null if not set
    Specification Reference:
    RFC 5545 p.95-6
    +
    +
    +
    + +

    +setDateEnd

    +
    +public void setDateEnd(DateEnd dateEnd)
    +
    +
    Sets the date that the free/busy entry ends. +

    +

    +
    Parameters:
    dateEnd - the end date or null to remove
    Specification Reference:
    RFC 5545 p.95-6
    +
    +
    +
    + +

    +setDateEnd

    +
    +public DateEnd setDateEnd(Date dateEnd)
    +
    +
    Sets the date that the free/busy entry ends. +

    +

    +
    Parameters:
    dateEnd - the end date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.95-6
    +
    +
    +
    + +

    +getOrganizer

    +
    +public Organizer getOrganizer()
    +
    +
    Gets the person requesting the free/busy time. +

    +

    + +
    Returns:
    the person requesting the free/busy time or null if not set
    Specification Reference:
    RFC 5545 p.111-2
    +
    +
    +
    + +

    +setOrganizer

    +
    +public void setOrganizer(Organizer organizer)
    +
    +
    Sets the person requesting the free/busy time. +

    +

    +
    Parameters:
    organizer - the person requesting the free/busy time or null to + remove
    Specification Reference:
    RFC 5545 p.111-2
    +
    +
    +
    + +

    +setOrganizer

    +
    +public Organizer setOrganizer(String email)
    +
    +
    Sets the person requesting the free/busy time. +

    +

    +
    Parameters:
    email - the email address of the person requesting the free/busy + time (e.g. "johndoe@example.com") or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.111-2
    +
    +
    +
    + +

    +getUrl

    +
    +public Url getUrl()
    +
    +
    Gets a URL to a resource that contains additional information about the + free/busy entry. +

    +

    + +
    Returns:
    the URL or null if not set
    Specification Reference:
    RFC 5545 p.116-7
    +
    +
    +
    + +

    +setUrl

    +
    +public void setUrl(Url url)
    +
    +
    Sets a URL to a resource that contains additional information about the + free/busy entry. +

    +

    +
    Parameters:
    url - the URL or null to remove
    Specification Reference:
    RFC 5545 p.116-7
    +
    +
    +
    + +

    +setUrl

    +
    +public Url setUrl(String url)
    +
    +
    Sets a URL to a resource that contains additional information about the + free/busy entry. +

    +

    +
    Parameters:
    url - the URL (e.g. "http://example.com/resource.ics") or null to + remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.116-7
    +
    +
    +
    + +

    +getAttendees

    +
    +public List<Attendee> getAttendees()
    +
    +
    Gets the people who are involved in the free/busy entry. +

    +

    + +
    Returns:
    the attendees
    Specification Reference:
    RFC 5545 p.107-9
    +
    +
    +
    + +

    +addAttendee

    +
    +public void addAttendee(Attendee attendee)
    +
    +
    Adds a person who is involved in the free/busy entry. +

    +

    +
    Parameters:
    attendee - the attendee
    Specification Reference:
    RFC 5545 p.107-9
    +
    +
    +
    + +

    +getComments

    +
    +public List<Comment> getComments()
    +
    +
    Gets the comments attached to the free/busy entry. +

    +

    + +
    Returns:
    the comments
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +addComment

    +
    +public void addComment(Comment comment)
    +
    +
    Adds a comment to the free/busy entry. +

    +

    +
    Parameters:
    comment - the comment to add
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +addComment

    +
    +public Comment addComment(String comment)
    +
    +
    Adds a comment to the free/busy entry. +

    +

    +
    Parameters:
    comment - the comment to add +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +getFreeBusy

    +
    +public List<FreeBusy> getFreeBusy()
    +
    +
    Gets the person's availabilities over certain time periods (for example, + "free" between 1pm-3pm, but "busy" between 3pm-4pm). +

    +

    + +
    Returns:
    the availabilities
    Specification Reference:
    RFC 5545 p.100-1
    +
    +
    +
    + +

    +addFreeBusy

    +
    +public void addFreeBusy(FreeBusy freeBusy)
    +
    +
    Adds a list of time periods for which the person is free or busy (for + example, "free" between 1pm-3pm and 4pm-5pm). Note that a + FreeBusy property can contain multiple time periods, but only one + availability type (e.g. "busy"). +

    +

    +
    Parameters:
    freeBusy - the availabilities
    Specification Reference:
    RFC 5545 p.100-1
    +
    +
    +
    + +

    +addFreeBusy

    +
    +public FreeBusy addFreeBusy(FreeBusyType type,
    +                            Date start,
    +                            Date end)
    +
    +
    Adds a single time period for which the person is free or busy (for + example, "free" between 1pm-3pm). This method will look for an existing + property that has the given FreeBusyType and add the time period + to it, or create a new property is one cannot be found. +

    +

    +
    Parameters:
    type - the availability type (e.g. "free" or "busy")
    start - the start date-time
    end - the end date-time +
    Returns:
    the property that was created/modified
    Specification Reference:
    RFC 5545 p.100-1
    +
    +
    +
    + +

    +addFreeBusy

    +
    +public FreeBusy addFreeBusy(FreeBusyType type,
    +                            Date start,
    +                            Duration duration)
    +
    +
    Adds a single time period for which the person is free or busy (for + example, "free" for 2 hours after 1pm). This method will look for an + existing property that has the given FreeBusyType and add the + time period to it, or create a new property is one cannot be found. +

    +

    +
    Parameters:
    type - the availability type (e.g. "free" or "busy")
    start - the start date-time
    duration - the length of time +
    Returns:
    the property that was created/modified
    Specification Reference:
    RFC 5545 p.100-1
    +
    +
    +
    + +

    +getRequestStatus

    +
    +public RequestStatus getRequestStatus()
    +
    +
    Gets the response to a scheduling request. +

    +

    + +
    Returns:
    the response
    Specification Reference:
    RFC 5545 p.141-3
    +
    +
    +
    + +

    +setRequestStatus

    +
    +public void setRequestStatus(RequestStatus requestStatus)
    +
    +
    Sets the response to a scheduling request. +

    +

    +
    Parameters:
    requestStatus - the response
    Specification Reference:
    RFC 5545 p.141-3
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalComponent
    +
    Checks the component for data consistency problems or deviations from the + spec. Meant to be overridden by child classes. +

    +

    +
    Overrides:
    validate in class ICalComponent
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the component belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/VJournal.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/VJournal.html new file mode 100644 index 000000000..d0171a139 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/VJournal.html @@ -0,0 +1,1924 @@ + + + + + + + +VJournal (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component +
    +Class VJournal

    +
    +java.lang.Object
    +  extended by biweekly.component.ICalComponent
    +      extended by biweekly.component.VJournal
    +
    +
    +
    +
    public class VJournal
    extends ICalComponent
    + + +

    +

    + Defines descriptive text associated with the calendar data. +

    +

    + Examples: + +

    + VJournal journal = new VJournal();
    + journal.setSummary("Team Meeting");
    + journal.setDescription("The following items were discussed: ...");
    + byte[] slides = ...
    + journal.addAttachment(new Attachment("application/vnd.ms-powerpoint", slides));
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.57-9
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.ICalComponent
    components, properties
    +  + + + + + + + + + + +
    +Constructor Summary
    VJournal() + +
    +           + Creates a new journal entry.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddAttachment(Attachment attachment) + +
    +          Adds an attachment to the journal entry.
    + voidaddAttendee(Attendee attendee) + +
    +          Adds a person who is involved in the journal entry.
    + AttendeeaddAttendee(String email) + +
    +          Adds a person who is involved in the journal entry.
    + voidaddCategories(Categories categories) + +
    +          Adds a list of "tags" or "keywords" that describe the journal entry.
    + CategoriesaddCategories(List<String> categories) + +
    +          Adds a list of "tags" or "keywords" that describe the journal entry.
    + CategoriesaddCategories(String... categories) + +
    +          Adds a list of "tags" or "keywords" that describe the journal entry.
    + voidaddComment(Comment comment) + +
    +          Adds a comment to the journal entry.
    + CommentaddComment(String comment) + +
    +          Adds a comment to the journal entry.
    + voidaddContact(Contact contact) + +
    +          Adds a contact to the journal entry.
    + ContactaddContact(String contact) + +
    +          Adds a contact to the journal entry.
    + voidaddDescription(Description description) + +
    +          Adds a detailed description to the journal entry.
    + DescriptionaddDescription(String description) + +
    +          Adds a detailed description to the journal entry.
    + voidaddExceptionDates(ExceptionDates exceptionDates) + +
    +          Adds a list of exceptions to the recurrence rule defined in the journal + entry (if one is defined).
    + voidaddExceptionRule(ExceptionRule exceptionRule) + +
    +           + Adds an exception for the RecurrenceRule property.
    + ExceptionRuleaddExceptionRule(Recurrence recur) + +
    +           + Adds an exception for the RecurrenceRule property.
    + voidaddRecurrenceDates(RecurrenceDates recurrenceDates) + +
    +          Adds a list of dates/periods that help define the recurrence rule of this + journal entry (if one is defined).
    + voidaddRelatedTo(RelatedTo relatedTo) + +
    +          Adds a component that the journal entry is related to.
    + RelatedToaddRelatedTo(String uid) + +
    +          Adds a component that the journal entry is related to.
    + List<Attachment>getAttachments() + +
    +          Gets any attachments that are associated with the journal entry.
    + List<Attendee>getAttendees() + +
    +          Gets the people who are involved in the journal entry.
    + List<Categories>getCategories() + +
    +          Gets a list of "tags" or "keywords" that describe the journal entry.
    + ClassificationgetClassification() + +
    +          Gets the level of sensitivity of the journal entry.
    + List<Comment>getComments() + +
    +          Gets the comments attached to the journal entry.
    + List<Contact>getContacts() + +
    +          Gets the contacts associated with the journal entry.
    + CreatedgetCreated() + +
    +          Gets the date-time that the journal entry was initially created.
    + DateStartgetDateStart() + +
    +          Gets the date that the journal entry starts.
    + DateTimeStampgetDateTimeStamp() + +
    +          Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the journal + entry was last modified (the LastModified property also holds + this information).
    + List<Description>getDescriptions() + +
    +          Gets the detailed descriptions to the journal entry.
    + List<ExceptionDates>getExceptionDates() + +
    +          Gets the list of exceptions to the recurrence rule defined in the journal + entry (if one is defined).
    + List<ExceptionRule>getExceptionRules() + +
    +           + Gets the exceptions for the RecurrenceRule property.
    + LastModifiedgetLastModified() + +
    +          Gets the date-time that the journal entry was last changed.
    + OrganizergetOrganizer() + +
    +          Gets the organizer of the journal entry.
    + List<RecurrenceDates>getRecurrenceDates() + +
    +          Gets the list of dates/periods that help define the recurrence rule of + this journal entry (if one is defined).
    + RecurrenceIdgetRecurrenceId() + +
    +          Gets the original value of the DateStart property if the event is + recurring and has been modified.
    + RecurrenceRulegetRecurrenceRule() + +
    +          Gets how often the journal entry repeats.
    + List<RelatedTo>getRelatedTo() + +
    +          Gets the components that the journal entry is related to.
    + RequestStatusgetRequestStatus() + +
    +          Gets the response to a scheduling request.
    + SequencegetSequence() + +
    +          Gets the revision number of the journal entry.
    + StatusgetStatus() + +
    +          Gets the status of the journal entry.
    + SummarygetSummary() + +
    +          Gets the summary of the journal entry.
    + UidgetUid() + +
    +          Gets the unique identifier for this journal entry.
    + UrlgetUrl() + +
    +          Gets a URL to a resource that contains additional information about the + journal entry.
    + voidincrementSequence() + +
    +          Increments the revision number of the journal entry.
    + voidsetClassification(Classification classification) + +
    +          Sets the level of sensitivity of the journal entry.
    + ClassificationsetClassification(String classification) + +
    +          Sets the level of sensitivity of the journal entry.
    + voidsetCreated(Created created) + +
    +          Sets the date-time that the journal entry was initially created.
    + CreatedsetCreated(Date created) + +
    +          Sets the date-time that the journal entry was initially created.
    + DateStartsetDateStart(Date dateStart) + +
    +          Sets the date that the journal entry starts.
    + voidsetDateStart(DateStart dateStart) + +
    +          Sets the date that the journal entry starts.
    + DateTimeStampsetDateTimeStamp(Date dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the journal + entry was last modified (the LastModified property also holds + this information).
    + voidsetDateTimeStamp(DateTimeStamp dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the journal + entry was last modified (the LastModified property also holds + this information).
    + LastModifiedsetLastModified(Date lastModified) + +
    +          Sets the date-time that the journal entry was last changed.
    + voidsetLastModified(LastModified lastModified) + +
    +          Sets the date-time that the journal entry was last changed.
    + voidsetOrganizer(Organizer organizer) + +
    +          Sets the organizer of the journal entry.
    + OrganizersetOrganizer(String email) + +
    +          Sets the organizer of the journal entry.
    + RecurrenceIdsetRecurrenceId(Date originalStartDate) + +
    +          Sets the original value of the DateStart property if the journal + entry is recurring and has been modified.
    + voidsetRecurrenceId(RecurrenceId recurrenceId) + +
    +          Sets the original value of the DateStart property if the event is + recurring and has been modified.
    + RecurrenceRulesetRecurrenceRule(Recurrence recur) + +
    +          Sets how often the journal entry repeats.
    + voidsetRecurrenceRule(RecurrenceRule recurrenceRule) + +
    +          Sets how often the journal entry repeats.
    + voidsetRequestStatus(RequestStatus requestStatus) + +
    +          Sets the response to a scheduling request.
    + SequencesetSequence(Integer sequence) + +
    +          Sets the revision number of the journal entry.
    + voidsetSequence(Sequence sequence) + +
    +          Sets the revision number of the journal entry.
    + voidsetStatus(Status status) + +
    +          Sets the status of the journal entry.
    + SummarysetSummary(String summary) + +
    +          Sets the summary of the journal entry.
    + voidsetSummary(Summary summary) + +
    +          Sets the summary of the journal entry.
    + UidsetUid(String uid) + +
    +          Sets the unique identifier for this journal entry.
    + voidsetUid(Uid uid) + +
    +          Sets the unique identifier for this journal entry.
    + UrlsetUrl(String url) + +
    +          Sets a URL to a resource that contains additional information about the + journal entry.
    + voidsetUrl(Url url) + +
    +          Sets a URL to a resource that contains additional information about the + journal entry.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the component for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.component.ICalComponent
    addComponent, addExperimentalComponent, addExperimentalProperty, addExperimentalProperty, addProperty, checkOptionalCardinality, checkRequiredCardinality, getComponent, getComponents, getComponents, getExperimentalComponent, getExperimentalComponents, getExperimentalComponents, getExperimentalProperties, getExperimentalProperties, getExperimentalProperty, getProperties, getProperties, getProperty, removeExperimentalComponents, removeExperimentalProperty, removeProperties, setComponent, setComponent, setExperimentalComponents, setExperimentalProperty, setExperimentalProperty, setProperty, setProperty, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +VJournal

    +
    +public VJournal()
    +
    +

    + Creates a new journal entry. +

    +

    + The following properties are auto-generated on object creation. These + properties must be present in order for the journal entry to be + valid: +

    +

    +

    +

    + + + + + + + + +
    +Method Detail
    + +

    +getUid

    +
    +public Uid getUid()
    +
    +
    Gets the unique identifier for this journal entry. This component object + comes populated with a UID on creation. This is a required + property. +

    +

    + +
    Returns:
    the UID or null if not set
    Specification Reference:
    RFC 5545 p.117-8
    +
    +
    +
    + +

    +setUid

    +
    +public void setUid(Uid uid)
    +
    +
    Sets the unique identifier for this journal entry. This component object + comes populated with a UID on creation. This is a required + property. +

    +

    +
    Parameters:
    uid - the UID or null to remove
    Specification Reference:
    RFC 5545 p.117-8
    +
    +
    +
    + +

    +setUid

    +
    +public Uid setUid(String uid)
    +
    +
    Sets the unique identifier for this journal entry. This component object + comes populated with a UID on creation. This is a required + property. +

    +

    +
    Parameters:
    uid - the UID or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.117-8
    +
    +
    +
    + +

    +getDateTimeStamp

    +
    +public DateTimeStamp getDateTimeStamp()
    +
    +
    Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the journal + entry was last modified (the LastModified property also holds + this information). This journal entry object comes populated with a + DateTimeStamp property that is set to the current time. This is a + required property. +

    +

    + +
    Returns:
    the date time stamp or null if not set
    Specification Reference:
    RFC 5545 p.137-8
    +
    +
    +
    + +

    +setDateTimeStamp

    +
    +public void setDateTimeStamp(DateTimeStamp dateTimeStamp)
    +
    +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the journal + entry was last modified (the LastModified property also holds + this information). This journal entry object comes populated with a + DateTimeStamp property that is set to the current time. This is a + required property. +

    +

    +
    Parameters:
    dateTimeStamp - the date time stamp or null to remove
    Specification Reference:
    RFC 5545 p.137-8
    +
    +
    +
    + +

    +setDateTimeStamp

    +
    +public DateTimeStamp setDateTimeStamp(Date dateTimeStamp)
    +
    +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the journal + entry was last modified (the LastModified property also holds + this information). This journal entry object comes populated with a + DateTimeStamp property that is set to the current time. This is a + required property. +

    +

    +
    Parameters:
    dateTimeStamp - the date time stamp or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.137-8
    +
    +
    +
    + +

    +getClassification

    +
    +public Classification getClassification()
    +
    +
    Gets the level of sensitivity of the journal entry. If not specified, the + data within the journal entry should be considered "public". +

    +

    + +
    Returns:
    the classification level or null if not set
    Specification Reference:
    RFC 5545 p.82-3
    +
    +
    +
    + +

    +setClassification

    +
    +public void setClassification(Classification classification)
    +
    +
    Sets the level of sensitivity of the journal entry. If not specified, the + data within the journal entry should be considered "public". +

    +

    +
    Parameters:
    classification - the classification level or null to remove
    Specification Reference:
    RFC 5545 p.82-3
    +
    +
    +
    + +

    +setClassification

    +
    +public Classification setClassification(String classification)
    +
    +
    Sets the level of sensitivity of the journal entry. If not specified, the + data within the journal entry should be considered "public". +

    +

    +
    Parameters:
    classification - the classification level (e.g. "CONFIDENTIAL") or + null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.82-3
    +
    +
    +
    + +

    +getCreated

    +
    +public Created getCreated()
    +
    +
    Gets the date-time that the journal entry was initially created. +

    +

    + +
    Returns:
    the creation date-time or null if not set
    Specification Reference:
    RFC 5545 p.136
    +
    +
    +
    + +

    +setCreated

    +
    +public void setCreated(Created created)
    +
    +
    Sets the date-time that the journal entry was initially created. +

    +

    +
    Parameters:
    created - the creation date-time or null to remove
    Specification Reference:
    RFC 5545 p.136
    +
    +
    +
    + +

    +setCreated

    +
    +public Created setCreated(Date created)
    +
    +
    Sets the date-time that the journal entry was initially created. +

    +

    +
    Parameters:
    created - the creation date-time or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.136
    +
    +
    +
    + +

    +getDateStart

    +
    +public DateStart getDateStart()
    +
    +
    Gets the date that the journal entry starts. +

    +

    + +
    Returns:
    the start date or null if not set
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +setDateStart

    +
    +public void setDateStart(DateStart dateStart)
    +
    +
    Sets the date that the journal entry starts. +

    +

    +
    Parameters:
    dateStart - the start date or null to remove
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +setDateStart

    +
    +public DateStart setDateStart(Date dateStart)
    +
    +
    Sets the date that the journal entry starts. +

    +

    +
    Parameters:
    dateStart - the start date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +getLastModified

    +
    +public LastModified getLastModified()
    +
    +
    Gets the date-time that the journal entry was last changed. +

    +

    + +
    Returns:
    the last modified date or null if not set
    Specification Reference:
    RFC 5545 p.138
    +
    +
    +
    + +

    +setLastModified

    +
    +public void setLastModified(LastModified lastModified)
    +
    +
    Sets the date-time that the journal entry was last changed. +

    +

    +
    Parameters:
    lastModified - the last modified date or null to remove
    Specification Reference:
    RFC 5545 p.138
    +
    +
    +
    + +

    +setLastModified

    +
    +public LastModified setLastModified(Date lastModified)
    +
    +
    Sets the date-time that the journal entry was last changed. +

    +

    +
    Parameters:
    lastModified - the last modified date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.138
    +
    +
    +
    + +

    +getOrganizer

    +
    +public Organizer getOrganizer()
    +
    +
    Gets the organizer of the journal entry. +

    +

    + +
    Returns:
    the organizer or null if not set
    Specification Reference:
    RFC 5545 p.111-2
    +
    +
    +
    + +

    +setOrganizer

    +
    +public void setOrganizer(Organizer organizer)
    +
    +
    Sets the organizer of the journal entry. +

    +

    +
    Parameters:
    organizer - the organizer or null to remove
    Specification Reference:
    RFC 5545 p.111-2
    +
    +
    +
    + +

    +setOrganizer

    +
    +public Organizer setOrganizer(String email)
    +
    +
    Sets the organizer of the journal entry. +

    +

    +
    Parameters:
    email - the organizer's email address (e.g. "johndoe@example.com") + or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.111-2
    +
    +
    +
    + +

    +getRecurrenceId

    +
    +public RecurrenceId getRecurrenceId()
    +
    +
    Gets the original value of the DateStart property if the event is + recurring and has been modified. Used in conjunction with the Uid + and Sequence properties to uniquely identify a recurrence + instance. +

    +

    + +
    Returns:
    the recurrence ID or null if not set
    Specification Reference:
    RFC 5545 p.112-4
    +
    +
    +
    + +

    +setRecurrenceId

    +
    +public void setRecurrenceId(RecurrenceId recurrenceId)
    +
    +
    Sets the original value of the DateStart property if the event is + recurring and has been modified. Used in conjunction with the Uid + and Sequence properties to uniquely identify a recurrence + instance. +

    +

    +
    Parameters:
    recurrenceId - the recurrence ID or null to remove
    Specification Reference:
    RFC 5545 p.112-4
    +
    +
    +
    + +

    +setRecurrenceId

    +
    +public RecurrenceId setRecurrenceId(Date originalStartDate)
    +
    +
    Sets the original value of the DateStart property if the journal + entry is recurring and has been modified. Used in conjunction with the + Uid and Sequence properties to uniquely identify a + recurrence instance. +

    +

    +
    Parameters:
    originalStartDate - the original start date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.112-4
    +
    +
    +
    + +

    +getSequence

    +
    +public Sequence getSequence()
    +
    +
    Gets the revision number of the journal entry. The organizer can + increment this number every time he or she makes a significant change. +

    +

    + +
    Returns:
    the sequence number
    Specification Reference:
    RFC 5545 p.138-9
    +
    +
    +
    + +

    +setSequence

    +
    +public void setSequence(Sequence sequence)
    +
    +
    Sets the revision number of the journal entry. The organizer can + increment this number every time he or she makes a significant change. +

    +

    +
    Parameters:
    sequence - the sequence number
    Specification Reference:
    RFC 5545 p.138-9
    +
    +
    +
    + +

    +setSequence

    +
    +public Sequence setSequence(Integer sequence)
    +
    +
    Sets the revision number of the journal entry. The organizer can + increment this number every time he or she makes a significant change. +

    +

    +
    Parameters:
    sequence - the sequence number +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.138-9
    +
    +
    +
    + +

    +incrementSequence

    +
    +public void incrementSequence()
    +
    +
    Increments the revision number of the journal entry. The organizer can + increment this number every time he or she makes a significant change. +

    +

    +
    Specification Reference:
    RFC 5545 p.138-9
    +
    +
    +
    + +

    +getStatus

    +
    +public Status getStatus()
    +
    +
    Gets the status of the journal entry. +

    +

    + +
    Returns:
    the status or null if not set
    Specification Reference:
    RFC 5545 p.92-3
    +
    +
    +
    + +

    +setStatus

    +
    +public void setStatus(Status status)
    +
    +
    Sets the status of the journal entry. +

    + Valid journal status codes are: +

      +
    • DRAFT
    • +
    • FINAL
    • +
    • CANCELLED
    • +
    +

    +

    +

    +
    Parameters:
    status - the status or null to remove
    Specification Reference:
    RFC 5545 p.92-3
    +
    +
    +
    + +

    +getSummary

    +
    +public Summary getSummary()
    +
    +
    Gets the summary of the journal entry. +

    +

    + +
    Returns:
    the summary or null if not set
    Specification Reference:
    RFC 5545 p.93-4
    +
    +
    +
    + +

    +setSummary

    +
    +public void setSummary(Summary summary)
    +
    +
    Sets the summary of the journal entry. +

    +

    +
    Parameters:
    summary - the summary or null to remove
    Specification Reference:
    RFC 5545 p.93-4
    +
    +
    +
    + +

    +setSummary

    +
    +public Summary setSummary(String summary)
    +
    +
    Sets the summary of the journal entry. +

    +

    +
    Parameters:
    summary - the summary or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.93-4
    +
    +
    +
    + +

    +getUrl

    +
    +public Url getUrl()
    +
    +
    Gets a URL to a resource that contains additional information about the + journal entry. +

    +

    + +
    Returns:
    the URL or null if not set
    Specification Reference:
    RFC 5545 p.116-7
    +
    +
    +
    + +

    +setUrl

    +
    +public void setUrl(Url url)
    +
    +
    Sets a URL to a resource that contains additional information about the + journal entry. +

    +

    +
    Parameters:
    url - the URL or null to remove
    Specification Reference:
    RFC 5545 p.116-7
    +
    +
    +
    + +

    +setUrl

    +
    +public Url setUrl(String url)
    +
    +
    Sets a URL to a resource that contains additional information about the + journal entry. +

    +

    +
    Parameters:
    url - the URL (e.g. "http://example.com/resource.ics") or null to + remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.116-7
    +
    +
    +
    + +

    +getRecurrenceRule

    +
    +public RecurrenceRule getRecurrenceRule()
    +
    +
    Gets how often the journal entry repeats. +

    +

    + +
    Returns:
    the recurrence rule or null if not set
    Specification Reference:
    RFC 5545 p.122-32
    +
    +
    +
    + +

    +setRecurrenceRule

    +
    +public RecurrenceRule setRecurrenceRule(Recurrence recur)
    +
    +
    Sets how often the journal entry repeats. +

    +

    +
    Parameters:
    recur - the recurrence rule or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.122-32
    +
    +
    +
    + +

    +setRecurrenceRule

    +
    +public void setRecurrenceRule(RecurrenceRule recurrenceRule)
    +
    +
    Sets how often the journal entry repeats. +

    +

    +
    Parameters:
    recurrenceRule - the recurrence rule or null to remove
    Specification Reference:
    RFC 5545 p.122-32
    +
    +
    +
    + +

    +getAttachments

    +
    +public List<Attachment> getAttachments()
    +
    +
    Gets any attachments that are associated with the journal entry. +

    +

    + +
    Returns:
    the attachments
    Specification Reference:
    RFC 5545 p.80-1
    +
    +
    +
    + +

    +addAttachment

    +
    +public void addAttachment(Attachment attachment)
    +
    +
    Adds an attachment to the journal entry. +

    +

    +
    Parameters:
    attachment - the attachment to add
    Specification Reference:
    RFC 5545 p.80-1
    +
    +
    +
    + +

    +getAttendees

    +
    +public List<Attendee> getAttendees()
    +
    +
    Gets the people who are involved in the journal entry. +

    +

    + +
    Returns:
    the attendees
    Specification Reference:
    RFC 5545 p.107-9
    +
    +
    +
    + +

    +addAttendee

    +
    +public void addAttendee(Attendee attendee)
    +
    +
    Adds a person who is involved in the journal entry. +

    +

    +
    Parameters:
    attendee - the attendee
    Specification Reference:
    RFC 5545 p.107-9
    +
    +
    +
    + +

    +addAttendee

    +
    +public Attendee addAttendee(String email)
    +
    +
    Adds a person who is involved in the journal entry. +

    +

    +
    Parameters:
    email - the attendee's email address +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.107-9
    +
    +
    +
    + +

    +getCategories

    +
    +public List<Categories> getCategories()
    +
    +
    Gets a list of "tags" or "keywords" that describe the journal entry. +

    +

    + +
    Returns:
    the categories
    Specification Reference:
    RFC 5545 p.81-2
    +
    +
    +
    + +

    +addCategories

    +
    +public void addCategories(Categories categories)
    +
    +
    Adds a list of "tags" or "keywords" that describe the journal entry. Note + that a single property can hold multiple keywords. +

    +

    +
    Parameters:
    categories - the categories to add
    Specification Reference:
    RFC 5545 p.81-2
    +
    +
    +
    + +

    +addCategories

    +
    +public Categories addCategories(String... categories)
    +
    +
    Adds a list of "tags" or "keywords" that describe the journal entry. +

    +

    +
    Parameters:
    categories - the categories to add +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.81-2
    +
    +
    +
    + +

    +addCategories

    +
    +public Categories addCategories(List<String> categories)
    +
    +
    Adds a list of "tags" or "keywords" that describe the journal entry. +

    +

    +
    Parameters:
    categories - the categories to add +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.81-2
    +
    +
    +
    + +

    +getComments

    +
    +public List<Comment> getComments()
    +
    +
    Gets the comments attached to the journal entry. +

    +

    + +
    Returns:
    the comments
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +addComment

    +
    +public void addComment(Comment comment)
    +
    +
    Adds a comment to the journal entry. +

    +

    +
    Parameters:
    comment - the comment to add
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +addComment

    +
    +public Comment addComment(String comment)
    +
    +
    Adds a comment to the journal entry. +

    +

    +
    Parameters:
    comment - the comment to add +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +getContacts

    +
    +public List<Contact> getContacts()
    +
    +
    Gets the contacts associated with the journal entry. +

    +

    + +
    Returns:
    the contacts
    Specification Reference:
    RFC 5545 p.109-11
    +
    +
    +
    + +

    +addContact

    +
    +public void addContact(Contact contact)
    +
    +
    Adds a contact to the journal entry. +

    +

    +
    Parameters:
    contact - the contact
    Specification Reference:
    RFC 5545 p.109-11
    +
    +
    +
    + +

    +addContact

    +
    +public Contact addContact(String contact)
    +
    +
    Adds a contact to the journal entry. +

    +

    +
    Parameters:
    contact - the contact (e.g. "ACME Co - (123) 555-1234") +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.109-11
    +
    +
    +
    + +

    +getDescriptions

    +
    +public List<Description> getDescriptions()
    +
    +
    Gets the detailed descriptions to the journal entry. The descriptions + should be a more detailed version of the one provided by the + Summary property. +

    +

    + +
    Returns:
    the descriptions
    Specification Reference:
    RFC 5545 p.84-5
    +
    +
    +
    + +

    +addDescription

    +
    +public void addDescription(Description description)
    +
    +
    Adds a detailed description to the journal entry. The description should + be a more detailed version of the one provided by the Summary + property. +

    +

    +
    Parameters:
    description - the description
    Specification Reference:
    RFC 5545 p.84-5
    +
    +
    +
    + +

    +addDescription

    +
    +public Description addDescription(String description)
    +
    +
    Adds a detailed description to the journal entry. The description should + be a more detailed version of the one provided by the Summary + property. +

    +

    +
    Parameters:
    description - the description +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.84-5
    +
    +
    +
    + +

    +getExceptionDates

    +
    +public List<ExceptionDates> getExceptionDates()
    +
    +
    Gets the list of exceptions to the recurrence rule defined in the journal + entry (if one is defined). +

    +

    + +
    Returns:
    the list of exceptions
    Specification Reference:
    RFC 5545 p.118-20
    +
    +
    +
    + +

    +addExceptionDates

    +
    +public void addExceptionDates(ExceptionDates exceptionDates)
    +
    +
    Adds a list of exceptions to the recurrence rule defined in the journal + entry (if one is defined). Note that this property can contain multiple + dates. +

    +

    +
    Parameters:
    exceptionDates - the list of exceptions
    Specification Reference:
    RFC 5545 p.118-20
    +
    +
    +
    + +

    +getRelatedTo

    +
    +public List<RelatedTo> getRelatedTo()
    +
    +
    Gets the components that the journal entry is related to. +

    +

    + +
    Returns:
    the relationships
    Specification Reference:
    RFC 5545 p.115-6
    +
    +
    +
    + +

    +addRelatedTo

    +
    +public void addRelatedTo(RelatedTo relatedTo)
    +
    +
    Adds a component that the journal entry is related to. +

    +

    +
    Parameters:
    relatedTo - the relationship
    Specification Reference:
    RFC 5545 p.115-6
    +
    +
    +
    + +

    +addRelatedTo

    +
    +public RelatedTo addRelatedTo(String uid)
    +
    +
    Adds a component that the journal entry is related to. +

    +

    +
    Parameters:
    uid - the UID of the other component +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.115-6
    +
    +
    +
    + +

    +getRecurrenceDates

    +
    +public List<RecurrenceDates> getRecurrenceDates()
    +
    +
    Gets the list of dates/periods that help define the recurrence rule of + this journal entry (if one is defined). +

    +

    + +
    Returns:
    the recurrence dates
    Specification Reference:
    RFC 5545 p.120-2
    +
    +
    +
    + +

    +addRecurrenceDates

    +
    +public void addRecurrenceDates(RecurrenceDates recurrenceDates)
    +
    +
    Adds a list of dates/periods that help define the recurrence rule of this + journal entry (if one is defined). +

    +

    +
    Parameters:
    recurrenceDates - the recurrence dates
    Specification Reference:
    RFC 5545 p.120-2
    +
    +
    +
    + +

    +getRequestStatus

    +
    +public RequestStatus getRequestStatus()
    +
    +
    Gets the response to a scheduling request. +

    +

    + +
    Returns:
    the response
    Specification Reference:
    RFC 5545 p.141-3
    +
    +
    +
    + +

    +setRequestStatus

    +
    +public void setRequestStatus(RequestStatus requestStatus)
    +
    +
    Sets the response to a scheduling request. +

    +

    +
    Parameters:
    requestStatus - the response
    Specification Reference:
    RFC 5545 p.141-3
    +
    +
    +
    + +

    +getExceptionRules

    +
    +public List<ExceptionRule> getExceptionRules()
    +
    +

    + Gets the exceptions for the RecurrenceRule property. +

    +

    + Note that this property has been removed from the latest version of the + iCal specification. Its use should be avoided. +

    +

    +

    + +
    Returns:
    the exception rules
    Specification Reference:
    RFC 2445 p.114-15
    +
    +
    +
    + +

    +addExceptionRule

    +
    +public ExceptionRule addExceptionRule(Recurrence recur)
    +
    +

    + Adds an exception for the RecurrenceRule property. +

    +

    + Note that this property has been removed from the latest version of the + iCal specification. Its use should be avoided. +

    +

    +

    +
    Parameters:
    recur - the exception rule to add +
    Returns:
    the property that was created
    Specification Reference:
    RFC 2445 p.114-15
    +
    +
    +
    + +

    +addExceptionRule

    +
    +public void addExceptionRule(ExceptionRule exceptionRule)
    +
    +

    + Adds an exception for the RecurrenceRule property. +

    +

    + Note that this property has been removed from the latest version of the + iCal specification. Its use should be avoided. +

    +

    +

    +
    Parameters:
    exceptionRule - the exception rule to add
    Specification Reference:
    RFC 2445 p.114-15
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalComponent
    +
    Checks the component for data consistency problems or deviations from the + spec. Meant to be overridden by child classes. +

    +

    +
    Overrides:
    validate in class ICalComponent
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the component belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/VTimezone.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/VTimezone.html new file mode 100644 index 000000000..2d177c884 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/VTimezone.html @@ -0,0 +1,618 @@ + + + + + + + +VTimezone (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component +
    +Class VTimezone

    +
    +java.lang.Object
    +  extended by biweekly.component.ICalComponent
    +      extended by biweekly.component.VTimezone
    +
    +
    +
    +
    public class VTimezone
    extends ICalComponent
    + + +

    +

    + Defines a timezone's UTC offsets throughout the year. +

    + +

    + Examples: + +

    + VTimezone timezone = new VTimezone("Eastern Standard Time");
    + 
    + StandardTime standard = new StandardTime();
    + DateTimeComponents componentsStandard = new DateTimeComponents(1998, 10, 25, 2, 0, 0, false);
    + standard.setDateStart(componentsStandard);
    + standard.setTimezoneOffsetFrom(-4, 0);
    + standard.setTimezoneOffsetTo(-5, 0);
    + timezone.addStandardTime(standard);
    + 
    + DaylightSavingsTime daylight = new DaylightSavingsTime();
    + DateTimeComponents componentsDaylight = new DateTimeComponents(1999, 4, 4, 2, 0, 0, false);
    + daylight.setDateStart(componentsDaylight);
    + daylight.setTimezoneOffsetFrom(-5, 0);
    + daylight.setTimezoneOffsetTo(-4, 0);
    + timezone.addDaylightSavingsTime(daylight);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.62-71
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.ICalComponent
    components, properties
    +  + + + + + + + + + + +
    +Constructor Summary
    VTimezone(String identifier) + +
    +          Creates a new timezone component.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddDaylightSavingsTime(DaylightSavingsTime daylightSavingsTime) + +
    +          Adds a "daylight savings" observance time range.
    + voidaddStandardTime(StandardTime standardTime) + +
    +          Adds a "standard" observance time range.
    + List<DaylightSavingsTime>getDaylightSavingsTime() + +
    +          Gets the timezone's "daylight savings" observance time ranges.
    + LastModifiedgetLastModified() + +
    +          Gets the date-time that the timezone data was last changed.
    + List<StandardTime>getStandardTimes() + +
    +          Gets the timezone's "standard" observance time ranges.
    + TimezoneIdgetTimezoneId() + +
    +          Gets the ID for this timezone.
    + TimezoneUrlgetTimezoneUrl() + +
    +          Gets the timezone URL, which points to an iCalendar object that contains + further information on the timezone.
    + LastModifiedsetLastModified(Date lastModified) + +
    +          Sets the date-time that the timezone data was last changed.
    + voidsetLastModified(LastModified lastModified) + +
    +          Sets the date-time that the timezone data was last changed.
    + TimezoneIdsetTimezoneId(String timezoneId) + +
    +          Sets an ID for this timezone.
    + voidsetTimezoneId(TimezoneId timezoneId) + +
    +          Sets an ID for this timezone.
    + TimezoneUrlsetTimezoneUrl(String url) + +
    +          Sets the timezone URL, which points to an iCalendar object that contains + further information on the timezone.
    + voidsetTimezoneUrl(TimezoneUrl url) + +
    +          Sets the timezone URL, which points to an iCalendar object that contains + further information on the timezone.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the component for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.component.ICalComponent
    addComponent, addExperimentalComponent, addExperimentalProperty, addExperimentalProperty, addProperty, checkOptionalCardinality, checkRequiredCardinality, getComponent, getComponents, getComponents, getExperimentalComponent, getExperimentalComponents, getExperimentalComponents, getExperimentalProperties, getExperimentalProperties, getExperimentalProperty, getProperties, getProperties, getProperty, removeExperimentalComponents, removeExperimentalProperty, removeProperties, setComponent, setComponent, setExperimentalComponents, setExperimentalProperty, setExperimentalProperty, setProperty, setProperty, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +VTimezone

    +
    +public VTimezone(String identifier)
    +
    +
    Creates a new timezone component. +

    +

    +
    Parameters:
    identifier - a unique identifier for this timezone (allows it to be + referenced by date-time properties that support timezones).
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getTimezoneId

    +
    +public TimezoneId getTimezoneId()
    +
    +
    Gets the ID for this timezone. This is a required property. +

    +

    + +
    Returns:
    the timezone ID or null if not set
    Specification Reference:
    RFC 5545 p.102-3
    +
    +
    +
    + +

    +setTimezoneId

    +
    +public void setTimezoneId(TimezoneId timezoneId)
    +
    +
    Sets an ID for this timezone. This is a required property. +

    +

    +
    Parameters:
    timezoneId - the timezone ID or null to remove
    Specification Reference:
    RFC 5545 p.102-3
    +
    +
    +
    + +

    +setTimezoneId

    +
    +public TimezoneId setTimezoneId(String timezoneId)
    +
    +
    Sets an ID for this timezone. This is a required property. +

    +

    +
    Parameters:
    timezoneId - the timezone ID or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.102-3
    +
    +
    +
    + +

    +getLastModified

    +
    +public LastModified getLastModified()
    +
    +
    Gets the date-time that the timezone data was last changed. +

    +

    + +
    Returns:
    the last modified date or null if not set
    Specification Reference:
    RFC 5545 p.138
    +
    +
    +
    + +

    +setLastModified

    +
    +public void setLastModified(LastModified lastModified)
    +
    +
    Sets the date-time that the timezone data was last changed. +

    +

    +
    Parameters:
    lastModified - the last modified date or null to remove
    Specification Reference:
    RFC 5545 p.138
    +
    +
    +
    + +

    +setLastModified

    +
    +public LastModified setLastModified(Date lastModified)
    +
    +
    Sets the date-time that the timezone data was last changed. +

    +

    +
    Parameters:
    lastModified - the last modified date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.138
    +
    +
    +
    + +

    +getTimezoneUrl

    +
    +public TimezoneUrl getTimezoneUrl()
    +
    +
    Gets the timezone URL, which points to an iCalendar object that contains + further information on the timezone. +

    +

    + +
    Returns:
    the URL or null if not set
    Specification Reference:
    RFC 5545 p.106
    +
    +
    +
    + +

    +setTimezoneUrl

    +
    +public void setTimezoneUrl(TimezoneUrl url)
    +
    +
    Sets the timezone URL, which points to an iCalendar object that contains + further information on the timezone. +

    +

    +
    Parameters:
    url - the URL or null to remove
    Specification Reference:
    RFC 5545 p.106
    +
    +
    +
    + +

    +setTimezoneUrl

    +
    +public TimezoneUrl setTimezoneUrl(String url)
    +
    +
    Sets the timezone URL, which points to an iCalendar object that contains + further information on the timezone. +

    +

    +
    Parameters:
    url - the timezone URL (e.g. + "http://example.com/America-New_York.ics") or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.106
    +
    +
    +
    + +

    +getStandardTimes

    +
    +public List<StandardTime> getStandardTimes()
    +
    +
    Gets the timezone's "standard" observance time ranges. +

    +

    + +
    Returns:
    the "standard" observance time ranges
    +
    +
    +
    + +

    +addStandardTime

    +
    +public void addStandardTime(StandardTime standardTime)
    +
    +
    Adds a "standard" observance time range. +

    +

    +
    Parameters:
    standardTime - the "standard" observance time
    +
    +
    +
    + +

    +getDaylightSavingsTime

    +
    +public List<DaylightSavingsTime> getDaylightSavingsTime()
    +
    +
    Gets the timezone's "daylight savings" observance time ranges. +

    +

    + +
    Returns:
    the "daylight savings" observance time ranges
    +
    +
    +
    + +

    +addDaylightSavingsTime

    +
    +public void addDaylightSavingsTime(DaylightSavingsTime daylightSavingsTime)
    +
    +
    Adds a "daylight savings" observance time range. +

    +

    +
    Parameters:
    daylightSavingsTime - the "daylight savings" observance time
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalComponent
    +
    Checks the component for data consistency problems or deviations from the + spec. Meant to be overridden by child classes. +

    +

    +
    Overrides:
    validate in class ICalComponent
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the component belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/VTodo.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/VTodo.html new file mode 100644 index 000000000..25b908c9a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/VTodo.html @@ -0,0 +1,2486 @@ + + + + + + + +VTodo (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component +
    +Class VTodo

    +
    +java.lang.Object
    +  extended by biweekly.component.ICalComponent
    +      extended by biweekly.component.VTodo
    +
    +
    +
    +
    public class VTodo
    extends ICalComponent
    + + +

    +

    + Defines a task or assignment. +

    +

    + Examples: + +

    + VTodo todo = new VTodo();
    + todo.setSummary("Complete report");
    + Date due = ...
    + todo.setDateDue(due);
    + todo.setStatus(Status.confirmed());
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.55-7
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.ICalComponent
    components, properties
    +  + + + + + + + + + + +
    +Constructor Summary
    VTodo() + +
    +           + Creates a new to-do entry.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddAlarm(VAlarm alarm) + +
    +          Adds an alarm to this to-do.
    + voidaddAttachment(Attachment attachment) + +
    +          Adds an attachment to the to-do.
    + voidaddAttendee(Attendee attendee) + +
    +          Adds a person who is involved in the to-do.
    + AttendeeaddAttendee(String email) + +
    +          Adds a person who is involved in the to-do.
    + voidaddCategories(Categories categories) + +
    +          Adds a list of "tags" or "keywords" that describe the to-do.
    + CategoriesaddCategories(List<String> categories) + +
    +          Adds a list of "tags" or "keywords" that describe the to-do.
    + CategoriesaddCategories(String... categories) + +
    +          Adds a list of "tags" or "keywords" that describe the to-do.
    + voidaddComment(Comment comment) + +
    +          Adds a comment to the to-do.
    + CommentaddComment(String comment) + +
    +          Adds a comment to the to-do.
    + voidaddContact(Contact contact) + +
    +          Adds a contact to the to-do.
    + ContactaddContact(String contact) + +
    +          Adds a contact to the to-do.
    + voidaddExceptionDates(ExceptionDates exceptionDates) + +
    +          Adds a list of exceptions to the recurrence rule defined in the to-do (if + one is defined).
    + voidaddExceptionRule(ExceptionRule exceptionRule) + +
    +           + Adds an exception for the RecurrenceRule property.
    + ExceptionRuleaddExceptionRule(Recurrence recur) + +
    +           + Adds an exception for the RecurrenceRule property.
    + voidaddRecurrenceDates(RecurrenceDates recurrenceDates) + +
    +          Adds a list of dates/periods that help define the recurrence rule of this + to-do (if one is defined).
    + voidaddRelatedTo(RelatedTo relatedTo) + +
    +          Adds a component that the to-do is related to.
    + RelatedToaddRelatedTo(String uid) + +
    +          Adds a component that the to-do is related to.
    + ResourcesaddResources(List<String> resources) + +
    +          Adds a list of resources that are needed for the to-do.
    + voidaddResources(Resources resources) + +
    +          Adds a list of resources that are needed for the to-do.
    + ResourcesaddResources(String... resources) + +
    +          Adds a list of resources that are needed for the to-do.
    + List<VAlarm>getAlarms() + +
    +          Gets the alarms that are assigned to this to-do.
    + List<Attachment>getAttachments() + +
    +          Gets any attachments that are associated with the to-do.
    + List<Attendee>getAttendees() + +
    +          Gets the people who are involved in the to-do.
    + List<Categories>getCategories() + +
    +          Gets a list of "tags" or "keywords" that describe the to-do.
    + ClassificationgetClassification() + +
    +          Gets the level of sensitivity of the to-do data.
    + List<Comment>getComments() + +
    +          Gets the comments attached to the to-do.
    + CompletedgetCompleted() + +
    +          Gets the date and time that the to-do was completed.
    + List<Contact>getContacts() + +
    +          Gets the contacts associated with the to-do.
    + CreatedgetCreated() + +
    +          Gets the date-time that the to-do was initially created.
    + DateDuegetDateDue() + +
    +          Gets the date that a to-do is due by.
    + DateStartgetDateStart() + +
    +          Gets the date that the to-do starts.
    + DateTimeStampgetDateTimeStamp() + +
    +          Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the to-do was + last modified (the LastModified property also holds this + information).
    + DescriptiongetDescription() + +
    +          Gets a detailed description of the to-do.
    + DurationPropertygetDuration() + +
    +          Gets the duration of the to-do.
    + List<ExceptionDates>getExceptionDates() + +
    +          Gets the list of exceptions to the recurrence rule defined in the to-do + (if one is defined).
    + List<ExceptionRule>getExceptionRules() + +
    +           + Gets the exceptions for the RecurrenceRule property.
    + GeogetGeo() + +
    +          Gets a set of geographical coordinates.
    + LastModifiedgetLastModified() + +
    +          Gets the date-time that the to-do was last changed.
    + LocationgetLocation() + +
    +          Gets the physical location of the to-do.
    + OrganizergetOrganizer() + +
    +          Gets the organizer of the to-do.
    + PercentCompletegetPercentComplete() + +
    +          Gets the amount that the to-do task has been completed.
    + PrioritygetPriority() + +
    +          Gets the priority of the to-do.
    + List<RecurrenceDates>getRecurrenceDates() + +
    +          Gets the list of dates/periods that help define the recurrence rule of + this to-do (if one is defined).
    + RecurrenceIdgetRecurrenceId() + +
    +          Gets the original value of the DateStart property if the to-do is + recurring and has been modified.
    + RecurrenceRulegetRecurrenceRule() + +
    +          Gets how often the to-do repeats.
    + List<RelatedTo>getRelatedTo() + +
    +          Gets the components that the to-do is related to.
    + RequestStatusgetRequestStatus() + +
    +          Gets the response to a scheduling request.
    + List<Resources>getResources() + +
    +          Gets the resources that are needed for the to-do.
    + SequencegetSequence() + +
    +          Gets the revision number of the to-do.
    + StatusgetStatus() + +
    +          Gets the status of the to-do.
    + SummarygetSummary() + +
    +          Gets the summary of the to-do.
    + UidgetUid() + +
    +          Gets the unique identifier for this to-do.
    + UrlgetUrl() + +
    +          Gets a URL to a resource that contains additional information about the + to-do.
    + voidincrementSequence() + +
    +          Increments the revision number of the to-do.
    + voidsetClassification(Classification classification) + +
    +          Sets the level of sensitivity of the to-do data.
    + ClassificationsetClassification(String classification) + +
    +          Sets the level of sensitivity of the to-do data.
    + voidsetCompleted(Completed completed) + +
    +          Sets the date and time that the to-do was completed.
    + CompletedsetCompleted(Date completed) + +
    +          Sets the date and time that the to-do was completed.
    + voidsetCreated(Created created) + +
    +          Sets the date-time that the to-do was initially created.
    + CreatedsetCreated(Date created) + +
    +          Sets the date-time that the to-do was initially created.
    + DateDuesetDateDue(Date dateDue) + +
    +          Sets the date that a to-do is due by.
    + voidsetDateDue(DateDue dateDue) + +
    +          Sets the date that a to-do is due by.
    + DateStartsetDateStart(Date dateStart) + +
    +          Sets the date that the to-do starts.
    + voidsetDateStart(DateStart dateStart) + +
    +          Sets the date that the to-do starts.
    + DateTimeStampsetDateTimeStamp(Date dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the to-do was + last modified (the LastModified property also holds this + information).
    + voidsetDateTimeStamp(DateTimeStamp dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the to-do was + last modified (the LastModified property also holds this + information).
    + voidsetDescription(Description description) + +
    +          Sets a detailed description of the to-do.
    + DescriptionsetDescription(String description) + +
    +          Sets a detailed description of the to-do.
    + DurationPropertysetDuration(Duration duration) + +
    +          Sets the duration of the to-do.
    + voidsetDuration(DurationProperty duration) + +
    +          Sets the duration of the to-do.
    + voidsetGeo(Geo geo) + +
    +          Sets a set of geographical coordinates.
    + LastModifiedsetLastModified(Date lastModified) + +
    +          Sets the date-time that the to-do was last changed.
    + voidsetLastModified(LastModified lastModified) + +
    +          Sets the date-time that the to-do was last changed.
    + voidsetLocation(Location location) + +
    +          Sets the physical location of the to-do.
    + LocationsetLocation(String location) + +
    +          Sets the physical location of the to-do.
    + voidsetOrganizer(Organizer organizer) + +
    +          Sets the organizer of the to-do.
    + OrganizersetOrganizer(String email) + +
    +          Sets the organizer of the to-do.
    + PercentCompletesetPercentComplete(Integer percent) + +
    +          Sets the amount that the to-do task has been completed.
    + voidsetPercentComplete(PercentComplete percentComplete) + +
    +          Sets the amount that the to-do task has been completed.
    + PrioritysetPriority(Integer priority) + +
    +          Sets the priority of the to-do.
    + voidsetPriority(Priority priority) + +
    +          Sets the priority of the to-do.
    + RecurrenceIdsetRecurrenceId(Date originalStartDate) + +
    +          Sets the original value of the DateStart property if the to-do is + recurring and has been modified.
    + voidsetRecurrenceId(RecurrenceId recurrenceId) + +
    +          Sets the original value of the DateStart property if the to-do is + recurring and has been modified.
    + RecurrenceRulesetRecurrenceRule(Recurrence recur) + +
    +          Sets how often the to-do repeats.
    + voidsetRecurrenceRule(RecurrenceRule recurrenceRule) + +
    +          Sets how often the to-do repeats.
    + voidsetRequestStatus(RequestStatus requestStatus) + +
    +          Sets the response to a scheduling request.
    + SequencesetSequence(Integer sequence) + +
    +          Sets the revision number of the to-do.
    + voidsetSequence(Sequence sequence) + +
    +          Sets the revision number of the to-do.
    + voidsetStatus(Status status) + +
    +          Sets the status of the to-do.
    + SummarysetSummary(String summary) + +
    +          Sets the summary of the to-do.
    + voidsetSummary(Summary summary) + +
    +          Sets the summary of the to-do.
    + UidsetUid(String uid) + +
    +          Sets the unique identifier for this to-do.
    + voidsetUid(Uid uid) + +
    +          Sets the unique identifier for this to-do.
    + UrlsetUrl(String url) + +
    +          Sets a URL to a resource that contains additional information about the + to-do.
    + voidsetUrl(Url url) + +
    +          Sets a URL to a resource that contains additional information about the + to-do.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the component for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.component.ICalComponent
    addComponent, addExperimentalComponent, addExperimentalProperty, addExperimentalProperty, addProperty, checkOptionalCardinality, checkRequiredCardinality, getComponent, getComponents, getComponents, getExperimentalComponent, getExperimentalComponents, getExperimentalComponents, getExperimentalProperties, getExperimentalProperties, getExperimentalProperty, getProperties, getProperties, getProperty, removeExperimentalComponents, removeExperimentalProperty, removeProperties, setComponent, setComponent, setExperimentalComponents, setExperimentalProperty, setExperimentalProperty, setProperty, setProperty, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +VTodo

    +
    +public VTodo()
    +
    +

    + Creates a new to-do entry. +

    +

    + The following properties are auto-generated on object creation. These + properties must be present in order for the to-do to be valid: +

    +

    +

    +

    + + + + + + + + +
    +Method Detail
    + +

    +getUid

    +
    +public Uid getUid()
    +
    +
    Gets the unique identifier for this to-do. This component object comes + populated with a UID on creation. This is a required property. +

    +

    + +
    Returns:
    the UID or null if not set
    Specification Reference:
    RFC 5545 p.117-8
    +
    +
    +
    + +

    +setUid

    +
    +public void setUid(Uid uid)
    +
    +
    Sets the unique identifier for this to-do. This component object comes + populated with a UID on creation. This is a required property. +

    +

    +
    Parameters:
    uid - the UID or null to remove
    Specification Reference:
    RFC 5545 p.117-8
    +
    +
    +
    + +

    +setUid

    +
    +public Uid setUid(String uid)
    +
    +
    Sets the unique identifier for this to-do. This component object comes + populated with a UID on creation. This is a required property. +

    +

    +
    Parameters:
    uid - the UID or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.117-8
    +
    +
    +
    + +

    +getDateTimeStamp

    +
    +public DateTimeStamp getDateTimeStamp()
    +
    +
    Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the to-do was + last modified (the LastModified property also holds this + information). This to-do object comes populated with a + DateTimeStamp property that is set to the current time. This is a + required property. +

    +

    + +
    Returns:
    the date time stamp or null if not set
    Specification Reference:
    RFC 5545 p.137-8
    +
    +
    +
    + +

    +setDateTimeStamp

    +
    +public void setDateTimeStamp(DateTimeStamp dateTimeStamp)
    +
    +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the to-do was + last modified (the LastModified property also holds this + information). This to-do object comes populated with a + DateTimeStamp property that is set to the current time. This is a + required property. +

    +

    +
    Parameters:
    dateTimeStamp - the date time stamp or null to remove
    Specification Reference:
    RFC 5545 p.137-8
    +
    +
    +
    + +

    +setDateTimeStamp

    +
    +public DateTimeStamp setDateTimeStamp(Date dateTimeStamp)
    +
    +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the to-do was + last modified (the LastModified property also holds this + information). This to-do object comes populated with a + DateTimeStamp property that is set to the current time. This is a + required property. +

    +

    +
    Parameters:
    dateTimeStamp - the date time stamp or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.137-8
    +
    +
    +
    + +

    +getClassification

    +
    +public Classification getClassification()
    +
    +
    Gets the level of sensitivity of the to-do data. If not specified, the + data within the to-do should be considered "public". +

    +

    + +
    Returns:
    the classification level or null if not set
    Specification Reference:
    RFC 5545 p.82-3
    +
    +
    +
    + +

    +setClassification

    +
    +public void setClassification(Classification classification)
    +
    +
    Sets the level of sensitivity of the to-do data. If not specified, the + data within the to-do should be considered "public". +

    +

    +
    Parameters:
    classification - the classification level or null to remove
    Specification Reference:
    RFC 5545 p.82-3
    +
    +
    +
    + +

    +setClassification

    +
    +public Classification setClassification(String classification)
    +
    +
    Sets the level of sensitivity of the to-do data. If not specified, the + data within the to-do should be considered "public". +

    +

    +
    Parameters:
    classification - the classification level (e.g. "CONFIDENTIAL") or + null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.82-3
    +
    +
    +
    + +

    +getCompleted

    +
    +public Completed getCompleted()
    +
    +
    Gets the date and time that the to-do was completed. +

    +

    + +
    Returns:
    the completion date or null if not set
    Specification Reference:
    RFC 5545 p.94-5
    +
    +
    +
    + +

    +setCompleted

    +
    +public void setCompleted(Completed completed)
    +
    +
    Sets the date and time that the to-do was completed. +

    +

    +
    Parameters:
    completed - the completion date or null to remove
    Specification Reference:
    RFC 5545 p.94-5
    +
    +
    +
    + +

    +setCompleted

    +
    +public Completed setCompleted(Date completed)
    +
    +
    Sets the date and time that the to-do was completed. +

    +

    +
    Parameters:
    completed - the completion date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.94-5
    +
    +
    +
    + +

    +getCreated

    +
    +public Created getCreated()
    +
    +
    Gets the date-time that the to-do was initially created. +

    +

    + +
    Returns:
    the creation date-time or null if not set
    Specification Reference:
    RFC 5545 p.136
    +
    +
    +
    + +

    +setCreated

    +
    +public void setCreated(Created created)
    +
    +
    Sets the date-time that the to-do was initially created. +

    +

    +
    Parameters:
    created - the creation date-time or null to remove
    Specification Reference:
    RFC 5545 p.136
    +
    +
    +
    + +

    +setCreated

    +
    +public Created setCreated(Date created)
    +
    +
    Sets the date-time that the to-do was initially created. +

    +

    +
    Parameters:
    created - the creation date-time or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.136
    +
    +
    +
    + +

    +getDescription

    +
    +public Description getDescription()
    +
    +
    Gets a detailed description of the to-do. The description should be more + detailed than the one provided by the Summary property. +

    +

    + +
    Returns:
    the description or null if not set
    Specification Reference:
    RFC 5545 p.84-5
    +
    +
    +
    + +

    +setDescription

    +
    +public void setDescription(Description description)
    +
    +
    Sets a detailed description of the to-do. The description should be more + detailed than the one provided by the Summary property. +

    +

    +
    Parameters:
    description - the description or null to remove
    Specification Reference:
    RFC 5545 p.84-5
    +
    +
    +
    + +

    +setDescription

    +
    +public Description setDescription(String description)
    +
    +
    Sets a detailed description of the to-do. The description should be more + detailed than the one provided by the Summary property. +

    +

    +
    Parameters:
    description - the description or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.84-5
    +
    +
    +
    + +

    +getDateStart

    +
    +public DateStart getDateStart()
    +
    +
    Gets the date that the to-do starts. +

    +

    + +
    Returns:
    the start date or null if not set
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +setDateStart

    +
    +public void setDateStart(DateStart dateStart)
    +
    +
    Sets the date that the to-do starts. +

    +

    +
    Parameters:
    dateStart - the start date or null to remove
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +setDateStart

    +
    +public DateStart setDateStart(Date dateStart)
    +
    +
    Sets the date that the to-do starts. +

    +

    +
    Parameters:
    dateStart - the start date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.97-8
    +
    +
    +
    + +

    +getGeo

    +
    +public Geo getGeo()
    +
    +
    Gets a set of geographical coordinates. +

    +

    + +
    Returns:
    the geographical coordinates or null if not set
    Specification Reference:
    RFC 5545 p.85-7
    +
    +
    +
    + +

    +setGeo

    +
    +public void setGeo(Geo geo)
    +
    +
    Sets a set of geographical coordinates. +

    +

    +
    Parameters:
    geo - the geographical coordinates or null to remove
    Specification Reference:
    RFC 5545 p.85-7
    +
    +
    +
    + +

    +getLastModified

    +
    +public LastModified getLastModified()
    +
    +
    Gets the date-time that the to-do was last changed. +

    +

    + +
    Returns:
    the last modified date or null if not set
    Specification Reference:
    RFC 5545 p.138
    +
    +
    +
    + +

    +setLastModified

    +
    +public void setLastModified(LastModified lastModified)
    +
    +
    Sets the date-time that the to-do was last changed. +

    +

    +
    Parameters:
    lastModified - the last modified date or null to remove
    Specification Reference:
    RFC 5545 p.138
    +
    +
    +
    + +

    +setLastModified

    +
    +public LastModified setLastModified(Date lastModified)
    +
    +
    Sets the date-time that the to-do was last changed. +

    +

    +
    Parameters:
    lastModified - the last modified date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.138
    +
    +
    +
    + +

    +getLocation

    +
    +public Location getLocation()
    +
    +
    Gets the physical location of the to-do. +

    +

    + +
    Returns:
    the location or null if not set
    Specification Reference:
    RFC 5545 p.87-8
    +
    +
    +
    + +

    +setLocation

    +
    +public void setLocation(Location location)
    +
    +
    Sets the physical location of the to-do. +

    +

    +
    Parameters:
    location - the location or null to remove
    Specification Reference:
    RFC 5545 p.87-8
    +
    +
    +
    + +

    +setLocation

    +
    +public Location setLocation(String location)
    +
    +
    Sets the physical location of the to-do. +

    +

    +
    Parameters:
    location - the location (e.g. "Room 101") or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.87-8
    +
    +
    +
    + +

    +getOrganizer

    +
    +public Organizer getOrganizer()
    +
    +
    Gets the organizer of the to-do. +

    +

    + +
    Returns:
    the organizer or null if not set
    Specification Reference:
    RFC 5545 p.111-2
    +
    +
    +
    + +

    +setOrganizer

    +
    +public void setOrganizer(Organizer organizer)
    +
    +
    Sets the organizer of the to-do. +

    +

    +
    Parameters:
    organizer - the organizer or null to remove
    Specification Reference:
    RFC 5545 p.111-2
    +
    +
    +
    + +

    +setOrganizer

    +
    +public Organizer setOrganizer(String email)
    +
    +
    Sets the organizer of the to-do. +

    +

    +
    Parameters:
    email - the organizer's email address (e.g. "johndoe@example.com") + or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.111-2
    +
    +
    +
    + +

    +getPercentComplete

    +
    +public PercentComplete getPercentComplete()
    +
    +
    Gets the amount that the to-do task has been completed. +

    +

    + +
    Returns:
    the percent complete or null if not set
    Specification Reference:
    RFC 5545 p.88-9
    +
    +
    +
    + +

    +setPercentComplete

    +
    +public void setPercentComplete(PercentComplete percentComplete)
    +
    +
    Sets the amount that the to-do task has been completed. +

    +

    +
    Parameters:
    percentComplete - the percent complete or null to remove
    Specification Reference:
    RFC 5545 p.88-9
    +
    +
    +
    + +

    +setPercentComplete

    +
    +public PercentComplete setPercentComplete(Integer percent)
    +
    +
    Sets the amount that the to-do task has been completed. +

    +

    +
    Parameters:
    percent - the percent complete (e.g. "50" for 50%) or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.88-9
    +
    +
    +
    + +

    +getPriority

    +
    +public Priority getPriority()
    +
    +
    Gets the priority of the to-do. +

    +

    + +
    Returns:
    the priority or null if not set
    Specification Reference:
    RFC 5545 p.89-90
    +
    +
    +
    + +

    +setPriority

    +
    +public void setPriority(Priority priority)
    +
    +
    Sets the priority of the to-do. +

    +

    +
    Parameters:
    priority - the priority or null to remove
    Specification Reference:
    RFC 5545 p.89-90
    +
    +
    +
    + +

    +setPriority

    +
    +public Priority setPriority(Integer priority)
    +
    +
    Sets the priority of the to-do. +

    +

    +
    Parameters:
    priority - the priority ("0" is undefined, "1" is the highest, "9" + is the lowest) or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.89-90
    +
    +
    +
    + +

    +getRecurrenceId

    +
    +public RecurrenceId getRecurrenceId()
    +
    +
    Gets the original value of the DateStart property if the to-do is + recurring and has been modified. Used in conjunction with the Uid + and Sequence properties to uniquely identify a recurrence + instance. +

    +

    + +
    Returns:
    the recurrence ID or null if not set
    Specification Reference:
    RFC 5545 p.112-4
    +
    +
    +
    + +

    +setRecurrenceId

    +
    +public void setRecurrenceId(RecurrenceId recurrenceId)
    +
    +
    Sets the original value of the DateStart property if the to-do is + recurring and has been modified. Used in conjunction with the Uid + and Sequence properties to uniquely identify a recurrence + instance. +

    +

    +
    Parameters:
    recurrenceId - the recurrence ID or null to remove
    Specification Reference:
    RFC 5545 p.112-4
    +
    +
    +
    + +

    +setRecurrenceId

    +
    +public RecurrenceId setRecurrenceId(Date originalStartDate)
    +
    +
    Sets the original value of the DateStart property if the to-do is + recurring and has been modified. Used in conjunction with the Uid + and Sequence properties to uniquely identify a recurrence + instance. +

    +

    +
    Parameters:
    originalStartDate - the original start date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.112-4
    +
    +
    +
    + +

    +getSequence

    +
    +public Sequence getSequence()
    +
    +
    Gets the revision number of the to-do. The organizer can increment this + number every time he or she makes a significant change. +

    +

    + +
    Returns:
    the sequence number
    Specification Reference:
    RFC 5545 p.138-9
    +
    +
    +
    + +

    +setSequence

    +
    +public void setSequence(Sequence sequence)
    +
    +
    Sets the revision number of the to-do. The organizer can increment this + number every time he or she makes a significant change. +

    +

    +
    Parameters:
    sequence - the sequence number
    Specification Reference:
    RFC 5545 p.138-9
    +
    +
    +
    + +

    +setSequence

    +
    +public Sequence setSequence(Integer sequence)
    +
    +
    Sets the revision number of the to-do. The organizer can increment this + number every time he or she makes a significant change. +

    +

    +
    Parameters:
    sequence - the sequence number +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.138-9
    +
    +
    +
    + +

    +incrementSequence

    +
    +public void incrementSequence()
    +
    +
    Increments the revision number of the to-do. The organizer can increment + this number every time he or she makes a significant change. +

    +

    +
    Specification Reference:
    RFC 5545 p.138-9
    +
    +
    +
    + +

    +getStatus

    +
    +public Status getStatus()
    +
    +
    Gets the status of the to-do. +

    +

    + +
    Returns:
    the status or null if not set
    Specification Reference:
    RFC 5545 p.92-3
    +
    +
    +
    + +

    +setStatus

    +
    +public void setStatus(Status status)
    +
    +
    Sets the status of the to-do. +

    + Valid to-do status codes are: +

      +
    • NEEDS-ACTION
    • +
    • COMPLETED
    • +
    • IN-PROGRESS
    • +
    • CANCELLED
    • +
    +

    +

    +

    +
    Parameters:
    status - the status or null to remove
    Specification Reference:
    RFC 5545 p.92-3
    +
    +
    +
    + +

    +getSummary

    +
    +public Summary getSummary()
    +
    +
    Gets the summary of the to-do. +

    +

    + +
    Returns:
    the summary or null if not set
    Specification Reference:
    RFC 5545 p.93-4
    +
    +
    +
    + +

    +setSummary

    +
    +public void setSummary(Summary summary)
    +
    +
    Sets the summary of the to-do. +

    +

    +
    Parameters:
    summary - the summary or null to remove
    Specification Reference:
    RFC 5545 p.93-4
    +
    +
    +
    + +

    +setSummary

    +
    +public Summary setSummary(String summary)
    +
    +
    Sets the summary of the to-do. +

    +

    +
    Parameters:
    summary - the summary or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.93-4
    +
    +
    +
    + +

    +getUrl

    +
    +public Url getUrl()
    +
    +
    Gets a URL to a resource that contains additional information about the + to-do. +

    +

    + +
    Returns:
    the URL or null if not set
    Specification Reference:
    RFC 5545 p.116-7
    +
    +
    +
    + +

    +setUrl

    +
    +public void setUrl(Url url)
    +
    +
    Sets a URL to a resource that contains additional information about the + to-do. +

    +

    +
    Parameters:
    url - the URL or null to remove
    Specification Reference:
    RFC 5545 p.116-7
    +
    +
    +
    + +

    +setUrl

    +
    +public Url setUrl(String url)
    +
    +
    Sets a URL to a resource that contains additional information about the + to-do. +

    +

    +
    Parameters:
    url - the URL (e.g. "http://example.com/resource.ics") or null to + remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.116-7
    +
    +
    +
    + +

    +getRecurrenceRule

    +
    +public RecurrenceRule getRecurrenceRule()
    +
    +
    Gets how often the to-do repeats. +

    +

    + +
    Returns:
    the recurrence rule or null if not set
    Specification Reference:
    RFC 5545 p.122-32
    +
    +
    +
    + +

    +setRecurrenceRule

    +
    +public RecurrenceRule setRecurrenceRule(Recurrence recur)
    +
    +
    Sets how often the to-do repeats. +

    +

    +
    Parameters:
    recur - the recurrence rule or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.122-32
    +
    +
    +
    + +

    +setRecurrenceRule

    +
    +public void setRecurrenceRule(RecurrenceRule recurrenceRule)
    +
    +
    Sets how often the to-do repeats. +

    +

    +
    Parameters:
    recurrenceRule - the recurrence rule or null to remove
    Specification Reference:
    RFC 5545 p.122-32
    +
    +
    +
    + +

    +getDateDue

    +
    +public DateDue getDateDue()
    +
    +
    Gets the date that a to-do is due by. +

    +

    + +
    Returns:
    the due date or null if not set
    Specification Reference:
    RFC 5545 p.96-7
    +
    +
    +
    + +

    +setDateDue

    +
    +public void setDateDue(DateDue dateDue)
    +
    +
    Sets the date that a to-do is due by. This must NOT be set if a + DurationProperty is defined. +

    +

    +
    Parameters:
    dateDue - the due date or null to remove
    Specification Reference:
    RFC 5545 p.96-7
    +
    +
    +
    + +

    +setDateDue

    +
    +public DateDue setDateDue(Date dateDue)
    +
    +
    Sets the date that a to-do is due by. This must NOT be set if a + DurationProperty is defined. +

    +

    +
    Parameters:
    dateDue - the due date or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.96-7
    +
    +
    +
    + +

    +getDuration

    +
    +public DurationProperty getDuration()
    +
    +
    Gets the duration of the to-do. +

    +

    + +
    Returns:
    the duration or null if not set
    Specification Reference:
    RFC 5545 p.99
    +
    +
    +
    + +

    +setDuration

    +
    +public void setDuration(DurationProperty duration)
    +
    +
    Sets the duration of the to-do. This must NOT be set if a DateDue + is defined. +

    +

    +
    Parameters:
    duration - the duration or null to remove
    Specification Reference:
    RFC 5545 p.99
    +
    +
    +
    + +

    +setDuration

    +
    +public DurationProperty setDuration(Duration duration)
    +
    +
    Sets the duration of the to-do. This must NOT be set if a DateDue + is defined. +

    +

    +
    Parameters:
    duration - the duration or null to remove +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.99
    +
    +
    +
    + +

    +getAttachments

    +
    +public List<Attachment> getAttachments()
    +
    +
    Gets any attachments that are associated with the to-do. +

    +

    + +
    Returns:
    the attachments
    Specification Reference:
    RFC 5545 p.80-1
    +
    +
    +
    + +

    +addAttachment

    +
    +public void addAttachment(Attachment attachment)
    +
    +
    Adds an attachment to the to-do. +

    +

    +
    Parameters:
    attachment - the attachment to add
    Specification Reference:
    RFC 5545 p.80-1
    +
    +
    +
    + +

    +getAttendees

    +
    +public List<Attendee> getAttendees()
    +
    +
    Gets the people who are involved in the to-do. +

    +

    + +
    Returns:
    the attendees
    Specification Reference:
    RFC 5545 p.107-9
    +
    +
    +
    + +

    +addAttendee

    +
    +public void addAttendee(Attendee attendee)
    +
    +
    Adds a person who is involved in the to-do. +

    +

    +
    Parameters:
    attendee - the attendee
    Specification Reference:
    RFC 5545 p.107-9
    +
    +
    +
    + +

    +addAttendee

    +
    +public Attendee addAttendee(String email)
    +
    +
    Adds a person who is involved in the to-do. +

    +

    +
    Parameters:
    email - the attendee's email address +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.107-9
    +
    +
    +
    + +

    +getCategories

    +
    +public List<Categories> getCategories()
    +
    +
    Gets a list of "tags" or "keywords" that describe the to-do. +

    +

    + +
    Returns:
    the categories
    Specification Reference:
    RFC 5545 p.81-2
    +
    +
    +
    + +

    +addCategories

    +
    +public void addCategories(Categories categories)
    +
    +
    Adds a list of "tags" or "keywords" that describe the to-do. Note that a + single property can hold multiple keywords. +

    +

    +
    Parameters:
    categories - the categories to add
    Specification Reference:
    RFC 5545 p.81-2
    +
    +
    +
    + +

    +addCategories

    +
    +public Categories addCategories(String... categories)
    +
    +
    Adds a list of "tags" or "keywords" that describe the to-do. +

    +

    +
    Parameters:
    categories - the categories to add +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.81-2
    +
    +
    +
    + +

    +addCategories

    +
    +public Categories addCategories(List<String> categories)
    +
    +
    Adds a list of "tags" or "keywords" that describe the to-do. +

    +

    +
    Parameters:
    categories - the categories to add +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.81-2
    +
    +
    +
    + +

    +getComments

    +
    +public List<Comment> getComments()
    +
    +
    Gets the comments attached to the to-do. +

    +

    + +
    Returns:
    the comments
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +addComment

    +
    +public void addComment(Comment comment)
    +
    +
    Adds a comment to the to-do. +

    +

    +
    Parameters:
    comment - the comment to add
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +addComment

    +
    +public Comment addComment(String comment)
    +
    +
    Adds a comment to the to-do. +

    +

    +
    Parameters:
    comment - the comment to add +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.83-4
    +
    +
    +
    + +

    +getContacts

    +
    +public List<Contact> getContacts()
    +
    +
    Gets the contacts associated with the to-do. +

    +

    + +
    Returns:
    the contacts
    Specification Reference:
    RFC 5545 p.109-11
    +
    +
    +
    + +

    +addContact

    +
    +public void addContact(Contact contact)
    +
    +
    Adds a contact to the to-do. +

    +

    +
    Parameters:
    contact - the contact
    Specification Reference:
    RFC 5545 p.109-11
    +
    +
    +
    + +

    +addContact

    +
    +public Contact addContact(String contact)
    +
    +
    Adds a contact to the to-do. +

    +

    +
    Parameters:
    contact - the contact (e.g. "ACME Co - (123) 555-1234") +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.109-11
    +
    +
    +
    + +

    +getExceptionDates

    +
    +public List<ExceptionDates> getExceptionDates()
    +
    +
    Gets the list of exceptions to the recurrence rule defined in the to-do + (if one is defined). +

    +

    + +
    Returns:
    the list of exceptions
    Specification Reference:
    RFC 5545 p.118-20
    +
    +
    +
    + +

    +addExceptionDates

    +
    +public void addExceptionDates(ExceptionDates exceptionDates)
    +
    +
    Adds a list of exceptions to the recurrence rule defined in the to-do (if + one is defined). Note that this property can contain multiple dates. +

    +

    +
    Parameters:
    exceptionDates - the list of exceptions
    Specification Reference:
    RFC 5545 p.118-20
    +
    +
    +
    + +

    +getRequestStatus

    +
    +public RequestStatus getRequestStatus()
    +
    +
    Gets the response to a scheduling request. +

    +

    + +
    Returns:
    the response
    Specification Reference:
    RFC 5545 p.141-3
    +
    +
    +
    + +

    +setRequestStatus

    +
    +public void setRequestStatus(RequestStatus requestStatus)
    +
    +
    Sets the response to a scheduling request. +

    +

    +
    Parameters:
    requestStatus - the response
    Specification Reference:
    RFC 5545 p.141-3
    +
    +
    +
    + +

    +getRelatedTo

    +
    +public List<RelatedTo> getRelatedTo()
    +
    +
    Gets the components that the to-do is related to. +

    +

    + +
    Returns:
    the relationships
    Specification Reference:
    RFC 5545 p.115-6
    +
    +
    +
    + +

    +addRelatedTo

    +
    +public void addRelatedTo(RelatedTo relatedTo)
    +
    +
    Adds a component that the to-do is related to. +

    +

    +
    Parameters:
    relatedTo - the relationship
    Specification Reference:
    RFC 5545 p.115-6
    +
    +
    +
    + +

    +addRelatedTo

    +
    +public RelatedTo addRelatedTo(String uid)
    +
    +
    Adds a component that the to-do is related to. +

    +

    +
    Parameters:
    uid - the UID of the other component +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.115-6
    +
    +
    +
    + +

    +getResources

    +
    +public List<Resources> getResources()
    +
    +
    Gets the resources that are needed for the to-do. +

    +

    + +
    Returns:
    the resources
    Specification Reference:
    RFC 5545 p.91
    +
    +
    +
    + +

    +addResources

    +
    +public void addResources(Resources resources)
    +
    +
    Adds a list of resources that are needed for the to-do. Note that a + single property can hold multiple resources. +

    +

    +
    Parameters:
    resources - the resources to add
    Specification Reference:
    RFC 5545 p.91
    +
    +
    +
    + +

    +addResources

    +
    +public Resources addResources(String... resources)
    +
    +
    Adds a list of resources that are needed for the to-do. +

    +

    +
    Parameters:
    resources - the resources to add (e.g. "easel", "projector") +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.91
    +
    +
    +
    + +

    +addResources

    +
    +public Resources addResources(List<String> resources)
    +
    +
    Adds a list of resources that are needed for the to-do. +

    +

    +
    Parameters:
    resources - the resources to add (e.g. "easel", "projector") +
    Returns:
    the property that was created
    Specification Reference:
    RFC 5545 p.91
    +
    +
    +
    + +

    +getRecurrenceDates

    +
    +public List<RecurrenceDates> getRecurrenceDates()
    +
    +
    Gets the list of dates/periods that help define the recurrence rule of + this to-do (if one is defined). +

    +

    + +
    Returns:
    the recurrence dates
    Specification Reference:
    RFC 5545 p.120-2
    +
    +
    +
    + +

    +addRecurrenceDates

    +
    +public void addRecurrenceDates(RecurrenceDates recurrenceDates)
    +
    +
    Adds a list of dates/periods that help define the recurrence rule of this + to-do (if one is defined). +

    +

    +
    Parameters:
    recurrenceDates - the recurrence dates
    Specification Reference:
    RFC 5545 p.120-2
    +
    +
    +
    + +

    +getAlarms

    +
    +public List<VAlarm> getAlarms()
    +
    +
    Gets the alarms that are assigned to this to-do. +

    +

    + +
    Returns:
    the alarms
    Specification Reference:
    RFC 5545 p.71-6
    +
    +
    +
    + +

    +addAlarm

    +
    +public void addAlarm(VAlarm alarm)
    +
    +
    Adds an alarm to this to-do. +

    +

    +
    Parameters:
    alarm - the alarm
    Specification Reference:
    RFC 5545 p.71-6
    +
    +
    +
    + +

    +getExceptionRules

    +
    +public List<ExceptionRule> getExceptionRules()
    +
    +

    + Gets the exceptions for the RecurrenceRule property. +

    +

    + Note that this property has been removed from the latest version of the + iCal specification. Its use should be avoided. +

    +

    +

    + +
    Returns:
    the exception rules
    Specification Reference:
    RFC 2445 p.114-15
    +
    +
    +
    + +

    +addExceptionRule

    +
    +public ExceptionRule addExceptionRule(Recurrence recur)
    +
    +

    + Adds an exception for the RecurrenceRule property. +

    +

    + Note that this property has been removed from the latest version of the + iCal specification. Its use should be avoided. +

    +

    +

    +
    Parameters:
    recur - the exception rule to add +
    Returns:
    the property that was created
    Specification Reference:
    RFC 2445 p.114-15
    +
    +
    +
    + +

    +addExceptionRule

    +
    +public void addExceptionRule(ExceptionRule exceptionRule)
    +
    +

    + Adds an exception for the RecurrenceRule property. +

    +

    + Note that this property has been removed from the latest version of the + iCal specification. Its use should be avoided. +

    +

    +

    +
    Parameters:
    exceptionRule - the exception rule to add
    Specification Reference:
    RFC 2445 p.114-15
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalComponent
    +
    Checks the component for data consistency problems or deviations from the + spec. Meant to be overridden by child classes. +

    +

    +
    Overrides:
    validate in class ICalComponent
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the component belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/DaylightSavingsTime.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/DaylightSavingsTime.html new file mode 100644 index 000000000..ba8640f24 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/DaylightSavingsTime.html @@ -0,0 +1,226 @@ + + + + + + + +Uses of Class biweekly.component.DaylightSavingsTime (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.DaylightSavingsTime

    +
    + + + + + + + + + + + + + +
    +Packages that use DaylightSavingsTime
    biweekly.component  
    biweekly.component.marshaller  
    +  +

    + + + + + +
    +Uses of DaylightSavingsTime in biweekly.component
    +  +

    + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type DaylightSavingsTime
    + List<DaylightSavingsTime>VTimezone.getDaylightSavingsTime() + +
    +          Gets the timezone's "daylight savings" observance time ranges.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type DaylightSavingsTime
    + voidVTimezone.addDaylightSavingsTime(DaylightSavingsTime daylightSavingsTime) + +
    +          Adds a "daylight savings" observance time range.
    +  +

    + + + + + +
    +Uses of DaylightSavingsTime in biweekly.component.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.component.marshaller that return DaylightSavingsTime
    +protected  DaylightSavingsTimeDaylightSavingsTimeMarshaller._newInstance() + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/ICalComponent.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/ICalComponent.html new file mode 100644 index 000000000..5b8fbbca1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/ICalComponent.html @@ -0,0 +1,1115 @@ + + + + + + + +Uses of Class biweekly.component.ICalComponent (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.ICalComponent

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use ICalComponent
    biweekly  
    biweekly.component  
    biweekly.component.marshaller  
    biweekly.io  
    biweekly.io.json  
    biweekly.io.text  
    biweekly.io.xml  
    biweekly.property  
    +  +

    + + + + + +
    +Uses of ICalComponent in biweekly
    +  +

    + + + + + + + + + +
    Subclasses of ICalComponent in biweekly
    + classICalendar + +
    +           + Represents an iCalendar object.
    +  +

    + + + + + + + + + +
    Methods in biweekly that return ICalComponent
    + ICalComponentValidationWarnings.WarningsGroup.getComponent() + +
    +          Gets the component object that caused the validation warnings.
    +  +

    + + + + + + + + + +
    Methods in biweekly that return types with arguments of type ICalComponent
    + List<ICalComponent>ValidationWarnings.WarningsGroup.getComponentHierarchy() + +
    +          Gets the hierarchy of components that the property or component + belongs to.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Method parameters in biweekly with type arguments of type ICalComponent
    + List<ValidationWarnings.WarningsGroup>ValidationWarnings.getByComponent(Class<? extends ICalComponent> componentClass) + +
    +          Gets all validation warnings of a given component.
    + Biweekly.ParserChainTextReaderBiweekly.ParserChainTextReader.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainTextStringBiweekly.ParserChainTextString.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainXmlStringBiweekly.ParserChainXmlString.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainXmlReaderBiweekly.ParserChainXmlReader.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainXmlDocumentBiweekly.ParserChainXmlDocument.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainJsonReaderBiweekly.ParserChainJsonReader.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainJsonStringBiweekly.ParserChainJsonString.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.WriterChainXmlBiweekly.WriterChainXml.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    +protected  voidICalendar.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +  +

    + + + + + + + + +
    Constructors in biweekly with parameters of type ICalComponent
    ValidationWarnings.WarningsGroup(ICalComponent component, + List<ICalComponent> componentHierarchy, + List<String> messages) + +
    +          Creates a new set of validation warnings for a component.
    +  +

    + + + + + + + + + + + +
    Constructor parameters in biweekly with type arguments of type ICalComponent
    ValidationWarnings.WarningsGroup(ICalComponent component, + List<ICalComponent> componentHierarchy, + List<String> messages) + +
    +          Creates a new set of validation warnings for a component.
    ValidationWarnings.WarningsGroup(ICalProperty property, + List<ICalComponent> componentHierarchy, + List<String> messages) + +
    +          Creates a new set of validation warnings for a property.
    +  +

    + + + + + +
    +Uses of ICalComponent in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of ICalComponent in biweekly.component
    + classDaylightSavingsTime + +
    +           + Defines a daylight savings time range within a VTimezone.
    + classObservance + +
    +          Parent class for the "daylight" and "standard" timezone observances.
    + classRawComponent + +
    +          A component that does not have a marshaller associated with it.
    + classStandardTime + +
    +           + Defines a standard time range within a VTimezone.
    + classVAlarm + +
    +           + Defines a reminder for an event or to-do task.
    + classVEvent + +
    +           + Defines a scheduled activity, such as a meeting that's two hours long.
    + classVFreeBusy + +
    +           + Defines a collection of time ranges that describe when the person is + available or unavailable.
    + classVJournal + +
    +           + Defines descriptive text associated with the calendar data.
    + classVTimezone + +
    +           + Defines a timezone's UTC offsets throughout the year.
    + classVTodo + +
    +           + Defines a task or assignment.
    +  +

    + + + + + + + + + + + + + +
    Fields in biweekly.component with type parameters of type ICalComponent
    +protected  ListMultimap<Class<? extends ICalComponent>,ICalComponent>ICalComponent.components + +
    +           
    +protected  ListMultimap<Class<? extends ICalComponent>,ICalComponent>ICalComponent.components + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with type parameters of type ICalComponent
    + + + + + +
    +<T extends ICalComponent> +
    +T
    +
    ICalComponent.getComponent(Class<T> clazz) + +
    +          Gets the first component of a given class.
    + + + + + +
    +<T extends ICalComponent> +
    +List<T>
    +
    ICalComponent.getComponents(Class<T> clazz) + +
    +          Gets all components of a given class.
    + + + + + +
    +<T extends ICalComponent> +
    +void
    +
    ICalComponent.setComponent(Class<T> clazz, + T component) + +
    +          Replaces all components of a given class with the given component.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type ICalComponent
    + ListMultimap<Class<? extends ICalComponent>,ICalComponent>ICalComponent.getComponents() + +
    +          Gets all the sub-components associated with this component.
    + ListMultimap<Class<? extends ICalComponent>,ICalComponent>ICalComponent.getComponents() + +
    +          Gets all the sub-components associated with this component.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type ICalComponent
    + voidICalComponent.addComponent(ICalComponent component) + +
    +          Adds a sub-component to this component.
    + voidICalComponent.setComponent(ICalComponent component) + +
    +          Replaces all components of a given class with the given component.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Method parameters in biweekly.component with type arguments of type ICalComponent
    + List<ValidationWarnings.WarningsGroup>ICalComponent.validate(List<ICalComponent> hierarchy) + +
    +          Checks the component for data consistency problems or deviations from the + spec.
    +protected  voidVTodo.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidVTimezone.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidVJournal.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidVFreeBusy.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidVEvent.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidVAlarm.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidObservance.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidICalComponent.validate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the component for data consistency problems or deviations from the + spec.
    +  +

    + + + + + +
    +Uses of ICalComponent in biweekly.component.marshaller
    +  +

    + + + + + + + + + +
    Classes in biweekly.component.marshaller with type parameters of type ICalComponent
    + classICalComponentMarshaller<T extends ICalComponent> + +
    +          Base class for iCalendar component marshallers.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component.marshaller that return types with arguments of type ICalComponent
    + Collection<ICalComponent>ICalComponentMarshaller.getComponents(T component) + +
    +          Gets the sub-components to marshal.
    +  +

    + + + + + +
    +Uses of ICalComponent in biweekly.io
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.io that return types with arguments of type ICalComponent
    + ICalComponentMarshaller<? extends ICalComponent>ICalMarshallerRegistrar.getComponentMarshaller(Class<? extends ICalComponent> clazz) + +
    +          Gets a component marshaller by class.
    + ICalComponentMarshaller<? extends ICalComponent>ICalMarshallerRegistrar.getComponentMarshaller(ICalComponent component) + +
    +          Gets the appropriate component marshaller for a given component instance.
    + ICalComponentMarshaller<? extends ICalComponent>ICalMarshallerRegistrar.getComponentMarshaller(String componentName) + +
    +          Gets a component marshaller by name.
    +  +

    + + + + + + + + + +
    Methods in biweekly.io with parameters of type ICalComponent
    + ICalComponentMarshaller<? extends ICalComponent>ICalMarshallerRegistrar.getComponentMarshaller(ICalComponent component) + +
    +          Gets the appropriate component marshaller for a given component instance.
    +  +

    + + + + + + + + + + + + + + + + + +
    Method parameters in biweekly.io with type arguments of type ICalComponent
    + ICalComponentMarshaller<? extends ICalComponent>ICalMarshallerRegistrar.getComponentMarshaller(Class<? extends ICalComponent> clazz) + +
    +          Gets a component marshaller by class.
    + voidICalMarshallerRegistrar.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Registers a component marshaller.
    + voidICalMarshallerRegistrar.unregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Unregisters a component marshaller.
    +  +

    + + + + + +
    +Uses of ICalComponent in biweekly.io.json
    +  +

    + + + + + + + + + + + + + +
    Method parameters in biweekly.io.json with type arguments of type ICalComponent
    + voidJCalWriter.registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    + voidJCalReader.registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    +  +

    + + + + + +
    +Uses of ICalComponent in biweekly.io.text
    +  +

    + + + + + + + + + + + + + +
    Method parameters in biweekly.io.text with type arguments of type ICalComponent
    + voidICalWriter.registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    + voidICalReader.registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    +  +

    + + + + + +
    +Uses of ICalComponent in biweekly.io.xml
    +  +

    + + + + + + + + + +
    Method parameters in biweekly.io.xml with type arguments of type ICalComponent
    + voidXCalDocument.registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    +  +

    + + + + + +
    +Uses of ICalComponent in biweekly.property
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Method parameters in biweekly.property with type arguments of type ICalComponent
    + List<String>ICalProperty.validate(List<ICalComponent> components) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    +protected  voidVersion.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidValuedProperty.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidUtcOffsetProperty.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidTrigger.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidRequestStatus.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidRecurrenceRule.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidRecurrenceProperty.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidRecurrenceDates.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidPercentComplete.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidListProperty.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidICalProperty.validate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    +protected  voidGeo.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidFreeBusy.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidExceptionRule.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidExceptionDates.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidEnumProperty.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidDateOrDateTimeProperty.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +protected  voidAttachment.validate(List<ICalComponent> components, + List<String> warnings) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/Observance.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/Observance.html new file mode 100644 index 000000000..0c6f492d4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/Observance.html @@ -0,0 +1,191 @@ + + + + + + + +Uses of Class biweekly.component.Observance (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.Observance

    +
    + + + + + + + + + +
    +Packages that use Observance
    biweekly.component  
    +  +

    + + + + + +
    +Uses of Observance in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Subclasses of Observance in biweekly.component
    + classDaylightSavingsTime + +
    +           + Defines a daylight savings time range within a VTimezone.
    + classStandardTime + +
    +           + Defines a standard time range within a VTimezone.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/RawComponent.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/RawComponent.html new file mode 100644 index 000000000..642b81417 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/RawComponent.html @@ -0,0 +1,251 @@ + + + + + + + +Uses of Class biweekly.component.RawComponent (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.RawComponent

    +
    + + + + + + + + + + + + + +
    +Packages that use RawComponent
    biweekly.component  
    biweekly.component.marshaller  
    +  +

    + + + + + +
    +Uses of RawComponent in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return RawComponent
    + RawComponentICalComponent.addExperimentalComponent(String name) + +
    +          Adds an experimental sub-component to this component.
    + RawComponentICalComponent.getExperimentalComponent(String name) + +
    +          Gets the first experimental sub-component with a given name.
    + RawComponentICalComponent.setExperimentalComponents(String name) + +
    +          Adds an experimental sub-component to this component, removing all + existing components that have the same name.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type RawComponent
    + List<RawComponent>ICalComponent.getExperimentalComponents() + +
    +          Gets all experimental sub-components associated with this component.
    + List<RawComponent>ICalComponent.getExperimentalComponents(String name) + +
    +          Gets all experimental sub-component with a given name.
    +  +

    + + + + + +
    +Uses of RawComponent in biweekly.component.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.component.marshaller that return RawComponent
    +protected  RawComponentRawComponentMarshaller._newInstance() + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/StandardTime.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/StandardTime.html new file mode 100644 index 000000000..8b2f22503 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/StandardTime.html @@ -0,0 +1,226 @@ + + + + + + + +Uses of Class biweekly.component.StandardTime (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.StandardTime

    +
    + + + + + + + + + + + + + +
    +Packages that use StandardTime
    biweekly.component  
    biweekly.component.marshaller  
    +  +

    + + + + + +
    +Uses of StandardTime in biweekly.component
    +  +

    + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type StandardTime
    + List<StandardTime>VTimezone.getStandardTimes() + +
    +          Gets the timezone's "standard" observance time ranges.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type StandardTime
    + voidVTimezone.addStandardTime(StandardTime standardTime) + +
    +          Adds a "standard" observance time range.
    +  +

    + + + + + +
    +Uses of StandardTime in biweekly.component.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.component.marshaller that return StandardTime
    +protected  StandardTimeStandardTimeMarshaller._newInstance() + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VAlarm.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VAlarm.html new file mode 100644 index 000000000..d6e2ef122 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VAlarm.html @@ -0,0 +1,298 @@ + + + + + + + +Uses of Class biweekly.component.VAlarm (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.VAlarm

    +
    + + + + + + + + + + + + + +
    +Packages that use VAlarm
    biweekly.component  
    biweekly.component.marshaller  
    +  +

    + + + + + +
    +Uses of VAlarm in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return VAlarm
    +static VAlarmVAlarm.audio(Trigger trigger) + +
    +          Creates an audio alarm.
    +static VAlarmVAlarm.audio(Trigger trigger, + Attachment sound) + +
    +          Creates an audio alarm.
    +static VAlarmVAlarm.display(Trigger trigger, + String displayText) + +
    +          Creates a display alarm.
    +static VAlarmVAlarm.email(Trigger trigger, + String subject, + String body, + List<String> recipients) + +
    +          Creates an email alarm.
    +static VAlarmVAlarm.email(Trigger trigger, + String subject, + String body, + String... recipients) + +
    +          Creates an email alarm.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type VAlarm
    + List<VAlarm>VTodo.getAlarms() + +
    +          Gets the alarms that are assigned to this to-do.
    + List<VAlarm>VEvent.getAlarms() + +
    +          Gets the alarms that are assigned to this event.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type VAlarm
    + voidVTodo.addAlarm(VAlarm alarm) + +
    +          Adds an alarm to this to-do.
    + voidVEvent.addAlarm(VAlarm alarm) + +
    +          Adds an alarm to this event.
    +  +

    + + + + + +
    +Uses of VAlarm in biweekly.component.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.component.marshaller that return VAlarm
    +protected  VAlarmVAlarmMarshaller._newInstance() + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VEvent.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VEvent.html new file mode 100644 index 000000000..99dad15ec --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VEvent.html @@ -0,0 +1,226 @@ + + + + + + + +Uses of Class biweekly.component.VEvent (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.VEvent

    +
    + + + + + + + + + + + + + +
    +Packages that use VEvent
    biweekly  
    biweekly.component.marshaller  
    +  +

    + + + + + +
    +Uses of VEvent in biweekly
    +  +

    + + + + + + + + + +
    Methods in biweekly that return types with arguments of type VEvent
    + List<VEvent>ICalendar.getEvents() + +
    +          Gets the events.
    +  +

    + + + + + + + + + +
    Methods in biweekly with parameters of type VEvent
    + voidICalendar.addEvent(VEvent event) + +
    +          Adds an event.
    +  +

    + + + + + +
    +Uses of VEvent in biweekly.component.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.component.marshaller that return VEvent
    +protected  VEventVEventMarshaller._newInstance() + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VFreeBusy.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VFreeBusy.html new file mode 100644 index 000000000..266ceb158 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VFreeBusy.html @@ -0,0 +1,242 @@ + + + + + + + +Uses of Class biweekly.component.VFreeBusy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.VFreeBusy

    +
    + + + + + + + + + + + + + +
    +Packages that use VFreeBusy
    biweekly  
    biweekly.component.marshaller  
    +  +

    + + + + + +
    +Uses of VFreeBusy in biweekly
    +  +

    + + + + + + + + + +
    Methods in biweekly that return types with arguments of type VFreeBusy
    + List<VFreeBusy>ICalendar.getFreeBusies() + +
    +          Gets the free/busy entries.
    +  +

    + + + + + + + + + +
    Methods in biweekly with parameters of type VFreeBusy
    + voidICalendar.addFreeBusy(VFreeBusy freeBusy) + +
    +          Adds a free/busy entry.
    +  +

    + + + + + +
    +Uses of VFreeBusy in biweekly.component.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.component.marshaller that return VFreeBusy
    +protected  VFreeBusyVFreeBusyMarshaller._newInstance() + +
    +           
    +  +

    + + + + + + + + + +
    Methods in biweekly.component.marshaller with parameters of type VFreeBusy
    + List<ICalProperty>VFreeBusyMarshaller.getProperties(VFreeBusy component) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VJournal.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VJournal.html new file mode 100644 index 000000000..632577966 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VJournal.html @@ -0,0 +1,226 @@ + + + + + + + +Uses of Class biweekly.component.VJournal (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.VJournal

    +
    + + + + + + + + + + + + + +
    +Packages that use VJournal
    biweekly  
    biweekly.component.marshaller  
    +  +

    + + + + + +
    +Uses of VJournal in biweekly
    +  +

    + + + + + + + + + +
    Methods in biweekly that return types with arguments of type VJournal
    + List<VJournal>ICalendar.getJournals() + +
    +          Gets the journal entries.
    +  +

    + + + + + + + + + +
    Methods in biweekly with parameters of type VJournal
    + voidICalendar.addJournal(VJournal journal) + +
    +          Adds a journal entry.
    +  +

    + + + + + +
    +Uses of VJournal in biweekly.component.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.component.marshaller that return VJournal
    +protected  VJournalVJournalMarshaller._newInstance() + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VTimezone.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VTimezone.html new file mode 100644 index 000000000..626374426 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VTimezone.html @@ -0,0 +1,271 @@ + + + + + + + +Uses of Class biweekly.component.VTimezone (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.VTimezone

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use VTimezone
    biweekly  
    biweekly.component.marshaller  
    biweekly.property  
    +  +

    + + + + + +
    +Uses of VTimezone in biweekly
    +  +

    + + + + + + + + + +
    Methods in biweekly that return types with arguments of type VTimezone
    + List<VTimezone>ICalendar.getTimezones() + +
    +          Gets the timezones.
    +  +

    + + + + + + + + + +
    Methods in biweekly with parameters of type VTimezone
    + voidICalendar.addTimezone(VTimezone timezone) + +
    +          Adds a timezone.
    +  +

    + + + + + +
    +Uses of VTimezone in biweekly.component.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.component.marshaller that return VTimezone
    +protected  VTimezoneVTimezoneMarshaller._newInstance() + +
    +           
    +  +

    + + + + + +
    +Uses of VTimezone in biweekly.property
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property with parameters of type VTimezone
    + voidRecurrenceDates.setTimezone(VTimezone timezone) + +
    +           
    + voidExceptionDates.setTimezone(VTimezone timezone) + +
    +           
    + voidDateOrDateTimeProperty.setTimezone(VTimezone timezone) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VTodo.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VTodo.html new file mode 100644 index 000000000..12432bd0f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/class-use/VTodo.html @@ -0,0 +1,226 @@ + + + + + + + +Uses of Class biweekly.component.VTodo (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.VTodo

    +
    + + + + + + + + + + + + + +
    +Packages that use VTodo
    biweekly  
    biweekly.component.marshaller  
    +  +

    + + + + + +
    +Uses of VTodo in biweekly
    +  +

    + + + + + + + + + +
    Methods in biweekly that return types with arguments of type VTodo
    + List<VTodo>ICalendar.getTodos() + +
    +          Gets the to-dos.
    +  +

    + + + + + + + + + +
    Methods in biweekly with parameters of type VTodo
    + voidICalendar.addTodo(VTodo todo) + +
    +          Adds a to-do.
    +  +

    + + + + + +
    +Uses of VTodo in biweekly.component.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.component.marshaller that return VTodo
    +protected  VTodoVTodoMarshaller._newInstance() + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/doc-files/shBrushJava.js b/libs/biweekly-0.3.1-javadoc/biweekly/component/doc-files/shBrushJava.js new file mode 100644 index 000000000..d692fd638 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/doc-files/shBrushJava.js @@ -0,0 +1,57 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'abstract assert boolean break byte case catch char class const ' + + 'continue default do double else enum extends ' + + 'false final finally float for goto if implements import ' + + 'instanceof int interface long native new null ' + + 'package private protected public return ' + + 'short static strictfp super switch synchronized this throw throws true ' + + 'transient try void volatile while'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: /\/\*([^\*][\s\S]*)?\*\//gm, css: 'comments' }, // multiline comments + { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, css: 'preprocessor' }, // documentation comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers + { regex: /(?!\@interface\b)\@[\$\w]+\b/g, css: 'color1' }, // annotation @anno + { regex: /\@interface\b/g, css: 'color2' }, // @interface keyword + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // java keyword + ]; + + this.forHtmlScript({ + left : /(<|<)%[@!=]?/g, + right : /%(>|>)/g + }); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['java']; + + SyntaxHighlighter.brushes.Java = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/doc-files/shCore.js b/libs/biweekly-0.3.1-javadoc/biweekly/component/doc-files/shCore.js new file mode 100644 index 000000000..b47b64547 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/doc-files/shCore.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a-1},3d:6(g){e+=g}};c1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;be.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;dd.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a\'+c+""});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.Pb.P)H 1;Y I(a.Lb.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'\'+c+""+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v<3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;">1v3v 3.0.76 (72 73 3x)1Z://3u.2w/1v70 17 6U 71.6T 6X-3x 6Y 6D.6t 61 60 J 1k, 5Z 5R 5V <2R/>5U 5T 5S!\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'\',d=e.16.2x,h=d.2X,g=0;g";H c},2o:6(a,b,c){H\'<2W>\'+c+""},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;md)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P\'+c+""},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i\'+j+"":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"":"")+\'<2d 1g="17">\'+b+""},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{})) diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/DaylightSavingsTimeMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/DaylightSavingsTimeMarshaller.html new file mode 100644 index 000000000..f6e94a451 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/DaylightSavingsTimeMarshaller.html @@ -0,0 +1,292 @@ + + + + + + + +DaylightSavingsTimeMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component.marshaller +
    +Class DaylightSavingsTimeMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.component.marshaller.ICalComponentMarshaller<DaylightSavingsTime>
    +      extended by biweekly.component.marshaller.DaylightSavingsTimeMarshaller
    +
    +
    +
    +
    public class DaylightSavingsTimeMarshaller
    extends ICalComponentMarshaller<DaylightSavingsTime>
    + + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    clazz, componentName
    +  + + + + + + + + + + +
    +Constructor Summary
    DaylightSavingsTimeMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  DaylightSavingsTime_newInstance() + +
    +          Creates a new instance of the component class.
    + + + + + + + +
    Methods inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    emptyInstance, getComponentClass, getComponentName, getComponents, getProperties
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DaylightSavingsTimeMarshaller

    +
    +public DaylightSavingsTimeMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_newInstance

    +
    +protected DaylightSavingsTime _newInstance()
    +
    +
    Description copied from class: ICalComponentMarshaller
    +
    Creates a new instance of the component class. +

    +

    +
    Specified by:
    _newInstance in class ICalComponentMarshaller<DaylightSavingsTime>
    +
    +
    + +
    Returns:
    the new instance
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/ICalComponentMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/ICalComponentMarshaller.html new file mode 100644 index 000000000..180e6b41c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/ICalComponentMarshaller.html @@ -0,0 +1,443 @@ + + + + + + + +ICalComponentMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component.marshaller +
    +Class ICalComponentMarshaller<T extends ICalComponent>

    +
    +java.lang.Object
    +  extended by biweekly.component.marshaller.ICalComponentMarshaller<T>
    +
    +
    +
    Type Parameters:
    T - the component class
    +
    +
    Direct Known Subclasses:
    DaylightSavingsTimeMarshaller, ICalendarMarshaller, RawComponentMarshaller, StandardTimeMarshaller, VAlarmMarshaller, VEventMarshaller, VFreeBusyMarshaller, VJournalMarshaller, VTimezoneMarshaller, VTodoMarshaller
    +
    +
    +
    +
    public abstract class ICalComponentMarshaller<T extends ICalComponent>
    extends Object
    + + +

    +Base class for iCalendar component marshallers. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + +
    +Field Summary
    +protected  Class<T>clazz + +
    +           
    +protected  StringcomponentName + +
    +           
    +  + + + + + + + + + + +
    +Constructor Summary
    ICalComponentMarshaller(Class<T> clazz, + String componentName) + +
    +          Creates a new component marshaller.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected abstract  T_newInstance() + +
    +          Creates a new instance of the component class.
    + TemptyInstance() + +
    +          Creates a new instance of the component class that doesn't have any + properties or sub-components.
    + Class<T>getComponentClass() + +
    +          Gets the component class.
    + StringgetComponentName() + +
    +          Gets the component's name.
    + Collection<ICalComponent>getComponents(T component) + +
    +          Gets the sub-components to marshal.
    + List<ICalProperty>getProperties(T component) + +
    +          Gets the properties to marshal.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +clazz

    +
    +protected final Class<T extends ICalComponent> clazz
    +
    +
    +
    +
    +
    + +

    +componentName

    +
    +protected final String componentName
    +
    +
    +
    +
    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalComponentMarshaller

    +
    +public ICalComponentMarshaller(Class<T> clazz,
    +                               String componentName)
    +
    +
    Creates a new component marshaller. +

    +

    +
    Parameters:
    clazz - the component's class
    componentName - the component's name (e.g. "VEVENT")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getComponentClass

    +
    +public Class<T> getComponentClass()
    +
    +
    Gets the component class. +

    +

    + +
    Returns:
    the component class.
    +
    +
    +
    + +

    +getComponentName

    +
    +public String getComponentName()
    +
    +
    Gets the component's name. +

    +

    + +
    Returns:
    the compent's name (e.g. "VEVENT")
    +
    +
    +
    + +

    +emptyInstance

    +
    +public T emptyInstance()
    +
    +
    Creates a new instance of the component class that doesn't have any + properties or sub-components. +

    +

    + +
    Returns:
    the new instance
    +
    +
    +
    + +

    +_newInstance

    +
    +protected abstract T _newInstance()
    +
    +
    Creates a new instance of the component class. +

    +

    + +
    Returns:
    the new instance
    +
    +
    +
    + +

    +getComponents

    +
    +public Collection<ICalComponent> getComponents(T component)
    +
    +
    Gets the sub-components to marshal. Child classes can override this for + better control over which components are marshalled. +

    +

    +
    Parameters:
    component - the component +
    Returns:
    the sub-components to marshal
    +
    +
    +
    + +

    +getProperties

    +
    +public List<ICalProperty> getProperties(T component)
    +
    +
    Gets the properties to marshal. Child classes can override this for + better control over which properties are marshalled. +

    +

    +
    Parameters:
    component - the component +
    Returns:
    the properties to marshal
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/ICalendarMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/ICalendarMarshaller.html new file mode 100644 index 000000000..13b2ac9b9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/ICalendarMarshaller.html @@ -0,0 +1,292 @@ + + + + + + + +ICalendarMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component.marshaller +
    +Class ICalendarMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.component.marshaller.ICalComponentMarshaller<ICalendar>
    +      extended by biweekly.component.marshaller.ICalendarMarshaller
    +
    +
    +
    +
    public class ICalendarMarshaller
    extends ICalComponentMarshaller<ICalendar>
    + + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    clazz, componentName
    +  + + + + + + + + + + +
    +Constructor Summary
    ICalendarMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  ICalendar_newInstance() + +
    +          Creates a new instance of the component class.
    + + + + + + + +
    Methods inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    emptyInstance, getComponentClass, getComponentName, getComponents, getProperties
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalendarMarshaller

    +
    +public ICalendarMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_newInstance

    +
    +protected ICalendar _newInstance()
    +
    +
    Description copied from class: ICalComponentMarshaller
    +
    Creates a new instance of the component class. +

    +

    +
    Specified by:
    _newInstance in class ICalComponentMarshaller<ICalendar>
    +
    +
    + +
    Returns:
    the new instance
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/RawComponentMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/RawComponentMarshaller.html new file mode 100644 index 000000000..7ee802870 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/RawComponentMarshaller.html @@ -0,0 +1,296 @@ + + + + + + + +RawComponentMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component.marshaller +
    +Class RawComponentMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.component.marshaller.ICalComponentMarshaller<RawComponent>
    +      extended by biweekly.component.marshaller.RawComponentMarshaller
    +
    +
    +
    +
    public class RawComponentMarshaller
    extends ICalComponentMarshaller<RawComponent>
    + + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    clazz, componentName
    +  + + + + + + + + + + +
    +Constructor Summary
    RawComponentMarshaller(String componentName) + +
    +          Creates a new raw component marshaller.
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  RawComponent_newInstance() + +
    +          Creates a new instance of the component class.
    + + + + + + + +
    Methods inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    emptyInstance, getComponentClass, getComponentName, getComponents, getProperties
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RawComponentMarshaller

    +
    +public RawComponentMarshaller(String componentName)
    +
    +
    Creates a new raw component marshaller. +

    +

    +
    Parameters:
    componentName - the component's name (e.g. "X-PARTY")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_newInstance

    +
    +protected RawComponent _newInstance()
    +
    +
    Description copied from class: ICalComponentMarshaller
    +
    Creates a new instance of the component class. +

    +

    +
    Specified by:
    _newInstance in class ICalComponentMarshaller<RawComponent>
    +
    +
    + +
    Returns:
    the new instance
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/StandardTimeMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/StandardTimeMarshaller.html new file mode 100644 index 000000000..efa046f8a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/StandardTimeMarshaller.html @@ -0,0 +1,292 @@ + + + + + + + +StandardTimeMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component.marshaller +
    +Class StandardTimeMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.component.marshaller.ICalComponentMarshaller<StandardTime>
    +      extended by biweekly.component.marshaller.StandardTimeMarshaller
    +
    +
    +
    +
    public class StandardTimeMarshaller
    extends ICalComponentMarshaller<StandardTime>
    + + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    clazz, componentName
    +  + + + + + + + + + + +
    +Constructor Summary
    StandardTimeMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  StandardTime_newInstance() + +
    +          Creates a new instance of the component class.
    + + + + + + + +
    Methods inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    emptyInstance, getComponentClass, getComponentName, getComponents, getProperties
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +StandardTimeMarshaller

    +
    +public StandardTimeMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_newInstance

    +
    +protected StandardTime _newInstance()
    +
    +
    Description copied from class: ICalComponentMarshaller
    +
    Creates a new instance of the component class. +

    +

    +
    Specified by:
    _newInstance in class ICalComponentMarshaller<StandardTime>
    +
    +
    + +
    Returns:
    the new instance
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VAlarmMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VAlarmMarshaller.html new file mode 100644 index 000000000..de5c7e2cc --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VAlarmMarshaller.html @@ -0,0 +1,292 @@ + + + + + + + +VAlarmMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component.marshaller +
    +Class VAlarmMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.component.marshaller.ICalComponentMarshaller<VAlarm>
    +      extended by biweekly.component.marshaller.VAlarmMarshaller
    +
    +
    +
    +
    public class VAlarmMarshaller
    extends ICalComponentMarshaller<VAlarm>
    + + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    clazz, componentName
    +  + + + + + + + + + + +
    +Constructor Summary
    VAlarmMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  VAlarm_newInstance() + +
    +          Creates a new instance of the component class.
    + + + + + + + +
    Methods inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    emptyInstance, getComponentClass, getComponentName, getComponents, getProperties
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +VAlarmMarshaller

    +
    +public VAlarmMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_newInstance

    +
    +protected VAlarm _newInstance()
    +
    +
    Description copied from class: ICalComponentMarshaller
    +
    Creates a new instance of the component class. +

    +

    +
    Specified by:
    _newInstance in class ICalComponentMarshaller<VAlarm>
    +
    +
    + +
    Returns:
    the new instance
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VEventMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VEventMarshaller.html new file mode 100644 index 000000000..7ad01faba --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VEventMarshaller.html @@ -0,0 +1,292 @@ + + + + + + + +VEventMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component.marshaller +
    +Class VEventMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.component.marshaller.ICalComponentMarshaller<VEvent>
    +      extended by biweekly.component.marshaller.VEventMarshaller
    +
    +
    +
    +
    public class VEventMarshaller
    extends ICalComponentMarshaller<VEvent>
    + + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    clazz, componentName
    +  + + + + + + + + + + +
    +Constructor Summary
    VEventMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  VEvent_newInstance() + +
    +          Creates a new instance of the component class.
    + + + + + + + +
    Methods inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    emptyInstance, getComponentClass, getComponentName, getComponents, getProperties
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +VEventMarshaller

    +
    +public VEventMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_newInstance

    +
    +protected VEvent _newInstance()
    +
    +
    Description copied from class: ICalComponentMarshaller
    +
    Creates a new instance of the component class. +

    +

    +
    Specified by:
    _newInstance in class ICalComponentMarshaller<VEvent>
    +
    +
    + +
    Returns:
    the new instance
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VFreeBusyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VFreeBusyMarshaller.html new file mode 100644 index 000000000..5f36b4288 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VFreeBusyMarshaller.html @@ -0,0 +1,319 @@ + + + + + + + +VFreeBusyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component.marshaller +
    +Class VFreeBusyMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.component.marshaller.ICalComponentMarshaller<VFreeBusy>
    +      extended by biweekly.component.marshaller.VFreeBusyMarshaller
    +
    +
    +
    +
    public class VFreeBusyMarshaller
    extends ICalComponentMarshaller<VFreeBusy>
    + + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    clazz, componentName
    +  + + + + + + + + + + +
    +Constructor Summary
    VFreeBusyMarshaller() + +
    +           
    +  + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  VFreeBusy_newInstance() + +
    +          Creates a new instance of the component class.
    + List<ICalProperty>getProperties(VFreeBusy component) + +
    +          Gets the properties to marshal.
    + + + + + + + +
    Methods inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    emptyInstance, getComponentClass, getComponentName, getComponents
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +VFreeBusyMarshaller

    +
    +public VFreeBusyMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getProperties

    +
    +public List<ICalProperty> getProperties(VFreeBusy component)
    +
    +
    Description copied from class: ICalComponentMarshaller
    +
    Gets the properties to marshal. Child classes can override this for + better control over which properties are marshalled. +

    +

    +
    Overrides:
    getProperties in class ICalComponentMarshaller<VFreeBusy>
    +
    +
    +
    Parameters:
    component - the component +
    Returns:
    the properties to marshal
    +
    +
    +
    + +

    +_newInstance

    +
    +protected VFreeBusy _newInstance()
    +
    +
    Description copied from class: ICalComponentMarshaller
    +
    Creates a new instance of the component class. +

    +

    +
    Specified by:
    _newInstance in class ICalComponentMarshaller<VFreeBusy>
    +
    +
    + +
    Returns:
    the new instance
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VJournalMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VJournalMarshaller.html new file mode 100644 index 000000000..61c2b5e71 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VJournalMarshaller.html @@ -0,0 +1,292 @@ + + + + + + + +VJournalMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component.marshaller +
    +Class VJournalMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.component.marshaller.ICalComponentMarshaller<VJournal>
    +      extended by biweekly.component.marshaller.VJournalMarshaller
    +
    +
    +
    +
    public class VJournalMarshaller
    extends ICalComponentMarshaller<VJournal>
    + + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    clazz, componentName
    +  + + + + + + + + + + +
    +Constructor Summary
    VJournalMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  VJournal_newInstance() + +
    +          Creates a new instance of the component class.
    + + + + + + + +
    Methods inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    emptyInstance, getComponentClass, getComponentName, getComponents, getProperties
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +VJournalMarshaller

    +
    +public VJournalMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_newInstance

    +
    +protected VJournal _newInstance()
    +
    +
    Description copied from class: ICalComponentMarshaller
    +
    Creates a new instance of the component class. +

    +

    +
    Specified by:
    _newInstance in class ICalComponentMarshaller<VJournal>
    +
    +
    + +
    Returns:
    the new instance
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VTimezoneMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VTimezoneMarshaller.html new file mode 100644 index 000000000..db6603a1f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VTimezoneMarshaller.html @@ -0,0 +1,292 @@ + + + + + + + +VTimezoneMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component.marshaller +
    +Class VTimezoneMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.component.marshaller.ICalComponentMarshaller<VTimezone>
    +      extended by biweekly.component.marshaller.VTimezoneMarshaller
    +
    +
    +
    +
    public class VTimezoneMarshaller
    extends ICalComponentMarshaller<VTimezone>
    + + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    clazz, componentName
    +  + + + + + + + + + + +
    +Constructor Summary
    VTimezoneMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  VTimezone_newInstance() + +
    +          Creates a new instance of the component class.
    + + + + + + + +
    Methods inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    emptyInstance, getComponentClass, getComponentName, getComponents, getProperties
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +VTimezoneMarshaller

    +
    +public VTimezoneMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_newInstance

    +
    +protected VTimezone _newInstance()
    +
    +
    Description copied from class: ICalComponentMarshaller
    +
    Creates a new instance of the component class. +

    +

    +
    Specified by:
    _newInstance in class ICalComponentMarshaller<VTimezone>
    +
    +
    + +
    Returns:
    the new instance
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VTodoMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VTodoMarshaller.html new file mode 100644 index 000000000..480b86ea0 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/VTodoMarshaller.html @@ -0,0 +1,292 @@ + + + + + + + +VTodoMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.component.marshaller +
    +Class VTodoMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.component.marshaller.ICalComponentMarshaller<VTodo>
    +      extended by biweekly.component.marshaller.VTodoMarshaller
    +
    +
    +
    +
    public class VTodoMarshaller
    extends ICalComponentMarshaller<VTodo>
    + + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    clazz, componentName
    +  + + + + + + + + + + +
    +Constructor Summary
    VTodoMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  VTodo_newInstance() + +
    +          Creates a new instance of the component class.
    + + + + + + + +
    Methods inherited from class biweekly.component.marshaller.ICalComponentMarshaller
    emptyInstance, getComponentClass, getComponentName, getComponents, getProperties
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +VTodoMarshaller

    +
    +public VTodoMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_newInstance

    +
    +protected VTodo _newInstance()
    +
    +
    Description copied from class: ICalComponentMarshaller
    +
    Creates a new instance of the component class. +

    +

    +
    Specified by:
    _newInstance in class ICalComponentMarshaller<VTodo>
    +
    +
    + +
    Returns:
    the new instance
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/DaylightSavingsTimeMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/DaylightSavingsTimeMarshaller.html new file mode 100644 index 000000000..73201c613 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/DaylightSavingsTimeMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.component.marshaller.DaylightSavingsTimeMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.marshaller.DaylightSavingsTimeMarshaller

    +
    +No usage of biweekly.component.marshaller.DaylightSavingsTimeMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/ICalComponentMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/ICalComponentMarshaller.html new file mode 100644 index 000000000..07c2c8fe9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/ICalComponentMarshaller.html @@ -0,0 +1,515 @@ + + + + + + + +Uses of Class biweekly.component.marshaller.ICalComponentMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.marshaller.ICalComponentMarshaller

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use ICalComponentMarshaller
    biweekly  
    biweekly.component.marshaller  
    biweekly.io  
    biweekly.io.json  
    biweekly.io.text  
    biweekly.io.xml  
    +  +

    + + + + + +
    +Uses of ICalComponentMarshaller in biweekly
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly with parameters of type ICalComponentMarshaller
    + Biweekly.ParserChainTextReaderBiweekly.ParserChainTextReader.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainTextStringBiweekly.ParserChainTextString.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainXmlStringBiweekly.ParserChainXmlString.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainXmlReaderBiweekly.ParserChainXmlReader.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainXmlDocumentBiweekly.ParserChainXmlDocument.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainJsonReaderBiweekly.ParserChainJsonReader.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.ParserChainJsonStringBiweekly.ParserChainJsonString.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    + Biweekly.WriterChainXmlBiweekly.WriterChainXml.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           
    +  +

    + + + + + +
    +Uses of ICalComponentMarshaller in biweekly.component.marshaller
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of ICalComponentMarshaller in biweekly.component.marshaller
    + classDaylightSavingsTimeMarshaller + +
    +           
    + classICalendarMarshaller + +
    +           
    + classRawComponentMarshaller + +
    +           
    + classStandardTimeMarshaller + +
    +           
    + classVAlarmMarshaller + +
    +           
    + classVEventMarshaller + +
    +           
    + classVFreeBusyMarshaller + +
    +           
    + classVJournalMarshaller + +
    +           
    + classVTimezoneMarshaller + +
    +           
    + classVTodoMarshaller + +
    +           
    +  +

    + + + + + +
    +Uses of ICalComponentMarshaller in biweekly.io
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.io that return ICalComponentMarshaller
    + ICalComponentMarshaller<? extends ICalComponent>ICalMarshallerRegistrar.getComponentMarshaller(Class<? extends ICalComponent> clazz) + +
    +          Gets a component marshaller by class.
    + ICalComponentMarshaller<? extends ICalComponent>ICalMarshallerRegistrar.getComponentMarshaller(ICalComponent component) + +
    +          Gets the appropriate component marshaller for a given component instance.
    + ICalComponentMarshaller<? extends ICalComponent>ICalMarshallerRegistrar.getComponentMarshaller(String componentName) + +
    +          Gets a component marshaller by name.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.io with parameters of type ICalComponentMarshaller
    + voidICalMarshallerRegistrar.register(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Registers a component marshaller.
    + voidICalMarshallerRegistrar.unregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Unregisters a component marshaller.
    +  +

    + + + + + +
    +Uses of ICalComponentMarshaller in biweekly.io.json
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.io.json with parameters of type ICalComponentMarshaller
    + voidJCalWriter.registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    + voidJCalReader.registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    +  +

    + + + + + +
    +Uses of ICalComponentMarshaller in biweekly.io.text
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.io.text with parameters of type ICalComponentMarshaller
    + voidICalWriter.registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    + voidICalReader.registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    +  +

    + + + + + +
    +Uses of ICalComponentMarshaller in biweekly.io.xml
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.xml with parameters of type ICalComponentMarshaller
    + voidXCalDocument.registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/ICalendarMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/ICalendarMarshaller.html new file mode 100644 index 000000000..a04dc8663 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/ICalendarMarshaller.html @@ -0,0 +1,182 @@ + + + + + + + +Uses of Class biweekly.component.marshaller.ICalendarMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.marshaller.ICalendarMarshaller

    +
    + + + + + + + + + +
    +Packages that use ICalendarMarshaller
    biweekly.io  
    +  +

    + + + + + +
    +Uses of ICalendarMarshaller in biweekly.io
    +  +

    + + + + + + + + + +
    Methods in biweekly.io that return ICalendarMarshaller
    +static ICalendarMarshallerICalMarshallerRegistrar.getICalendarMarshaller() + +
    +          Convenience method for getting the marshaller of the root iCalendar + component ("VCALENDAR").
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/RawComponentMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/RawComponentMarshaller.html new file mode 100644 index 000000000..e12032cee --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/RawComponentMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.component.marshaller.RawComponentMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.marshaller.RawComponentMarshaller

    +
    +No usage of biweekly.component.marshaller.RawComponentMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/StandardTimeMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/StandardTimeMarshaller.html new file mode 100644 index 000000000..ad70ecfde --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/StandardTimeMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.component.marshaller.StandardTimeMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.marshaller.StandardTimeMarshaller

    +
    +No usage of biweekly.component.marshaller.StandardTimeMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VAlarmMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VAlarmMarshaller.html new file mode 100644 index 000000000..507a1e68e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VAlarmMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.component.marshaller.VAlarmMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.marshaller.VAlarmMarshaller

    +
    +No usage of biweekly.component.marshaller.VAlarmMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VEventMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VEventMarshaller.html new file mode 100644 index 000000000..a77c4d708 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VEventMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.component.marshaller.VEventMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.marshaller.VEventMarshaller

    +
    +No usage of biweekly.component.marshaller.VEventMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VFreeBusyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VFreeBusyMarshaller.html new file mode 100644 index 000000000..06cab29c9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VFreeBusyMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.component.marshaller.VFreeBusyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.marshaller.VFreeBusyMarshaller

    +
    +No usage of biweekly.component.marshaller.VFreeBusyMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VJournalMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VJournalMarshaller.html new file mode 100644 index 000000000..99fca67d9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VJournalMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.component.marshaller.VJournalMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.marshaller.VJournalMarshaller

    +
    +No usage of biweekly.component.marshaller.VJournalMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VTimezoneMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VTimezoneMarshaller.html new file mode 100644 index 000000000..1b7288287 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VTimezoneMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.component.marshaller.VTimezoneMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.marshaller.VTimezoneMarshaller

    +
    +No usage of biweekly.component.marshaller.VTimezoneMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VTodoMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VTodoMarshaller.html new file mode 100644 index 000000000..53d627bd9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/class-use/VTodoMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.component.marshaller.VTodoMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.component.marshaller.VTodoMarshaller

    +
    +No usage of biweekly.component.marshaller.VTodoMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/doc-files/shBrushJava.js b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/doc-files/shBrushJava.js new file mode 100644 index 000000000..d692fd638 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/doc-files/shBrushJava.js @@ -0,0 +1,57 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'abstract assert boolean break byte case catch char class const ' + + 'continue default do double else enum extends ' + + 'false final finally float for goto if implements import ' + + 'instanceof int interface long native new null ' + + 'package private protected public return ' + + 'short static strictfp super switch synchronized this throw throws true ' + + 'transient try void volatile while'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: /\/\*([^\*][\s\S]*)?\*\//gm, css: 'comments' }, // multiline comments + { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, css: 'preprocessor' }, // documentation comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers + { regex: /(?!\@interface\b)\@[\$\w]+\b/g, css: 'color1' }, // annotation @anno + { regex: /\@interface\b/g, css: 'color2' }, // @interface keyword + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // java keyword + ]; + + this.forHtmlScript({ + left : /(<|<)%[@!=]?/g, + right : /%(>|>)/g + }); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['java']; + + SyntaxHighlighter.brushes.Java = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/doc-files/shCore.js b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/doc-files/shCore.js new file mode 100644 index 000000000..b47b64547 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/doc-files/shCore.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a-1},3d:6(g){e+=g}};c1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;be.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;dd.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a\'+c+""});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.Pb.P)H 1;Y I(a.Lb.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'\'+c+""+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v<3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;">1v3v 3.0.76 (72 73 3x)1Z://3u.2w/1v70 17 6U 71.6T 6X-3x 6Y 6D.6t 61 60 J 1k, 5Z 5R 5V <2R/>5U 5T 5S!\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'\',d=e.16.2x,h=d.2X,g=0;g";H c},2o:6(a,b,c){H\'<2W>\'+c+""},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;md)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P\'+c+""},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i\'+j+"":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"":"")+\'<2d 1g="17">\'+b+""},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{})) diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-frame.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-frame.html new file mode 100644 index 000000000..ed69e8d30 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-frame.html @@ -0,0 +1,53 @@ + + + + + + + +biweekly.component.marshaller (biweekly 0.3.1 API) + + + + + + + + + + + +biweekly.component.marshaller + + + + +
    +Classes  + +
    +DaylightSavingsTimeMarshaller +
    +ICalComponentMarshaller +
    +ICalendarMarshaller +
    +RawComponentMarshaller +
    +StandardTimeMarshaller +
    +VAlarmMarshaller +
    +VEventMarshaller +
    +VFreeBusyMarshaller +
    +VJournalMarshaller +
    +VTimezoneMarshaller +
    +VTodoMarshaller
    + + + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-summary.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-summary.html new file mode 100644 index 000000000..a7f0b7168 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-summary.html @@ -0,0 +1,198 @@ + + + + + + + +biweekly.component.marshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +

    +Package biweekly.component.marshaller +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class Summary
    DaylightSavingsTimeMarshaller 
    ICalComponentMarshaller<T extends ICalComponent>Base class for iCalendar component marshallers.
    ICalendarMarshaller 
    RawComponentMarshaller 
    StandardTimeMarshaller 
    VAlarmMarshaller 
    VEventMarshaller 
    VFreeBusyMarshaller 
    VJournalMarshaller 
    VTimezoneMarshaller 
    VTodoMarshaller 
    +  + +

    +

    +
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-tree.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-tree.html new file mode 100644 index 000000000..735f08125 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-tree.html @@ -0,0 +1,156 @@ + + + + + + + +biweekly.component.marshaller Class Hierarchy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Hierarchy For Package biweekly.component.marshaller +

    +
    +
    +
    Package Hierarchies:
    All Packages
    +
    +

    +Class Hierarchy +

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-use.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-use.html new file mode 100644 index 000000000..36d35167b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/marshaller/package-use.html @@ -0,0 +1,272 @@ + + + + + + + +Uses of Package biweekly.component.marshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Package
    biweekly.component.marshaller

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use biweekly.component.marshaller
    biweekly  
    biweekly.component.marshaller  
    biweekly.io  
    biweekly.io.json  
    biweekly.io.text  
    biweekly.io.xml  
    +  +

    + + + + + + + + +
    +Classes in biweekly.component.marshaller used by biweekly
    ICalComponentMarshaller + +
    +          Base class for iCalendar component marshallers.
    +  +

    + + + + + + + + +
    +Classes in biweekly.component.marshaller used by biweekly.component.marshaller
    ICalComponentMarshaller + +
    +          Base class for iCalendar component marshallers.
    +  +

    + + + + + + + + + + + +
    +Classes in biweekly.component.marshaller used by biweekly.io
    ICalComponentMarshaller + +
    +          Base class for iCalendar component marshallers.
    ICalendarMarshaller + +
    +           
    +  +

    + + + + + + + + +
    +Classes in biweekly.component.marshaller used by biweekly.io.json
    ICalComponentMarshaller + +
    +          Base class for iCalendar component marshallers.
    +  +

    + + + + + + + + +
    +Classes in biweekly.component.marshaller used by biweekly.io.text
    ICalComponentMarshaller + +
    +          Base class for iCalendar component marshallers.
    +  +

    + + + + + + + + +
    +Classes in biweekly.component.marshaller used by biweekly.io.xml
    ICalComponentMarshaller + +
    +          Base class for iCalendar component marshallers.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/package-frame.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/package-frame.html new file mode 100644 index 000000000..0fde5a580 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/package-frame.html @@ -0,0 +1,53 @@ + + + + + + + +biweekly.component (biweekly 0.3.1 API) + + + + + + + + + + + +biweekly.component + + + + +
    +Classes  + +
    +DaylightSavingsTime +
    +ICalComponent +
    +Observance +
    +RawComponent +
    +StandardTime +
    +VAlarm +
    +VEvent +
    +VFreeBusy +
    +VJournal +
    +VTimezone +
    +VTodo
    + + + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/package-summary.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/package-summary.html new file mode 100644 index 000000000..5bcb4f5ad --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/package-summary.html @@ -0,0 +1,207 @@ + + + + + + + +biweekly.component (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +

    +Package biweekly.component +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class Summary
    DaylightSavingsTime + Defines a daylight savings time range within a VTimezone.
    ICalComponentThe base class for iCalendar components.
    ObservanceParent class for the "daylight" and "standard" timezone observances.
    RawComponentA component that does not have a marshaller associated with it.
    StandardTime + Defines a standard time range within a VTimezone.
    VAlarm + Defines a reminder for an event or to-do task.
    VEvent + Defines a scheduled activity, such as a meeting that's two hours long.
    VFreeBusy + Defines a collection of time ranges that describe when the person is + available or unavailable.
    VJournal + Defines descriptive text associated with the calendar data.
    VTimezone + Defines a timezone's UTC offsets throughout the year.
    VTodo + Defines a task or assignment.
    +  + +

    +

    +
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/package-tree.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/package-tree.html new file mode 100644 index 000000000..e643cfbf5 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/package-tree.html @@ -0,0 +1,158 @@ + + + + + + + +biweekly.component Class Hierarchy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Hierarchy For Package biweekly.component +

    +
    +
    +
    Package Hierarchies:
    All Packages
    +
    +

    +Class Hierarchy +

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/component/package-use.html b/libs/biweekly-0.3.1-javadoc/biweekly/component/package-use.html new file mode 100644 index 000000000..0ce910159 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/component/package-use.html @@ -0,0 +1,443 @@ + + + + + + + +Uses of Package biweekly.component (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Package
    biweekly.component

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use biweekly.component
    biweekly  
    biweekly.component  
    biweekly.component.marshaller  
    biweekly.io  
    biweekly.io.json  
    biweekly.io.text  
    biweekly.io.xml  
    biweekly.property  
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + +
    +Classes in biweekly.component used by biweekly
    ICalComponent + +
    +          The base class for iCalendar components.
    VEvent + +
    +           + Defines a scheduled activity, such as a meeting that's two hours long.
    VFreeBusy + +
    +           + Defines a collection of time ranges that describe when the person is + available or unavailable.
    VJournal + +
    +           + Defines descriptive text associated with the calendar data.
    VTimezone + +
    +           + Defines a timezone's UTC offsets throughout the year.
    VTodo + +
    +           + Defines a task or assignment.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + +
    +Classes in biweekly.component used by biweekly.component
    DaylightSavingsTime + +
    +           + Defines a daylight savings time range within a VTimezone.
    ICalComponent + +
    +          The base class for iCalendar components.
    Observance + +
    +          Parent class for the "daylight" and "standard" timezone observances.
    RawComponent + +
    +          A component that does not have a marshaller associated with it.
    StandardTime + +
    +           + Defines a standard time range within a VTimezone.
    VAlarm + +
    +           + Defines a reminder for an event or to-do task.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Classes in biweekly.component used by biweekly.component.marshaller
    DaylightSavingsTime + +
    +           + Defines a daylight savings time range within a VTimezone.
    ICalComponent + +
    +          The base class for iCalendar components.
    RawComponent + +
    +          A component that does not have a marshaller associated with it.
    StandardTime + +
    +           + Defines a standard time range within a VTimezone.
    VAlarm + +
    +           + Defines a reminder for an event or to-do task.
    VEvent + +
    +           + Defines a scheduled activity, such as a meeting that's two hours long.
    VFreeBusy + +
    +           + Defines a collection of time ranges that describe when the person is + available or unavailable.
    VJournal + +
    +           + Defines descriptive text associated with the calendar data.
    VTimezone + +
    +           + Defines a timezone's UTC offsets throughout the year.
    VTodo + +
    +           + Defines a task or assignment.
    +  +

    + + + + + + + + +
    +Classes in biweekly.component used by biweekly.io
    ICalComponent + +
    +          The base class for iCalendar components.
    +  +

    + + + + + + + + +
    +Classes in biweekly.component used by biweekly.io.json
    ICalComponent + +
    +          The base class for iCalendar components.
    +  +

    + + + + + + + + +
    +Classes in biweekly.component used by biweekly.io.text
    ICalComponent + +
    +          The base class for iCalendar components.
    +  +

    + + + + + + + + +
    +Classes in biweekly.component used by biweekly.io.xml
    ICalComponent + +
    +          The base class for iCalendar components.
    +  +

    + + + + + + + + + + + +
    +Classes in biweekly.component used by biweekly.property
    ICalComponent + +
    +          The base class for iCalendar components.
    VTimezone + +
    +           + Defines a timezone's UTC offsets throughout the year.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/doc-files/shBrushJava.js b/libs/biweekly-0.3.1-javadoc/biweekly/doc-files/shBrushJava.js new file mode 100644 index 000000000..d692fd638 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/doc-files/shBrushJava.js @@ -0,0 +1,57 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'abstract assert boolean break byte case catch char class const ' + + 'continue default do double else enum extends ' + + 'false final finally float for goto if implements import ' + + 'instanceof int interface long native new null ' + + 'package private protected public return ' + + 'short static strictfp super switch synchronized this throw throws true ' + + 'transient try void volatile while'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: /\/\*([^\*][\s\S]*)?\*\//gm, css: 'comments' }, // multiline comments + { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, css: 'preprocessor' }, // documentation comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers + { regex: /(?!\@interface\b)\@[\$\w]+\b/g, css: 'color1' }, // annotation @anno + { regex: /\@interface\b/g, css: 'color2' }, // @interface keyword + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // java keyword + ]; + + this.forHtmlScript({ + left : /(<|<)%[@!=]?/g, + right : /%(>|>)/g + }); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['java']; + + SyntaxHighlighter.brushes.Java = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/doc-files/shCore.js b/libs/biweekly-0.3.1-javadoc/biweekly/doc-files/shCore.js new file mode 100644 index 000000000..b47b64547 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/doc-files/shCore.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a-1},3d:6(g){e+=g}};c1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;be.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;dd.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a\'+c+""});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.Pb.P)H 1;Y I(a.Lb.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'\'+c+""+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v<3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;">1v3v 3.0.76 (72 73 3x)1Z://3u.2w/1v70 17 6U 71.6T 6X-3x 6Y 6D.6t 61 60 J 1k, 5Z 5R 5V <2R/>5U 5T 5S!\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'\',d=e.16.2x,h=d.2X,g=0;g";H c},2o:6(a,b,c){H\'<2W>\'+c+""},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;md)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P\'+c+""},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i\'+j+"":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"":"")+\'<2d 1g="17">\'+b+""},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{})) diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/CannotParseException.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/CannotParseException.html new file mode 100644 index 000000000..06a20e32c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/CannotParseException.html @@ -0,0 +1,271 @@ + + + + + + + +CannotParseException (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io +
    +Class CannotParseException

    +
    +java.lang.Object
    +  extended by java.lang.Throwable
    +      extended by java.lang.Exception
    +          extended by java.lang.RuntimeException
    +              extended by biweekly.ICalException
    +                  extended by biweekly.io.CannotParseException
    +
    +
    +
    All Implemented Interfaces:
    Serializable
    +
    +
    +
    +
    public class CannotParseException
    extends ICalException
    + + +

    +Thrown during the unmarshalling of an iCalendar property to signal that the + property's value could not be parsed (for example, being unable to parse a + date string). +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    See Also:
    Serialized Form
    +
    + +

    + + + + + + + + + + + + + + +
    +Constructor Summary
    CannotParseException() + +
    +          Creates a new "cannot parse" exception.
    CannotParseException(String reason) + +
    +          Creates a new "cannot parse" exception.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class java.lang.Throwable
    fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +CannotParseException

    +
    +public CannotParseException()
    +
    +
    Creates a new "cannot parse" exception. +

    +

    +
    + +

    +CannotParseException

    +
    +public CannotParseException(String reason)
    +
    +
    Creates a new "cannot parse" exception. +

    +

    +
    Parameters:
    reason - the reason why the property value cannot be parsed
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/ICalMarshallerRegistrar.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/ICalMarshallerRegistrar.html new file mode 100644 index 000000000..239191c40 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/ICalMarshallerRegistrar.html @@ -0,0 +1,539 @@ + + + + + + + +ICalMarshallerRegistrar (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io +
    +Class ICalMarshallerRegistrar

    +
    +java.lang.Object
    +  extended by biweekly.io.ICalMarshallerRegistrar
    +
    +
    +
    +
    public class ICalMarshallerRegistrar
    extends Object
    + + +

    +

    + Manages a listing of component and property marshallers. This is useful for + injecting the marshallers of any experimental components or properties you + have defined into a reader or writer object. The same object instance can be + reused and injected into multiple reader/writer classes. +

    +

    + Example: + +

    + //init the registrar
    + ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    + registrar.register(new CustomPropertyMarshaller());
    + registrar.register(new AnotherCustomPropertyMarshaller());
    + registrar.register(new CustomComponentMarshaller());
    + 
    + //inject into a reader class
    + ICalReader textReader = new ICalReader(...);
    + textReader.setRegistrar(registrar);
    + List<ICalendar> icals = new ArrayList<ICalendar>();
    + ICalendar ical;
    + while ((ical = textReader.readNext()) != null){
    +   icals.add(ical);
    + }
    + 
    + //inject the same instance in another reader/writer class
    + JCalWriter writer = new JCalWriter(...);
    + writer.setRegistrar(registrar);
    + for (ICalendar ical : icals){
    +   writer.write(ical);
    + }
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + +
    +Constructor Summary
    ICalMarshallerRegistrar() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + ICalComponentMarshaller<? extends ICalComponent>getComponentMarshaller(Class<? extends ICalComponent> clazz) + +
    +          Gets a component marshaller by class.
    + ICalComponentMarshaller<? extends ICalComponent>getComponentMarshaller(ICalComponent component) + +
    +          Gets the appropriate component marshaller for a given component instance.
    + ICalComponentMarshaller<? extends ICalComponent>getComponentMarshaller(String componentName) + +
    +          Gets a component marshaller by name.
    +static ICalendarMarshallergetICalendarMarshaller() + +
    +          Convenience method for getting the marshaller of the root iCalendar + component ("VCALENDAR").
    + ICalPropertyMarshaller<? extends ICalProperty>getPropertyMarshaller(Class<? extends ICalProperty> clazz) + +
    +          Gets a property marshaller by class.
    + ICalPropertyMarshaller<? extends ICalProperty>getPropertyMarshaller(ICalProperty property) + +
    +          Gets the appropriate property marshaller for a given property instance.
    + ICalPropertyMarshaller<? extends ICalProperty>getPropertyMarshaller(QName qname) + +
    +          Gets a property marshaller by XML local name and namespace.
    + ICalPropertyMarshaller<? extends ICalProperty>getPropertyMarshaller(String propertyName) + +
    +          Gets a property marshaller by name.
    + voidregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Registers a component marshaller.
    + voidregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Registers a property marshaller.
    + voidunregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +          Unregisters a component marshaller.
    + voidunregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Unregisters a property marshaller
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalMarshallerRegistrar

    +
    +public ICalMarshallerRegistrar()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getComponentMarshaller

    +
    +public ICalComponentMarshaller<? extends ICalComponent> getComponentMarshaller(String componentName)
    +
    +
    Gets a component marshaller by name. +

    +

    +
    Parameters:
    componentName - the component name (e.g. "VEVENT") +
    Returns:
    the component marshaller or a RawComponentMarshaller if + not found
    +
    +
    +
    + +

    +getPropertyMarshaller

    +
    +public ICalPropertyMarshaller<? extends ICalProperty> getPropertyMarshaller(String propertyName)
    +
    +
    Gets a property marshaller by name. +

    +

    +
    Parameters:
    propertyName - the property name (e.g. "VERSION") +
    Returns:
    the property marshaller or a RawPropertyMarshaller if not + found
    +
    +
    +
    + +

    +getComponentMarshaller

    +
    +public ICalComponentMarshaller<? extends ICalComponent> getComponentMarshaller(Class<? extends ICalComponent> clazz)
    +
    +
    Gets a component marshaller by class. +

    +

    +
    Parameters:
    clazz - the component class +
    Returns:
    the component marshaller or null if not found
    +
    +
    +
    + +

    +getPropertyMarshaller

    +
    +public ICalPropertyMarshaller<? extends ICalProperty> getPropertyMarshaller(Class<? extends ICalProperty> clazz)
    +
    +
    Gets a property marshaller by class. +

    +

    +
    Parameters:
    clazz - the property class +
    Returns:
    the property marshaller or null if not found
    +
    +
    +
    + +

    +getComponentMarshaller

    +
    +public ICalComponentMarshaller<? extends ICalComponent> getComponentMarshaller(ICalComponent component)
    +
    +
    Gets the appropriate component marshaller for a given component instance. +

    +

    +
    Parameters:
    component - the component instance +
    Returns:
    the component marshaller or null if not found
    +
    +
    +
    + +

    +getPropertyMarshaller

    +
    +public ICalPropertyMarshaller<? extends ICalProperty> getPropertyMarshaller(ICalProperty property)
    +
    +
    Gets the appropriate property marshaller for a given property instance. +

    +

    +
    Parameters:
    property - the property instance +
    Returns:
    the property marshaller or null if not found
    +
    +
    +
    + +

    +getPropertyMarshaller

    +
    +public ICalPropertyMarshaller<? extends ICalProperty> getPropertyMarshaller(QName qname)
    +
    +
    Gets a property marshaller by XML local name and namespace. +

    +

    +
    Parameters:
    qname - the XML local name and namespace +
    Returns:
    the property marshaller or a XmlMarshaller if not found
    +
    +
    +
    + +

    +register

    +
    +public void register(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +
    Registers a component marshaller. +

    +

    +
    Parameters:
    marshaller - the marshaller to register
    +
    +
    +
    + +

    +register

    +
    +public void register(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +
    Registers a property marshaller. +

    +

    +
    Parameters:
    marshaller - the marshaller to register
    +
    +
    +
    + +

    +unregister

    +
    +public void unregister(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +
    Unregisters a component marshaller. +

    +

    +
    Parameters:
    marshaller - the marshaller to unregister
    +
    +
    +
    + +

    +unregister

    +
    +public void unregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +
    Unregisters a property marshaller +

    +

    +
    Parameters:
    marshaller - the marshaller to unregister
    +
    +
    +
    + +

    +getICalendarMarshaller

    +
    +public static ICalendarMarshaller getICalendarMarshaller()
    +
    +
    Convenience method for getting the marshaller of the root iCalendar + component ("VCALENDAR"). +

    +

    + +
    Returns:
    the marshaller
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/SkipMeException.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/SkipMeException.html new file mode 100644 index 000000000..1e1a99281 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/SkipMeException.html @@ -0,0 +1,271 @@ + + + + + + + +SkipMeException (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io +
    +Class SkipMeException

    +
    +java.lang.Object
    +  extended by java.lang.Throwable
    +      extended by java.lang.Exception
    +          extended by java.lang.RuntimeException
    +              extended by biweekly.ICalException
    +                  extended by biweekly.io.SkipMeException
    +
    +
    +
    All Implemented Interfaces:
    Serializable
    +
    +
    +
    +
    public class SkipMeException
    extends ICalException
    + + +

    +Thrown during the reading or writing of an iCalendar property to show that + the property should not be written to the iCalendar data stream or not be + included in the parsed ICalendar object. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    See Also:
    Serialized Form
    +
    + +

    + + + + + + + + + + + + + + +
    +Constructor Summary
    SkipMeException() + +
    +          Creates a new skip-me exception.
    SkipMeException(String msg) + +
    +          Creates a new skip-me exception.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class java.lang.Throwable
    fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +SkipMeException

    +
    +public SkipMeException()
    +
    +
    Creates a new skip-me exception. +

    +

    +
    + +

    +SkipMeException

    +
    +public SkipMeException(String msg)
    +
    +
    Creates a new skip-me exception. +

    +

    +
    Parameters:
    msg - the reason why this property is being skipped
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/class-use/CannotParseException.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/class-use/CannotParseException.html new file mode 100644 index 000000000..8bb2fc678 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/class-use/CannotParseException.html @@ -0,0 +1,192 @@ + + + + + + + +Uses of Class biweekly.io.CannotParseException (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.CannotParseException

    +
    + + + + + + + + + +
    +Packages that use CannotParseException
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of CannotParseException in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return CannotParseException
    +protected static CannotParseExceptionICalPropertyMarshaller.missingXmlElements(ICalDataType... dataTypes) + +
    +          Creates a CannotParseException, indicating that the XML elements + that the parser expected to find are missing from the property's XML + element.
    +protected static CannotParseExceptionICalPropertyMarshaller.missingXmlElements(String... elements) + +
    +          Creates a CannotParseException, indicating that the XML elements + that the parser expected to find are missing from property's XML element.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/class-use/ICalMarshallerRegistrar.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/class-use/ICalMarshallerRegistrar.html new file mode 100644 index 000000000..a5bf871b9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/class-use/ICalMarshallerRegistrar.html @@ -0,0 +1,319 @@ + + + + + + + +Uses of Class biweekly.io.ICalMarshallerRegistrar (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.ICalMarshallerRegistrar

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use ICalMarshallerRegistrar
    biweekly.io.json  
    biweekly.io.text  
    biweekly.io.xml  
    +  +

    + + + + + +
    +Uses of ICalMarshallerRegistrar in biweekly.io.json
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.io.json that return ICalMarshallerRegistrar
    + ICalMarshallerRegistrarJCalWriter.getRegistrar() + +
    +          Gets the object that manages the component/property marshaller objects.
    + ICalMarshallerRegistrarJCalReader.getRegistrar() + +
    +          Gets the object that manages the component/property marshaller objects.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.io.json with parameters of type ICalMarshallerRegistrar
    + voidJCalWriter.setRegistrar(ICalMarshallerRegistrar registrar) + +
    +          Sets the object that manages the component/property marshaller objects.
    + voidJCalReader.setRegistrar(ICalMarshallerRegistrar registrar) + +
    +          Sets the object that manages the component/property marshaller objects.
    +  +

    + + + + + +
    +Uses of ICalMarshallerRegistrar in biweekly.io.text
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.io.text that return ICalMarshallerRegistrar
    + ICalMarshallerRegistrarICalWriter.getRegistrar() + +
    +          Gets the object that manages the component/property marshaller objects.
    + ICalMarshallerRegistrarICalReader.getRegistrar() + +
    +          Gets the object that manages the component/property marshaller objects.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.io.text with parameters of type ICalMarshallerRegistrar
    + voidICalWriter.setRegistrar(ICalMarshallerRegistrar registrar) + +
    +          Sets the object that manages the component/property marshaller objects.
    + voidICalReader.setRegistrar(ICalMarshallerRegistrar registrar) + +
    +          Sets the object that manages the component/property marshaller objects.
    +  +

    + + + + + +
    +Uses of ICalMarshallerRegistrar in biweekly.io.xml
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.xml that return ICalMarshallerRegistrar
    + ICalMarshallerRegistrarXCalDocument.getRegistrar() + +
    +          Gets the object that manages the component/property marshaller objects.
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.xml with parameters of type ICalMarshallerRegistrar
    + voidXCalDocument.setRegistrar(ICalMarshallerRegistrar registrar) + +
    +          Sets the object that manages the component/property marshaller objects.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/class-use/SkipMeException.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/class-use/SkipMeException.html new file mode 100644 index 000000000..28773e989 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/class-use/SkipMeException.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.SkipMeException (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.SkipMeException

    +
    +No usage of biweekly.io.SkipMeException +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/doc-files/shBrushJava.js b/libs/biweekly-0.3.1-javadoc/biweekly/io/doc-files/shBrushJava.js new file mode 100644 index 000000000..d692fd638 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/doc-files/shBrushJava.js @@ -0,0 +1,57 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'abstract assert boolean break byte case catch char class const ' + + 'continue default do double else enum extends ' + + 'false final finally float for goto if implements import ' + + 'instanceof int interface long native new null ' + + 'package private protected public return ' + + 'short static strictfp super switch synchronized this throw throws true ' + + 'transient try void volatile while'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: /\/\*([^\*][\s\S]*)?\*\//gm, css: 'comments' }, // multiline comments + { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, css: 'preprocessor' }, // documentation comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers + { regex: /(?!\@interface\b)\@[\$\w]+\b/g, css: 'color1' }, // annotation @anno + { regex: /\@interface\b/g, css: 'color2' }, // @interface keyword + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // java keyword + ]; + + this.forHtmlScript({ + left : /(<|<)%[@!=]?/g, + right : /%(>|>)/g + }); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['java']; + + SyntaxHighlighter.brushes.Java = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/doc-files/shCore.js b/libs/biweekly-0.3.1-javadoc/biweekly/io/doc-files/shCore.js new file mode 100644 index 000000000..b47b64547 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/doc-files/shCore.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a-1},3d:6(g){e+=g}};c1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;be.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;dd.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a\'+c+""});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.Pb.P)H 1;Y I(a.Lb.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'\'+c+""+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v<3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;">1v3v 3.0.76 (72 73 3x)1Z://3u.2w/1v70 17 6U 71.6T 6X-3x 6Y 6D.6t 61 60 J 1k, 5Z 5R 5V <2R/>5U 5T 5S!\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'\',d=e.16.2x,h=d.2X,g=0;g";H c},2o:6(a,b,c){H\'<2W>\'+c+""},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;md)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P\'+c+""},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i\'+j+"":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"":"")+\'<2d 1g="17">\'+b+""},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{})) diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalParseException.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalParseException.html new file mode 100644 index 000000000..b2210a350 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalParseException.html @@ -0,0 +1,310 @@ + + + + + + + +JCalParseException (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.json +
    +Class JCalParseException

    +
    +java.lang.Object
    +  extended by java.lang.Throwable
    +      extended by java.lang.Exception
    +          extended by java.lang.RuntimeException
    +              extended by biweekly.ICalException
    +                  extended by biweekly.io.json.JCalParseException
    +
    +
    +
    All Implemented Interfaces:
    Serializable
    +
    +
    +
    +
    public class JCalParseException
    extends ICalException
    + + +

    +Thrown during the parsing of a JSON-encoded iCalendar object (jCal) when the + jCal object is not formatted in the correct way (the JSON syntax is valid, + but it's not in the correct jCal format). +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    See Also:
    Serialized Form
    +
    + +

    + + + + + + + + + + + +
    +Constructor Summary
    JCalParseException(JsonToken expected, + JsonToken actual) + +
    +          Creates a jCal parse exception.
    +  + + + + + + + + + + + + + + + +
    +Method Summary
    + JsonTokengetActualToken() + +
    +          Gets the JSON token that was read.
    + JsonTokengetExpectedToken() + +
    +          Gets the JSON token that the parser was expected.
    + + + + + + + +
    Methods inherited from class java.lang.Throwable
    fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +JCalParseException

    +
    +public JCalParseException(JsonToken expected,
    +                          JsonToken actual)
    +
    +
    Creates a jCal parse exception. +

    +

    +
    Parameters:
    expected - the JSON token that the parser was expecting
    actual - the actual JSON token
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getExpectedToken

    +
    +public JsonToken getExpectedToken()
    +
    +
    Gets the JSON token that the parser was expected. +

    +

    + +
    Returns:
    the expected token
    +
    +
    +
    + +

    +getActualToken

    +
    +public JsonToken getActualToken()
    +
    +
    Gets the JSON token that was read. +

    +

    + +
    Returns:
    the actual token
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalRawReader.JCalDataStreamListener.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalRawReader.JCalDataStreamListener.html new file mode 100644 index 000000000..9d3d24abf --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalRawReader.JCalDataStreamListener.html @@ -0,0 +1,252 @@ + + + + + + + +JCalRawReader.JCalDataStreamListener (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.json +
    +Interface JCalRawReader.JCalDataStreamListener

    +
    +
    Enclosing class:
    JCalRawReader
    +
    +
    +
    +
    public static interface JCalRawReader.JCalDataStreamListener
    + + +

    +Handles the iCalendar data as it is read off the data stream. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidreadComponent(List<String> parentHierarchy, + String componentName) + +
    +          Called when the parser begins to read a component.
    + voidreadProperty(List<String> componentHierarchy, + String propertyName, + ICalParameters parameters, + ICalDataType dataType, + JCalValue value) + +
    +          Called when a property is read.
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +readComponent

    +
    +void readComponent(List<String> parentHierarchy,
    +                   String componentName)
    +
    +
    Called when the parser begins to read a component. +

    +

    +
    Parameters:
    parentHierarchy - the component's parent components
    componentName - the component name (e.g. "vevent")
    +
    +
    +
    + +

    +readProperty

    +
    +void readProperty(List<String> componentHierarchy,
    +                  String propertyName,
    +                  ICalParameters parameters,
    +                  ICalDataType dataType,
    +                  JCalValue value)
    +
    +
    Called when a property is read. +

    +

    +
    Parameters:
    componentHierarchy - the hierarchy of components that the + property belongs to
    propertyName - the property name (e.g. "summary")
    parameters - the parameters
    dataType - the data type (e.g. "text")
    value - the property value
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalRawReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalRawReader.html new file mode 100644 index 000000000..352545a5d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalRawReader.html @@ -0,0 +1,374 @@ + + + + + + + +JCalRawReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.json +
    +Class JCalRawReader

    +
    +java.lang.Object
    +  extended by biweekly.io.json.JCalRawReader
    +
    +
    +
    All Implemented Interfaces:
    Closeable
    +
    +
    +
    +
    public class JCalRawReader
    extends Object
    implements Closeable
    + + +

    +Parses an iCalendar JSON data stream (jCal). +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    See Also:
    jCal + draft
    +
    + +

    + + + + + + + + + + + +
    +Nested Class Summary
    +static interfaceJCalRawReader.JCalDataStreamListener + +
    +          Handles the iCalendar data as it is read off the data stream.
    +  + + + + + + + + + + +
    +Constructor Summary
    JCalRawReader(Reader reader) + +
    +          Creates a new reader.
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidclose() + +
    +          Closes the underlying Reader object.
    + booleaneof() + +
    +          Determines whether the end of the data stream has been reached.
    + intgetLineNum() + +
    +          Gets the current line number.
    + voidreadNext(JCalRawReader.JCalDataStreamListener listener) + +
    +          Reads the next iCalendar object from the jCal data stream.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +JCalRawReader

    +
    +public JCalRawReader(Reader reader)
    +
    +
    Creates a new reader. +

    +

    +
    Parameters:
    reader - the reader to the data stream
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getLineNum

    +
    +public int getLineNum()
    +
    +
    Gets the current line number. +

    +

    +
    +
    +
    + +
    Returns:
    the line number
    +
    +
    +
    + +

    +readNext

    +
    +public void readNext(JCalRawReader.JCalDataStreamListener listener)
    +              throws IOException
    +
    +
    Reads the next iCalendar object from the jCal data stream. +

    +

    +
    +
    +
    +
    Parameters:
    listener - handles the iCalendar data as it is read off the wire +
    Throws: +
    JCalParseException - if the jCal syntax is incorrect (the JSON + syntax may be valid, but it is not in the correct jCal format). +
    JsonParseException - if the JSON syntax is incorrect +
    IOException - if there is a problem reading from the data stream
    +
    +
    +
    + +

    +eof

    +
    +public boolean eof()
    +
    +
    Determines whether the end of the data stream has been reached. +

    +

    +
    +
    +
    + +
    Returns:
    true if the end has been reached, false if not
    +
    +
    +
    + +

    +close

    +
    +public void close()
    +           throws IOException
    +
    +
    Closes the underlying Reader object. +

    +

    +
    Specified by:
    close in interface Closeable
    +
    +
    + +
    Throws: +
    IOException
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalRawWriter.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalRawWriter.html new file mode 100644 index 000000000..5e51e6962 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalRawWriter.html @@ -0,0 +1,486 @@ + + + + + + + +JCalRawWriter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.json +
    +Class JCalRawWriter

    +
    +java.lang.Object
    +  extended by biweekly.io.json.JCalRawWriter
    +
    +
    +
    All Implemented Interfaces:
    Closeable
    +
    +
    +
    +
    public class JCalRawWriter
    extends Object
    implements Closeable
    + + +

    +Writes data to an iCalendar JSON data stream (jCal). +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    See Also:
    jCal + draft
    +
    + +

    + + + + + + + + + + + +
    +Constructor Summary
    JCalRawWriter(Writer writer, + boolean wrapInArray) + +
    +          Creates a new raw writer.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidclose() + +
    +          Finishes writing the JSON document and closes the underlying + Writer.
    + voidcloseJsonStream() + +
    +          Finishes writing the JSON document so that it is syntactically correct.
    + booleanisIndent() + +
    +          Gets whether or not the JSON will be pretty-printed.
    + voidsetIndent(boolean indent) + +
    +          Sets whether or not to pretty-print the JSON.
    + voidwriteEndComponent() + +
    +          Closes the current component array.
    + voidwriteProperty(String propertyName, + ICalDataType dataType, + JCalValue value) + +
    +          Writes a property to the current component.
    + voidwriteProperty(String propertyName, + ICalParameters parameters, + ICalDataType dataType, + JCalValue value) + +
    +          Writes a property to the current component.
    + voidwriteStartComponent(String componentName) + +
    +          Writes the beginning of a new component array.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +JCalRawWriter

    +
    +public JCalRawWriter(Writer writer,
    +                     boolean wrapInArray)
    +
    +
    Creates a new raw writer. +

    +

    +
    Parameters:
    writer - the writer to the data stream
    wrapInArray - true to wrap everything in an array, false not to + (useful when writing more than one iCalendar object)
    +
    + + + + + + + + +
    +Method Detail
    + +

    +isIndent

    +
    +public boolean isIndent()
    +
    +
    Gets whether or not the JSON will be pretty-printed. +

    +

    +
    +
    +
    + +
    Returns:
    true if it will be pretty-printed, false if not (defaults to + false)
    +
    +
    +
    + +

    +setIndent

    +
    +public void setIndent(boolean indent)
    +
    +
    Sets whether or not to pretty-print the JSON. +

    +

    +
    +
    +
    +
    Parameters:
    indent - true to pretty-print it, false not to (defaults to false)
    +
    +
    +
    + +

    +writeStartComponent

    +
    +public void writeStartComponent(String componentName)
    +                         throws IOException
    +
    +
    Writes the beginning of a new component array. +

    +

    +
    +
    +
    +
    Parameters:
    componentName - the component name (e.g. "vevent") +
    Throws: +
    IOException - if there's an I/O problem
    +
    +
    +
    + +

    +writeEndComponent

    +
    +public void writeEndComponent()
    +                       throws IOException
    +
    +
    Closes the current component array. +

    +

    +
    +
    +
    + +
    Throws: +
    IllegalStateException - if there are no open components ( + writeStartComponent(String) must be called first) +
    IOException - if there's an I/O problem
    +
    +
    +
    + +

    +writeProperty

    +
    +public void writeProperty(String propertyName,
    +                          ICalDataType dataType,
    +                          JCalValue value)
    +                   throws IOException
    +
    +
    Writes a property to the current component. +

    +

    +
    +
    +
    +
    Parameters:
    propertyName - the property name (e.g. "version")
    dataType - the property's data type (e.g. "text")
    value - the property value +
    Throws: +
    IllegalStateException - if there are no open components ( + writeStartComponent(String) must be called first) or if the last + method called was writeEndComponent(). +
    IOException - if there's an I/O problem
    +
    +
    +
    + +

    +writeProperty

    +
    +public void writeProperty(String propertyName,
    +                          ICalParameters parameters,
    +                          ICalDataType dataType,
    +                          JCalValue value)
    +                   throws IOException
    +
    +
    Writes a property to the current component. +

    +

    +
    +
    +
    +
    Parameters:
    propertyName - the property name (e.g. "version")
    parameters - the parameters
    dataType - the property's data type (e.g. "text")
    value - the property value +
    Throws: +
    IllegalStateException - if there are no open components ( + writeStartComponent(String) must be called first) or if the last + method called was writeEndComponent(). +
    IOException - if there's an I/O problem
    +
    +
    +
    + +

    +closeJsonStream

    +
    +public void closeJsonStream()
    +                     throws IOException
    +
    +
    Finishes writing the JSON document so that it is syntactically correct. + No more data can be written once this method is called. +

    +

    +
    +
    +
    + +
    Throws: +
    IOException - if there's a problem closing the stream
    +
    +
    +
    + +

    +close

    +
    +public void close()
    +           throws IOException
    +
    +
    Finishes writing the JSON document and closes the underlying + Writer. +

    +

    +
    Specified by:
    close in interface Closeable
    +
    +
    + +
    Throws: +
    IOException - if there's a problem closing the stream
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalReader.html new file mode 100644 index 000000000..56474ff32 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalReader.html @@ -0,0 +1,518 @@ + + + + + + + +JCalReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.json +
    +Class JCalReader

    +
    +java.lang.Object
    +  extended by biweekly.io.json.JCalReader
    +
    +
    +
    All Implemented Interfaces:
    Closeable
    +
    +
    +
    +
    public class JCalReader
    extends Object
    implements Closeable
    + + +

    +

    + Parses ICalendar objects from a jCal data stream (JSON). +

    +

    + Example: + +

    + InputStream in = ...
    + JCalReader jcalReader = new JCalReader(in);
    + ICalendar ical;
    + while ((ical = jcalReader.readNext()) != null){
    +   ...
    + }
    + jcalReader.close();
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    See Also:
    jCal + draft
    +
    + +

    + + + + + + + + + + + + + + + + + + + + +
    +Constructor Summary
    JCalReader(File file) + +
    +          Creates a jCard reader.
    JCalReader(InputStream in) + +
    +          Creates a jCard reader.
    JCalReader(Reader reader) + +
    +          Creates a jCard reader.
    JCalReader(String json) + +
    +          Creates a jCard reader.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidclose() + +
    +           
    + ICalMarshallerRegistrargetRegistrar() + +
    +          Gets the object that manages the component/property marshaller objects.
    + List<String>getWarnings() + +
    +          Gets the warnings from the last iCalendar object that was unmarshalled.
    + ICalendarreadNext() + +
    +          Reads the next iCalendar object from the JSON data stream.
    + voidregisterMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    + voidregisterMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    + voidsetRegistrar(ICalMarshallerRegistrar registrar) + +
    +          Sets the object that manages the component/property marshaller objects.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +JCalReader

    +
    +public JCalReader(String json)
    +
    +
    Creates a jCard reader. +

    +

    +
    Parameters:
    json - the JSON string
    +
    +
    + +

    +JCalReader

    +
    +public JCalReader(InputStream in)
    +
    +
    Creates a jCard reader. +

    +

    +
    Parameters:
    in - the input stream to read the vCards from
    +
    +
    + +

    +JCalReader

    +
    +public JCalReader(File file)
    +           throws FileNotFoundException
    +
    +
    Creates a jCard reader. +

    +

    +
    Parameters:
    file - the file to read the vCards from +
    Throws: +
    FileNotFoundException - if the file doesn't exist
    +
    +
    + +

    +JCalReader

    +
    +public JCalReader(Reader reader)
    +
    +
    Creates a jCard reader. +

    +

    +
    Parameters:
    reader - the reader to read the vCards from
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getWarnings

    +
    +public List<String> getWarnings()
    +
    +
    Gets the warnings from the last iCalendar object that was unmarshalled. + This list is reset every time a new iCalendar object is read. +

    +

    +
    +
    +
    + +
    Returns:
    the warnings or empty list if there were no warnings
    +
    +
    +
    + +

    +registerMarshaller

    +
    +public void registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +

    + Registers an experimental property marshaller. Can also be used to + override the marshaller of a standard property (such as DTSTART). Calling + this method is the same as calling: +

    +

    + getRegistrar().register(marshaller). +

    +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller to register
    +
    +
    +
    + +

    +registerMarshaller

    +
    +public void registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +

    + Registers an experimental component marshaller. Can also be used to + override the marshaller of a standard component (such as VEVENT). Calling + this method is the same as calling: +

    +

    + getRegistrar().register(marshaller). +

    +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller to register
    +
    +
    +
    + +

    +getRegistrar

    +
    +public ICalMarshallerRegistrar getRegistrar()
    +
    +
    Gets the object that manages the component/property marshaller objects. +

    +

    +
    +
    +
    + +
    Returns:
    the marshaller registrar
    +
    +
    +
    + +

    +setRegistrar

    +
    +public void setRegistrar(ICalMarshallerRegistrar registrar)
    +
    +
    Sets the object that manages the component/property marshaller objects. +

    +

    +
    +
    +
    +
    Parameters:
    registrar - the marshaller registrar
    +
    +
    +
    + +

    +readNext

    +
    +public ICalendar readNext()
    +                   throws IOException
    +
    +
    Reads the next iCalendar object from the JSON data stream. +

    +

    +
    +
    +
    + +
    Returns:
    the iCalendar object or null if there are no more +
    Throws: +
    JCalParseException - if the jCal syntax is incorrect (the JSON + syntax may be valid, but it is not in the correct jCal format). +
    JsonParseException - if the JSON syntax is incorrect +
    IOException - if there is a problem reading from the data stream
    +
    +
    +
    + +

    +close

    +
    +public void close()
    +           throws IOException
    +
    +
    +
    Specified by:
    close in interface Closeable
    +
    +
    + +
    Throws: +
    IOException
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalValue.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalValue.html new file mode 100644 index 000000000..1380fdd5c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalValue.html @@ -0,0 +1,515 @@ + + + + + + + +JCalValue (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.json +
    +Class JCalValue

    +
    +java.lang.Object
    +  extended by biweekly.io.json.JCalValue
    +
    +
    +
    +
    public class JCalValue
    extends Object
    + + +

    +Holds the value of a jCal property. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + +
    +Constructor Summary
    JCalValue(JsonValue... values) + +
    +          Creates a new jCal value.
    JCalValue(List<JsonValue> values) + +
    +          Creates a new jCal value.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + List<String>asMulti() + +
    +          Parses this jCal value as a multi-valued property value.
    + ListMultimap<String,String>asObject() + +
    +          Parses this jCal value as an object property value.
    + StringasSingle() + +
    +          Parses this jCal value as a single-valued property value.
    + List<List<String>>asStructured() + +
    +          Parses this jCal value as a structured property value.
    + List<JsonValue>getValues() + +
    +          Gets the raw JSON values.
    +static JCalValuemulti(List<?> values) + +
    +          Creates a multi-valued value.
    +static JCalValuemulti(Object... values) + +
    +          Creates a multi-valued value.
    +static JCalValueobject(ListMultimap<String,Object> value) + +
    +          Creates an object value.
    +static JCalValuesingle(Object value) + +
    +          Creates a single-valued value.
    +static JCalValuestructured(List<List<?>> values) + +
    +          Creates a structured value.
    +static JCalValuestructured(Object... values) + +
    +           + Creates a structured value.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +JCalValue

    +
    +public JCalValue(List<JsonValue> values)
    +
    +
    Creates a new jCal value. +

    +

    +
    Parameters:
    values - the values
    +
    +
    + +

    +JCalValue

    +
    +public JCalValue(JsonValue... values)
    +
    +
    Creates a new jCal value. +

    +

    +
    Parameters:
    values - the values
    +
    + + + + + + + + +
    +Method Detail
    + +

    +single

    +
    +public static JCalValue single(Object value)
    +
    +
    Creates a single-valued value. +

    +

    +
    Parameters:
    value - the value +
    Returns:
    the jCal value
    +
    +
    +
    + +

    +multi

    +
    +public static JCalValue multi(Object... values)
    +
    +
    Creates a multi-valued value. +

    +

    +
    Parameters:
    values - the values +
    Returns:
    the jCal value
    +
    +
    +
    + +

    +multi

    +
    +public static JCalValue multi(List<?> values)
    +
    +
    Creates a multi-valued value. +

    +

    +
    Parameters:
    values - the values +
    Returns:
    the jCal value
    +
    +
    +
    + +

    +structured

    +
    +public static JCalValue structured(Object... values)
    +
    +

    + Creates a structured value. +

    +

    + This method accepts a vararg of Object instances. List + objects will be treated as multi-valued components. All other objects. + Null values will be treated as empty components. +

    +

    +

    +
    Parameters:
    values - the values +
    Returns:
    the jCal value
    +
    +
    +
    + +

    +structured

    +
    +public static JCalValue structured(List<List<?>> values)
    +
    +
    Creates a structured value. +

    +

    +
    Parameters:
    values - the values +
    Returns:
    the jCal value
    +
    +
    +
    + +

    +object

    +
    +public static JCalValue object(ListMultimap<String,Object> value)
    +
    +
    Creates an object value. +

    +

    +
    Parameters:
    value - the object +
    Returns:
    the jCal value
    +
    +
    +
    + +

    +getValues

    +
    +public List<JsonValue> getValues()
    +
    +
    Gets the raw JSON values. Use one of the "as*" methods to parse + the values as one of the standard jCal values. +

    +

    + +
    Returns:
    the JSON values
    +
    +
    +
    + +

    +asSingle

    +
    +public String asSingle()
    +
    +
    Parses this jCal value as a single-valued property value. +

    +

    + +
    Returns:
    the value or empty string if not found
    +
    +
    +
    + +

    +asStructured

    +
    +public List<List<String>> asStructured()
    +
    +
    Parses this jCal value as a structured property value. +

    +

    + +
    Returns:
    the structured values or empty list if not found
    +
    +
    +
    + +

    +asMulti

    +
    +public List<String> asMulti()
    +
    +
    Parses this jCal value as a multi-valued property value. +

    +

    + +
    Returns:
    the values or empty list if not found
    +
    +
    +
    + +

    +asObject

    +
    +public ListMultimap<String,String> asObject()
    +
    +
    Parses this jCal value as an object property value. +

    +

    + +
    Returns:
    the object or an empty map if not found
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalWriter.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalWriter.html new file mode 100644 index 000000000..495303b0a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JCalWriter.html @@ -0,0 +1,622 @@ + + + + + + + +JCalWriter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.json +
    +Class JCalWriter

    +
    +java.lang.Object
    +  extended by biweekly.io.json.JCalWriter
    +
    +
    +
    All Implemented Interfaces:
    Closeable
    +
    +
    +
    +
    public class JCalWriter
    extends Object
    implements Closeable
    + + +

    +

    + Writes ICalendar objects to a JSON data stream (jCal). +

    +

    + Example: + +

    + List<ICalendar> icals = ... 
    + OutputStream out = ...
    + JCalWriter jcalWriter = new JCalWriter(out);
    + for (ICalendar ical : icals){
    +   jcalWriter.write(ical);
    + }
    + jcalWriter.close();
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    See Also:
    jCal + draft
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Constructor Summary
    JCalWriter(File file) + +
    +          Creates a jCal writer that writes to a file.
    JCalWriter(File file, + boolean wrapInArray) + +
    +          Creates a jCal writer that writes to a file.
    JCalWriter(OutputStream outputStream) + +
    +          Creates a jCal writer that writes to an output stream.
    JCalWriter(OutputStream outputStream, + boolean wrapInArray) + +
    +          Creates a jCal writer that writes to an output stream.
    JCalWriter(Writer writer) + +
    +          Creates a jCal writer that writes to a writer.
    JCalWriter(Writer writer, + boolean wrapInArray) + +
    +          Creates a jCal writer that writes to a writer.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidclose() + +
    +          Finishes writing the JSON document and closes the underlying + Writer.
    + voidcloseJsonStream() + +
    +          Finishes writing the JSON document so that it is syntactically correct.
    + ICalMarshallerRegistrargetRegistrar() + +
    +          Gets the object that manages the component/property marshaller objects.
    + booleanisIndent() + +
    +          Gets whether or not the JSON will be pretty-printed.
    + voidregisterMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    + voidregisterMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    + voidsetIndent(boolean indent) + +
    +          Sets whether or not to pretty-print the JSON.
    + voidsetRegistrar(ICalMarshallerRegistrar registrar) + +
    +          Sets the object that manages the component/property marshaller objects.
    + voidwrite(ICalendar ical) + +
    +          Writes an iCalendar object to the data stream.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +JCalWriter

    +
    +public JCalWriter(OutputStream outputStream)
    +
    +
    Creates a jCal writer that writes to an output stream. +

    +

    +
    Parameters:
    outputStream - the output stream to write to
    +
    +
    + +

    +JCalWriter

    +
    +public JCalWriter(OutputStream outputStream,
    +                  boolean wrapInArray)
    +
    +
    Creates a jCal writer that writes to an output stream. +

    +

    +
    Parameters:
    outputStream - the output stream to write to
    wrapInArray - true to wrap all iCalendar objects in a parent array, + false not to (useful when writing more than one iCalendar object)
    +
    +
    + +

    +JCalWriter

    +
    +public JCalWriter(File file)
    +           throws IOException
    +
    +
    Creates a jCal writer that writes to a file. +

    +

    +
    Parameters:
    file - the file to write to +
    Throws: +
    IOException - if the file cannot be written to
    +
    +
    + +

    +JCalWriter

    +
    +public JCalWriter(File file,
    +                  boolean wrapInArray)
    +           throws IOException
    +
    +
    Creates a jCal writer that writes to a file. +

    +

    +
    Parameters:
    file - the file to write to
    wrapInArray - true to wrap all iCalendar objects in a parent array, + false not to (useful when writing more than one iCalendar object) +
    Throws: +
    IOException - if the file cannot be written to
    +
    +
    + +

    +JCalWriter

    +
    +public JCalWriter(Writer writer)
    +
    +
    Creates a jCal writer that writes to a writer. +

    +

    +
    Parameters:
    writer - the writer to the data stream
    +
    +
    + +

    +JCalWriter

    +
    +public JCalWriter(Writer writer,
    +                  boolean wrapInArray)
    +
    +
    Creates a jCal writer that writes to a writer. +

    +

    +
    Parameters:
    writer - the writer to the data stream
    wrapInArray - true to wrap all iCalendar objects in a parent array, + false not to (useful when writing more than one iCalendar object)
    +
    + + + + + + + + +
    +Method Detail
    + +

    +registerMarshaller

    +
    +public void registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +

    + Registers an experimental property marshaller. Can also be used to + override the marshaller of a standard property (such as DTSTART). Calling + this method is the same as calling: +

    +

    + getRegistrar().register(marshaller). +

    +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller to register
    +
    +
    +
    + +

    +registerMarshaller

    +
    +public void registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +

    + Registers an experimental component marshaller. Can also be used to + override the marshaller of a standard component (such as VEVENT). Calling + this method is the same as calling: +

    +

    + getRegistrar().register(marshaller). +

    +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller to register
    +
    +
    +
    + +

    +getRegistrar

    +
    +public ICalMarshallerRegistrar getRegistrar()
    +
    +
    Gets the object that manages the component/property marshaller objects. +

    +

    +
    +
    +
    + +
    Returns:
    the marshaller registrar
    +
    +
    +
    + +

    +setRegistrar

    +
    +public void setRegistrar(ICalMarshallerRegistrar registrar)
    +
    +
    Sets the object that manages the component/property marshaller objects. +

    +

    +
    +
    +
    +
    Parameters:
    registrar - the marshaller registrar
    +
    +
    +
    + +

    +isIndent

    +
    +public boolean isIndent()
    +
    +
    Gets whether or not the JSON will be pretty-printed. +

    +

    +
    +
    +
    + +
    Returns:
    true if it will be pretty-printed, false if not (defaults to + false)
    +
    +
    +
    + +

    +setIndent

    +
    +public void setIndent(boolean indent)
    +
    +
    Sets whether or not to pretty-print the JSON. +

    +

    +
    +
    +
    +
    Parameters:
    indent - true to pretty-print it, false not to (defaults to false)
    +
    +
    +
    + +

    +write

    +
    +public void write(ICalendar ical)
    +           throws IOException
    +
    +
    Writes an iCalendar object to the data stream. +

    +

    +
    +
    +
    +
    Parameters:
    ical - the iCalendar object to write +
    Throws: +
    IllegalArgumentException - if the marshaller class for a component + or property object cannot be found (only happens when an experimental + property/component marshaller is not registered with the + registerMarshaller method.) +
    IOException - if there's a problem writing to the data stream
    +
    +
    +
    + +

    +close

    +
    +public void close()
    +           throws IOException
    +
    +
    Finishes writing the JSON document and closes the underlying + Writer. +

    +

    +
    Specified by:
    close in interface Closeable
    +
    +
    + +
    Throws: +
    IOException - if there's a problem closing the stream
    +
    +
    +
    + +

    +closeJsonStream

    +
    +public void closeJsonStream()
    +                     throws IOException
    +
    +
    Finishes writing the JSON document so that it is syntactically correct. + No more iCalendar objects can be written once this method is called. +

    +

    +
    +
    +
    + +
    Throws: +
    IOException - if there's a problem writing to the data stream
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JsonValue.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JsonValue.html new file mode 100644 index 000000000..c8b3abd37 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/JsonValue.html @@ -0,0 +1,436 @@ + + + + + + + +JsonValue (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.json +
    +Class JsonValue

    +
    +java.lang.Object
    +  extended by biweekly.io.json.JsonValue
    +
    +
    +
    +
    public class JsonValue
    extends Object
    + + +

    +Represents a JSON value, array, or object. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + +
    +Constructor Summary
    JsonValue(List<JsonValue> array) + +
    +          Creates a JSON array.
    JsonValue(Map<String,JsonValue> object) + +
    +          Creates a JSON object.
    JsonValue(Object value) + +
    +          Creates a JSON value (such as a string or integer).
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + booleanequals(Object obj) + +
    +           
    + List<JsonValue>getArray() + +
    +          Gets the JSON array elements.
    + Map<String,JsonValue>getObject() + +
    +          Gets the JSON object.
    + ObjectgetValue() + +
    +          Gets the JSON value.
    + inthashCode() + +
    +           
    + booleanisNull() + +
    +          Determines if the value is "null" or not.
    + StringtoString() + +
    +           
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +JsonValue

    +
    +public JsonValue(Object value)
    +
    +
    Creates a JSON value (such as a string or integer). +

    +

    +
    Parameters:
    value - the value
    +
    +
    + +

    +JsonValue

    +
    +public JsonValue(List<JsonValue> array)
    +
    +
    Creates a JSON array. +

    +

    +
    Parameters:
    array - the array elements
    +
    +
    + +

    +JsonValue

    +
    +public JsonValue(Map<String,JsonValue> object)
    +
    +
    Creates a JSON object. +

    +

    +
    Parameters:
    object - the object fields
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getValue

    +
    +public Object getValue()
    +
    +
    Gets the JSON value. +

    +

    + +
    Returns:
    the value or null if it's not a JSON value
    +
    +
    +
    + +

    +getArray

    +
    +public List<JsonValue> getArray()
    +
    +
    Gets the JSON array elements. +

    +

    + +
    Returns:
    the array elements or null if it's not a JSON array
    +
    +
    +
    + +

    +getObject

    +
    +public Map<String,JsonValue> getObject()
    +
    +
    Gets the JSON object. +

    +

    + +
    Returns:
    the object or null if it's not a JSON object
    +
    +
    +
    + +

    +isNull

    +
    +public boolean isNull()
    +
    +
    Determines if the value is "null" or not. +

    +

    + +
    Returns:
    true if the value is "null", false if not
    +
    +
    +
    + +

    +hashCode

    +
    +public int hashCode()
    +
    +
    +
    Overrides:
    hashCode in class Object
    +
    +
    +
    +
    +
    +
    + +

    +equals

    +
    +public boolean equals(Object obj)
    +
    +
    +
    Overrides:
    equals in class Object
    +
    +
    +
    +
    +
    +
    + +

    +toString

    +
    +public String toString()
    +
    +
    +
    Overrides:
    toString in class Object
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalParseException.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalParseException.html new file mode 100644 index 000000000..32b7bde25 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalParseException.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.json.JCalParseException (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.json.JCalParseException

    +
    +No usage of biweekly.io.json.JCalParseException +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalRawReader.JCalDataStreamListener.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalRawReader.JCalDataStreamListener.html new file mode 100644 index 000000000..190649d64 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalRawReader.JCalDataStreamListener.html @@ -0,0 +1,181 @@ + + + + + + + +Uses of Interface biweekly.io.json.JCalRawReader.JCalDataStreamListener (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Interface
    biweekly.io.json.JCalRawReader.JCalDataStreamListener

    +
    + + + + + + + + + +
    +Packages that use JCalRawReader.JCalDataStreamListener
    biweekly.io.json  
    +  +

    + + + + + +
    +Uses of JCalRawReader.JCalDataStreamListener in biweekly.io.json
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.json with parameters of type JCalRawReader.JCalDataStreamListener
    + voidJCalRawReader.readNext(JCalRawReader.JCalDataStreamListener listener) + +
    +          Reads the next iCalendar object from the jCal data stream.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalRawReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalRawReader.html new file mode 100644 index 000000000..b2813df04 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalRawReader.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.json.JCalRawReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.json.JCalRawReader

    +
    +No usage of biweekly.io.json.JCalRawReader +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalRawWriter.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalRawWriter.html new file mode 100644 index 000000000..1cdc9da0e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalRawWriter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.json.JCalRawWriter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.json.JCalRawWriter

    +
    +No usage of biweekly.io.json.JCalRawWriter +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalReader.html new file mode 100644 index 000000000..2eb5e150e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalReader.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.json.JCalReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.json.JCalReader

    +
    +No usage of biweekly.io.json.JCalReader +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalValue.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalValue.html new file mode 100644 index 000000000..8677913f9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalValue.html @@ -0,0 +1,661 @@ + + + + + + + +Uses of Class biweekly.io.json.JCalValue (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.json.JCalValue

    +
    + + + + + + + + + + + + + +
    +Packages that use JCalValue
    biweekly.io.json  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of JCalValue in biweekly.io.json
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.io.json that return JCalValue
    +static JCalValueJCalValue.multi(List<?> values) + +
    +          Creates a multi-valued value.
    +static JCalValueJCalValue.multi(Object... values) + +
    +          Creates a multi-valued value.
    +static JCalValueJCalValue.object(ListMultimap<String,Object> value) + +
    +          Creates an object value.
    +static JCalValueJCalValue.single(Object value) + +
    +          Creates a single-valued value.
    +static JCalValueJCalValue.structured(List<List<?>> values) + +
    +          Creates a structured value.
    +static JCalValueJCalValue.structured(Object... values) + +
    +           + Creates a structured value.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.io.json with parameters of type JCalValue
    + voidJCalRawReader.JCalDataStreamListener.readProperty(List<String> componentHierarchy, + String propertyName, + ICalParameters parameters, + ICalDataType dataType, + JCalValue value) + +
    +          Called when a property is read.
    + voidJCalRawWriter.writeProperty(String propertyName, + ICalDataType dataType, + JCalValue value) + +
    +          Writes a property to the current component.
    + voidJCalRawWriter.writeProperty(String propertyName, + ICalParameters parameters, + ICalDataType dataType, + JCalValue value) + +
    +          Writes a property to the current component.
    +  +

    + + + + + +
    +Uses of JCalValue in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return JCalValue
    +protected  JCalValueAttachmentMarshaller._writeJson(Attachment property) + +
    +           
    +protected  JCalValueDurationPropertyMarshaller._writeJson(DurationProperty property) + +
    +           
    +protected  JCalValueExceptionDatesMarshaller._writeJson(ExceptionDates property) + +
    +           
    +protected  JCalValueFreeBusyMarshaller._writeJson(FreeBusy property) + +
    +           
    +protected  JCalValueGeoMarshaller._writeJson(Geo property) + +
    +           
    +protected  JCalValueRecurrenceDatesMarshaller._writeJson(RecurrenceDates property) + +
    +           
    +protected  JCalValueRequestStatusMarshaller._writeJson(RequestStatus property) + +
    +           
    +protected  JCalValueUtcOffsetPropertyMarshaller._writeJson(T property) + +
    +           
    +protected  JCalValueTextPropertyMarshaller._writeJson(T property) + +
    +           
    +protected  JCalValueRecurrencePropertyMarshaller._writeJson(T property) + +
    +           
    +protected  JCalValueListPropertyMarshaller._writeJson(T property) + +
    +           
    +protected  JCalValueIntegerPropertyMarshaller._writeJson(T property) + +
    +           
    +protected  JCalValueICalPropertyMarshaller._writeJson(T property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  JCalValueDateTimePropertyMarshaller._writeJson(T property) + +
    +           
    +protected  JCalValueDateOrDateTimePropertyMarshaller._writeJson(T property) + +
    +           
    +protected  JCalValueTriggerMarshaller._writeJson(Trigger property) + +
    +           
    +protected  JCalValueVersionMarshaller._writeJson(Version property) + +
    +           
    +protected  JCalValueXmlMarshaller._writeJson(Xml property) + +
    +           
    + JCalValueICalPropertyMarshaller.writeJson(T property) + +
    +          Marshals a property's value to a JSON data stream (jCal).
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type JCalValue
    +protected  XmlXmlMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  VersionVersionMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TUtcOffsetPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TriggerTriggerMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TTextPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RequestStatusRequestStatusMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TRecurrencePropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RecurrenceDatesRecurrenceDatesMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TListPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TIntegerPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TICalPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  GeoGeoMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  FreeBusyFreeBusyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  ExceptionDatesExceptionDatesMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  DurationPropertyDurationPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TDateTimePropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TDateOrDateTimePropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  AttachmentAttachmentMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    + ICalPropertyMarshaller.Result<T>ICalPropertyMarshaller.parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters) + +
    +          Unmarshals a property's value from a JSON data stream (jCal).
    +protected static ICalPropertyMarshaller.StructuredIteratorICalPropertyMarshaller.structured(JCalValue value) + +
    +          Provides an iterator for a jCard structured value.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalWriter.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalWriter.html new file mode 100644 index 000000000..3127cf15c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JCalWriter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.json.JCalWriter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.json.JCalWriter

    +
    +No usage of biweekly.io.json.JCalWriter +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JsonValue.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JsonValue.html new file mode 100644 index 000000000..55c69bee9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/class-use/JsonValue.html @@ -0,0 +1,237 @@ + + + + + + + +Uses of Class biweekly.io.json.JsonValue (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.json.JsonValue

    +
    + + + + + + + + + +
    +Packages that use JsonValue
    biweekly.io.json  
    +  +

    + + + + + +
    +Uses of JsonValue in biweekly.io.json
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.io.json that return types with arguments of type JsonValue
    + List<JsonValue>JsonValue.getArray() + +
    +          Gets the JSON array elements.
    + Map<String,JsonValue>JsonValue.getObject() + +
    +          Gets the JSON object.
    + List<JsonValue>JCalValue.getValues() + +
    +          Gets the raw JSON values.
    +  +

    + + + + + + + + +
    Constructors in biweekly.io.json with parameters of type JsonValue
    JCalValue(JsonValue... values) + +
    +          Creates a new jCal value.
    +  +

    + + + + + + + + + + + + + + +
    Constructor parameters in biweekly.io.json with type arguments of type JsonValue
    JCalValue(List<JsonValue> values) + +
    +          Creates a new jCal value.
    JsonValue(List<JsonValue> array) + +
    +          Creates a JSON array.
    JsonValue(Map<String,JsonValue> object) + +
    +          Creates a JSON object.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/doc-files/shBrushJava.js b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/doc-files/shBrushJava.js new file mode 100644 index 000000000..d692fd638 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/doc-files/shBrushJava.js @@ -0,0 +1,57 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'abstract assert boolean break byte case catch char class const ' + + 'continue default do double else enum extends ' + + 'false final finally float for goto if implements import ' + + 'instanceof int interface long native new null ' + + 'package private protected public return ' + + 'short static strictfp super switch synchronized this throw throws true ' + + 'transient try void volatile while'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: /\/\*([^\*][\s\S]*)?\*\//gm, css: 'comments' }, // multiline comments + { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, css: 'preprocessor' }, // documentation comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers + { regex: /(?!\@interface\b)\@[\$\w]+\b/g, css: 'color1' }, // annotation @anno + { regex: /\@interface\b/g, css: 'color2' }, // @interface keyword + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // java keyword + ]; + + this.forHtmlScript({ + left : /(<|<)%[@!=]?/g, + right : /%(>|>)/g + }); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['java']; + + SyntaxHighlighter.brushes.Java = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/doc-files/shCore.js b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/doc-files/shCore.js new file mode 100644 index 000000000..b47b64547 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/doc-files/shCore.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a-1},3d:6(g){e+=g}};c1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;be.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;dd.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a\'+c+""});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.Pb.P)H 1;Y I(a.Lb.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'\'+c+""+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v<3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;">1v3v 3.0.76 (72 73 3x)1Z://3u.2w/1v70 17 6U 71.6T 6X-3x 6Y 6D.6t 61 60 J 1k, 5Z 5R 5V <2R/>5U 5T 5S!\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'\',d=e.16.2x,h=d.2X,g=0;g";H c},2o:6(a,b,c){H\'<2W>\'+c+""},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;md)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P\'+c+""},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i\'+j+"":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"":"")+\'<2d 1g="17">\'+b+""},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{})) diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-frame.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-frame.html new file mode 100644 index 000000000..8195bca2a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-frame.html @@ -0,0 +1,65 @@ + + + + + + + +biweekly.io.json (biweekly 0.3.1 API) + + + + + + + + + + + +biweekly.io.json + + + + +
    +Interfaces  + +
    +JCalRawReader.JCalDataStreamListener
    + + + + + + +
    +Classes  + +
    +JCalRawReader +
    +JCalRawWriter +
    +JCalReader +
    +JCalValue +
    +JCalWriter +
    +JsonValue
    + + + + + + +
    +Exceptions  + +
    +JCalParseException
    + + + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-summary.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-summary.html new file mode 100644 index 000000000..5f484b608 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-summary.html @@ -0,0 +1,210 @@ + + + + + + + +biweekly.io.json (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +

    +Package biweekly.io.json +

    + + + + + + + + + +
    +Interface Summary
    JCalRawReader.JCalDataStreamListenerHandles the iCalendar data as it is read off the data stream.
    +  + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class Summary
    JCalRawReaderParses an iCalendar JSON data stream (jCal).
    JCalRawWriterWrites data to an iCalendar JSON data stream (jCal).
    JCalReader + Parses ICalendar objects from a jCal data stream (JSON).
    JCalValueHolds the value of a jCal property.
    JCalWriter + Writes ICalendar objects to a JSON data stream (jCal).
    JsonValueRepresents a JSON value, array, or object.
    +  + +

    + + + + + + + + + +
    +Exception Summary
    JCalParseExceptionThrown during the parsing of a JSON-encoded iCalendar object (jCal) when the + jCal object is not formatted in the correct way (the JSON syntax is valid, + but it's not in the correct jCal format).
    +  + +

    +

    +
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-tree.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-tree.html new file mode 100644 index 000000000..40b5e04f6 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-tree.html @@ -0,0 +1,172 @@ + + + + + + + +biweekly.io.json Class Hierarchy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Hierarchy For Package biweekly.io.json +

    +
    +
    +
    Package Hierarchies:
    All Packages
    +
    +

    +Class Hierarchy +

    + +

    +Interface Hierarchy +

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-use.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-use.html new file mode 100644 index 000000000..4439527a4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/json/package-use.html @@ -0,0 +1,202 @@ + + + + + + + +Uses of Package biweekly.io.json (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Package
    biweekly.io.json

    +
    + + + + + + + + + + + + + +
    +Packages that use biweekly.io.json
    biweekly.io.json  
    biweekly.property.marshaller  
    +  +

    + + + + + + + + + + + + + + +
    +Classes in biweekly.io.json used by biweekly.io.json
    JCalRawReader.JCalDataStreamListener + +
    +          Handles the iCalendar data as it is read off the data stream.
    JCalValue + +
    +          Holds the value of a jCal property.
    JsonValue + +
    +          Represents a JSON value, array, or object.
    +  +

    + + + + + + + + +
    +Classes in biweekly.io.json used by biweekly.property.marshaller
    JCalValue + +
    +          Holds the value of a jCal property.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/package-frame.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/package-frame.html new file mode 100644 index 000000000..5e7a5248c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/package-frame.html @@ -0,0 +1,46 @@ + + + + + + + +biweekly.io (biweekly 0.3.1 API) + + + + + + + + + + + +biweekly.io + + + + +
    +Classes  + +
    +ICalMarshallerRegistrar
    + + + + + + +
    +Exceptions  + +
    +CannotParseException +
    +SkipMeException
    + + + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/package-summary.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/package-summary.html new file mode 100644 index 000000000..bd13289a6 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/package-summary.html @@ -0,0 +1,181 @@ + + + + + + + +biweekly.io (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +

    +Package biweekly.io +

    + + + + + + + + + +
    +Class Summary
    ICalMarshallerRegistrar + Manages a listing of component and property marshallers.
    +  + +

    + + + + + + + + + + + + + +
    +Exception Summary
    CannotParseExceptionThrown during the unmarshalling of an iCalendar property to signal that the + property's value could not be parsed (for example, being unable to parse a + date string).
    SkipMeExceptionThrown during the reading or writing of an iCalendar property to show that + the property should not be written to the iCalendar data stream or not be + included in the parsed ICalendar object.
    +  + +

    +

    +
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/package-tree.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/package-tree.html new file mode 100644 index 000000000..89b45d516 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/package-tree.html @@ -0,0 +1,163 @@ + + + + + + + +biweekly.io Class Hierarchy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Hierarchy For Package biweekly.io +

    +
    +
    +
    Package Hierarchies:
    All Packages
    +
    +

    +Class Hierarchy +

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/package-use.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/package-use.html new file mode 100644 index 000000000..e5b1a7fd1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/package-use.html @@ -0,0 +1,233 @@ + + + + + + + +Uses of Package biweekly.io (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Package
    biweekly.io

    +
    + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use biweekly.io
    biweekly.io.json  
    biweekly.io.text  
    biweekly.io.xml  
    biweekly.property.marshaller  
    +  +

    + + + + + + + + +
    +Classes in biweekly.io used by biweekly.io.json
    ICalMarshallerRegistrar + +
    +           + Manages a listing of component and property marshallers.
    +  +

    + + + + + + + + +
    +Classes in biweekly.io used by biweekly.io.text
    ICalMarshallerRegistrar + +
    +           + Manages a listing of component and property marshallers.
    +  +

    + + + + + + + + +
    +Classes in biweekly.io used by biweekly.io.xml
    ICalMarshallerRegistrar + +
    +           + Manages a listing of component and property marshallers.
    +  +

    + + + + + + + + +
    +Classes in biweekly.io used by biweekly.property.marshaller
    CannotParseException + +
    +          Thrown during the unmarshalling of an iCalendar property to signal that the + property's value could not be parsed (for example, being unable to parse a + date string).
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/FoldedLineReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/FoldedLineReader.html new file mode 100644 index 000000000..b6a05813e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/FoldedLineReader.html @@ -0,0 +1,404 @@ + + + + + + + +FoldedLineReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.text +
    +Class FoldedLineReader

    +
    +java.lang.Object
    +  extended by java.io.Reader
    +      extended by java.io.BufferedReader
    +          extended by biweekly.io.text.FoldedLineReader
    +
    +
    +
    All Implemented Interfaces:
    Closeable, Readable
    +
    +
    +
    +
    public class FoldedLineReader
    extends BufferedReader
    + + +

    +Automatically unfolds lines of text as they are read. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class java.io.Reader
    lock
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    FoldedLineReader(Reader reader) + +
    +          Creates a new folded line reader.
    FoldedLineReader(String text) + +
    +          Creates a new folded line reader.
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + intgetLineNum() + +
    +          Gets the starting line number of the last unfolded line that was read.
    + booleanisSingleSpaceFoldingEnabled() + +
    +          Gets whether the reader will only ignore the first whitespace character + it encounters at the beginning of a folded line.
    + StringreadLine() + +
    +          Reads the next line, unfolding it if necessary.
    + voidsetSingleSpaceFoldingEnabled(boolean enabled) + +
    +          Sets whether the reader will only ignore the first whitespace character + it encounters at the beginning of a folded line.
    + + + + + + + +
    Methods inherited from class java.io.BufferedReader
    close, mark, markSupported, read, read, ready, reset, skip
    + + + + + + + +
    Methods inherited from class java.io.Reader
    read, read
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +FoldedLineReader

    +
    +public FoldedLineReader(Reader reader)
    +
    +
    Creates a new folded line reader. +

    +

    +
    Parameters:
    reader - the reader object to wrap
    +
    +
    + +

    +FoldedLineReader

    +
    +public FoldedLineReader(String text)
    +
    +
    Creates a new folded line reader. +

    +

    +
    Parameters:
    text - the text to read
    +
    + + + + + + + + +
    +Method Detail
    + +

    +setSingleSpaceFoldingEnabled

    +
    +public void setSingleSpaceFoldingEnabled(boolean enabled)
    +
    +
    Sets whether the reader will only ignore the first whitespace character + it encounters at the beginning of a folded line. This setting is enabled + by default in order to support iCalendar files generated by Outlook. +

    +

    +
    Parameters:
    enabled - true to enable (default), false to disable
    +
    +
    +
    + +

    +isSingleSpaceFoldingEnabled

    +
    +public boolean isSingleSpaceFoldingEnabled()
    +
    +
    Gets whether the reader will only ignore the first whitespace character + it encounters at the beginning of a folded line. This setting is enabled + by default in order to support iCalendar files generated by Outlook. +

    +

    + +
    Returns:
    true if enabled (default), false if disabled
    +
    +
    +
    + +

    +getLineNum

    +
    +public int getLineNum()
    +
    +
    Gets the starting line number of the last unfolded line that was read. +

    +

    + +
    Returns:
    the line number
    +
    +
    +
    + +

    +readLine

    +
    +public String readLine()
    +                throws IOException
    +
    +
    Reads the next line, unfolding it if necessary. +

    +

    +
    Overrides:
    readLine in class BufferedReader
    +
    +
    + +
    Returns:
    the next line or null if EOF +
    Throws: +
    IOException - if there's a problem reading from the reader
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/FoldedLineWriter.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/FoldedLineWriter.html new file mode 100644 index 000000000..f8761fcab --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/FoldedLineWriter.html @@ -0,0 +1,563 @@ + + + + + + + +FoldedLineWriter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.text +
    +Class FoldedLineWriter

    +
    +java.lang.Object
    +  extended by java.io.Writer
    +      extended by biweekly.io.text.FoldedLineWriter
    +
    +
    +
    All Implemented Interfaces:
    Closeable, Flushable, Appendable
    +
    +
    +
    +
    public class FoldedLineWriter
    extends Writer
    + + +

    +Automatically folds lines as they are written. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class java.io.Writer
    lock
    +  + + + + + + + + + + +
    +Constructor Summary
    FoldedLineWriter(Writer writer, + int lineLength, + String indent, + String newline) + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidclose() + +
    +           
    + voidflush() + +
    +           
    + StringgetIndent() + +
    +          Gets the string that is prepended to each folded line.
    + intgetLineLength() + +
    +          Gets the maximum length a line can be before it is folded (excluding the + newline).
    + StringgetNewline() + +
    +          Gets the newline sequence that is used to separate lines.
    + voidsetIndent(String indent) + +
    +          Sets the string that is prepended to each folded line.
    + voidsetLineLength(int lineLength) + +
    +          Sets the maximum length a line can be before it is folded (excluding the + newline).
    + voidsetNewline(String newline) + +
    +          Sets the newline sequence that is used to separate lines
    + voidwrite(char[] buf, + int start, + int end) + +
    +           
    + voidwrite(char[] buf, + int start, + int end, + int lineLength, + String indent) + +
    +          Writes a portion of an array of characters.
    + voidwriteln(String str) + +
    +          Writes a string of text, followed by a newline.
    + + + + + + + +
    Methods inherited from class java.io.Writer
    append, append, append, write, write, write, write
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +FoldedLineWriter

    +
    +public FoldedLineWriter(Writer writer,
    +                        int lineLength,
    +                        String indent,
    +                        String newline)
    +
    +
    +
    Parameters:
    writer - the writer object to wrap
    lineLength - the maximum length a line can be before it is folded + (excluding the newline)
    indent - the string to prepend to each folded line (e.g. a single + space character)
    newline - the newline sequence to use (e.g. "\r\n") +
    Throws: +
    IllegalArgumentException - if the line length is less than or equal + to zero +
    IllegalArgumentException - if the length of the indent string is + greater than the max line length
    +
    + + + + + + + + +
    +Method Detail
    + +

    +writeln

    +
    +public void writeln(String str)
    +             throws IOException
    +
    +
    Writes a string of text, followed by a newline. +

    +

    +
    Parameters:
    str - the text to write +
    Throws: +
    IOException - if there's a problem writing to the output stream
    +
    +
    +
    + +

    +write

    +
    +public void write(char[] buf,
    +                  int start,
    +                  int end)
    +           throws IOException
    +
    +
    +
    Specified by:
    write in class Writer
    +
    +
    + +
    Throws: +
    IOException
    +
    +
    +
    + +

    +write

    +
    +public void write(char[] buf,
    +                  int start,
    +                  int end,
    +                  int lineLength,
    +                  String indent)
    +           throws IOException
    +
    +
    Writes a portion of an array of characters. +

    +

    +
    Parameters:
    buf - the array of characters
    start - the offset from which to start writing characters
    end - the number of characters to write
    lineLength - the maximum length a line can be before it is folded + (excluding the newline)
    indent - the indent string to use (e.g. a single space character) +
    Throws: +
    IOException - if there's a problem writing to the output stream
    +
    +
    +
    + +

    +close

    +
    +public void close()
    +           throws IOException
    +
    +
    +
    Specified by:
    close in interface Closeable
    Specified by:
    close in class Writer
    +
    +
    + +
    Throws: +
    IOException
    +
    +
    +
    + +

    +flush

    +
    +public void flush()
    +           throws IOException
    +
    +
    +
    Specified by:
    flush in interface Flushable
    Specified by:
    flush in class Writer
    +
    +
    + +
    Throws: +
    IOException
    +
    +
    +
    + +

    +getLineLength

    +
    +public int getLineLength()
    +
    +
    Gets the maximum length a line can be before it is folded (excluding the + newline). +

    +

    + +
    Returns:
    the line length
    +
    +
    +
    + +

    +setLineLength

    +
    +public void setLineLength(int lineLength)
    +
    +
    Sets the maximum length a line can be before it is folded (excluding the + newline). +

    +

    +
    Parameters:
    lineLength - the line length +
    Throws: +
    IllegalArgumentException - if the line length is less than or equal + to zero
    +
    +
    +
    + +

    +getIndent

    +
    +public String getIndent()
    +
    +
    Gets the string that is prepended to each folded line. +

    +

    + +
    Returns:
    the indent string
    +
    +
    +
    + +

    +setIndent

    +
    +public void setIndent(String indent)
    +
    +
    Sets the string that is prepended to each folded line. +

    +

    +
    Parameters:
    indent - the indent string (e.g. a single space character) +
    Throws: +
    IllegalArgumentException - if the length of the indent string is + greater than the max line length
    +
    +
    +
    + +

    +getNewline

    +
    +public String getNewline()
    +
    +
    Gets the newline sequence that is used to separate lines. +

    +

    + +
    Returns:
    the newline sequence
    +
    +
    +
    + +

    +setNewline

    +
    +public void setNewline(String newline)
    +
    +
    Sets the newline sequence that is used to separate lines +

    +

    +
    Parameters:
    newline - the newline sequence
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/FoldingScheme.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/FoldingScheme.html new file mode 100644 index 000000000..2f4bbddd9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/FoldingScheme.html @@ -0,0 +1,336 @@ + + + + + + + +FoldingScheme (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.text +
    +Class FoldingScheme

    +
    +java.lang.Object
    +  extended by biweekly.io.text.FoldingScheme
    +
    +
    +
    +
    public class FoldingScheme
    extends Object
    + + +

    +Specifies how an iCalendar object should be folded when written to a string. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + +
    +Field Summary
    +static FoldingSchemeDEFAULT + +
    +          Folds lines according to RFC specification (75 characters not including + CRLF, with 1 space as indentation).
    +  + + + + + + + + + + +
    +Constructor Summary
    FoldingScheme(int lineLength, + String indent) + +
    +           
    +  + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetIndent() + +
    +          Gets the string that is used to indent the folded line.
    + intgetLineLength() + +
    +          Gets the maximum number of characters that can exist on a line before + needing to be folded (not including the newline).
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +DEFAULT

    +
    +public static final FoldingScheme DEFAULT
    +
    +
    Folds lines according to RFC specification (75 characters not including + CRLF, with 1 space as indentation). +

    +

    +
    +
    + + + + + + + + +
    +Constructor Detail
    + +

    +FoldingScheme

    +
    +public FoldingScheme(int lineLength,
    +                     String indent)
    +
    +
    +
    Parameters:
    lineLength - the maximum number of characters that can exist on a + line before needing to be folded (not including the newline)
    indent - the string to use for indentation +
    Throws: +
    IllegalArgumentException - if the line length is <= 0, or if the + line length is less than the length of the indentation string
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getLineLength

    +
    +public int getLineLength()
    +
    +
    Gets the maximum number of characters that can exist on a line before + needing to be folded (not including the newline). +

    +

    + +
    Returns:
    the max line length
    +
    +
    +
    + +

    +getIndent

    +
    +public String getIndent()
    +
    +
    Gets the string that is used to indent the folded line. +

    +

    + +
    Returns:
    the indent string
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawReader.ICalDataStreamListener.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawReader.ICalDataStreamListener.html new file mode 100644 index 000000000..f8761f168 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawReader.ICalDataStreamListener.html @@ -0,0 +1,329 @@ + + + + + + + +ICalRawReader.ICalDataStreamListener (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.text +
    +Interface ICalRawReader.ICalDataStreamListener

    +
    +
    Enclosing class:
    ICalRawReader
    +
    +
    +
    +
    public static interface ICalRawReader.ICalDataStreamListener
    + + +

    +Handles the iCalendar data as it is read off the data stream. Each one of + this interface's methods may throw a ICalRawReader.StopReadingException at any + time to force the parser to stop reading from the data stream. This will + cause the reader to return from the ICalRawReader.start(biweekly.io.text.ICalRawReader.ICalDataStreamListener) method. + To continue reading from the data stream, simply call the + ICalRawReader.start(biweekly.io.text.ICalRawReader.ICalDataStreamListener) method again. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidbeginComponent(String name) + +
    +          Called when a component begins (when a "BEGIN:NAME" property is + reached).
    + voidendComponent(String name) + +
    +          Called when a component ends (when a "END:NAME" property is reached).
    + voidinvalidLine(String line) + +
    +          Called when a line cannot be parsed.
    + voidreadProperty(String name, + ICalParameters parameters, + String value) + +
    +          Called when a property is read.
    + voidvaluelessParameter(String propertyName, + String parameterName) + +
    +          Called when a value-less parameter is read.
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +beginComponent

    +
    +void beginComponent(String name)
    +
    +
    Called when a component begins (when a "BEGIN:NAME" property is + reached). +

    +

    +
    Parameters:
    name - the component name (e.g. "VEVENT") +
    Throws: +
    ICalRawReader.StopReadingException - to force the reader to stop reading from + the data stream
    +
    +
    +
    + +

    +readProperty

    +
    +void readProperty(String name,
    +                  ICalParameters parameters,
    +                  String value)
    +
    +
    Called when a property is read. +

    +

    +
    Parameters:
    name - the property name (e.g. "VERSION")
    parameters - the parameters
    value - the property value +
    Throws: +
    ICalRawReader.StopReadingException - to force the reader to stop reading from + the data stream
    +
    +
    +
    + +

    +endComponent

    +
    +void endComponent(String name)
    +
    +
    Called when a component ends (when a "END:NAME" property is reached). +

    +

    +
    Parameters:
    name - the component name (e.g. "VEVENT") +
    Throws: +
    ICalRawReader.StopReadingException - to force the reader to stop reading from + the data stream
    +
    +
    +
    + +

    +invalidLine

    +
    +void invalidLine(String line)
    +
    +
    Called when a line cannot be parsed. +

    +

    +
    Parameters:
    line - the unparseable line +
    Throws: +
    ICalRawReader.StopReadingException - to force the reader to stop reading from + the data stream
    +
    +
    +
    + +

    +valuelessParameter

    +
    +void valuelessParameter(String propertyName,
    +                        String parameterName)
    +
    +
    Called when a value-less parameter is read. +

    +

    +
    Parameters:
    propertyName - the property name (e.g. "VERSION")
    parameterName - the parameter name (e.g. "FMTTYPE")
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawReader.StopReadingException.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawReader.StopReadingException.html new file mode 100644 index 000000000..486a54f81 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawReader.StopReadingException.html @@ -0,0 +1,253 @@ + + + + + + + +ICalRawReader.StopReadingException (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.text +
    +Class ICalRawReader.StopReadingException

    +
    +java.lang.Object
    +  extended by java.lang.Throwable
    +      extended by java.lang.Exception
    +          extended by java.lang.RuntimeException
    +              extended by biweekly.ICalException
    +                  extended by biweekly.io.text.ICalRawReader.StopReadingException
    +
    +
    +
    All Implemented Interfaces:
    Serializable
    +
    +
    +
    Enclosing class:
    ICalRawReader
    +
    +
    +
    +
    public static class ICalRawReader.StopReadingException
    extends ICalException
    + + +

    +Instructs an ICalRawReader to stop reading from the data stream + when thrown from an ICalRawReader.ICalDataStreamListener implementation. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    See Also:
    Serialized Form
    +
    + +

    + + + + + + + + + + + +
    +Constructor Summary
    ICalRawReader.StopReadingException() + +
    +           
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class java.lang.Throwable
    fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalRawReader.StopReadingException

    +
    +public ICalRawReader.StopReadingException()
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawReader.html new file mode 100644 index 000000000..60b757f70 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawReader.html @@ -0,0 +1,496 @@ + + + + + + + +ICalRawReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.text +
    +Class ICalRawReader

    +
    +java.lang.Object
    +  extended by biweekly.io.text.ICalRawReader
    +
    +
    +
    All Implemented Interfaces:
    Closeable
    +
    +
    +
    +
    public class ICalRawReader
    extends Object
    implements Closeable
    + + +

    +Parses an iCalendar data stream. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545
    +
    + +

    + + + + + + + + + + + + + + + +
    +Nested Class Summary
    +static interfaceICalRawReader.ICalDataStreamListener + +
    +          Handles the iCalendar data as it is read off the data stream.
    +static classICalRawReader.StopReadingException + +
    +          Instructs an ICalRawReader to stop reading from the data stream + when thrown from an ICalRawReader.ICalDataStreamListener implementation.
    +  + + + + + + + + + + +
    +Constructor Summary
    ICalRawReader(Reader reader) + +
    +          Creates a new reader.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidclose() + +
    +          Closes the underlying Reader object.
    + booleaneof() + +
    +          Determines whether the end of the data stream has been reached.
    + intgetLineNum() + +
    +          Gets the line number of the last line that was read.
    + booleanisCaretDecodingEnabled() + +
    +           + Gets whether the reader will decode parameter values that use circumflex + accent encoding (enabled by default).
    + voidsetCaretDecodingEnabled(boolean enable) + +
    +           + Sets whether the reader will decode parameter values that use circumflex + accent encoding (enabled by default).
    + voidstart(ICalRawReader.ICalDataStreamListener listener) + +
    +          Starts or continues reading from the iCalendar data stream.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalRawReader

    +
    +public ICalRawReader(Reader reader)
    +
    +
    Creates a new reader. +

    +

    +
    Parameters:
    reader - the reader to the data stream
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getLineNum

    +
    +public int getLineNum()
    +
    +
    Gets the line number of the last line that was read. +

    +

    +
    +
    +
    + +
    Returns:
    the line number
    +
    +
    +
    + +

    +start

    +
    +public void start(ICalRawReader.ICalDataStreamListener listener)
    +           throws IOException
    +
    +
    Starts or continues reading from the iCalendar data stream. +

    +

    +
    +
    +
    +
    Parameters:
    listener - handles the iCalendar data as it is read off the wire +
    Throws: +
    IOException - if there is an I/O problem
    +
    +
    +
    + +

    +isCaretDecodingEnabled

    +
    +public boolean isCaretDecodingEnabled()
    +
    +

    + Gets whether the reader will decode parameter values that use circumflex + accent encoding (enabled by default). This escaping mechanism allows + newlines and double quotes to be included in parameter values. +

    + + + + + + + + + + + + + + + + + + +
    Raw CharacterEncoded Character
    "^'
    newline^n
    ^^^
    + +

    + Example: +

    + +
    + GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
    +  sburgh, PA 15212":40.446816;80.00566
    + 
    +

    +

    +
    +
    +
    + +
    Returns:
    true if circumflex accent decoding is enabled, false if not
    Specification Reference:
    RFC 6868
    +
    +
    +
    + +

    +setCaretDecodingEnabled

    +
    +public void setCaretDecodingEnabled(boolean enable)
    +
    +

    + Sets whether the reader will decode parameter values that use circumflex + accent encoding (enabled by default). This escaping mechanism allows + newlines and double quotes to be included in parameter values. +

    + + + + + + + + + + + + + + + + + + +
    Raw CharacterEncoded Character
    "^'
    newline^n
    ^^^
    + +

    + Example: +

    + +
    + GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
    +  sburgh, PA 15212":geo:40.446816,-80.00566
    + 
    +

    +

    +
    +
    +
    +
    Parameters:
    enable - true to use circumflex accent decoding, false not to
    Specification Reference:
    RFC 6868
    +
    +
    +
    + +

    +eof

    +
    +public boolean eof()
    +
    +
    Determines whether the end of the data stream has been reached. +

    +

    +
    +
    +
    + +
    Returns:
    true if the end has been reached, false if not
    +
    +
    +
    + +

    +close

    +
    +public void close()
    +           throws IOException
    +
    +
    Closes the underlying Reader object. +

    +

    +
    Specified by:
    close in interface Closeable
    +
    +
    + +
    Throws: +
    IOException
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawWriter.ParameterValueChangedListener.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawWriter.ParameterValueChangedListener.html new file mode 100644 index 000000000..dae78930f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawWriter.ParameterValueChangedListener.html @@ -0,0 +1,231 @@ + + + + + + + +ICalRawWriter.ParameterValueChangedListener (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.text +
    +Interface ICalRawWriter.ParameterValueChangedListener

    +
    +
    Enclosing class:
    ICalRawWriter
    +
    +
    +
    +
    public static interface ICalRawWriter.ParameterValueChangedListener
    + + +

    +Allows you to respond to when a parameter's value is changed due to it + containing invalid characters. If a character can be escaped (such as the + "^" character when caret encoding is enabled), then this does not count + as the parameter being modified because it can be decoded without losing + any information. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + +
    +Method Summary
    + voidonParameterValueChanged(String propertyName, + String parameterName, + String originalValue, + String modifiedValue) + +
    +          Called when a parameter value is changed.
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +onParameterValueChanged

    +
    +void onParameterValueChanged(String propertyName,
    +                             String parameterName,
    +                             String originalValue,
    +                             String modifiedValue)
    +
    +
    Called when a parameter value is changed. +

    +

    +
    Parameters:
    propertyName - the name of the property to which the parameter + belongs
    parameterName - the parameter name
    originalValue - the original parameter value
    modifiedValue - the modified parameter value
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawWriter.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawWriter.html new file mode 100644 index 000000000..814d55ea1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalRawWriter.html @@ -0,0 +1,702 @@ + + + + + + + +ICalRawWriter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.text +
    +Class ICalRawWriter

    +
    +java.lang.Object
    +  extended by biweekly.io.text.ICalRawWriter
    +
    +
    +
    All Implemented Interfaces:
    Closeable
    +
    +
    +
    +
    public class ICalRawWriter
    extends Object
    implements Closeable
    + + +

    +Writes data to an iCalendar data stream. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545
    +
    + +

    + + + + + + + + + + + +
    +Nested Class Summary
    +static interfaceICalRawWriter.ParameterValueChangedListener + +
    +          Allows you to respond to when a parameter's value is changed due to it + containing invalid characters.
    +  + + + + + + + + + + + + + + + + +
    +Constructor Summary
    ICalRawWriter(Writer writer) + +
    +          Creates an iCalendar raw writer using the standard folding scheme and + newline sequence.
    ICalRawWriter(Writer writer, + FoldingScheme foldingScheme) + +
    +          Creates an iCalendar raw writer using the standard newline sequence.
    ICalRawWriter(Writer writer, + FoldingScheme foldingScheme, + String newline) + +
    +          Creates an iCalendar raw writer.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidclose() + +
    +          Closes the underlying Writer object.
    + FoldingSchemegetFoldingScheme() + +
    +          Gets the rules for how each line is folded.
    + StringgetNewline() + +
    +          Gets the newline sequence that is used to separate lines.
    + ICalRawWriter.ParameterValueChangedListenergetParameterValueChangedListener() + +
    +          Gets the listener which will be invoked when a parameter's value is + changed due to containing invalid characters.
    + booleanisCaretEncodingEnabled() + +
    +           + Gets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default).
    + voidsetCaretEncodingEnabled(boolean enable) + +
    +           + Sets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default).
    + voidsetParameterValueChangedListener(ICalRawWriter.ParameterValueChangedListener parameterValueChangedListener) + +
    +          Sets the listener which will be invoked when a parameter's value is + changed due to containing invalid characters.
    + voidwriteBeginComponent(String componentName) + +
    +          Writes a property marking the beginning of a component (in other words, + writes a "BEGIN:NAME" property).
    + voidwriteEndComponent(String componentName) + +
    +          Writes a property marking the end of a component (in other words, writes + a "END:NAME" property).
    + voidwriteProperty(String propertyName, + ICalParameters parameters, + String value) + +
    +          Writes a property to the iCalendar data stream.
    + voidwriteProperty(String propertyName, + String value) + +
    +          Writes a property to the iCalendar data stream.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalRawWriter

    +
    +public ICalRawWriter(Writer writer)
    +
    +
    Creates an iCalendar raw writer using the standard folding scheme and + newline sequence. +

    +

    +
    Parameters:
    writer - the writer to the data stream
    +
    +
    + +

    +ICalRawWriter

    +
    +public ICalRawWriter(Writer writer,
    +                     FoldingScheme foldingScheme)
    +
    +
    Creates an iCalendar raw writer using the standard newline sequence. +

    +

    +
    Parameters:
    writer - the writer to the data stream
    foldingScheme - the folding scheme to use or null not to fold at all
    +
    +
    + +

    +ICalRawWriter

    +
    +public ICalRawWriter(Writer writer,
    +                     FoldingScheme foldingScheme,
    +                     String newline)
    +
    +
    Creates an iCalendar raw writer. +

    +

    +
    Parameters:
    writer - the writer to the data stream
    foldingScheme - the folding scheme to use or null not to fold at all
    newline - the newline sequence to use
    +
    + + + + + + + + +
    +Method Detail
    + +

    +isCaretEncodingEnabled

    +
    +public boolean isCaretEncodingEnabled()
    +
    +

    + Gets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default). This escaping mechanism allows + for newlines and double quotes to be included in parameter values. +

    + +

    + When disabled, the writer will replace newlines with spaces and double + quotes with single quotes. +

    + + + + + + + + + + + + + + + + + + + + + + +
    CharacterReplacement
    + (when disabled)
    Replacement
    + (when enabled)
    "'^'
    newlinespace^n
    ^^^^
    + +

    + Example: +

    + +
    + GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
    +  sburgh, PA 15212":40.446816;80.00566
    + 
    +

    +

    +
    +
    +
    + +
    Returns:
    true if circumflex accent encoding is enabled, false if not
    Specification Reference:
    RFC 6868
    +
    +
    +
    + +

    +setCaretEncodingEnabled

    +
    +public void setCaretEncodingEnabled(boolean enable)
    +
    +

    + Sets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default). This escaping mechanism allows + for newlines and double quotes to be included in parameter values. +

    + +

    + When disabled, the writer will replace newlines with spaces and double + quotes with single quotes. +

    + + + + + + + + + + + + + + + + + + + + + + +
    CharacterReplacement
    + (when disabled)
    Replacement
    + (when enabled)
    "'^'
    newlinespace^n
    ^^^^
    + +

    + Example: +

    + +
    + GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
    +  sburgh, PA 15212":40.446816;80.00566
    + 
    +

    +

    +
    +
    +
    +
    Parameters:
    enable - true to use circumflex accent encoding, false not to
    Specification Reference:
    RFC 6868
    +
    +
    +
    + +

    +getNewline

    +
    +public String getNewline()
    +
    +
    Gets the newline sequence that is used to separate lines. +

    +

    +
    +
    +
    + +
    Returns:
    the newline sequence
    +
    +
    +
    + +

    +getParameterValueChangedListener

    +
    +public ICalRawWriter.ParameterValueChangedListener getParameterValueChangedListener()
    +
    +
    Gets the listener which will be invoked when a parameter's value is + changed due to containing invalid characters. +

    +

    +
    +
    +
    + +
    Returns:
    the listener or null if not set
    +
    +
    +
    + +

    +setParameterValueChangedListener

    +
    +public void setParameterValueChangedListener(ICalRawWriter.ParameterValueChangedListener parameterValueChangedListener)
    +
    +
    Sets the listener which will be invoked when a parameter's value is + changed due to containing invalid characters. +

    +

    +
    +
    +
    +
    Parameters:
    parameterValueChangedListener - the listener or null to remove
    +
    +
    +
    + +

    +getFoldingScheme

    +
    +public FoldingScheme getFoldingScheme()
    +
    +
    Gets the rules for how each line is folded. +

    +

    +
    +
    +
    + +
    Returns:
    the folding scheme or null if the lines are not folded
    +
    +
    +
    + +

    +writeBeginComponent

    +
    +public void writeBeginComponent(String componentName)
    +                         throws IOException
    +
    +
    Writes a property marking the beginning of a component (in other words, + writes a "BEGIN:NAME" property). +

    +

    +
    +
    +
    +
    Parameters:
    componentName - the component name (e.g. "VEVENT") +
    Throws: +
    IOException - if there's an I/O problem
    +
    +
    +
    + +

    +writeEndComponent

    +
    +public void writeEndComponent(String componentName)
    +                       throws IOException
    +
    +
    Writes a property marking the end of a component (in other words, writes + a "END:NAME" property). +

    +

    +
    +
    +
    +
    Parameters:
    componentName - the component name (e.g. "VEVENT") +
    Throws: +
    IOException - if there's an I/O problem
    +
    +
    +
    + +

    +writeProperty

    +
    +public void writeProperty(String propertyName,
    +                          String value)
    +                   throws IOException
    +
    +
    Writes a property to the iCalendar data stream. +

    +

    +
    +
    +
    +
    Parameters:
    propertyName - the property name (e.g. "VERSION")
    value - the property value (e.g. "2.0") +
    Throws: +
    IllegalArgumentException - if the property name contains invalid + characters +
    IOException - if there's an I/O problem
    +
    +
    +
    + +

    +writeProperty

    +
    +public void writeProperty(String propertyName,
    +                          ICalParameters parameters,
    +                          String value)
    +                   throws IOException
    +
    +
    Writes a property to the iCalendar data stream. +

    +

    +
    +
    +
    +
    Parameters:
    propertyName - the property name (e.g. "VERSION")
    parameters - the property parameters
    value - the property value (e.g. "2.0") +
    Throws: +
    IllegalArgumentException - if the property name contains invalid + characters +
    IOException - if there's an I/O problem
    +
    +
    +
    + +

    +close

    +
    +public void close()
    +           throws IOException
    +
    +
    Closes the underlying Writer object. +

    +

    +
    Specified by:
    close in interface Closeable
    +
    +
    + +
    Throws: +
    IOException
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalReader.html new file mode 100644 index 000000000..d2d757060 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalReader.html @@ -0,0 +1,571 @@ + + + + + + + +ICalReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.text +
    +Class ICalReader

    +
    +java.lang.Object
    +  extended by biweekly.io.text.ICalReader
    +
    +
    +
    All Implemented Interfaces:
    Closeable
    +
    +
    +
    +
    public class ICalReader
    extends Object
    implements Closeable
    + + +

    +

    + Parses ICalendar objects from an iCalendar data stream. +

    +

    + Example: + +

    + InputStream in = ...
    + ICalReader icalReader = new ICalReader(in);
    + ICalendar ical;
    + while ((ical = icalReader.readNext()) != null){
    +   ...
    + }
    + icalReader.close();
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545
    +
    + +

    + + + + + + + + + + + + + + + + + + + + +
    +Constructor Summary
    ICalReader(File file) + +
    +          Creates a reader that parses iCalendar objects from a file.
    ICalReader(InputStream in) + +
    +          Creates a reader that parses iCalendar objects from an input stream.
    ICalReader(Reader reader) + +
    +          Creates a reader that parses iCalendar objects from a reader.
    ICalReader(String string) + +
    +          Creates a reader that parses iCalendar objects from a string.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidclose() + +
    +          Closes the underlying Reader object.
    + ICalMarshallerRegistrargetRegistrar() + +
    +          Gets the object that manages the component/property marshaller objects.
    + List<String>getWarnings() + +
    +          Gets the warnings from the last iCalendar object that was unmarshalled.
    + booleanisCaretDecodingEnabled() + +
    +          Gets whether the reader will decode parameter values that use circumflex + accent encoding (enabled by default).
    + ICalendarreadNext() + +
    +          Reads the next iCalendar object.
    + voidregisterMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    + voidregisterMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    + voidsetCaretDecodingEnabled(boolean enable) + +
    +          Sets whether the reader will decode parameter values that use circumflex + accent encoding (enabled by default).
    + voidsetRegistrar(ICalMarshallerRegistrar registrar) + +
    +          Sets the object that manages the component/property marshaller objects.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalReader

    +
    +public ICalReader(String string)
    +
    +
    Creates a reader that parses iCalendar objects from a string. +

    +

    +
    Parameters:
    string - the string
    +
    +
    + +

    +ICalReader

    +
    +public ICalReader(InputStream in)
    +
    +
    Creates a reader that parses iCalendar objects from an input stream. +

    +

    +
    Parameters:
    in - the input stream
    +
    +
    + +

    +ICalReader

    +
    +public ICalReader(File file)
    +           throws FileNotFoundException
    +
    +
    Creates a reader that parses iCalendar objects from a file. +

    +

    +
    Parameters:
    file - the file +
    Throws: +
    FileNotFoundException - if the file doesn't exist
    +
    +
    + +

    +ICalReader

    +
    +public ICalReader(Reader reader)
    +
    +
    Creates a reader that parses iCalendar objects from a reader. +

    +

    +
    Parameters:
    reader - the reader
    +
    + + + + + + + + +
    +Method Detail
    + +

    +isCaretDecodingEnabled

    +
    +public boolean isCaretDecodingEnabled()
    +
    +
    Gets whether the reader will decode parameter values that use circumflex + accent encoding (enabled by default). This escaping mechanism allows + newlines and double quotes to be included in parameter values. +

    +

    +
    +
    +
    + +
    Returns:
    true if circumflex accent decoding is enabled, false if not
    See Also:
    ICalRawReader.isCaretDecodingEnabled()
    +
    +
    +
    + +

    +setCaretDecodingEnabled

    +
    +public void setCaretDecodingEnabled(boolean enable)
    +
    +
    Sets whether the reader will decode parameter values that use circumflex + accent encoding (enabled by default). This escaping mechanism allows + newlines and double quotes to be included in parameter values. +

    +

    +
    +
    +
    +
    Parameters:
    enable - true to use circumflex accent decoding, false not to
    See Also:
    ICalRawReader.setCaretDecodingEnabled(boolean)
    +
    +
    +
    + +

    +registerMarshaller

    +
    +public void registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +

    + Registers an experimental property marshaller. Can also be used to + override the marshaller of a standard property (such as DTSTART). Calling + this method is the same as calling: +

    +

    + getRegistrar().register(marshaller). +

    +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller to register
    +
    +
    +
    + +

    +registerMarshaller

    +
    +public void registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +

    + Registers an experimental component marshaller. Can also be used to + override the marshaller of a standard component (such as VEVENT). Calling + this method is the same as calling: +

    +

    + getRegistrar().register(marshaller). +

    +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller to register
    +
    +
    +
    + +

    +getRegistrar

    +
    +public ICalMarshallerRegistrar getRegistrar()
    +
    +
    Gets the object that manages the component/property marshaller objects. +

    +

    +
    +
    +
    + +
    Returns:
    the marshaller registrar
    +
    +
    +
    + +

    +setRegistrar

    +
    +public void setRegistrar(ICalMarshallerRegistrar registrar)
    +
    +
    Sets the object that manages the component/property marshaller objects. +

    +

    +
    +
    +
    +
    Parameters:
    registrar - the marshaller registrar
    +
    +
    +
    + +

    +getWarnings

    +
    +public List<String> getWarnings()
    +
    +
    Gets the warnings from the last iCalendar object that was unmarshalled. + This list is reset every time a new iCalendar object is read. +

    +

    +
    +
    +
    + +
    Returns:
    the warnings or empty list if there were no warnings
    +
    +
    +
    + +

    +readNext

    +
    +public ICalendar readNext()
    +                   throws IOException
    +
    +
    Reads the next iCalendar object. +

    +

    +
    +
    +
    + +
    Returns:
    the next iCalendar object or null if there are no more +
    Throws: +
    IOException - if there's a problem reading from the stream
    +
    +
    +
    + +

    +close

    +
    +public void close()
    +           throws IOException
    +
    +
    Closes the underlying Reader object. +

    +

    +
    Specified by:
    close in interface Closeable
    +
    +
    + +
    Throws: +
    IOException
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalWriter.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalWriter.html new file mode 100644 index 000000000..b4608cbc7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/ICalWriter.html @@ -0,0 +1,765 @@ + + + + + + + +ICalWriter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.text +
    +Class ICalWriter

    +
    +java.lang.Object
    +  extended by biweekly.io.text.ICalWriter
    +
    +
    +
    All Implemented Interfaces:
    Closeable
    +
    +
    +
    +
    public class ICalWriter
    extends Object
    implements Closeable
    + + +

    +

    + Writes ICalendar objects to an iCalendar data stream. +

    +

    + Example: + +

    + List<ICalendar> icals = ... 
    + OutputStream out = ...
    + ICalWriter icalWriter = new ICalWriter(out);
    + for (ICalendar ical : icals){
    +   icalWriter.write(ical);
    + }
    + icalWriter.close();
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Constructor Summary
    ICalWriter(File file) + +
    +          Creates an iCalendar writer that writes to a file.
    ICalWriter(File file, + boolean append) + +
    +          Creates an iCalendar writer that writes to a file.
    ICalWriter(File file, + boolean append, + FoldingScheme foldingScheme) + +
    +          Creates an iCalendar writer that writes to a file.
    ICalWriter(File file, + boolean append, + FoldingScheme foldingScheme, + String newline) + +
    +          Creates an iCalendar writer that writes to a file.
    ICalWriter(OutputStream outputStream) + +
    +          Creates an iCalendar writer that writes to an output stream.
    ICalWriter(OutputStream outputStream, + FoldingScheme foldingScheme) + +
    +          Creates an iCalendar writer that writes to an output stream.
    ICalWriter(OutputStream outputStream, + FoldingScheme foldingScheme, + String newline) + +
    +          Creates an iCalendar writer that writes to an output stream.
    ICalWriter(Writer writer) + +
    +          Creates an iCalendar writer that writes to a writer.
    ICalWriter(Writer writer, + FoldingScheme foldingScheme) + +
    +          Creates an iCalendar writer that writes to a writer.
    ICalWriter(Writer writer, + FoldingScheme foldingScheme, + String newline) + +
    +          Creates an iCalendar writer that writes to a writer.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidclose() + +
    +          Closes the underlying Writer object.
    + FoldingSchemegetFoldingScheme() + +
    +          Gets the rules for how each line is folded.
    + StringgetNewline() + +
    +          Gets the newline sequence that is used to separate lines.
    + ICalMarshallerRegistrargetRegistrar() + +
    +          Gets the object that manages the component/property marshaller objects.
    + booleanisCaretEncodingEnabled() + +
    +           + Gets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default).
    + voidregisterMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    + voidregisterMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    + voidsetCaretEncodingEnabled(boolean enable) + +
    +           + Sets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default).
    + voidsetRegistrar(ICalMarshallerRegistrar registrar) + +
    +          Sets the object that manages the component/property marshaller objects.
    + voidwrite(ICalendar ical) + +
    +          Writes an iCalendar object to the data stream.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalWriter

    +
    +public ICalWriter(OutputStream outputStream)
    +
    +
    Creates an iCalendar writer that writes to an output stream. Uses the + standard folding scheme and newline sequence. +

    +

    +
    Parameters:
    outputStream - the output stream to write to
    +
    +
    + +

    +ICalWriter

    +
    +public ICalWriter(OutputStream outputStream,
    +                  FoldingScheme foldingScheme)
    +
    +
    Creates an iCalendar writer that writes to an output stream. Uses the + standard newline sequence. +

    +

    +
    Parameters:
    outputStream - the output stream to write to
    foldingScheme - the folding scheme to use or null not to fold at all
    +
    +
    + +

    +ICalWriter

    +
    +public ICalWriter(OutputStream outputStream,
    +                  FoldingScheme foldingScheme,
    +                  String newline)
    +
    +
    Creates an iCalendar writer that writes to an output stream. +

    +

    +
    Parameters:
    outputStream - the output stream to write to
    foldingScheme - the folding scheme to use or null not to fold at all
    newline - the newline sequence to use
    +
    +
    + +

    +ICalWriter

    +
    +public ICalWriter(File file)
    +           throws FileNotFoundException
    +
    +
    Creates an iCalendar writer that writes to a file. Uses the standard + folding scheme and newline sequence. +

    +

    +
    Parameters:
    file - the file to write to +
    Throws: +
    FileNotFoundException - if the file cannot be written to
    +
    +
    + +

    +ICalWriter

    +
    +public ICalWriter(File file,
    +                  boolean append)
    +           throws FileNotFoundException
    +
    +
    Creates an iCalendar writer that writes to a file. Uses the standard + folding scheme and newline sequence. +

    +

    +
    Parameters:
    file - the file to write to
    append - true to append to the end of the file, false to overwrite + it +
    Throws: +
    FileNotFoundException - if the file cannot be written to
    +
    +
    + +

    +ICalWriter

    +
    +public ICalWriter(File file,
    +                  boolean append,
    +                  FoldingScheme foldingScheme)
    +           throws FileNotFoundException
    +
    +
    Creates an iCalendar writer that writes to a file. Uses the standard + newline sequence. +

    +

    +
    Parameters:
    file - the file to write to
    append - true to append to the end of the file, false to overwrite + it
    foldingScheme - the folding scheme to use or null not to fold at all +
    Throws: +
    FileNotFoundException - if the file cannot be written to
    +
    +
    + +

    +ICalWriter

    +
    +public ICalWriter(File file,
    +                  boolean append,
    +                  FoldingScheme foldingScheme,
    +                  String newline)
    +           throws FileNotFoundException
    +
    +
    Creates an iCalendar writer that writes to a file. +

    +

    +
    Parameters:
    file - the file to write to
    append - true to append to the end of the file, false to overwrite + it
    foldingScheme - the folding scheme to use or null not to fold at all
    newline - the newline sequence to use +
    Throws: +
    FileNotFoundException - if the file cannot be written to
    +
    +
    + +

    +ICalWriter

    +
    +public ICalWriter(Writer writer)
    +
    +
    Creates an iCalendar writer that writes to a writer. Uses the standard + folding scheme and newline sequence. +

    +

    +
    Parameters:
    writer - the writer to the data stream
    +
    +
    + +

    +ICalWriter

    +
    +public ICalWriter(Writer writer,
    +                  FoldingScheme foldingScheme)
    +
    +
    Creates an iCalendar writer that writes to a writer. Uses the standard + newline sequence. +

    +

    +
    Parameters:
    writer - the writer to the data stream
    foldingScheme - the folding scheme to use or null not to fold at all
    +
    +
    + +

    +ICalWriter

    +
    +public ICalWriter(Writer writer,
    +                  FoldingScheme foldingScheme,
    +                  String newline)
    +
    +
    Creates an iCalendar writer that writes to a writer. +

    +

    +
    Parameters:
    writer - the writer to the data stream
    foldingScheme - the folding scheme to use or null not to fold at all
    newline - the newline sequence to use
    +
    + + + + + + + + +
    +Method Detail
    + +

    +isCaretEncodingEnabled

    +
    +public boolean isCaretEncodingEnabled()
    +
    +

    + Gets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default). This escaping mechanism allows + for newlines and double quotes to be included in parameter values. +

    + +

    + When disabled, the writer will replace newlines with spaces and double + quotes with single quotes. +

    +

    +

    +
    +
    +
    + +
    Returns:
    true if circumflex accent encoding is enabled, false if not
    See Also:
    ICalRawWriter.isCaretEncodingEnabled()
    +
    +
    +
    + +

    +setCaretEncodingEnabled

    +
    +public void setCaretEncodingEnabled(boolean enable)
    +
    +

    + Sets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default). This escaping mechanism allows + for newlines and double quotes to be included in parameter values. +

    + +

    + When disabled, the writer will replace newlines with spaces and double + quotes with single quotes. +

    +

    +

    +
    +
    +
    +
    Parameters:
    enable - true to use circumflex accent encoding, false not to
    See Also:
    ICalRawWriter.setCaretEncodingEnabled(boolean)
    +
    +
    +
    + +

    +getNewline

    +
    +public String getNewline()
    +
    +
    Gets the newline sequence that is used to separate lines. +

    +

    +
    +
    +
    + +
    Returns:
    the newline sequence
    +
    +
    +
    + +

    +getFoldingScheme

    +
    +public FoldingScheme getFoldingScheme()
    +
    +
    Gets the rules for how each line is folded. +

    +

    +
    +
    +
    + +
    Returns:
    the folding scheme or null if the lines are not folded
    +
    +
    +
    + +

    +registerMarshaller

    +
    +public void registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +

    + Registers an experimental property marshaller. Can also be used to + override the marshaller of a standard property (such as DTSTART). Calling + this method is the same as calling: +

    +

    + getRegistrar().register(marshaller). +

    +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller to register
    +
    +
    +
    + +

    +registerMarshaller

    +
    +public void registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +

    + Registers an experimental component marshaller. Can also be used to + override the marshaller of a standard component (such as VEVENT). Calling + this method is the same as calling: +

    +

    + getRegistrar().register(marshaller). +

    +

    +

    +
    +
    +
    +
    Parameters:
    marshaller - the marshaller to register
    +
    +
    +
    + +

    +getRegistrar

    +
    +public ICalMarshallerRegistrar getRegistrar()
    +
    +
    Gets the object that manages the component/property marshaller objects. +

    +

    +
    +
    +
    + +
    Returns:
    the marshaller registrar
    +
    +
    +
    + +

    +setRegistrar

    +
    +public void setRegistrar(ICalMarshallerRegistrar registrar)
    +
    +
    Sets the object that manages the component/property marshaller objects. +

    +

    +
    +
    +
    +
    Parameters:
    registrar - the marshaller registrar
    +
    +
    +
    + +

    +write

    +
    +public void write(ICalendar ical)
    +           throws IOException
    +
    +
    Writes an iCalendar object to the data stream. +

    +

    +
    +
    +
    +
    Parameters:
    ical - the iCalendar object to write +
    Throws: +
    IllegalArgumentException - if the marshaller class for a component + or property object cannot be found (only happens when an experimental + property/component marshaller is not registered with the + registerMarshaller method.) +
    IOException - if there's a problem writing to the data stream
    +
    +
    +
    + +

    +close

    +
    +public void close()
    +           throws IOException
    +
    +
    Closes the underlying Writer object. +

    +

    +
    Specified by:
    close in interface Closeable
    +
    +
    + +
    Throws: +
    IOException
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/FoldedLineReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/FoldedLineReader.html new file mode 100644 index 000000000..fd6c82ae7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/FoldedLineReader.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.text.FoldedLineReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.text.FoldedLineReader

    +
    +No usage of biweekly.io.text.FoldedLineReader +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/FoldedLineWriter.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/FoldedLineWriter.html new file mode 100644 index 000000000..4166f39ca --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/FoldedLineWriter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.text.FoldedLineWriter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.text.FoldedLineWriter

    +
    +No usage of biweekly.io.text.FoldedLineWriter +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/FoldingScheme.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/FoldingScheme.html new file mode 100644 index 000000000..c87d2e7a5 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/FoldingScheme.html @@ -0,0 +1,276 @@ + + + + + + + +Uses of Class biweekly.io.text.FoldingScheme (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.text.FoldingScheme

    +
    + + + + + + + + + +
    +Packages that use FoldingScheme
    biweekly.io.text  
    +  +

    + + + + + +
    +Uses of FoldingScheme in biweekly.io.text
    +  +

    + + + + + + + + + +
    Fields in biweekly.io.text declared as FoldingScheme
    +static FoldingSchemeFoldingScheme.DEFAULT + +
    +          Folds lines according to RFC specification (75 characters not including + CRLF, with 1 space as indentation).
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.io.text that return FoldingScheme
    + FoldingSchemeICalWriter.getFoldingScheme() + +
    +          Gets the rules for how each line is folded.
    + FoldingSchemeICalRawWriter.getFoldingScheme() + +
    +          Gets the rules for how each line is folded.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Constructors in biweekly.io.text with parameters of type FoldingScheme
    ICalRawWriter(Writer writer, + FoldingScheme foldingScheme) + +
    +          Creates an iCalendar raw writer using the standard newline sequence.
    ICalRawWriter(Writer writer, + FoldingScheme foldingScheme, + String newline) + +
    +          Creates an iCalendar raw writer.
    ICalWriter(File file, + boolean append, + FoldingScheme foldingScheme) + +
    +          Creates an iCalendar writer that writes to a file.
    ICalWriter(File file, + boolean append, + FoldingScheme foldingScheme, + String newline) + +
    +          Creates an iCalendar writer that writes to a file.
    ICalWriter(OutputStream outputStream, + FoldingScheme foldingScheme) + +
    +          Creates an iCalendar writer that writes to an output stream.
    ICalWriter(OutputStream outputStream, + FoldingScheme foldingScheme, + String newline) + +
    +          Creates an iCalendar writer that writes to an output stream.
    ICalWriter(Writer writer, + FoldingScheme foldingScheme) + +
    +          Creates an iCalendar writer that writes to a writer.
    ICalWriter(Writer writer, + FoldingScheme foldingScheme, + String newline) + +
    +          Creates an iCalendar writer that writes to a writer.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawReader.ICalDataStreamListener.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawReader.ICalDataStreamListener.html new file mode 100644 index 000000000..f0671f5cb --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawReader.ICalDataStreamListener.html @@ -0,0 +1,181 @@ + + + + + + + +Uses of Interface biweekly.io.text.ICalRawReader.ICalDataStreamListener (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Interface
    biweekly.io.text.ICalRawReader.ICalDataStreamListener

    +
    + + + + + + + + + +
    +Packages that use ICalRawReader.ICalDataStreamListener
    biweekly.io.text  
    +  +

    + + + + + +
    +Uses of ICalRawReader.ICalDataStreamListener in biweekly.io.text
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.text with parameters of type ICalRawReader.ICalDataStreamListener
    + voidICalRawReader.start(ICalRawReader.ICalDataStreamListener listener) + +
    +          Starts or continues reading from the iCalendar data stream.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawReader.StopReadingException.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawReader.StopReadingException.html new file mode 100644 index 000000000..ee6620ff9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawReader.StopReadingException.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.text.ICalRawReader.StopReadingException (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.text.ICalRawReader.StopReadingException

    +
    +No usage of biweekly.io.text.ICalRawReader.StopReadingException +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawReader.html new file mode 100644 index 000000000..34259ac52 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawReader.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.text.ICalRawReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.text.ICalRawReader

    +
    +No usage of biweekly.io.text.ICalRawReader +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawWriter.ParameterValueChangedListener.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawWriter.ParameterValueChangedListener.html new file mode 100644 index 000000000..ef1f44549 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawWriter.ParameterValueChangedListener.html @@ -0,0 +1,199 @@ + + + + + + + +Uses of Interface biweekly.io.text.ICalRawWriter.ParameterValueChangedListener (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Interface
    biweekly.io.text.ICalRawWriter.ParameterValueChangedListener

    +
    + + + + + + + + + +
    +Packages that use ICalRawWriter.ParameterValueChangedListener
    biweekly.io.text  
    +  +

    + + + + + +
    +Uses of ICalRawWriter.ParameterValueChangedListener in biweekly.io.text
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.text that return ICalRawWriter.ParameterValueChangedListener
    + ICalRawWriter.ParameterValueChangedListenerICalRawWriter.getParameterValueChangedListener() + +
    +          Gets the listener which will be invoked when a parameter's value is + changed due to containing invalid characters.
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.text with parameters of type ICalRawWriter.ParameterValueChangedListener
    + voidICalRawWriter.setParameterValueChangedListener(ICalRawWriter.ParameterValueChangedListener parameterValueChangedListener) + +
    +          Sets the listener which will be invoked when a parameter's value is + changed due to containing invalid characters.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawWriter.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawWriter.html new file mode 100644 index 000000000..b6a7ab686 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalRawWriter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.text.ICalRawWriter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.text.ICalRawWriter

    +
    +No usage of biweekly.io.text.ICalRawWriter +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalReader.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalReader.html new file mode 100644 index 000000000..f8ebbd878 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalReader.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.text.ICalReader (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.text.ICalReader

    +
    +No usage of biweekly.io.text.ICalReader +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalWriter.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalWriter.html new file mode 100644 index 000000000..b8585379d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/class-use/ICalWriter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.text.ICalWriter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.text.ICalWriter

    +
    +No usage of biweekly.io.text.ICalWriter +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/doc-files/shBrushJava.js b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/doc-files/shBrushJava.js new file mode 100644 index 000000000..d692fd638 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/doc-files/shBrushJava.js @@ -0,0 +1,57 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'abstract assert boolean break byte case catch char class const ' + + 'continue default do double else enum extends ' + + 'false final finally float for goto if implements import ' + + 'instanceof int interface long native new null ' + + 'package private protected public return ' + + 'short static strictfp super switch synchronized this throw throws true ' + + 'transient try void volatile while'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: /\/\*([^\*][\s\S]*)?\*\//gm, css: 'comments' }, // multiline comments + { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, css: 'preprocessor' }, // documentation comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers + { regex: /(?!\@interface\b)\@[\$\w]+\b/g, css: 'color1' }, // annotation @anno + { regex: /\@interface\b/g, css: 'color2' }, // @interface keyword + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // java keyword + ]; + + this.forHtmlScript({ + left : /(<|<)%[@!=]?/g, + right : /%(>|>)/g + }); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['java']; + + SyntaxHighlighter.brushes.Java = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/doc-files/shCore.js b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/doc-files/shCore.js new file mode 100644 index 000000000..b47b64547 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/doc-files/shCore.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a-1},3d:6(g){e+=g}};c1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;be.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;dd.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a\'+c+""});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.Pb.P)H 1;Y I(a.Lb.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'\'+c+""+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v<3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;">1v3v 3.0.76 (72 73 3x)1Z://3u.2w/1v70 17 6U 71.6T 6X-3x 6Y 6D.6t 61 60 J 1k, 5Z 5R 5V <2R/>5U 5T 5S!\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'\',d=e.16.2x,h=d.2X,g=0;g";H c},2o:6(a,b,c){H\'<2W>\'+c+""},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;md)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P\'+c+""},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i\'+j+"":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"":"")+\'<2d 1g="17">\'+b+""},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{})) diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-frame.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-frame.html new file mode 100644 index 000000000..871443bd9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-frame.html @@ -0,0 +1,69 @@ + + + + + + + +biweekly.io.text (biweekly 0.3.1 API) + + + + + + + + + + + +biweekly.io.text + + + + +
    +Interfaces  + +
    +ICalRawReader.ICalDataStreamListener +
    +ICalRawWriter.ParameterValueChangedListener
    + + + + + + +
    +Classes  + +
    +FoldedLineReader +
    +FoldedLineWriter +
    +FoldingScheme +
    +ICalRawReader +
    +ICalRawWriter +
    +ICalReader +
    +ICalWriter
    + + + + + + +
    +Exceptions  + +
    +ICalRawReader.StopReadingException
    + + + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-summary.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-summary.html new file mode 100644 index 000000000..9af53a043 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-summary.html @@ -0,0 +1,218 @@ + + + + + + + +biweekly.io.text (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +

    +Package biweekly.io.text +

    + + + + + + + + + + + + + +
    +Interface Summary
    ICalRawReader.ICalDataStreamListenerHandles the iCalendar data as it is read off the data stream.
    ICalRawWriter.ParameterValueChangedListenerAllows you to respond to when a parameter's value is changed due to it + containing invalid characters.
    +  + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class Summary
    FoldedLineReaderAutomatically unfolds lines of text as they are read.
    FoldedLineWriterAutomatically folds lines as they are written.
    FoldingSchemeSpecifies how an iCalendar object should be folded when written to a string.
    ICalRawReaderParses an iCalendar data stream.
    ICalRawWriterWrites data to an iCalendar data stream.
    ICalReader + Parses ICalendar objects from an iCalendar data stream.
    ICalWriter + Writes ICalendar objects to an iCalendar data stream.
    +  + +

    + + + + + + + + + +
    +Exception Summary
    ICalRawReader.StopReadingExceptionInstructs an ICalRawReader to stop reading from the data stream + when thrown from an ICalRawReader.ICalDataStreamListener implementation.
    +  + +

    +

    +
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-tree.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-tree.html new file mode 100644 index 000000000..b77a79522 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-tree.html @@ -0,0 +1,180 @@ + + + + + + + +biweekly.io.text Class Hierarchy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Hierarchy For Package biweekly.io.text +

    +
    +
    +
    Package Hierarchies:
    All Packages
    +
    +

    +Class Hierarchy +

    + +

    +Interface Hierarchy +

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-use.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-use.html new file mode 100644 index 000000000..f346e6b9d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/text/package-use.html @@ -0,0 +1,184 @@ + + + + + + + +Uses of Package biweekly.io.text (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Package
    biweekly.io.text

    +
    + + + + + + + + + +
    +Packages that use biweekly.io.text
    biweekly.io.text  
    +  +

    + + + + + + + + + + + + + + +
    +Classes in biweekly.io.text used by biweekly.io.text
    FoldingScheme + +
    +          Specifies how an iCalendar object should be folded when written to a string.
    ICalRawReader.ICalDataStreamListener + +
    +          Handles the iCalendar data as it is read off the data stream.
    ICalRawWriter.ParameterValueChangedListener + +
    +          Allows you to respond to when a parameter's value is changed due to it + containing invalid characters.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/XCalDocument.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/XCalDocument.html new file mode 100644 index 000000000..89a04a0dc --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/XCalDocument.html @@ -0,0 +1,876 @@ + + + + + + + +XCalDocument (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.xml +
    +Class XCalDocument

    +
    +java.lang.Object
    +  extended by biweekly.io.xml.XCalDocument
    +
    +
    +
    +
    public class XCalDocument
    extends Object
    + + +

    +

    + Represents an XML document that contains iCalendar objects ("xCal" standard). + This class can be used to read and write xCal documents. +

    +

    + Examples: + +

    + String xml =
    + "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
    + "<icalendar xmlns=\"urn:ietf:params:xml:ns:icalendar-2.0\">" +
    +   "<vcalendar>" +
    +     "<properties>" +
    +       "<prodid><text>-//Example Inc.//Example Client//EN</text></prodid>" +
    +       "<version><text>2.0</text></version>" +
    +     "</properties>" +
    +     "<components>" +
    +       "<vevent>" +
    +         "<properties>" +
    +           "<dtstart><date-time>2013-06-27T13:00:00Z</date-time></dtstart>" +
    +           "<dtend><date-time>2013-06-27T15:00:00Z</date-time></dtend>" +
    +           "<summary><text>Team Meeting</text></summary>" +
    +         "</properties>" +
    +       "</vevent>" +
    +     "</components>" +
    +   "</vcalendar>" +
    + "</icalendar>";
    +     
    + //parsing an existing xCal document
    + XCalDocument xcal = new XCalDocument(xml);
    + List<ICalendar> icals = xcal.parseAll();
    + 
    + //creating an empty xCal document
    + XCalDocument xcal = new XCalDocument();
    + 
    + //ICalendar objects can be added at any time
    + ICalendar ical = new ICalendar();
    + xcal.add(ical);
    + 
    + //retrieving the raw XML DOM
    + Document document = xcal.getDocument();
    + 
    + //call one of the "write()" methods to output the xCal document
    + File file = new File("meeting.xml");
    + xcal.write(file);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 6321
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Constructor Summary
    XCalDocument() + +
    +          Creates an empty xCal document.
    XCalDocument(Document document) + +
    +          Wraps an existing XML DOM object.
    XCalDocument(File file) + +
    +          Parses an xCal document from a file.
    XCalDocument(InputStream in) + +
    +          Parses an xCal document from an input stream.
    XCalDocument(Reader reader) + +
    +           + Parses an xCal document from a reader.
    XCalDocument(String xml) + +
    +          Parses an xCal document from a string.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidadd(ICalendar ical) + +
    +          Adds an iCalendar object to the xCal document.
    + DocumentgetDocument() + +
    +          Gets the raw XML DOM object.
    + List<List<String>>getParseWarnings() + +
    +          Gets the warnings from the last parse operation.
    + ICalMarshallerRegistrargetRegistrar() + +
    +          Gets the object that manages the component/property marshaller objects.
    + List<ICalendar>parseAll() + +
    +          Parses all the ICalendar objects from the xCal document.
    + ICalendarparseFirst() + +
    +          Parses the first ICalendar object from the xCal document.
    + voidregisterMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) + +
    +           + Registers an experimental component marshaller.
    + voidregisterMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    + voidregisterParameterDataType(String parameterName, + ICalDataType dataType) + +
    +          Registers the data type of an experimental parameter.
    + voidsetRegistrar(ICalMarshallerRegistrar registrar) + +
    +          Sets the object that manages the component/property marshaller objects.
    + StringtoString() + +
    +           
    + Stringwrite() + +
    +          Writes the xCal document to a string without pretty-printing it.
    + voidwrite(File file) + +
    +          Writes the xCal document to a file without pretty-printing it.
    + voidwrite(File file, + int indent) + +
    +          Writes the xCal document to a file and pretty-prints it.
    + Stringwrite(int indent) + +
    +          Writes the xCal document to a string and pretty-prints it.
    + voidwrite(OutputStream out) + +
    +          Writes the xCal document to an output stream without pretty-printing it.
    + voidwrite(OutputStream out, + int indent) + +
    +          Writes the xCal document to an output stream and pretty-prints it.
    + voidwrite(Writer writer) + +
    +          Writes the xCal document to a writer without pretty-printing it.
    + voidwrite(Writer writer, + int indent) + +
    +          Writes the xCal document to a writer and pretty-prints it.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +XCalDocument

    +
    +public XCalDocument(String xml)
    +             throws SAXException
    +
    +
    Parses an xCal document from a string. +

    +

    +
    Parameters:
    xml - the xCal document in the form of a string +
    Throws: +
    SAXException - if there's a problem parsing the XML
    +
    +
    + +

    +XCalDocument

    +
    +public XCalDocument(InputStream in)
    +             throws SAXException,
    +                    IOException
    +
    +
    Parses an xCal document from an input stream. +

    +

    +
    Parameters:
    in - the input stream to read the the xCal document from +
    Throws: +
    IOException - if there's a problem reading from the input stream +
    SAXException - if there's a problem parsing the XML
    +
    +
    + +

    +XCalDocument

    +
    +public XCalDocument(File file)
    +             throws SAXException,
    +                    IOException
    +
    +
    Parses an xCal document from a file. +

    +

    +
    Parameters:
    file - the file containing the xCal document +
    Throws: +
    IOException - if there's a problem reading from the file +
    SAXException - if there's a problem parsing the XML
    +
    +
    + +

    +XCalDocument

    +
    +public XCalDocument(Reader reader)
    +             throws SAXException,
    +                    IOException
    +
    +

    + Parses an xCal document from a reader. +

    +

    + Note that use of this constructor is discouraged. It ignores the + character encoding that is defined within the XML document itself, and + should only be used if the encoding is undefined or if the encoding needs + to be ignored for whatever reason. The XCalDocument(InputStream) + constructor should be used instead, since it takes the XML document's + character encoding into account when parsing. +

    +

    +

    +
    Parameters:
    reader - the reader to read the xCal document from +
    Throws: +
    IOException - if there's a problem reading from the reader +
    SAXException - if there's a problem parsing the XML
    +
    +
    + +

    +XCalDocument

    +
    +public XCalDocument(Document document)
    +
    +
    Wraps an existing XML DOM object. +

    +

    +
    Parameters:
    document - the XML DOM that contains the xCal document
    +
    +
    + +

    +XCalDocument

    +
    +public XCalDocument()
    +
    +
    Creates an empty xCal document. +

    +

    + + + + + + + + +
    +Method Detail
    + +

    +registerMarshaller

    +
    +public void registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller)
    +
    +

    + Registers an experimental property marshaller. Can also be used to + override the marshaller of a standard property (such as DTSTART). Calling + this method is the same as calling: +

    +

    + getRegistrar().register(marshaller). +

    +

    +

    +
    Parameters:
    marshaller - the marshaller to register
    +
    +
    +
    + +

    +registerMarshaller

    +
    +public void registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller)
    +
    +

    + Registers an experimental component marshaller. Can also be used to + override the marshaller of a standard component (such as VEVENT). Calling + this method is the same as calling: +

    +

    + getRegistrar().register(marshaller). +

    +

    +

    +
    Parameters:
    marshaller - the marshaller to register
    +
    +
    +
    + +

    +getRegistrar

    +
    +public ICalMarshallerRegistrar getRegistrar()
    +
    +
    Gets the object that manages the component/property marshaller objects. +

    +

    + +
    Returns:
    the marshaller registrar
    +
    +
    +
    + +

    +setRegistrar

    +
    +public void setRegistrar(ICalMarshallerRegistrar registrar)
    +
    +
    Sets the object that manages the component/property marshaller objects. +

    +

    +
    Parameters:
    registrar - the marshaller registrar
    +
    +
    +
    + +

    +registerParameterDataType

    +
    +public void registerParameterDataType(String parameterName,
    +                                      ICalDataType dataType)
    +
    +
    Registers the data type of an experimental parameter. Experimental + parameters use the "unknown" xCal data type by default. +

    +

    +
    Parameters:
    parameterName - the parameter name (e.g. "x-foo")
    dataType - the data type or null to remove
    +
    +
    +
    + +

    +getDocument

    +
    +public Document getDocument()
    +
    +
    Gets the raw XML DOM object. +

    +

    + +
    Returns:
    the XML DOM
    +
    +
    +
    + +

    +getParseWarnings

    +
    +public List<List<String>> getParseWarnings()
    +
    +
    Gets the warnings from the last parse operation. +

    +

    + +
    Returns:
    the warnings (it is a "list of lists"--each parsed + ICalendar object has its own warnings list)
    See Also:
    parseAll(), +parseFirst()
    +
    +
    +
    + +

    +parseAll

    +
    +public List<ICalendar> parseAll()
    +
    +
    Parses all the ICalendar objects from the xCal document. +

    +

    + +
    Returns:
    the iCalendar objects
    +
    +
    +
    + +

    +parseFirst

    +
    +public ICalendar parseFirst()
    +
    +
    Parses the first ICalendar object from the xCal document. +

    +

    + +
    Returns:
    the iCalendar object or null if there are none
    +
    +
    +
    + +

    +add

    +
    +public void add(ICalendar ical)
    +
    +
    Adds an iCalendar object to the xCal document. This marshals the + ICalendar object to the XML DOM. This means that any changes that + are made to the ICalendar object after calling this method will + NOT be applied to the xCal document. +

    +

    +
    Parameters:
    ical - the iCalendar object to add +
    Throws: +
    IllegalArgumentException - if the marshaller class for a component + or property object cannot be found (only happens when an experimental + property/component marshaller is not registered with the + registerMarshaller method.)
    +
    +
    +
    + +

    +write

    +
    +public String write()
    +
    +
    Writes the xCal document to a string without pretty-printing it. +

    +

    + +
    Returns:
    the XML string
    +
    +
    +
    + +

    +write

    +
    +public String write(int indent)
    +
    +
    Writes the xCal document to a string and pretty-prints it. +

    +

    +
    Parameters:
    indent - the number of indent spaces to use for pretty-printing +
    Returns:
    the XML string
    +
    +
    +
    + +

    +write

    +
    +public void write(OutputStream out)
    +           throws TransformerException
    +
    +
    Writes the xCal document to an output stream without pretty-printing it. +

    +

    +
    Parameters:
    out - the output stream +
    Throws: +
    TransformerException - if there's a problem writing to the output + stream
    +
    +
    +
    + +

    +write

    +
    +public void write(OutputStream out,
    +                  int indent)
    +           throws TransformerException
    +
    +
    Writes the xCal document to an output stream and pretty-prints it. +

    +

    +
    Parameters:
    out - the output stream
    indent - the number of indent spaces to use for pretty-printing +
    Throws: +
    TransformerException - if there's a problem writing to the output + stream
    +
    +
    +
    + +

    +write

    +
    +public void write(File file)
    +           throws TransformerException,
    +                  IOException
    +
    +
    Writes the xCal document to a file without pretty-printing it. +

    +

    +
    Parameters:
    file - the file +
    Throws: +
    IOException - if there's a problem writing to the file +
    TransformerException - if there's a problem writing the XML
    +
    +
    +
    + +

    +write

    +
    +public void write(File file,
    +                  int indent)
    +           throws TransformerException,
    +                  IOException
    +
    +
    Writes the xCal document to a file and pretty-prints it. +

    +

    +
    Parameters:
    file - the file stream
    indent - the number of indent spaces to use for pretty-printing +
    Throws: +
    IOException - if there's a problem writing to the file +
    TransformerException - if there's a problem writing the XML
    +
    +
    +
    + +

    +write

    +
    +public void write(Writer writer)
    +           throws TransformerException
    +
    +
    Writes the xCal document to a writer without pretty-printing it. +

    +

    +
    Parameters:
    writer - the writer +
    Throws: +
    TransformerException - if there's a problem writing to the writer
    +
    +
    +
    + +

    +write

    +
    +public void write(Writer writer,
    +                  int indent)
    +           throws TransformerException
    +
    +
    Writes the xCal document to a writer and pretty-prints it. +

    +

    +
    Parameters:
    writer - the writer
    indent - the number of indent spaces to use for pretty-printing +
    Throws: +
    TransformerException - if there's a problem writing to the writer
    +
    +
    +
    + +

    +toString

    +
    +public String toString()
    +
    +
    +
    Overrides:
    toString in class Object
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/XCalElement.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/XCalElement.html new file mode 100644 index 000000000..4e89c9eb0 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/XCalElement.html @@ -0,0 +1,540 @@ + + + + + + + +XCalElement (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.xml +
    +Class XCalElement

    +
    +java.lang.Object
    +  extended by biweekly.io.xml.XCalElement
    +
    +
    +
    +
    public class XCalElement
    extends Object
    + + +

    +Wraps xCal functionality around an XML Element object. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + +
    +Constructor Summary
    XCalElement(Element element) + +
    +          Creates a new xCal element.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + List<String>all(ICalDataType dataType) + +
    +          Gets all the values of a given data type.
    + List<String>all(String localName) + +
    +          Gets the values of all child elements that have the given name.
    + XCalElementappend(ICalDataType dataType) + +
    +          Adds an empty value.
    + Elementappend(ICalDataType dataType, + String value) + +
    +          Adds a value.
    + XCalElementappend(String name) + +
    +          Adds a child element.
    + List<Element>append(String name, + Collection<String> values) + +
    +          Adds multiple child elements, each with the same name.
    + Elementappend(String name, + String value) + +
    +          Adds a child element.
    + XCalElementchild(ICalDataType dataType) + +
    +          Gets the first child element with the given data type.
    + List<XCalElement>children(ICalDataType dataType) + +
    +          Gets all child elements with the given data type.
    + Documentdocument() + +
    +          Gets the owner document.
    + Stringfirst(ICalDataType dataType) + +
    +          Gets the first value of the given data type.
    + Stringfirst(String localName) + +
    +          Gets the value of the first child element with the given name.
    + ElementgetElement() + +
    +          Gets the wrapped XML element.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +XCalElement

    +
    +public XCalElement(Element element)
    +
    +
    Creates a new xCal element. +

    +

    +
    Parameters:
    element - the XML element to wrap
    +
    + + + + + + + + +
    +Method Detail
    + +

    +first

    +
    +public String first(ICalDataType dataType)
    +
    +
    Gets the first value of the given data type. +

    +

    +
    Parameters:
    dataType - the data type to look for or null for the "unknown" data + type +
    Returns:
    the value or null if not found
    +
    +
    +
    + +

    +first

    +
    +public String first(String localName)
    +
    +
    Gets the value of the first child element with the given name. +

    +

    +
    Parameters:
    localName - the name of the element +
    Returns:
    the element's text or null if not found
    +
    +
    +
    + +

    +all

    +
    +public List<String> all(ICalDataType dataType)
    +
    +
    Gets all the values of a given data type. +

    +

    +
    Parameters:
    dataType - the data type to look for or null for the "unknown" data + type +
    Returns:
    the values
    +
    +
    +
    + +

    +all

    +
    +public List<String> all(String localName)
    +
    +
    Gets the values of all child elements that have the given name. +

    +

    +
    Parameters:
    localName - the element name +
    Returns:
    the values of the child elements
    +
    +
    +
    + +

    +append

    +
    +public Element append(ICalDataType dataType,
    +                      String value)
    +
    +
    Adds a value. +

    +

    +
    Parameters:
    dataType - the data type or null for the "unknown" data type
    value - the value +
    Returns:
    the created element
    +
    +
    +
    + +

    +append

    +
    +public Element append(String name,
    +                      String value)
    +
    +
    Adds a child element. +

    +

    +
    Parameters:
    name - the name of the child element
    value - the value of the child element. +
    Returns:
    the created element
    +
    +
    +
    + +

    +append

    +
    +public XCalElement append(String name)
    +
    +
    Adds a child element. +

    +

    +
    Parameters:
    name - the name of the child element +
    Returns:
    the created element
    +
    +
    +
    + +

    +append

    +
    +public XCalElement append(ICalDataType dataType)
    +
    +
    Adds an empty value. +

    +

    +
    Parameters:
    dataType - the data type +
    Returns:
    the created element
    +
    +
    +
    + +

    +append

    +
    +public List<Element> append(String name,
    +                            Collection<String> values)
    +
    +
    Adds multiple child elements, each with the same name. +

    +

    +
    Parameters:
    name - the name for all the child elements
    values - the values of each child element +
    Returns:
    the created elements
    +
    +
    +
    + +

    +document

    +
    +public Document document()
    +
    +
    Gets the owner document. +

    +

    + +
    Returns:
    the owner document
    +
    +
    +
    + +

    +getElement

    +
    +public Element getElement()
    +
    +
    Gets the wrapped XML element. +

    +

    + +
    Returns:
    the wrapped XML element
    +
    +
    +
    + +

    +children

    +
    +public List<XCalElement> children(ICalDataType dataType)
    +
    +
    Gets all child elements with the given data type. +

    +

    +
    Parameters:
    dataType - the data type +
    Returns:
    the child elements
    +
    +
    +
    + +

    +child

    +
    +public XCalElement child(ICalDataType dataType)
    +
    +
    Gets the first child element with the given data type. +

    +

    +
    Parameters:
    dataType - the data type +
    Returns:
    the child element or null if not found
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/XCalNamespaceContext.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/XCalNamespaceContext.html new file mode 100644 index 000000000..ec24b129e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/XCalNamespaceContext.html @@ -0,0 +1,378 @@ + + + + + + + +XCalNamespaceContext (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.io.xml +
    +Class XCalNamespaceContext

    +
    +java.lang.Object
    +  extended by biweekly.io.xml.XCalNamespaceContext
    +
    +
    +
    All Implemented Interfaces:
    NamespaceContext
    +
    +
    +
    +
    public class XCalNamespaceContext
    extends Object
    implements NamespaceContext
    + + +

    +Used for xCal xpath expressions. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    See Also:
    XPath.setNamespaceContext(NamespaceContext)
    +
    + +

    + + + + + + + + + + + +
    +Field Summary
    +static StringXCAL_NS + +
    +          The XML namespace for xCal documents.
    +  + + + + + + + + + + +
    +Constructor Summary
    XCalNamespaceContext(String prefix) + +
    +          Creates a new namespace context.
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetNamespaceURI(String prefix) + +
    +           
    + StringgetPrefix() + +
    +          Gets the prefix to use in xpath expressions.
    + StringgetPrefix(String ns) + +
    +           
    + Iterator<String>getPrefixes(String ns) + +
    +           
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +XCAL_NS

    +
    +public static final String XCAL_NS
    +
    +
    The XML namespace for xCal documents. +

    +

    +
    See Also:
    Constant Field Values
    +
    + + + + + + + + +
    +Constructor Detail
    + +

    +XCalNamespaceContext

    +
    +public XCalNamespaceContext(String prefix)
    +
    +
    Creates a new namespace context. +

    +

    +
    Parameters:
    prefix - the prefix to use in xpath expressions
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getPrefix

    +
    +public String getPrefix()
    +
    +
    Gets the prefix to use in xpath expressions. +

    +

    +
    +
    +
    + +
    Returns:
    the xpath prefix
    +
    +
    +
    + +

    +getNamespaceURI

    +
    +public String getNamespaceURI(String prefix)
    +
    +
    +
    Specified by:
    getNamespaceURI in interface NamespaceContext
    +
    +
    +
    +
    +
    +
    + +

    +getPrefix

    +
    +public String getPrefix(String ns)
    +
    +
    +
    Specified by:
    getPrefix in interface NamespaceContext
    +
    +
    +
    +
    +
    +
    + +

    +getPrefixes

    +
    +public Iterator<String> getPrefixes(String ns)
    +
    +
    +
    Specified by:
    getPrefixes in interface NamespaceContext
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/class-use/XCalDocument.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/class-use/XCalDocument.html new file mode 100644 index 000000000..c9eff8289 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/class-use/XCalDocument.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.xml.XCalDocument (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.xml.XCalDocument

    +
    +No usage of biweekly.io.xml.XCalDocument +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/class-use/XCalElement.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/class-use/XCalElement.html new file mode 100644 index 000000000..92c89aba0 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/class-use/XCalElement.html @@ -0,0 +1,588 @@ + + + + + + + +Uses of Class biweekly.io.xml.XCalElement (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.xml.XCalElement

    +
    + + + + + + + + + + + + + +
    +Packages that use XCalElement
    biweekly.io.xml  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of XCalElement in biweekly.io.xml
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.io.xml that return XCalElement
    + XCalElementXCalElement.append(ICalDataType dataType) + +
    +          Adds an empty value.
    + XCalElementXCalElement.append(String name) + +
    +          Adds a child element.
    + XCalElementXCalElement.child(ICalDataType dataType) + +
    +          Gets the first child element with the given data type.
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.xml that return types with arguments of type XCalElement
    + List<XCalElement>XCalElement.children(ICalDataType dataType) + +
    +          Gets all child elements with the given data type.
    +  +

    + + + + + +
    +Uses of XCalElement in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type XCalElement
    +protected  XmlXmlMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  VersionVersionMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TUtcOffsetPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TriggerTriggerMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TTextPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RequestStatusRequestStatusMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TRecurrencePropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RecurrenceDatesRecurrenceDatesMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RawPropertyRawPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TListPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TIntegerPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TICalPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  GeoGeoMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  FreeBusyFreeBusyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  ExceptionDatesExceptionDatesMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  DurationPropertyDurationPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TDateTimePropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TDateOrDateTimePropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  AttachmentAttachmentMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  voidAttachmentMarshaller._writeXml(Attachment property, + XCalElement element) + +
    +           
    +protected  voidDurationPropertyMarshaller._writeXml(DurationProperty property, + XCalElement element) + +
    +           
    +protected  voidExceptionDatesMarshaller._writeXml(ExceptionDates property, + XCalElement element) + +
    +           
    +protected  voidFreeBusyMarshaller._writeXml(FreeBusy property, + XCalElement element) + +
    +           
    +protected  voidGeoMarshaller._writeXml(Geo property, + XCalElement element) + +
    +           
    +protected  voidRecurrenceDatesMarshaller._writeXml(RecurrenceDates property, + XCalElement element) + +
    +           
    +protected  voidRequestStatusMarshaller._writeXml(RequestStatus property, + XCalElement element) + +
    +           
    +protected  voidTriggerMarshaller._writeXml(Trigger property, + XCalElement element) + +
    +           
    +protected  voidUtcOffsetPropertyMarshaller._writeXml(T property, + XCalElement element) + +
    +           
    +protected  voidTextPropertyMarshaller._writeXml(T property, + XCalElement element) + +
    +           
    +protected  voidRecurrencePropertyMarshaller._writeXml(T property, + XCalElement element) + +
    +           
    +protected  voidListPropertyMarshaller._writeXml(T property, + XCalElement element) + +
    +           
    +protected  voidIntegerPropertyMarshaller._writeXml(T property, + XCalElement element) + +
    +           
    +protected  voidICalPropertyMarshaller._writeXml(T property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    +protected  voidDateTimePropertyMarshaller._writeXml(T property, + XCalElement element) + +
    +           
    +protected  voidDateOrDateTimePropertyMarshaller._writeXml(T property, + XCalElement element) + +
    +           
    +protected  voidVersionMarshaller._writeXml(Version property, + XCalElement element) + +
    +           
    +protected  voidXmlMarshaller._writeXml(Xml property, + XCalElement element) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/class-use/XCalNamespaceContext.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/class-use/XCalNamespaceContext.html new file mode 100644 index 000000000..39bb24dd4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/class-use/XCalNamespaceContext.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.io.xml.XCalNamespaceContext (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.io.xml.XCalNamespaceContext

    +
    +No usage of biweekly.io.xml.XCalNamespaceContext +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/doc-files/shBrushJava.js b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/doc-files/shBrushJava.js new file mode 100644 index 000000000..d692fd638 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/doc-files/shBrushJava.js @@ -0,0 +1,57 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'abstract assert boolean break byte case catch char class const ' + + 'continue default do double else enum extends ' + + 'false final finally float for goto if implements import ' + + 'instanceof int interface long native new null ' + + 'package private protected public return ' + + 'short static strictfp super switch synchronized this throw throws true ' + + 'transient try void volatile while'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: /\/\*([^\*][\s\S]*)?\*\//gm, css: 'comments' }, // multiline comments + { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, css: 'preprocessor' }, // documentation comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers + { regex: /(?!\@interface\b)\@[\$\w]+\b/g, css: 'color1' }, // annotation @anno + { regex: /\@interface\b/g, css: 'color2' }, // @interface keyword + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // java keyword + ]; + + this.forHtmlScript({ + left : /(<|<)%[@!=]?/g, + right : /%(>|>)/g + }); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['java']; + + SyntaxHighlighter.brushes.Java = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/doc-files/shCore.js b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/doc-files/shCore.js new file mode 100644 index 000000000..b47b64547 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/doc-files/shCore.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a-1},3d:6(g){e+=g}};c1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;be.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;dd.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a\'+c+""});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.Pb.P)H 1;Y I(a.Lb.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'\'+c+""+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v<3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;">1v3v 3.0.76 (72 73 3x)1Z://3u.2w/1v70 17 6U 71.6T 6X-3x 6Y 6D.6t 61 60 J 1k, 5Z 5R 5V <2R/>5U 5T 5S!\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'\',d=e.16.2x,h=d.2X,g=0;g";H c},2o:6(a,b,c){H\'<2W>\'+c+""},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;md)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P\'+c+""},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i\'+j+"":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"":"")+\'<2d 1g="17">\'+b+""},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{})) diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-frame.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-frame.html new file mode 100644 index 000000000..250f11f0a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-frame.html @@ -0,0 +1,37 @@ + + + + + + + +biweekly.io.xml (biweekly 0.3.1 API) + + + + + + + + + + + +biweekly.io.xml + + + + +
    +Classes  + +
    +XCalDocument +
    +XCalElement +
    +XCalNamespaceContext
    + + + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-summary.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-summary.html new file mode 100644 index 000000000..0a3850323 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-summary.html @@ -0,0 +1,167 @@ + + + + + + + +biweekly.io.xml (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +

    +Package biweekly.io.xml +

    + + + + + + + + + + + + + + + + + +
    +Class Summary
    XCalDocument + Represents an XML document that contains iCalendar objects ("xCal" standard).
    XCalElementWraps xCal functionality around an XML Element object.
    XCalNamespaceContextUsed for xCal xpath expressions.
    +  + +

    +

    +
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-tree.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-tree.html new file mode 100644 index 000000000..8e0b8f648 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-tree.html @@ -0,0 +1,155 @@ + + + + + + + +biweekly.io.xml Class Hierarchy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Hierarchy For Package biweekly.io.xml +

    +
    +
    +
    Package Hierarchies:
    All Packages
    +
    +

    +Class Hierarchy +

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-use.html b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-use.html new file mode 100644 index 000000000..18d7f2c22 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/io/xml/package-use.html @@ -0,0 +1,190 @@ + + + + + + + +Uses of Package biweekly.io.xml (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Package
    biweekly.io.xml

    +
    + + + + + + + + + + + + + +
    +Packages that use biweekly.io.xml
    biweekly.io.xml  
    biweekly.property.marshaller  
    +  +

    + + + + + + + + +
    +Classes in biweekly.io.xml used by biweekly.io.xml
    XCalElement + +
    +          Wraps xCal functionality around an XML Element object.
    +  +

    + + + + + + + + +
    +Classes in biweekly.io.xml used by biweekly.property.marshaller
    XCalElement + +
    +          Wraps xCal functionality around an XML Element object.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/package-frame.html b/libs/biweekly-0.3.1-javadoc/biweekly/package-frame.html new file mode 100644 index 000000000..970d98d46 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/package-frame.html @@ -0,0 +1,72 @@ + + + + + + + +biweekly (biweekly 0.3.1 API) + + + + + + + + + + + +biweekly + + + + +
    +Classes  + +
    +Biweekly +
    +Biweekly.ParserChainJsonReader +
    +Biweekly.ParserChainJsonString +
    +Biweekly.ParserChainTextReader +
    +Biweekly.ParserChainTextString +
    +Biweekly.ParserChainXmlDocument +
    +Biweekly.ParserChainXmlReader +
    +Biweekly.ParserChainXmlString +
    +Biweekly.WriterChainJson +
    +Biweekly.WriterChainText +
    +Biweekly.WriterChainXml +
    +ICalDataType +
    +ICalendar +
    +ValidationWarnings +
    +ValidationWarnings.WarningsGroup
    + + + + + + +
    +Exceptions  + +
    +ICalException
    + + + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/package-summary.html b/libs/biweekly-0.3.1-javadoc/biweekly/package-summary.html new file mode 100644 index 000000000..fa85d0f45 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/package-summary.html @@ -0,0 +1,232 @@ + + + + + + + +biweekly (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +

    +Package biweekly +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class Summary
    Biweekly + Contains static chaining factory methods for reading/writing iCalendar + objects.
    Biweekly.ParserChainJsonReaderChainer class for parsing JSON-encoded iCalendar data streams (jCal).
    Biweekly.ParserChainJsonStringChainer class for parsing JSON-encoded iCalendar strings (jCal).
    Biweekly.ParserChainTextReaderChainer class for parsing plain text iCalendar data streams.
    Biweekly.ParserChainTextStringChainer class for parsing plain text iCalendar strings.
    Biweekly.ParserChainXmlDocumentChainer class for parsing XML-encoded iCalendar objects (xCal).
    Biweekly.ParserChainXmlReaderChainer class for parsing XML-encoded iCalendar objects (xCal).
    Biweekly.ParserChainXmlStringChainer class for parsing XML-encoded iCalendar objects (xCal).
    Biweekly.WriterChainJsonChainer class for writing to JSON-encoded iCalendar data streams (jCal).
    Biweekly.WriterChainTextChainer class for writing to plain text iCalendar data streams.
    Biweekly.WriterChainXmlChainer class for writing xCal documents (XML-encoded iCalendar objects).
    ICalDataTypeDefines the data type of a property's value.
    ICalendar + Represents an iCalendar object.
    ValidationWarnings + Holds the validation warnings of an iCalendar object.
    ValidationWarnings.WarningsGroupHolds the validation warnings of a property or component.
    +  + +

    + + + + + + + + + +
    +Exception Summary
    ICalExceptionThe common base exception that all exceptions inherit from.
    +  + +

    +

    +
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/package-tree.html b/libs/biweekly-0.3.1-javadoc/biweekly/package-tree.html new file mode 100644 index 000000000..f4064f95b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/package-tree.html @@ -0,0 +1,164 @@ + + + + + + + +biweekly Class Hierarchy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Hierarchy For Package biweekly +

    +
    +
    +
    Package Hierarchies:
    All Packages
    +
    +

    +Class Hierarchy +

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/package-use.html b/libs/biweekly-0.3.1-javadoc/biweekly/package-use.html new file mode 100644 index 000000000..910f36f4e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/package-use.html @@ -0,0 +1,456 @@ + + + + + + + +Uses of Package biweekly (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Package
    biweekly

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use biweekly
    biweekly  
    biweekly.component  
    biweekly.component.marshaller  
    biweekly.io  
    biweekly.io.json  
    biweekly.io.text  
    biweekly.io.xml  
    biweekly.parameter  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Classes in biweekly used by biweekly
    Biweekly.ParserChainJsonReader + +
    +          Chainer class for parsing JSON-encoded iCalendar data streams (jCal).
    Biweekly.ParserChainJsonString + +
    +          Chainer class for parsing JSON-encoded iCalendar strings (jCal).
    Biweekly.ParserChainTextReader + +
    +          Chainer class for parsing plain text iCalendar data streams.
    Biweekly.ParserChainTextString + +
    +          Chainer class for parsing plain text iCalendar strings.
    Biweekly.ParserChainXmlDocument + +
    +          Chainer class for parsing XML-encoded iCalendar objects (xCal).
    Biweekly.ParserChainXmlReader + +
    +          Chainer class for parsing XML-encoded iCalendar objects (xCal).
    Biweekly.ParserChainXmlString + +
    +          Chainer class for parsing XML-encoded iCalendar objects (xCal).
    Biweekly.WriterChainJson + +
    +          Chainer class for writing to JSON-encoded iCalendar data streams (jCal).
    Biweekly.WriterChainText + +
    +          Chainer class for writing to plain text iCalendar data streams.
    Biweekly.WriterChainXml + +
    +          Chainer class for writing xCal documents (XML-encoded iCalendar objects).
    ICalDataType + +
    +          Defines the data type of a property's value.
    ICalendar + +
    +           + Represents an iCalendar object.
    ValidationWarnings + +
    +           + Holds the validation warnings of an iCalendar object.
    ValidationWarnings.WarningsGroup + +
    +          Holds the validation warnings of a property or component.
    +  +

    + + + + + + + + + + + +
    +Classes in biweekly used by biweekly.component
    ICalDataType + +
    +          Defines the data type of a property's value.
    ValidationWarnings.WarningsGroup + +
    +          Holds the validation warnings of a property or component.
    +  +

    + + + + + + + + +
    +Classes in biweekly used by biweekly.component.marshaller
    ICalendar + +
    +           + Represents an iCalendar object.
    +  +

    + + + + + + + + +
    +Classes in biweekly used by biweekly.io
    ICalException + +
    +          The common base exception that all exceptions inherit from.
    +  +

    + + + + + + + + + + + + + + +
    +Classes in biweekly used by biweekly.io.json
    ICalDataType + +
    +          Defines the data type of a property's value.
    ICalendar + +
    +           + Represents an iCalendar object.
    ICalException + +
    +          The common base exception that all exceptions inherit from.
    +  +

    + + + + + + + + + + + +
    +Classes in biweekly used by biweekly.io.text
    ICalendar + +
    +           + Represents an iCalendar object.
    ICalException + +
    +          The common base exception that all exceptions inherit from.
    +  +

    + + + + + + + + + + + +
    +Classes in biweekly used by biweekly.io.xml
    ICalDataType + +
    +          Defines the data type of a property's value.
    ICalendar + +
    +           + Represents an iCalendar object.
    +  +

    + + + + + + + + +
    +Classes in biweekly used by biweekly.parameter
    ICalDataType + +
    +          Defines the data type of a property's value.
    +  +

    + + + + + + + + +
    +Classes in biweekly used by biweekly.property
    ICalDataType + +
    +          Defines the data type of a property's value.
    +  +

    + + + + + + + + +
    +Classes in biweekly used by biweekly.property.marshaller
    ICalDataType + +
    +          Defines the data type of a property's value.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/CalendarUserType.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/CalendarUserType.html new file mode 100644 index 000000000..4f5884cae --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/CalendarUserType.html @@ -0,0 +1,408 @@ + + + + + + + +CalendarUserType (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.parameter +
    +Class CalendarUserType

    +
    +java.lang.Object
    +  extended by biweekly.parameter.EnumParameterValue
    +      extended by biweekly.parameter.CalendarUserType
    +
    +
    +
    +
    public class CalendarUserType
    extends EnumParameterValue
    + + +

    +Defines the type of user an entity is. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.16
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Field Summary
    +static CalendarUserTypeGROUP + +
    +           
    +static CalendarUserTypeINDIVIDUAL + +
    +           
    +static CalendarUserTypeRESOURCE + +
    +           
    +static CalendarUserTypeROOM + +
    +           
    +static CalendarUserTypeUNKNOWN + +
    +           
    + + + + + + + +
    Fields inherited from class biweekly.parameter.EnumParameterValue
    value
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static Collection<CalendarUserType>all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +static CalendarUserTypefind(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static CalendarUserTypeget(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + + + + + + + +
    Methods inherited from class biweekly.parameter.EnumParameterValue
    getValue, toString
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +INDIVIDUAL

    +
    +public static final CalendarUserType INDIVIDUAL
    +
    +
    +
    +
    +
    + +

    +GROUP

    +
    +public static final CalendarUserType GROUP
    +
    +
    +
    +
    +
    + +

    +RESOURCE

    +
    +public static final CalendarUserType RESOURCE
    +
    +
    +
    +
    +
    + +

    +ROOM

    +
    +public static final CalendarUserType ROOM
    +
    +
    +
    +
    +
    + +

    +UNKNOWN

    +
    +public static final CalendarUserType UNKNOWN
    +
    +
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +find

    +
    +public static CalendarUserType find(String value)
    +
    +
    Searches for a parameter value that is defined as a static constant in + this class. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object or null if not found
    +
    +
    +
    + +

    +get

    +
    +public static CalendarUserType get(String value)
    +
    +
    Searches for a parameter value and creates one if it cannot be found. All + objects are guaranteed to be unique, so they can be compared with + == equality. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object
    +
    +
    +
    + +

    +all

    +
    +public static Collection<CalendarUserType> all()
    +
    +
    Gets all of the parameter values that are defined as static constants in + this class. +

    +

    + +
    Returns:
    the parameter values
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/Encoding.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/Encoding.html new file mode 100644 index 000000000..842a3063b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/Encoding.html @@ -0,0 +1,354 @@ + + + + + + + +Encoding (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.parameter +
    +Class Encoding

    +
    +java.lang.Object
    +  extended by biweekly.parameter.EnumParameterValue
    +      extended by biweekly.parameter.Encoding
    +
    +
    +
    +
    public class Encoding
    extends EnumParameterValue
    + + +

    +Defines how a property value is encoded. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.18-9
    +
    + +

    + + + + + + + + + + + + + + + +
    +Field Summary
    +static Encoding_8BIT + +
    +           
    +static EncodingBASE64 + +
    +           
    + + + + + + + +
    Fields inherited from class biweekly.parameter.EnumParameterValue
    value
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static Collection<Encoding>all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +static Encodingfind(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static Encodingget(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + + + + + + + +
    Methods inherited from class biweekly.parameter.EnumParameterValue
    getValue, toString
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +BASE64

    +
    +public static final Encoding BASE64
    +
    +
    +
    +
    +
    + +

    +_8BIT

    +
    +public static final Encoding _8BIT
    +
    +
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +find

    +
    +public static Encoding find(String value)
    +
    +
    Searches for a parameter value that is defined as a static constant in + this class. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object or null if not found
    +
    +
    +
    + +

    +get

    +
    +public static Encoding get(String value)
    +
    +
    Searches for a parameter value and creates one if it cannot be found. All + objects are guaranteed to be unique, so they can be compared with + == equality. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object
    +
    +
    +
    + +

    +all

    +
    +public static Collection<Encoding> all()
    +
    +
    Gets all of the parameter values that are defined as static constants in + this class. +

    +

    + +
    Returns:
    the parameter values
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/EnumParameterValue.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/EnumParameterValue.html new file mode 100644 index 000000000..36db64741 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/EnumParameterValue.html @@ -0,0 +1,332 @@ + + + + + + + +EnumParameterValue (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.parameter +
    +Class EnumParameterValue

    +
    +java.lang.Object
    +  extended by biweekly.parameter.EnumParameterValue
    +
    +
    +
    Direct Known Subclasses:
    CalendarUserType, Encoding, FreeBusyType, ParticipationStatus, Range, Related, RelationshipType, Role
    +
    +
    +
    +
    public class EnumParameterValue
    extends Object
    + + +

    +Represents a value from a parameter that has a list of pre-defined values + (for example, the VALUE or ACTION parameters). +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + +
    +Field Summary
    +protected  Stringvalue + +
    +          The value (for example, "text").
    +  + + + + + + + + + + + +
    +Constructor Summary
    +protected EnumParameterValue(String value) + +
    +           
    +  + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetValue() + +
    +          Gets the value of the parameter.
    + StringtoString() + +
    +           
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +value

    +
    +protected final String value
    +
    +
    The value (for example, "text"). +

    +

    +
    +
    + + + + + + + + +
    +Constructor Detail
    + +

    +EnumParameterValue

    +
    +protected EnumParameterValue(String value)
    +
    +
    +
    Parameters:
    value - the value (e.g. "text")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getValue

    +
    +public String getValue()
    +
    +
    Gets the value of the parameter. +

    +

    + +
    Returns:
    the value of the parameter (e.g. "text")
    +
    +
    +
    + +

    +toString

    +
    +public String toString()
    +
    +
    +
    Overrides:
    toString in class Object
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/FreeBusyType.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/FreeBusyType.html new file mode 100644 index 000000000..e8ff39d50 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/FreeBusyType.html @@ -0,0 +1,390 @@ + + + + + + + +FreeBusyType (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.parameter +
    +Class FreeBusyType

    +
    +java.lang.Object
    +  extended by biweekly.parameter.EnumParameterValue
    +      extended by biweekly.parameter.FreeBusyType
    +
    +
    +
    +
    public class FreeBusyType
    extends EnumParameterValue
    + + +

    +Defines whether a calendar user is free or busy over a time period. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.20-1
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + +
    +Field Summary
    +static FreeBusyTypeBUSY + +
    +           
    +static FreeBusyTypeBUSY_TENTATIVE + +
    +           
    +static FreeBusyTypeBUSY_UNAVAILABLE + +
    +           
    +static FreeBusyTypeFREE + +
    +           
    + + + + + + + +
    Fields inherited from class biweekly.parameter.EnumParameterValue
    value
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static Collection<FreeBusyType>all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +static FreeBusyTypefind(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static FreeBusyTypeget(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + + + + + + + +
    Methods inherited from class biweekly.parameter.EnumParameterValue
    getValue, toString
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +FREE

    +
    +public static final FreeBusyType FREE
    +
    +
    +
    +
    +
    + +

    +BUSY

    +
    +public static final FreeBusyType BUSY
    +
    +
    +
    +
    +
    + +

    +BUSY_UNAVAILABLE

    +
    +public static final FreeBusyType BUSY_UNAVAILABLE
    +
    +
    +
    +
    +
    + +

    +BUSY_TENTATIVE

    +
    +public static final FreeBusyType BUSY_TENTATIVE
    +
    +
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +find

    +
    +public static FreeBusyType find(String value)
    +
    +
    Searches for a parameter value that is defined as a static constant in + this class. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object or null if not found
    +
    +
    +
    + +

    +get

    +
    +public static FreeBusyType get(String value)
    +
    +
    Searches for a parameter value and creates one if it cannot be found. All + objects are guaranteed to be unique, so they can be compared with + == equality. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object
    +
    +
    +
    + +

    +all

    +
    +public static Collection<FreeBusyType> all()
    +
    +
    Gets all of the parameter values that are defined as static constants in + this class. +

    +

    + +
    Returns:
    the parameter values
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/ICalParameterCaseClasses.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/ICalParameterCaseClasses.html new file mode 100644 index 000000000..b100b2b7c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/ICalParameterCaseClasses.html @@ -0,0 +1,327 @@ + + + + + + + +ICalParameterCaseClasses (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.parameter +
    +Class ICalParameterCaseClasses<T extends EnumParameterValue>

    +
    +java.lang.Object
    +  extended by biweekly.util.CaseClasses<T,String>
    +      extended by biweekly.parameter.ICalParameterCaseClasses<T>
    +
    +
    +
    Type Parameters:
    T - the parameter class
    +
    +
    +
    public class ICalParameterCaseClasses<T extends EnumParameterValue>
    extends CaseClasses<T,String>
    + + +

    +Manages the list of pre-defined values for a parameter (such as VALUE or + ENCODING). +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.util.CaseClasses
    clazz, preDefined, runtimeDefined
    +  + + + + + + + + + + +
    +Constructor Summary
    ICalParameterCaseClasses(Class<T> clazz) + +
    +           
    +  + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  Tcreate(String value) + +
    +          Creates a new instance of the case class.
    +protected  booleanmatches(T object, + String value) + +
    +          Determines if a value is associated with a case object.
    + + + + + + + +
    Methods inherited from class biweekly.util.CaseClasses
    all, find, get
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalParameterCaseClasses

    +
    +public ICalParameterCaseClasses(Class<T> clazz)
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +create

    +
    +protected T create(String value)
    +
    +
    Description copied from class: CaseClasses
    +
    Creates a new instance of the case class. +

    +

    +
    Specified by:
    create in class CaseClasses<T extends EnumParameterValue,String>
    +
    +
    +
    Parameters:
    value - the value to give the instance +
    Returns:
    the new instance
    +
    +
    +
    + +

    +matches

    +
    +protected boolean matches(T object,
    +                          String value)
    +
    +
    Description copied from class: CaseClasses
    +
    Determines if a value is associated with a case object. +

    +

    +
    Specified by:
    matches in class CaseClasses<T extends EnumParameterValue,String>
    +
    +
    +
    Parameters:
    object - the object
    value - the value +
    Returns:
    true if it matches, false if not
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/ICalParameters.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/ICalParameters.html new file mode 100644 index 000000000..50df0e2c7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/ICalParameters.html @@ -0,0 +1,1758 @@ + + + + + + + +ICalParameters (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.parameter +
    +Class ICalParameters

    +
    +java.lang.Object
    +  extended by biweekly.util.ListMultimap<String,String>
    +      extended by biweekly.parameter.ICalParameters
    +
    +
    +
    All Implemented Interfaces:
    Iterable<Map.Entry<String,List<String>>>
    +
    +
    +
    +
    public class ICalParameters
    extends ListMultimap<String,String>
    + + +

    +Contains the list of parameters that belong to a property. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Field Summary
    +static StringALTREP + +
    +           
    +static StringCN + +
    +           
    +static StringCUTYPE + +
    +           
    +static StringDELEGATED_FROM + +
    +           
    +static StringDELEGATED_TO + +
    +           
    +static StringDIR + +
    +           
    +static StringENCODING + +
    +           
    +static StringFBTYPE + +
    +           
    +static StringFMTTYPE + +
    +           
    +static StringLANGUAGE + +
    +           
    +static StringMEMBER + +
    +           
    +static StringPARTSTAT + +
    +           
    +static StringRANGE + +
    +           
    +static StringRELATED + +
    +           
    +static StringRELTYPE + +
    +           
    +static StringROLE + +
    +           
    +static StringRSVP + +
    +           
    +static StringSENT_BY + +
    +           
    +static StringTZID + +
    +           
    +static StringVALUE + +
    +           
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    ICalParameters() + +
    +          Creates a parameters list.
    ICalParameters(ICalParameters parameters) + +
    +          Copies an existing parameters list.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddDelegatedFrom(String uri) + +
    +          Adds a person who has delegated his or her responsibility to an attendee.
    + voidaddDelegatedTo(String uri) + +
    +          Adds a person to which an attendee has delegated his or her + responsibility.
    + voidaddMember(String uri) + +
    +          Adds a group that an attendee is a member of.
    + StringgetAltRepresentation() + +
    +          Gets a URI pointing to additional information about the entity + represented by the property.
    + CalendarUserTypegetCalendarUserType() + +
    +          Gets the type of user an attendee is (for example, an "individual" or a + "room").
    + StringgetCommonName() + +
    +          Gets the display name of a person.
    + List<String>getDelegatedFrom() + +
    +          Gets the people who have delegated their responsibility to an attendee.
    + List<String>getDelegatedTo() + +
    +          Gets the people to which an attendee has delegated his or her + responsibility.
    + StringgetDirectoryEntry() + +
    +          Gets a URI that contains additional information about the person.
    + EncodinggetEncoding() + +
    +          Gets the encoding of the property value (for example, "base64").
    + StringgetFormatType() + +
    +          Gets the content-type of the property's value.
    + FreeBusyTypegetFreeBusyType() + +
    +          Gets the person's status over the time periods that are specified in a + FreeBusy property (for example, "free" or "busy").
    + StringgetLanguage() + +
    +          Gets the language that the property value is written in.
    + List<String>getMembers() + +
    +          Gets the groups that an attendee is a member of.
    + ParticipationStatusgetParticipationStatus() + +
    +          Gets an attendee's level of participation.
    + RangegetRange() + +
    +          Gets the effective range of recurrence instances from the instance + specified by a RecurrenceId property.
    + RelatedgetRelated() + +
    +          Gets the date-time field that the duration in a Trigger property + is relative to.
    + RelationshipTypegetRelationshipType() + +
    +          Gets the relationship type of a RelatedTo property.
    + RolegetRole() + +
    +          Gets an attendee's role (for example, "chair" or "required participant").
    + BooleangetRsvp() + +
    +          Gets whether the organizer requests a response from an attendee.
    + StringgetSentBy() + +
    +          Gets a person that is acting on behalf of the person defined in the + property.
    + StringgetTimezoneId() + +
    +          Gets the timezone identifier.
    + ICalDataTypegetValue() + +
    +          Gets the data type of the property's value (for example, "text" or + "datetime").
    + voidremoveDelegatedFrom() + +
    +          Removes everyone who has delegated his or her responsibility to an + attendee.
    + voidremoveDelegatedFrom(String uri) + +
    +          Removes a person who has delegated his or her responsibility to an + attendee.
    + voidremoveDelegatedTo() + +
    +          Removes everyone to which an attendee has delegated his or her + responsibility.
    + voidremoveDelegatedTo(String uri) + +
    +          Removes a person to which an attendee has delegated his or her + responsibility.
    + voidremoveMember(String uri) + +
    +          Removes a group that an attendee is a member of.
    + voidremoveMembers() + +
    +          Removes all groups that an attendee is a member of.
    +protected  StringsanitizeKey(String key) + +
    +          Modifies a given key before it is used to interact with the internal map.
    + voidsetAltRepresentation(String uri) + +
    +          Sets a URI pointing to additional information about the entity + represented by the property.
    + voidsetCalendarUserType(CalendarUserType cutype) + +
    +          Sets the type of user an attendee is (for example, an "individual" or a + "room").
    + voidsetCommonName(String cn) + +
    +          Sets the display name of a person.
    + voidsetDirectoryEntry(String uri) + +
    +          Sets a URI that contains additional information about the person.
    + voidsetEncoding(Encoding encoding) + +
    +          Sets the encoding of the property value (for example, "base64").
    + voidsetFormatType(String formatType) + +
    +          Sets the content-type of the property's value.
    + voidsetFreeBusyType(FreeBusyType fbType) + +
    +          Sets the person's status over the time periods that are specified in a + FreeBusy property (for example, "free" or "busy").
    + voidsetLanguage(String language) + +
    +          Sets the language that the property value is written in.
    + voidsetParticipationStatus(ParticipationStatus status) + +
    +          Sets an attendee's level of participation.
    + voidsetRange(Range range) + +
    +          Sets the effective range of recurrence instances from the instance + specified by a RecurrenceId property.
    + voidsetRelated(Related related) + +
    +          Sets the date-time field that the duration in a Trigger property + is relative to.
    + voidsetRelationshipType(RelationshipType relationshipType) + +
    +          Sets the relationship type of a RelatedTo property.
    + voidsetRole(Role role) + +
    +          Sets an attendee's role (for example, "chair" or "required participant").
    + voidsetRsvp(Boolean rsvp) + +
    +          Sets whether the organizer requests a response from an attendee.
    + voidsetSentBy(String uri) + +
    +          Sets a person that is acting on behalf of the person defined in the + property.
    + voidsetTimezoneId(String timezoneId) + +
    +          Sets the timezone identifier.
    + voidsetValue(ICalDataType value) + +
    +          Sets the data type of the property's value (for example, "text" or + "datetime").
    + List<String>validate() + +
    +          Checks this parameters list for data consistency problems or deviations + from the spec.
    + + + + + + + +
    Methods inherited from class biweekly.util.ListMultimap
    clear, containsKey, equals, first, get, getMap, hashCode, isEmpty, iterator, keySet, put, putAll, remove, removeAll, replace, replace, size, toString, values
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +CN

    +
    +public static final String CN
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +ALTREP

    +
    +public static final String ALTREP
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +CUTYPE

    +
    +public static final String CUTYPE
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +DELEGATED_FROM

    +
    +public static final String DELEGATED_FROM
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +DELEGATED_TO

    +
    +public static final String DELEGATED_TO
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +DIR

    +
    +public static final String DIR
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +ENCODING

    +
    +public static final String ENCODING
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +FMTTYPE

    +
    +public static final String FMTTYPE
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +FBTYPE

    +
    +public static final String FBTYPE
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +LANGUAGE

    +
    +public static final String LANGUAGE
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +MEMBER

    +
    +public static final String MEMBER
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +PARTSTAT

    +
    +public static final String PARTSTAT
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +RANGE

    +
    +public static final String RANGE
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +RELATED

    +
    +public static final String RELATED
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +RELTYPE

    +
    +public static final String RELTYPE
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +ROLE

    +
    +public static final String ROLE
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +RSVP

    +
    +public static final String RSVP
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +SENT_BY

    +
    +public static final String SENT_BY
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +TZID

    +
    +public static final String TZID
    +
    +
    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +VALUE

    +
    +public static final String VALUE
    +
    +
    +
    See Also:
    Constant Field Values
    +
    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalParameters

    +
    +public ICalParameters()
    +
    +
    Creates a parameters list. +

    +

    +
    + +

    +ICalParameters

    +
    +public ICalParameters(ICalParameters parameters)
    +
    +
    Copies an existing parameters list. +

    +

    +
    Parameters:
    parameters - the list to copy
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getAltRepresentation

    +
    +public String getAltRepresentation()
    +
    +
    Gets a URI pointing to additional information about the entity + represented by the property. +

    +

    + +
    Returns:
    the URI or null if not set
    Specification Reference:
    RFC 5545 p.14-5
    +
    +
    +
    + +

    +setAltRepresentation

    +
    +public void setAltRepresentation(String uri)
    +
    +
    Sets a URI pointing to additional information about the entity + represented by the property. +

    +

    +
    Parameters:
    uri - the URI or null to remove
    Specification Reference:
    RFC 5545 p.14-5
    +
    +
    +
    + +

    +getCommonName

    +
    +public String getCommonName()
    +
    +
    Gets the display name of a person. +

    +

    + +
    Returns:
    the display name (e.g. "John Doe") or null if not set
    Specification Reference:
    RFC 5545 p.15-6
    +
    +
    +
    + +

    +setCommonName

    +
    +public void setCommonName(String cn)
    +
    +
    Sets the display name of a person. +

    +

    +
    Parameters:
    cn - the display name (e.g. "John Doe") or null to remove
    Specification Reference:
    RFC 5545 p.15-6
    +
    +
    +
    + +

    +getCalendarUserType

    +
    +public CalendarUserType getCalendarUserType()
    +
    +
    Gets the type of user an attendee is (for example, an "individual" or a + "room"). +

    +

    + +
    Returns:
    the calendar user type or null if not set
    Specification Reference:
    RFC 5545 p.16
    +
    +
    +
    + +

    +setCalendarUserType

    +
    +public void setCalendarUserType(CalendarUserType cutype)
    +
    +
    Sets the type of user an attendee is (for example, an "individual" or a + "room"). +

    +

    +
    Parameters:
    cutype - the calendar user type or null to remove
    Specification Reference:
    RFC 5545 p.16
    +
    +
    +
    + +

    +getDelegatedFrom

    +
    +public List<String> getDelegatedFrom()
    +
    +
    Gets the people who have delegated their responsibility to an attendee. +

    +

    + +
    Returns:
    the delegators (typically email URIs, e.g. + "mailto:janedoe@example.com")
    Specification Reference:
    RFC 5545 p.17
    +
    +
    +
    + +

    +addDelegatedFrom

    +
    +public void addDelegatedFrom(String uri)
    +
    +
    Adds a person who has delegated his or her responsibility to an attendee. +

    +

    +
    Parameters:
    uri - the delegator (typically an email URI, e.g. + "mailto:janedoe@example.com")
    Specification Reference:
    RFC 5545 p.17
    +
    +
    +
    + +

    +removeDelegatedFrom

    +
    +public void removeDelegatedFrom(String uri)
    +
    +
    Removes a person who has delegated his or her responsibility to an + attendee. +

    +

    +
    Parameters:
    uri - the delegator to remove (typically an email URI, e.g. + "mailto:janedoe@example.com")
    Specification Reference:
    RFC 5545 p.17
    +
    +
    +
    + +

    +removeDelegatedFrom

    +
    +public void removeDelegatedFrom()
    +
    +
    Removes everyone who has delegated his or her responsibility to an + attendee. +

    +

    +
    Specification Reference:
    RFC 5545 p.17
    +
    +
    +
    + +

    +getDelegatedTo

    +
    +public List<String> getDelegatedTo()
    +
    +
    Gets the people to which an attendee has delegated his or her + responsibility. +

    +

    + +
    Returns:
    the delegatees (typically email URIs, e.g. + "mailto:janedoe@example.com")
    Specification Reference:
    RFC 5545 p.17-8
    +
    +
    +
    + +

    +addDelegatedTo

    +
    +public void addDelegatedTo(String uri)
    +
    +
    Adds a person to which an attendee has delegated his or her + responsibility. +

    +

    +
    Parameters:
    uri - the delegatee (typically an email URI, e.g. + "mailto:janedoe@example.com")
    Specification Reference:
    RFC 5545 p.17-8
    +
    +
    +
    + +

    +removeDelegatedTo

    +
    +public void removeDelegatedTo(String uri)
    +
    +
    Removes a person to which an attendee has delegated his or her + responsibility. +

    +

    +
    Parameters:
    uri - the delegatee to remove (typically an email URI, e.g. + "mailto:janedoe@example.com")
    Specification Reference:
    RFC 5545 p.17-8
    +
    +
    +
    + +

    +removeDelegatedTo

    +
    +public void removeDelegatedTo()
    +
    +
    Removes everyone to which an attendee has delegated his or her + responsibility. +

    +

    +
    Specification Reference:
    RFC 5545 p.17-8
    +
    +
    +
    + +

    +getDirectoryEntry

    +
    +public String getDirectoryEntry()
    +
    +
    Gets a URI that contains additional information about the person. +

    +

    + +
    Returns:
    the URI (e.g. an LDAP URI) or null if not set
    Specification Reference:
    RFC 5545 p.18
    +
    +
    +
    + +

    +setDirectoryEntry

    +
    +public void setDirectoryEntry(String uri)
    +
    +
    Sets a URI that contains additional information about the person. +

    +

    +
    Parameters:
    uri - the URI (e.g. an LDAP URI) or null to remove
    Specification Reference:
    RFC 5545 p.18
    +
    +
    +
    + +

    +getEncoding

    +
    +public Encoding getEncoding()
    +
    +
    Gets the encoding of the property value (for example, "base64"). +

    +

    + +
    Returns:
    the encoding or null if not set
    Specification Reference:
    RFC 5545 p.18-9
    +
    +
    +
    + +

    +setEncoding

    +
    +public void setEncoding(Encoding encoding)
    +
    +
    Sets the encoding of the property value (for example, "base64"). +

    +

    +
    Parameters:
    encoding - the encoding or null to remove
    Specification Reference:
    RFC 5545 p.18-9
    +
    +
    +
    + +

    +getFormatType

    +
    +public String getFormatType()
    +
    +
    Gets the content-type of the property's value. +

    +

    + +
    Returns:
    the content type (e.g. "image/png") or null if not set
    Specification Reference:
    RFC 5545 p.19-20
    +
    +
    +
    + +

    +setFormatType

    +
    +public void setFormatType(String formatType)
    +
    +
    Sets the content-type of the property's value. +

    +

    +
    Parameters:
    formatType - the content type (e.g. "image/png") or null to remove
    Specification Reference:
    RFC 5545 p.19-20
    +
    +
    +
    + +

    +getFreeBusyType

    +
    +public FreeBusyType getFreeBusyType()
    +
    +
    Gets the person's status over the time periods that are specified in a + FreeBusy property (for example, "free" or "busy"). If not set, + the user should be considered "busy". +

    +

    + +
    Returns:
    the type or null if not set
    Specification Reference:
    RFC 5545 p.20
    +
    +
    +
    + +

    +setFreeBusyType

    +
    +public void setFreeBusyType(FreeBusyType fbType)
    +
    +
    Sets the person's status over the time periods that are specified in a + FreeBusy property (for example, "free" or "busy"). If not set, + the user should be considered "busy". +

    +

    +
    Parameters:
    fbType - the type or null to remove
    Specification Reference:
    RFC 5545 p.20
    +
    +
    +
    + +

    +getLanguage

    +
    +public String getLanguage()
    +
    +
    Gets the language that the property value is written in. +

    +

    + +
    Returns:
    the language (e.g. "en" for English) or null if not set
    Specification Reference:
    RFC 5545 p.21
    +
    +
    +
    + +

    +setLanguage

    +
    +public void setLanguage(String language)
    +
    +
    Sets the language that the property value is written in. +

    +

    +
    Parameters:
    language - the language (e.g. "en" for English) or null to remove
    Specification Reference:
    RFC 5545 p.21
    +
    +
    +
    + +

    +addMember

    +
    +public void addMember(String uri)
    +
    +
    Adds a group that an attendee is a member of. +

    +

    +
    Parameters:
    uri - the group URI (typically, an email address URI, e.g. + "mailto:mailinglist@example.com")
    Specification Reference:
    RFC 5545 p.21-2
    +
    +
    +
    + +

    +getMembers

    +
    +public List<String> getMembers()
    +
    +
    Gets the groups that an attendee is a member of. +

    +

    + +
    Returns:
    the group URIs (typically, these are email address URIs, e.g. + "mailto:mailinglist@example.com")
    Specification Reference:
    RFC 5545 p.21-2
    +
    +
    +
    + +

    +removeMember

    +
    +public void removeMember(String uri)
    +
    +
    Removes a group that an attendee is a member of. +

    +

    +
    Parameters:
    uri - the group URI to remove (typically, an email address URI, e.g. + "mailto:mailinglist@example.com")
    Specification Reference:
    RFC 5545 p.21-2
    +
    +
    +
    + +

    +removeMembers

    +
    +public void removeMembers()
    +
    +
    Removes all groups that an attendee is a member of. +

    +

    +
    Specification Reference:
    RFC 5545 p.21-2
    +
    +
    +
    + +

    +getParticipationStatus

    +
    +public ParticipationStatus getParticipationStatus()
    +
    +
    Gets an attendee's level of participation. +

    +

    + +
    Returns:
    the participation status or null if not set
    Specification Reference:
    RFC 5545 p.22-3
    +
    +
    +
    + +

    +setParticipationStatus

    +
    +public void setParticipationStatus(ParticipationStatus status)
    +
    +
    Sets an attendee's level of participation. +

    +

    +
    Parameters:
    status - the participation status or null to remove
    Specification Reference:
    RFC 5545 p.22-3
    +
    +
    +
    + +

    +getRange

    +
    +public Range getRange()
    +
    +
    Gets the effective range of recurrence instances from the instance + specified by a RecurrenceId property. +

    +

    + +
    Returns:
    the range or null if not set
    Specification Reference:
    RFC 5545 p.23-4
    +
    +
    +
    + +

    +setRange

    +
    +public void setRange(Range range)
    +
    +
    Sets the effective range of recurrence instances from the instance + specified by a RecurrenceId property. +

    +

    +
    Parameters:
    range - the range or null to remove
    Specification Reference:
    RFC 5545 p.23-4
    +
    +
    +
    + +

    +getRelated

    +
    +public Related getRelated()
    +
    +
    Gets the date-time field that the duration in a Trigger property + is relative to. +

    +

    + +
    Returns:
    the field or null if not set
    Specification Reference:
    RFC 5545 p.24
    +
    +
    +
    + +

    +setRelated

    +
    +public void setRelated(Related related)
    +
    +
    Sets the date-time field that the duration in a Trigger property + is relative to. +

    +

    +
    Parameters:
    related - the field or null to remove
    Specification Reference:
    RFC 5545 p.24
    +
    +
    +
    + +

    +getRelationshipType

    +
    +public RelationshipType getRelationshipType()
    +
    +
    Gets the relationship type of a RelatedTo property. +

    +

    + +
    Returns:
    the relationship type (e.g. "child") or null if not set
    Specification Reference:
    RFC 5545 p.25
    +
    +
    +
    + +

    +setRelationshipType

    +
    +public void setRelationshipType(RelationshipType relationshipType)
    +
    +
    Sets the relationship type of a RelatedTo property. +

    +

    +
    Parameters:
    relationshipType - the relationship type (e.g. "child") or null to + remove
    Specification Reference:
    RFC 5545 p.25
    +
    +
    +
    + +

    +getRole

    +
    +public Role getRole()
    +
    +
    Gets an attendee's role (for example, "chair" or "required participant"). +

    +

    + +
    Returns:
    the role or null if not set
    Specification Reference:
    RFC 5545 p.25-6
    +
    +
    +
    + +

    +setRole

    +
    +public void setRole(Role role)
    +
    +
    Sets an attendee's role (for example, "chair" or "required participant"). +

    +

    +
    Parameters:
    role - the role or null to remove
    Specification Reference:
    RFC 5545 p.25-6
    +
    +
    +
    + +

    +getRsvp

    +
    +public Boolean getRsvp()
    +
    +
    Gets whether the organizer requests a response from an attendee. +

    +

    + +
    Returns:
    true if an RSVP is requested, false if not, null if not set +
    Throws: +
    IllegalStateException - if the parameter value is malformed and + cannot be parsed
    Specification Reference:
    RFC 5545 p.26-7
    +
    +
    +
    + +

    +setRsvp

    +
    +public void setRsvp(Boolean rsvp)
    +
    +
    Sets whether the organizer requests a response from an attendee. +

    +

    +
    Parameters:
    rsvp - true if an RSVP has been requested, false if not, null to + remove
    Specification Reference:
    RFC 5545 p.26-7
    +
    +
    +
    + +

    +getSentBy

    +
    +public String getSentBy()
    +
    +
    Gets a person that is acting on behalf of the person defined in the + property. +

    +

    + +
    Returns:
    a URI representing the person (typically, an email URI, e.g. + "mailto:janedoe@example.com") or null if not set
    Specification Reference:
    RFC 5545 p.27
    +
    +
    +
    + +

    +setSentBy

    +
    +public void setSentBy(String uri)
    +
    +
    Sets a person that is acting on behalf of the person defined in the + property. +

    +

    +
    Parameters:
    uri - a URI representing the person (typically, an email URI, e.g. + "mailto:janedoe@example.com") or null to remove
    Specification Reference:
    RFC 5545 p.27
    +
    +
    +
    + +

    +getTimezoneId

    +
    +public String getTimezoneId()
    +
    +
    Gets the timezone identifier. This either (a) references the + TimezoneId property of a VTimezone component, or (b) + specifies a globally-defined timezone (e.g. "America/New_York"). For a + list of globally-defined timezones, see the TZ database. +

    +

    + +
    Returns:
    the timezone identifier or null if not set
    Specification Reference:
    RFC 5545 p.27-8
    +
    +
    +
    + +

    +setTimezoneId

    +
    +public void setTimezoneId(String timezoneId)
    +
    +
    Sets the timezone identifier. This either (a) references the + TimezoneId property of a VTimezone component, or (b) + specifies a globally-defined timezone (e.g. "America/New_York"). For a + list of globally-defined timezones, see the TZ database. +

    +

    +
    Parameters:
    timezoneId - the timezone identifier or null to remove
    Specification Reference:
    RFC 5545 p.27-8
    +
    +
    +
    + +

    +getValue

    +
    +public ICalDataType getValue()
    +
    +
    Gets the data type of the property's value (for example, "text" or + "datetime"). +

    +

    + +
    Returns:
    the data type or null if not set
    Specification Reference:
    RFC 5545 p.29-50
    +
    +
    +
    + +

    +setValue

    +
    +public void setValue(ICalDataType value)
    +
    +
    Sets the data type of the property's value (for example, "text" or + "datetime"). +

    +

    +
    Parameters:
    value - the data type or null to remove
    Specification Reference:
    RFC 5545 p.29-50
    +
    +
    +
    + +

    +validate

    +
    +public List<String> validate()
    +
    +
    Checks this parameters list for data consistency problems or deviations + from the spec. These problems will not prevent the iCalendar object from + being written to a data stream, but may prevent it from being parsed + correctly by the consuming application. +

    +

    + +
    Returns:
    a list of warnings or an empty list if no problems were found
    +
    +
    +
    + +

    +sanitizeKey

    +
    +protected String sanitizeKey(String key)
    +
    +
    Description copied from class: ListMultimap
    +
    Modifies a given key before it is used to interact with the internal map. + This method is meant to be overridden by child classes if necessary. +

    +

    +
    Overrides:
    sanitizeKey in class ListMultimap<String,String>
    +
    +
    +
    Parameters:
    key - the key +
    Returns:
    the modified key (by default, the key is returned as-is)
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/ParticipationStatus.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/ParticipationStatus.html new file mode 100644 index 000000000..71c3677d3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/ParticipationStatus.html @@ -0,0 +1,444 @@ + + + + + + + +ParticipationStatus (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.parameter +
    +Class ParticipationStatus

    +
    +java.lang.Object
    +  extended by biweekly.parameter.EnumParameterValue
    +      extended by biweekly.parameter.ParticipationStatus
    +
    +
    +
    +
    public class ParticipationStatus
    extends EnumParameterValue
    + + +

    +Defines a calendar user's level of participation. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.22-3
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Field Summary
    +static ParticipationStatusACCEPTED + +
    +           
    +static ParticipationStatusCOMPLETED + +
    +           
    +static ParticipationStatusDECLINED + +
    +           
    +static ParticipationStatusDELEGATED + +
    +           
    +static ParticipationStatusIN_PROGRESS + +
    +           
    +static ParticipationStatusNEEDS_ACTION + +
    +           
    +static ParticipationStatusTENTATIVE + +
    +           
    + + + + + + + +
    Fields inherited from class biweekly.parameter.EnumParameterValue
    value
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static Collection<ParticipationStatus>all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +static ParticipationStatusfind(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static ParticipationStatusget(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + + + + + + + +
    Methods inherited from class biweekly.parameter.EnumParameterValue
    getValue, toString
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +NEEDS_ACTION

    +
    +public static final ParticipationStatus NEEDS_ACTION
    +
    +
    +
    +
    +
    + +

    +ACCEPTED

    +
    +public static final ParticipationStatus ACCEPTED
    +
    +
    +
    +
    +
    + +

    +DECLINED

    +
    +public static final ParticipationStatus DECLINED
    +
    +
    +
    +
    +
    + +

    +TENTATIVE

    +
    +public static final ParticipationStatus TENTATIVE
    +
    +
    +
    +
    +
    + +

    +DELEGATED

    +
    +public static final ParticipationStatus DELEGATED
    +
    +
    +
    +
    +
    + +

    +COMPLETED

    +
    +public static final ParticipationStatus COMPLETED
    +
    +
    +
    +
    +
    + +

    +IN_PROGRESS

    +
    +public static final ParticipationStatus IN_PROGRESS
    +
    +
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +find

    +
    +public static ParticipationStatus find(String value)
    +
    +
    Searches for a parameter value that is defined as a static constant in + this class. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object or null if not found
    +
    +
    +
    + +

    +get

    +
    +public static ParticipationStatus get(String value)
    +
    +
    Searches for a parameter value and creates one if it cannot be found. All + objects are guaranteed to be unique, so they can be compared with + == equality. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object
    +
    +
    +
    + +

    +all

    +
    +public static Collection<ParticipationStatus> all()
    +
    +
    Gets all of the parameter values that are defined as static constants in + this class. +

    +

    + +
    Returns:
    the parameter values
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/Range.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/Range.html new file mode 100644 index 000000000..03d2fa537 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/Range.html @@ -0,0 +1,357 @@ + + + + + + + +Range (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.parameter +
    +Class Range

    +
    +java.lang.Object
    +  extended by biweekly.parameter.EnumParameterValue
    +      extended by biweekly.parameter.Range
    +
    +
    +
    +
    public class Range
    extends EnumParameterValue
    + + +

    +Defines the effective range of recurrence instances specified by the + RecurrenceId property. This parameter is essentially deprecated. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.23-4
    +
    + +

    + + + + + + + + + + + + + + + +
    +Field Summary
    +static RangeTHIS_AND_FUTURE + +
    +           
    +static RangeTHIS_AND_PRIOR + +
    +          Deprecated in the latest iCal specification.
    + + + + + + + +
    Fields inherited from class biweekly.parameter.EnumParameterValue
    value
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static Collection<Range>all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +static Rangefind(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static Rangeget(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + + + + + + + +
    Methods inherited from class biweekly.parameter.EnumParameterValue
    getValue, toString
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +THIS_AND_FUTURE

    +
    +public static final Range THIS_AND_FUTURE
    +
    +
    +
    +
    +
    + +

    +THIS_AND_PRIOR

    +
    +public static final Range THIS_AND_PRIOR
    +
    +
    Deprecated in the latest iCal specification. +

    +

    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +find

    +
    +public static Range find(String value)
    +
    +
    Searches for a parameter value that is defined as a static constant in + this class. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object or null if not found
    +
    +
    +
    + +

    +get

    +
    +public static Range get(String value)
    +
    +
    Searches for a parameter value and creates one if it cannot be found. All + objects are guaranteed to be unique, so they can be compared with + == equality. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object
    +
    +
    +
    + +

    +all

    +
    +public static Collection<Range> all()
    +
    +
    Gets all of the parameter values that are defined as static constants in + this class. +

    +

    + +
    Returns:
    the parameter values
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/Related.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/Related.html new file mode 100644 index 000000000..6ffb1196e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/Related.html @@ -0,0 +1,354 @@ + + + + + + + +Related (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.parameter +
    +Class Related

    +
    +java.lang.Object
    +  extended by biweekly.parameter.EnumParameterValue
    +      extended by biweekly.parameter.Related
    +
    +
    +
    +
    public class Related
    extends EnumParameterValue
    + + +

    +Defines the date that an alarm trigger is relative to. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.24
    +
    + +

    + + + + + + + + + + + + + + + +
    +Field Summary
    +static RelatedEND + +
    +           
    +static RelatedSTART + +
    +           
    + + + + + + + +
    Fields inherited from class biweekly.parameter.EnumParameterValue
    value
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static Collection<Related>all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +static Relatedfind(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static Relatedget(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + + + + + + + +
    Methods inherited from class biweekly.parameter.EnumParameterValue
    getValue, toString
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +START

    +
    +public static final Related START
    +
    +
    +
    +
    +
    + +

    +END

    +
    +public static final Related END
    +
    +
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +find

    +
    +public static Related find(String value)
    +
    +
    Searches for a parameter value that is defined as a static constant in + this class. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object or null if not found
    +
    +
    +
    + +

    +get

    +
    +public static Related get(String value)
    +
    +
    Searches for a parameter value and creates one if it cannot be found. All + objects are guaranteed to be unique, so they can be compared with + == equality. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object
    +
    +
    +
    + +

    +all

    +
    +public static Collection<Related> all()
    +
    +
    Gets all of the parameter values that are defined as static constants in + this class. +

    +

    + +
    Returns:
    the parameter values
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/RelationshipType.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/RelationshipType.html new file mode 100644 index 000000000..2123827c5 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/RelationshipType.html @@ -0,0 +1,373 @@ + + + + + + + +RelationshipType (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.parameter +
    +Class RelationshipType

    +
    +java.lang.Object
    +  extended by biweekly.parameter.EnumParameterValue
    +      extended by biweekly.parameter.RelationshipType
    +
    +
    +
    +
    public class RelationshipType
    extends EnumParameterValue
    + + +

    +Defines the hierarchical relationship that a component has with another + component. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.25
    +
    + +

    + + + + + + + + + + + + + + + + + + + +
    +Field Summary
    +static RelationshipTypeCHILD + +
    +           
    +static RelationshipTypePARENT + +
    +           
    +static RelationshipTypeSIBLING + +
    +           
    + + + + + + + +
    Fields inherited from class biweekly.parameter.EnumParameterValue
    value
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static Collection<RelationshipType>all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +static RelationshipTypefind(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static RelationshipTypeget(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + + + + + + + +
    Methods inherited from class biweekly.parameter.EnumParameterValue
    getValue, toString
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +PARENT

    +
    +public static final RelationshipType PARENT
    +
    +
    +
    +
    +
    + +

    +CHILD

    +
    +public static final RelationshipType CHILD
    +
    +
    +
    +
    +
    + +

    +SIBLING

    +
    +public static final RelationshipType SIBLING
    +
    +
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +find

    +
    +public static RelationshipType find(String value)
    +
    +
    Searches for a parameter value that is defined as a static constant in + this class. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object or null if not found
    +
    +
    +
    + +

    +get

    +
    +public static RelationshipType get(String value)
    +
    +
    Searches for a parameter value and creates one if it cannot be found. All + objects are guaranteed to be unique, so they can be compared with + == equality. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object
    +
    +
    +
    + +

    +all

    +
    +public static Collection<RelationshipType> all()
    +
    +
    Gets all of the parameter values that are defined as static constants in + this class. +

    +

    + +
    Returns:
    the parameter values
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/Role.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/Role.html new file mode 100644 index 000000000..6278ec308 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/Role.html @@ -0,0 +1,390 @@ + + + + + + + +Role (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.parameter +
    +Class Role

    +
    +java.lang.Object
    +  extended by biweekly.parameter.EnumParameterValue
    +      extended by biweekly.parameter.Role
    +
    +
    +
    +
    public class Role
    extends EnumParameterValue
    + + +

    +Defines the role that a calendar user holds. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.25-6
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + +
    +Field Summary
    +static RoleCHAIR + +
    +           
    +static RoleNON_PARTICIPANT + +
    +           
    +static RoleOPT_PARTICIPANT + +
    +           
    +static RoleREQ_PARTICIPANT + +
    +           
    + + + + + + + +
    Fields inherited from class biweekly.parameter.EnumParameterValue
    value
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static Collection<Role>all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +static Rolefind(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static Roleget(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + + + + + + + +
    Methods inherited from class biweekly.parameter.EnumParameterValue
    getValue, toString
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +CHAIR

    +
    +public static final Role CHAIR
    +
    +
    +
    +
    +
    + +

    +REQ_PARTICIPANT

    +
    +public static final Role REQ_PARTICIPANT
    +
    +
    +
    +
    +
    + +

    +OPT_PARTICIPANT

    +
    +public static final Role OPT_PARTICIPANT
    +
    +
    +
    +
    +
    + +

    +NON_PARTICIPANT

    +
    +public static final Role NON_PARTICIPANT
    +
    +
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +find

    +
    +public static Role find(String value)
    +
    +
    Searches for a parameter value that is defined as a static constant in + this class. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object or null if not found
    +
    +
    +
    + +

    +get

    +
    +public static Role get(String value)
    +
    +
    Searches for a parameter value and creates one if it cannot be found. All + objects are guaranteed to be unique, so they can be compared with + == equality. +

    +

    +
    Parameters:
    value - the parameter value +
    Returns:
    the object
    +
    +
    +
    + +

    +all

    +
    +public static Collection<Role> all()
    +
    +
    Gets all of the parameter values that are defined as static constants in + this class. +

    +

    + +
    Returns:
    the parameter values
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/CalendarUserType.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/CalendarUserType.html new file mode 100644 index 000000000..c796d2ddd --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/CalendarUserType.html @@ -0,0 +1,328 @@ + + + + + + + +Uses of Class biweekly.parameter.CalendarUserType (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.parameter.CalendarUserType

    +
    + + + + + + + + + + + + + +
    +Packages that use CalendarUserType
    biweekly.parameter  
    biweekly.property  
    +  +

    + + + + + +
    +Uses of CalendarUserType in biweekly.parameter
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Fields in biweekly.parameter declared as CalendarUserType
    +static CalendarUserTypeCalendarUserType.GROUP + +
    +           
    +static CalendarUserTypeCalendarUserType.INDIVIDUAL + +
    +           
    +static CalendarUserTypeCalendarUserType.RESOURCE + +
    +           
    +static CalendarUserTypeCalendarUserType.ROOM + +
    +           
    +static CalendarUserTypeCalendarUserType.UNKNOWN + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.parameter that return CalendarUserType
    +static CalendarUserTypeCalendarUserType.find(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static CalendarUserTypeCalendarUserType.get(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + CalendarUserTypeICalParameters.getCalendarUserType() + +
    +          Gets the type of user an attendee is (for example, an "individual" or a + "room").
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter that return types with arguments of type CalendarUserType
    +static Collection<CalendarUserType>CalendarUserType.all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter with parameters of type CalendarUserType
    + voidICalParameters.setCalendarUserType(CalendarUserType cutype) + +
    +          Sets the type of user an attendee is (for example, an "individual" or a + "room").
    +  +

    + + + + + +
    +Uses of CalendarUserType in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return CalendarUserType
    + CalendarUserTypeAttendee.getCalendarUserType() + +
    +          Gets the type of user the attendee is (for example, an "individual" or a + "room").
    +  +

    + + + + + + + + + +
    Methods in biweekly.property with parameters of type CalendarUserType
    + voidAttendee.setCalendarUserType(CalendarUserType cutype) + +
    +          Sets the type of user the attendee is (for example, an "individual" or a + "room").
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Encoding.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Encoding.html new file mode 100644 index 000000000..972e42ab2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Encoding.html @@ -0,0 +1,255 @@ + + + + + + + +Uses of Class biweekly.parameter.Encoding (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.parameter.Encoding

    +
    + + + + + + + + + +
    +Packages that use Encoding
    biweekly.parameter  
    +  +

    + + + + + +
    +Uses of Encoding in biweekly.parameter
    +  +

    + + + + + + + + + + + + + +
    Fields in biweekly.parameter declared as Encoding
    +static EncodingEncoding._8BIT + +
    +           
    +static EncodingEncoding.BASE64 + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.parameter that return Encoding
    +static EncodingEncoding.find(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static EncodingEncoding.get(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + EncodingICalParameters.getEncoding() + +
    +          Gets the encoding of the property value (for example, "base64").
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter that return types with arguments of type Encoding
    +static Collection<Encoding>Encoding.all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter with parameters of type Encoding
    + voidICalParameters.setEncoding(Encoding encoding) + +
    +          Sets the encoding of the property value (for example, "base64").
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/EnumParameterValue.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/EnumParameterValue.html new file mode 100644 index 000000000..136d57710 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/EnumParameterValue.html @@ -0,0 +1,256 @@ + + + + + + + +Uses of Class biweekly.parameter.EnumParameterValue (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.parameter.EnumParameterValue

    +
    + + + + + + + + + +
    +Packages that use EnumParameterValue
    biweekly.parameter  
    +  +

    + + + + + +
    +Uses of EnumParameterValue in biweekly.parameter
    +  +

    + + + + + + + + + +
    Classes in biweekly.parameter with type parameters of type EnumParameterValue
    + classICalParameterCaseClasses<T extends EnumParameterValue> + +
    +          Manages the list of pre-defined values for a parameter (such as VALUE or + ENCODING).
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of EnumParameterValue in biweekly.parameter
    + classCalendarUserType + +
    +          Defines the type of user an entity is.
    + classEncoding + +
    +          Defines how a property value is encoded.
    + classFreeBusyType + +
    +          Defines whether a calendar user is free or busy over a time period.
    + classParticipationStatus + +
    +          Defines a calendar user's level of participation.
    + classRange + +
    +          Defines the effective range of recurrence instances specified by the + RecurrenceId property.
    + classRelated + +
    +          Defines the date that an alarm trigger is relative to.
    + classRelationshipType + +
    +          Defines the hierarchical relationship that a component has with another + component.
    + classRole + +
    +          Defines the role that a calendar user holds.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/FreeBusyType.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/FreeBusyType.html new file mode 100644 index 000000000..9d46da29d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/FreeBusyType.html @@ -0,0 +1,363 @@ + + + + + + + +Uses of Class biweekly.parameter.FreeBusyType (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.parameter.FreeBusyType

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use FreeBusyType
    biweekly.component  
    biweekly.parameter  
    biweekly.property  
    +  +

    + + + + + +
    +Uses of FreeBusyType in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type FreeBusyType
    + FreeBusyVFreeBusy.addFreeBusy(FreeBusyType type, + Date start, + Date end) + +
    +          Adds a single time period for which the person is free or busy (for + example, "free" between 1pm-3pm).
    + FreeBusyVFreeBusy.addFreeBusy(FreeBusyType type, + Date start, + Duration duration) + +
    +          Adds a single time period for which the person is free or busy (for + example, "free" for 2 hours after 1pm).
    +  +

    + + + + + +
    +Uses of FreeBusyType in biweekly.parameter
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Fields in biweekly.parameter declared as FreeBusyType
    +static FreeBusyTypeFreeBusyType.BUSY + +
    +           
    +static FreeBusyTypeFreeBusyType.BUSY_TENTATIVE + +
    +           
    +static FreeBusyTypeFreeBusyType.BUSY_UNAVAILABLE + +
    +           
    +static FreeBusyTypeFreeBusyType.FREE + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.parameter that return FreeBusyType
    +static FreeBusyTypeFreeBusyType.find(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static FreeBusyTypeFreeBusyType.get(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + FreeBusyTypeICalParameters.getFreeBusyType() + +
    +          Gets the person's status over the time periods that are specified in a + FreeBusy property (for example, "free" or "busy").
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter that return types with arguments of type FreeBusyType
    +static Collection<FreeBusyType>FreeBusyType.all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter with parameters of type FreeBusyType
    + voidICalParameters.setFreeBusyType(FreeBusyType fbType) + +
    +          Sets the person's status over the time periods that are specified in a + FreeBusy property (for example, "free" or "busy").
    +  +

    + + + + + +
    +Uses of FreeBusyType in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return FreeBusyType
    + FreeBusyTypeFreeBusy.getType() + +
    +          Gets the person's status over the time periods that are specified in this + property (for example, "free" or "busy").
    +  +

    + + + + + + + + + +
    Methods in biweekly.property with parameters of type FreeBusyType
    + voidFreeBusy.setType(FreeBusyType fbType) + +
    +          Sets the person's status over the time periods that are specified in this + property (for example, "free" or "busy").
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/ICalParameterCaseClasses.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/ICalParameterCaseClasses.html new file mode 100644 index 000000000..4352e84c3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/ICalParameterCaseClasses.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.parameter.ICalParameterCaseClasses (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.parameter.ICalParameterCaseClasses

    +
    +No usage of biweekly.parameter.ICalParameterCaseClasses +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/ICalParameters.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/ICalParameters.html new file mode 100644 index 000000000..8a241d5d4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/ICalParameters.html @@ -0,0 +1,1067 @@ + + + + + + + +Uses of Class biweekly.parameter.ICalParameters (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.parameter.ICalParameters

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use ICalParameters
    biweekly.io.json  
    biweekly.io.text  
    biweekly.parameter  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ICalParameters in biweekly.io.json
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.io.json with parameters of type ICalParameters
    + voidJCalRawReader.JCalDataStreamListener.readProperty(List<String> componentHierarchy, + String propertyName, + ICalParameters parameters, + ICalDataType dataType, + JCalValue value) + +
    +          Called when a property is read.
    + voidJCalRawWriter.writeProperty(String propertyName, + ICalParameters parameters, + ICalDataType dataType, + JCalValue value) + +
    +          Writes a property to the current component.
    +  +

    + + + + + +
    +Uses of ICalParameters in biweekly.io.text
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.io.text with parameters of type ICalParameters
    + voidICalRawReader.ICalDataStreamListener.readProperty(String name, + ICalParameters parameters, + String value) + +
    +          Called when a property is read.
    + voidICalRawWriter.writeProperty(String propertyName, + ICalParameters parameters, + String value) + +
    +          Writes a property to the iCalendar data stream.
    +  +

    + + + + + +
    +Uses of ICalParameters in biweekly.parameter
    +  +

    + + + + + + + + +
    Constructors in biweekly.parameter with parameters of type ICalParameters
    ICalParameters(ICalParameters parameters) + +
    +          Copies an existing parameters list.
    +  +

    + + + + + +
    +Uses of ICalParameters in biweekly.property
    +  +

    + + + + + + + + + +
    Fields in biweekly.property declared as ICalParameters
    +protected  ICalParametersICalProperty.parameters + +
    +          The property parameters.
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return ICalParameters
    + ICalParametersICalProperty.getParameters() + +
    +          Gets the property's parameters.
    +  +

    + + + + + + + + + +
    Methods in biweekly.property with parameters of type ICalParameters
    + voidICalProperty.setParameters(ICalParameters parameters) + +
    +          Sets the property's parameters
    +  +

    + + + + + +
    +Uses of ICalParameters in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return ICalParameters
    + ICalParametersICalPropertyMarshaller.prepareParameters(T property) + +
    +          Sanitizes a property's parameters (called before the property is + written).
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type ICalParameters
    +protected  XmlXmlMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  VersionVersionMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TUtcOffsetPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TriggerTriggerMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TTextPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RequestStatusRequestStatusMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TRecurrencePropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RecurrenceDatesRecurrenceDatesMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TListPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TIntegerPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TICalPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  GeoGeoMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  FreeBusyFreeBusyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  ExceptionDatesExceptionDatesMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  DurationPropertyDurationPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TDateTimePropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TDateOrDateTimePropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  AttachmentAttachmentMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  XmlXmlMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  VersionVersionMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TUtcOffsetPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TriggerTriggerMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TTextPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RequestStatusRequestStatusMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TRecurrencePropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RecurrenceDatesRecurrenceDatesMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RawPropertyRawPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TListPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TIntegerPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected abstract  TICalPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  GeoGeoMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  FreeBusyFreeBusyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  DurationPropertyDurationPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TDateTimePropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TDateOrDateTimePropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  AttachmentAttachmentMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  XmlXmlMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  VersionVersionMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TUtcOffsetPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TriggerTriggerMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TTextPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RequestStatusRequestStatusMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TRecurrencePropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RecurrenceDatesRecurrenceDatesMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RawPropertyRawPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TListPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TIntegerPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TICalPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  GeoGeoMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  FreeBusyFreeBusyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  ExceptionDatesExceptionDatesMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  DurationPropertyDurationPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TDateTimePropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TDateOrDateTimePropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  AttachmentAttachmentMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  voidAttachmentMarshaller._prepareParameters(Attachment property, + ICalParameters copy) + +
    +           
    +protected  voidICalPropertyMarshaller._prepareParameters(T property, + ICalParameters copy) + +
    +           + Sanitizes a property's parameters before the property is written.
    + ResourcesResourcesMarshaller.newInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    +protected abstract  TListPropertyMarshaller.newInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    +protected  ExceptionDatesExceptionDatesMarshaller.newInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    + CategoriesCategoriesMarshaller.newInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    + ICalPropertyMarshaller.Result<T>ICalPropertyMarshaller.parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters) + +
    +          Unmarshals a property's value from a JSON data stream (jCal).
    + ICalPropertyMarshaller.Result<T>ICalPropertyMarshaller.parseText(String value, + ICalDataType dataType, + ICalParameters parameters) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    + ICalPropertyMarshaller.Result<T>ICalPropertyMarshaller.parseXml(Element element, + ICalParameters parameters) + +
    +          Unmarshals a property's value from an XML document (xCal).
    +protected  StringTextListPropertyMarshaller.readValue(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected abstract  VListPropertyMarshaller.readValue(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  DateExceptionDatesMarshaller.readValue(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/ParticipationStatus.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/ParticipationStatus.html new file mode 100644 index 000000000..2db4b3798 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/ParticipationStatus.html @@ -0,0 +1,340 @@ + + + + + + + +Uses of Class biweekly.parameter.ParticipationStatus (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.parameter.ParticipationStatus

    +
    + + + + + + + + + + + + + +
    +Packages that use ParticipationStatus
    biweekly.parameter  
    biweekly.property  
    +  +

    + + + + + +
    +Uses of ParticipationStatus in biweekly.parameter
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Fields in biweekly.parameter declared as ParticipationStatus
    +static ParticipationStatusParticipationStatus.ACCEPTED + +
    +           
    +static ParticipationStatusParticipationStatus.COMPLETED + +
    +           
    +static ParticipationStatusParticipationStatus.DECLINED + +
    +           
    +static ParticipationStatusParticipationStatus.DELEGATED + +
    +           
    +static ParticipationStatusParticipationStatus.IN_PROGRESS + +
    +           
    +static ParticipationStatusParticipationStatus.NEEDS_ACTION + +
    +           
    +static ParticipationStatusParticipationStatus.TENTATIVE + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.parameter that return ParticipationStatus
    +static ParticipationStatusParticipationStatus.find(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static ParticipationStatusParticipationStatus.get(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + ParticipationStatusICalParameters.getParticipationStatus() + +
    +          Gets an attendee's level of participation.
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter that return types with arguments of type ParticipationStatus
    +static Collection<ParticipationStatus>ParticipationStatus.all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter with parameters of type ParticipationStatus
    + voidICalParameters.setParticipationStatus(ParticipationStatus status) + +
    +          Sets an attendee's level of participation.
    +  +

    + + + + + +
    +Uses of ParticipationStatus in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return ParticipationStatus
    + ParticipationStatusAttendee.getParticipationStatus() + +
    +          Gets the attendee's level of participation.
    +  +

    + + + + + + + + + +
    Methods in biweekly.property with parameters of type ParticipationStatus
    + voidAttendee.setParticipationStatus(ParticipationStatus status) + +
    +          Sets the attendee's level of participation.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Range.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Range.html new file mode 100644 index 000000000..c89814f38 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Range.html @@ -0,0 +1,304 @@ + + + + + + + +Uses of Class biweekly.parameter.Range (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.parameter.Range

    +
    + + + + + + + + + + + + + +
    +Packages that use Range
    biweekly.parameter  
    biweekly.property  
    +  +

    + + + + + +
    +Uses of Range in biweekly.parameter
    +  +

    + + + + + + + + + + + + + +
    Fields in biweekly.parameter declared as Range
    +static RangeRange.THIS_AND_FUTURE + +
    +           
    +static RangeRange.THIS_AND_PRIOR + +
    +          Deprecated in the latest iCal specification.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.parameter that return Range
    +static RangeRange.find(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static RangeRange.get(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + RangeICalParameters.getRange() + +
    +          Gets the effective range of recurrence instances from the instance + specified by a RecurrenceId property.
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter that return types with arguments of type Range
    +static Collection<Range>Range.all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter with parameters of type Range
    + voidICalParameters.setRange(Range range) + +
    +          Sets the effective range of recurrence instances from the instance + specified by a RecurrenceId property.
    +  +

    + + + + + +
    +Uses of Range in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return Range
    + RangeRecurrenceId.getRange() + +
    +          Gets the effective range of recurrence instances from the instance + specified by this property.
    +  +

    + + + + + + + + + +
    Methods in biweekly.property with parameters of type Range
    + voidRecurrenceId.setRange(Range range) + +
    +          Sets the effective range of recurrence instances from the instance + specified by this property.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Related.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Related.html new file mode 100644 index 000000000..7976b1534 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Related.html @@ -0,0 +1,326 @@ + + + + + + + +Uses of Class biweekly.parameter.Related (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.parameter.Related

    +
    + + + + + + + + + + + + + +
    +Packages that use Related
    biweekly.parameter  
    biweekly.property  
    +  +

    + + + + + +
    +Uses of Related in biweekly.parameter
    +  +

    + + + + + + + + + + + + + +
    Fields in biweekly.parameter declared as Related
    +static RelatedRelated.END + +
    +           
    +static RelatedRelated.START + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.parameter that return Related
    +static RelatedRelated.find(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static RelatedRelated.get(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + RelatedICalParameters.getRelated() + +
    +          Gets the date-time field that the duration in a Trigger property + is relative to.
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter that return types with arguments of type Related
    +static Collection<Related>Related.all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter with parameters of type Related
    + voidICalParameters.setRelated(Related related) + +
    +          Sets the date-time field that the duration in a Trigger property + is relative to.
    +  +

    + + + + + +
    +Uses of Related in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return Related
    + RelatedTrigger.getRelated() + +
    +          Gets the date-time field that the duration is relative to.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.property with parameters of type Related
    + voidTrigger.setDuration(Duration duration, + Related related) + +
    +          Sets a relative time at which the alarm will trigger.
    + voidTrigger.setRelated(Related related) + +
    +          Sets the date-time field that the duration is relative to.
    +  +

    + + + + + + + + +
    Constructors in biweekly.property with parameters of type Related
    Trigger(Duration duration, + Related related) + +
    +          Creates a trigger property.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/RelationshipType.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/RelationshipType.html new file mode 100644 index 000000000..3f78807d6 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/RelationshipType.html @@ -0,0 +1,308 @@ + + + + + + + +Uses of Class biweekly.parameter.RelationshipType (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.parameter.RelationshipType

    +
    + + + + + + + + + + + + + +
    +Packages that use RelationshipType
    biweekly.parameter  
    biweekly.property  
    +  +

    + + + + + +
    +Uses of RelationshipType in biweekly.parameter
    +  +

    + + + + + + + + + + + + + + + + + +
    Fields in biweekly.parameter declared as RelationshipType
    +static RelationshipTypeRelationshipType.CHILD + +
    +           
    +static RelationshipTypeRelationshipType.PARENT + +
    +           
    +static RelationshipTypeRelationshipType.SIBLING + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.parameter that return RelationshipType
    +static RelationshipTypeRelationshipType.find(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static RelationshipTypeRelationshipType.get(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + RelationshipTypeICalParameters.getRelationshipType() + +
    +          Gets the relationship type of a RelatedTo property.
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter that return types with arguments of type RelationshipType
    +static Collection<RelationshipType>RelationshipType.all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter with parameters of type RelationshipType
    + voidICalParameters.setRelationshipType(RelationshipType relationshipType) + +
    +          Sets the relationship type of a RelatedTo property.
    +  +

    + + + + + +
    +Uses of RelationshipType in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return RelationshipType
    + RelationshipTypeRelatedTo.getRelationshipType() + +
    +          Gets the relationship type.
    +  +

    + + + + + + + + + +
    Methods in biweekly.property with parameters of type RelationshipType
    + voidRelatedTo.setRelationshipType(RelationshipType relationshipType) + +
    +          Sets the relationship type.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Role.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Role.html new file mode 100644 index 000000000..fab5140ac --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/class-use/Role.html @@ -0,0 +1,318 @@ + + + + + + + +Uses of Class biweekly.parameter.Role (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.parameter.Role

    +
    + + + + + + + + + + + + + +
    +Packages that use Role
    biweekly.parameter  
    biweekly.property  
    +  +

    + + + + + +
    +Uses of Role in biweekly.parameter
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Fields in biweekly.parameter declared as Role
    +static RoleRole.CHAIR + +
    +           
    +static RoleRole.NON_PARTICIPANT + +
    +           
    +static RoleRole.OPT_PARTICIPANT + +
    +           
    +static RoleRole.REQ_PARTICIPANT + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.parameter that return Role
    +static RoleRole.find(String value) + +
    +          Searches for a parameter value that is defined as a static constant in + this class.
    +static RoleRole.get(String value) + +
    +          Searches for a parameter value and creates one if it cannot be found.
    + RoleICalParameters.getRole() + +
    +          Gets an attendee's role (for example, "chair" or "required participant").
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter that return types with arguments of type Role
    +static Collection<Role>Role.all() + +
    +          Gets all of the parameter values that are defined as static constants in + this class.
    +  +

    + + + + + + + + + +
    Methods in biweekly.parameter with parameters of type Role
    + voidICalParameters.setRole(Role role) + +
    +          Sets an attendee's role (for example, "chair" or "required participant").
    +  +

    + + + + + +
    +Uses of Role in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return Role
    + RoleAttendee.getRole() + +
    +          Gets the attendee's role (for example, "chair" or + "required participant").
    +  +

    + + + + + + + + + +
    Methods in biweekly.property with parameters of type Role
    + voidAttendee.setRole(Role role) + +
    +          Sets the attendee's role (for example, "chair" or + "required participant").
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/doc-files/shBrushJava.js b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/doc-files/shBrushJava.js new file mode 100644 index 000000000..d692fd638 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/doc-files/shBrushJava.js @@ -0,0 +1,57 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'abstract assert boolean break byte case catch char class const ' + + 'continue default do double else enum extends ' + + 'false final finally float for goto if implements import ' + + 'instanceof int interface long native new null ' + + 'package private protected public return ' + + 'short static strictfp super switch synchronized this throw throws true ' + + 'transient try void volatile while'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: /\/\*([^\*][\s\S]*)?\*\//gm, css: 'comments' }, // multiline comments + { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, css: 'preprocessor' }, // documentation comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers + { regex: /(?!\@interface\b)\@[\$\w]+\b/g, css: 'color1' }, // annotation @anno + { regex: /\@interface\b/g, css: 'color2' }, // @interface keyword + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // java keyword + ]; + + this.forHtmlScript({ + left : /(<|<)%[@!=]?/g, + right : /%(>|>)/g + }); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['java']; + + SyntaxHighlighter.brushes.Java = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/doc-files/shCore.js b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/doc-files/shCore.js new file mode 100644 index 000000000..b47b64547 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/doc-files/shCore.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a-1},3d:6(g){e+=g}};c1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;be.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;dd.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a\'+c+""});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.Pb.P)H 1;Y I(a.Lb.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'\'+c+""+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v<3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;">1v3v 3.0.76 (72 73 3x)1Z://3u.2w/1v70 17 6U 71.6T 6X-3x 6Y 6D.6t 61 60 J 1k, 5Z 5R 5V <2R/>5U 5T 5S!\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'\',d=e.16.2x,h=d.2X,g=0;g";H c},2o:6(a,b,c){H\'<2W>\'+c+""},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;md)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P\'+c+""},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i\'+j+"":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"":"")+\'<2d 1g="17">\'+b+""},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{})) diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-frame.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-frame.html new file mode 100644 index 000000000..50b630018 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-frame.html @@ -0,0 +1,53 @@ + + + + + + + +biweekly.parameter (biweekly 0.3.1 API) + + + + + + + + + + + +biweekly.parameter + + + + +
    +Classes  + +
    +CalendarUserType +
    +Encoding +
    +EnumParameterValue +
    +FreeBusyType +
    +ICalParameterCaseClasses +
    +ICalParameters +
    +ParticipationStatus +
    +Range +
    +Related +
    +RelationshipType +
    +Role
    + + + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-summary.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-summary.html new file mode 100644 index 000000000..af65b4741 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-summary.html @@ -0,0 +1,202 @@ + + + + + + + +biweekly.parameter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +

    +Package biweekly.parameter +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class Summary
    CalendarUserTypeDefines the type of user an entity is.
    EncodingDefines how a property value is encoded.
    EnumParameterValueRepresents a value from a parameter that has a list of pre-defined values + (for example, the VALUE or ACTION parameters).
    FreeBusyTypeDefines whether a calendar user is free or busy over a time period.
    ICalParameterCaseClasses<T extends EnumParameterValue>Manages the list of pre-defined values for a parameter (such as VALUE or + ENCODING).
    ICalParametersContains the list of parameters that belong to a property.
    ParticipationStatusDefines a calendar user's level of participation.
    RangeDefines the effective range of recurrence instances specified by the + RecurrenceId property.
    RelatedDefines the date that an alarm trigger is relative to.
    RelationshipTypeDefines the hierarchical relationship that a component has with another + component.
    RoleDefines the role that a calendar user holds.
    +  + +

    +

    +
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-tree.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-tree.html new file mode 100644 index 000000000..357692ce1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-tree.html @@ -0,0 +1,161 @@ + + + + + + + +biweekly.parameter Class Hierarchy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Hierarchy For Package biweekly.parameter +

    +
    +
    +
    Package Hierarchies:
    All Packages
    +
    +

    +Class Hierarchy +

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-use.html b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-use.html new file mode 100644 index 000000000..cac1a46ad --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/parameter/package-use.html @@ -0,0 +1,367 @@ + + + + + + + +Uses of Package biweekly.parameter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Package
    biweekly.parameter

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use biweekly.parameter
    biweekly.component  
    biweekly.io.json  
    biweekly.io.text  
    biweekly.parameter  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + + + + +
    +Classes in biweekly.parameter used by biweekly.component
    FreeBusyType + +
    +          Defines whether a calendar user is free or busy over a time period.
    +  +

    + + + + + + + + +
    +Classes in biweekly.parameter used by biweekly.io.json
    ICalParameters + +
    +          Contains the list of parameters that belong to a property.
    +  +

    + + + + + + + + +
    +Classes in biweekly.parameter used by biweekly.io.text
    ICalParameters + +
    +          Contains the list of parameters that belong to a property.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Classes in biweekly.parameter used by biweekly.parameter
    CalendarUserType + +
    +          Defines the type of user an entity is.
    Encoding + +
    +          Defines how a property value is encoded.
    EnumParameterValue + +
    +          Represents a value from a parameter that has a list of pre-defined values + (for example, the VALUE or ACTION parameters).
    FreeBusyType + +
    +          Defines whether a calendar user is free or busy over a time period.
    ICalParameters + +
    +          Contains the list of parameters that belong to a property.
    ParticipationStatus + +
    +          Defines a calendar user's level of participation.
    Range + +
    +          Defines the effective range of recurrence instances specified by the + RecurrenceId property.
    Related + +
    +          Defines the date that an alarm trigger is relative to.
    RelationshipType + +
    +          Defines the hierarchical relationship that a component has with another + component.
    Role + +
    +          Defines the role that a calendar user holds.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Classes in biweekly.parameter used by biweekly.property
    CalendarUserType + +
    +          Defines the type of user an entity is.
    FreeBusyType + +
    +          Defines whether a calendar user is free or busy over a time period.
    ICalParameters + +
    +          Contains the list of parameters that belong to a property.
    ParticipationStatus + +
    +          Defines a calendar user's level of participation.
    Range + +
    +          Defines the effective range of recurrence instances specified by the + RecurrenceId property.
    Related + +
    +          Defines the date that an alarm trigger is relative to.
    RelationshipType + +
    +          Defines the hierarchical relationship that a component has with another + component.
    Role + +
    +          Defines the role that a calendar user holds.
    +  +

    + + + + + + + + +
    +Classes in biweekly.parameter used by biweekly.property.marshaller
    ICalParameters + +
    +          Contains the list of parameters that belong to a property.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Action.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Action.html new file mode 100644 index 000000000..94e121a91 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Action.html @@ -0,0 +1,480 @@ + + + + + + + +Action (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Action

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.EnumProperty
    +                  extended by biweekly.property.Action
    +
    +
    +
    +
    public class Action
    extends EnumProperty
    + + +

    +

    + Defines the type of action to invoke when an alarm is triggered. +

    + +

    + Examples: + +

    + //creating a new property
    + Action action = Action.audio();
    + 
    + if (action.isAudio()) {
    +        //it's an "AUDIO" alarm
    + }
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.132-3
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Action(String value) + +
    +          Creates an action property.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static Actionaudio() + +
    +          Creates an "audio" action property.
    +static Actiondisplay() + +
    +          Creates an "display" action property.
    +static Actionemail() + +
    +          Creates an "email" action property.
    +protected  Collection<String>getStandardValues() + +
    +          Gets the list of acceptable values for this property.
    + booleanisAudio() + +
    +          Determines if this property is an "audio" action.
    + booleanisDisplay() + +
    +          Determines if this property is an "display" action.
    + booleanisEmail() + +
    +          Determines if this property is an "email" action.
    + + + + + + + +
    Methods inherited from class biweekly.property.EnumProperty
    is, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Action

    +
    +public Action(String value)
    +
    +
    Creates an action property. Use of this constructor is discouraged and + may put the property in an invalid state. Use one of the static factory + methods instead. +

    +

    +
    Parameters:
    value - the value (e.g. "AUDIO")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +audio

    +
    +public static Action audio()
    +
    +
    Creates an "audio" action property. +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isAudio

    +
    +public boolean isAudio()
    +
    +
    Determines if this property is an "audio" action. +

    +

    + +
    Returns:
    true if it's an "audio" action, false if not
    +
    +
    +
    + +

    +display

    +
    +public static Action display()
    +
    +
    Creates an "display" action property. +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isDisplay

    +
    +public boolean isDisplay()
    +
    +
    Determines if this property is an "display" action. +

    +

    + +
    Returns:
    true if it's an "display" action, false if not
    +
    +
    +
    + +

    +email

    +
    +public static Action email()
    +
    +
    Creates an "email" action property. +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isEmail

    +
    +public boolean isEmail()
    +
    +
    Determines if this property is an "email" action. +

    +

    + +
    Returns:
    true if it's an "email" action, false if not
    +
    +
    +
    + +

    +getStandardValues

    +
    +protected Collection<String> getStandardValues()
    +
    +
    Description copied from class: EnumProperty
    +
    Gets the list of acceptable values for this property. +

    +

    +
    Specified by:
    getStandardValues in class EnumProperty
    +
    +
    + +
    Returns:
    the list of acceptable values
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Attachment.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Attachment.html new file mode 100644 index 000000000..6abbd5ac4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Attachment.html @@ -0,0 +1,510 @@ + + + + + + + +Attachment (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Attachment

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.Attachment
    +
    +
    +
    +
    public class Attachment
    extends ICalProperty
    + + +

    +

    + Represents a binary resource that is associated with an event, to-do, journal + entry, or alarm. +

    + +

    + Examples: + +

    + //from a byte array
    + byte[] data = ...
    + Attachment attach = new Attachment("image/png", data);
    + 
    + //reading from a file 
    + Attachment attach = new Attachment("image/png", new File("image.png"));
    + 
    + //referencing a URL
    + Attachment attach = new Attachment("image/png", "http://example.com/image.png");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.80-1
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + + + + +
    +Constructor Summary
    Attachment(String formatType, + byte[] data) + +
    +          Creates a new attachment.
    Attachment(String formatType, + File file) + +
    +          Creates a new attachment.
    Attachment(String formatType, + String uri) + +
    +          Creates a new attachment.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + byte[]getData() + +
    +          Gets the attachment's binary data.
    + StringgetFormatType() + +
    +          Gets the content-type of the property's value.
    + StringgetUri() + +
    +          Gets the attachment's URI.
    + voidsetData(byte[] data) + +
    +          Sets the attachment's binary data.
    + voidsetFormatType(String formatType) + +
    +          Sets the content-type of the property's value.
    + voidsetUri(String uri) + +
    +          Sets the attachment's URI.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Attachment

    +
    +public Attachment(String formatType,
    +                  File file)
    +           throws IOException
    +
    +
    Creates a new attachment. +

    +

    +
    Parameters:
    formatType - the content-type of the data (e.g. "image/png")
    file - the file to attach +
    Throws: +
    IOException - if there's a problem reading from the file
    +
    +
    + +

    +Attachment

    +
    +public Attachment(String formatType,
    +                  byte[] data)
    +
    +
    Creates a new attachment. +

    +

    +
    Parameters:
    formatType - the content-type of the data (e.g. "image/png")
    data - the binary data
    +
    +
    + +

    +Attachment

    +
    +public Attachment(String formatType,
    +                  String uri)
    +
    +
    Creates a new attachment. +

    +

    +
    Parameters:
    formatType - the content-type of the data (e.g. "image/png")
    uri - a URL pointing to the resource (e.g. + "http://example.com/image.png")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getData

    +
    +public byte[] getData()
    +
    +
    Gets the attachment's binary data. +

    +

    + +
    Returns:
    the binary data or null if not set
    +
    +
    +
    + +

    +setData

    +
    +public void setData(byte[] data)
    +
    +
    Sets the attachment's binary data. If the attachment has a URI associated + with it, the URI will be set to null. +

    +

    +
    Parameters:
    data - the binary data
    +
    +
    +
    + +

    +getUri

    +
    +public String getUri()
    +
    +
    Gets the attachment's URI. +

    +

    + +
    Returns:
    the URI (e.g. "http://example.com/image.png") or null if not set
    +
    +
    +
    + +

    +setUri

    +
    +public void setUri(String uri)
    +
    +
    Sets the attachment's URI. If the attachment has binary data associated + with it, the binary data will be set to null. +

    +

    +
    Parameters:
    uri - the URI (e.g. "http://example.com/image.png")
    +
    +
    +
    + +

    +getFormatType

    +
    +public String getFormatType()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the content-type of the property's value. +

    +

    +
    +
    +
    + +
    Returns:
    the content type (e.g. "image/png") or null if not set
    +
    +
    +
    + +

    +setFormatType

    +
    +public void setFormatType(String formatType)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the content-type of the property's value. +

    +

    +
    +
    +
    +
    Parameters:
    formatType - the content type (e.g. "image/png") or null to remove
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ICalProperty
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Attendee.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Attendee.html new file mode 100644 index 000000000..e89c69679 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Attendee.html @@ -0,0 +1,868 @@ + + + + + + + +Attendee (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Attendee

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.Attendee
    +
    +
    +
    +
    public class Attendee
    extends TextProperty
    + + +

    +

    + Defines an attendee (such as a person attending an event). This property has + different meanings depending on the component that it belongs to: +

      +
    • VAlarm (with "EMAIL" action) - An email address that is to + receive the alarm.
    • +
    • All others - An attendee of the event.
    • +
    +

    + +

    + Examples: + +

    + Attendee attendee = Attendee.email("johndoe@example.com")
    + attendee.setCommonName("John Doe");
    + attendee.setRsvp(true);
    + attendee.setRole(Role.CHAIR);
    + attendee.setParticipationStatus(ParticipationStatus.ACCEPTED);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.107-9
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Attendee(String uri) + +
    +          Creates an attendee property.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddDelegatedFrom(String uri) + +
    +          Adds a person who has delegated his or her responsibility to the + attendee.
    + voidaddDelegatedTo(String uri) + +
    +          Adds a person to which the attendee has delegated his or her + responsibility.
    + voidaddMember(String uri) + +
    +          Adds a group that the attendee is a member of.
    +static Attendeeemail(String email) + +
    +          Creates an attendee property using an email address as its value.
    + CalendarUserTypegetCalendarUserType() + +
    +          Gets the type of user the attendee is (for example, an "individual" or a + "room").
    + StringgetCommonName() + +
    +          Gets the display name of the person.
    + List<String>getDelegatedFrom() + +
    +          Gets the people who have delegated their responsibility to the attendee.
    + List<String>getDelegatedTo() + +
    +          Gets the people to which the attendee has delegated his or her + responsibility.
    + StringgetDirectoryEntry() + +
    +          Gets a URI that contains additional information about the person.
    + StringgetLanguage() + +
    +          Gets the language that the common name parameter is written in.
    + List<String>getMembers() + +
    +          Gets the groups that the attendee is a member of.
    + ParticipationStatusgetParticipationStatus() + +
    +          Gets the attendee's level of participation.
    + RolegetRole() + +
    +          Gets the attendee's role (for example, "chair" or + "required participant").
    + BooleangetRsvp() + +
    +          Gets whether the organizer requests a response from the attendee.
    + StringgetSentBy() + +
    +          Gets a person that is acting on behalf of the person defined in the + property.
    + voidsetCalendarUserType(CalendarUserType cutype) + +
    +          Sets the type of user the attendee is (for example, an "individual" or a + "room").
    + voidsetCommonName(String commonName) + +
    +          Sets the display name of the person.
    + voidsetDirectoryEntry(String uri) + +
    +          Sets a URI that contains additional information about the person.
    + voidsetLanguage(String language) + +
    +          Sets the language that the common name parameter is written in.
    + voidsetParticipationStatus(ParticipationStatus status) + +
    +          Sets the attendee's level of participation.
    + voidsetRole(Role role) + +
    +          Sets the attendee's role (for example, "chair" or + "required participant").
    + voidsetRsvp(Boolean rsvp) + +
    +          Sets whether the organizer requests a response from the attendee.
    + voidsetSentBy(String uri) + +
    +          Sets a person that is acting on behalf of the person defined in the + property.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Attendee

    +
    +public Attendee(String uri)
    +
    +
    Creates an attendee property. +

    +

    +
    Parameters:
    uri - a URI representing the attendee (typically, an email address, + e.g. "mailto:johndoe@example.com")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +email

    +
    +public static Attendee email(String email)
    +
    +
    Creates an attendee property using an email address as its value. +

    +

    +
    Parameters:
    email - the email address (e.g. "johndoe@example.com") +
    Returns:
    the property
    +
    +
    +
    + +

    +getCalendarUserType

    +
    +public CalendarUserType getCalendarUserType()
    +
    +
    Gets the type of user the attendee is (for example, an "individual" or a + "room"). +

    +

    + +
    Returns:
    the calendar user type or null if not set
    Specification Reference:
    RFC 5545 p.16
    +
    +
    +
    + +

    +setCalendarUserType

    +
    +public void setCalendarUserType(CalendarUserType cutype)
    +
    +
    Sets the type of user the attendee is (for example, an "individual" or a + "room"). +

    +

    +
    Parameters:
    cutype - the calendar user type or null to remove
    Specification Reference:
    RFC 5545 p.16
    +
    +
    +
    + +

    +getMembers

    +
    +public List<String> getMembers()
    +
    +
    Gets the groups that the attendee is a member of. +

    +

    + +
    Returns:
    the group URIs (typically, these are email address URIs, e.g. + "mailto:mailinglist@example.com")
    Specification Reference:
    RFC 5545 p.21-2
    +
    +
    +
    + +

    +addMember

    +
    +public void addMember(String uri)
    +
    +
    Adds a group that the attendee is a member of. +

    +

    +
    Parameters:
    uri - the group URI (typically, an email address URI, e.g. + "mailto:mailinglist@example.com")
    Specification Reference:
    RFC 5545 p.21-2
    +
    +
    +
    + +

    +getRole

    +
    +public Role getRole()
    +
    +
    Gets the attendee's role (for example, "chair" or + "required participant"). +

    +

    + +
    Returns:
    the role or null if not set
    Specification Reference:
    RFC 5545 p.25-6
    +
    +
    +
    + +

    +setRole

    +
    +public void setRole(Role role)
    +
    +
    Sets the attendee's role (for example, "chair" or + "required participant"). +

    +

    +
    Parameters:
    role - the role or null to remove
    Specification Reference:
    RFC 5545 p.25-6
    +
    +
    +
    + +

    +getParticipationStatus

    +
    +public ParticipationStatus getParticipationStatus()
    +
    +
    Gets the attendee's level of participation. +

    +

    + +
    Returns:
    the participation status or null if not set
    Specification Reference:
    RFC 5545 p.22-3
    +
    +
    +
    + +

    +setParticipationStatus

    +
    +public void setParticipationStatus(ParticipationStatus status)
    +
    +
    Sets the attendee's level of participation. +

    +

    +
    Parameters:
    status - the participation status or null to remove
    Specification Reference:
    RFC 5545 p.22-3
    +
    +
    +
    + +

    +getRsvp

    +
    +public Boolean getRsvp()
    +
    +
    Gets whether the organizer requests a response from the attendee. +

    +

    + +
    Returns:
    true if an RSVP is requested, false if not, null if not set
    Specification Reference:
    RFC 5545 p.26-7
    +
    +
    +
    + +

    +setRsvp

    +
    +public void setRsvp(Boolean rsvp)
    +
    +
    Sets whether the organizer requests a response from the attendee. +

    +

    +
    Parameters:
    rsvp - true if an RSVP has been requested, false if not, null to + remove
    Specification Reference:
    RFC 5545 p.26-7
    +
    +
    +
    + +

    +getDelegatedFrom

    +
    +public List<String> getDelegatedFrom()
    +
    +
    Gets the people who have delegated their responsibility to the attendee. +

    +

    + +
    Returns:
    the delegators (typically email URIs, e.g. + "mailto:janedoe@example.com")
    Specification Reference:
    RFC 5545 p.17
    +
    +
    +
    + +

    +addDelegatedFrom

    +
    +public void addDelegatedFrom(String uri)
    +
    +
    Adds a person who has delegated his or her responsibility to the + attendee. +

    +

    +
    Parameters:
    uri - the delegator (typically an email URI, e.g. + "mailto:janedoe@example.com")
    Specification Reference:
    RFC 5545 p.17
    +
    +
    +
    + +

    +getDelegatedTo

    +
    +public List<String> getDelegatedTo()
    +
    +
    Gets the people to which the attendee has delegated his or her + responsibility. +

    +

    + +
    Returns:
    the delegatees (typically email URIs, e.g. + "mailto:janedoe@example.com")
    Specification Reference:
    RFC 5545 p.17-8
    +
    +
    +
    + +

    +addDelegatedTo

    +
    +public void addDelegatedTo(String uri)
    +
    +
    Adds a person to which the attendee has delegated his or her + responsibility. +

    +

    +
    Parameters:
    uri - the delegatee (typically an email URI, e.g. + "mailto:janedoe@example.com")
    Specification Reference:
    RFC 5545 p.17-8
    +
    +
    +
    + +

    +getSentBy

    +
    +public String getSentBy()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets a person that is acting on behalf of the person defined in the + property. +

    +

    +
    +
    +
    + +
    Returns:
    a URI representing the person (typically, an email URI, e.g. + "mailto:janedoe@example.com") or null if not set
    +
    +
    +
    + +

    +setSentBy

    +
    +public void setSentBy(String uri)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets a person that is acting on behalf of the person defined in the + property. +

    +

    +
    +
    +
    +
    Parameters:
    uri - a URI representing the person (typically, an email URI, e.g. + "mailto:janedoe@example.com") or null to remove
    +
    +
    +
    + +

    +getCommonName

    +
    +public String getCommonName()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the display name of the person. +

    +

    +
    +
    +
    + +
    Returns:
    the display name (e.g. "John Doe") or null if not set
    +
    +
    +
    + +

    +setCommonName

    +
    +public void setCommonName(String commonName)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the display name of the person. +

    +

    +
    +
    +
    +
    Parameters:
    commonName - the display name (e.g. "John Doe") or null to remove
    +
    +
    +
    + +

    +getDirectoryEntry

    +
    +public String getDirectoryEntry()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets a URI that contains additional information about the person. +

    +

    +
    +
    +
    + +
    Returns:
    the URI (e.g. an LDAP URI) or null if not set
    +
    +
    +
    + +

    +setDirectoryEntry

    +
    +public void setDirectoryEntry(String uri)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets a URI that contains additional information about the person. +

    +

    +
    +
    +
    +
    Parameters:
    uri - the URI (e.g. an LDAP URI) or null to remove
    +
    +
    +
    + +

    +getLanguage

    +
    +public String getLanguage()
    +
    +
    Gets the language that the common name parameter is written in. +

    +

    +
    +
    +
    + +
    Returns:
    the language (e.g. "en" for English) or null if not set
    +
    +
    +
    + +

    +setLanguage

    +
    +public void setLanguage(String language)
    +
    +
    Sets the language that the common name parameter is written in. +

    +

    +
    +
    +
    +
    Parameters:
    language - the language (e.g. "en" for English) or null to remove
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/CalendarScale.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/CalendarScale.html new file mode 100644 index 000000000..1c5d5e2f2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/CalendarScale.html @@ -0,0 +1,392 @@ + + + + + + + +CalendarScale (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class CalendarScale

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.EnumProperty
    +                  extended by biweekly.property.CalendarScale
    +
    +
    +
    +
    public class CalendarScale
    extends EnumProperty
    + + +

    +

    + Specifies the calendar system that this iCalendar object uses. If none is + specified, then the calendar is assumed to be in "gregorian" format. +

    +

    + Examples: + +

    + //creating a new property
    + CalendarScale calscale = CalendarScale.gregorian();
    + 
    + if (calscale.isGregorian()) {
    +        //its value is "GREGORIAN"
    + }
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.76-7
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    CalendarScale(String value) + +
    +          Creates a new calendar scale property.
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  Collection<String>getStandardValues() + +
    +          Gets the list of acceptable values for this property.
    +static CalendarScalegregorian() + +
    +          Creates a new property whose value is set to "gregorian".
    + booleanisGregorian() + +
    +          Determines whether the property is set to "gregorian".
    + + + + + + + +
    Methods inherited from class biweekly.property.EnumProperty
    is, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +CalendarScale

    +
    +public CalendarScale(String value)
    +
    +
    Creates a new calendar scale property. Use of this constructor is + discouraged and may put the property in an invalid state. Use one of the + static factory methods instead. +

    +

    +
    Parameters:
    value - the value of the property (e.g. "gregorian")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +gregorian

    +
    +public static CalendarScale gregorian()
    +
    +
    Creates a new property whose value is set to "gregorian". +

    +

    + +
    Returns:
    the new property
    +
    +
    +
    + +

    +isGregorian

    +
    +public boolean isGregorian()
    +
    +
    Determines whether the property is set to "gregorian". +

    +

    + +
    Returns:
    true if it's set to "gregorian", false if not
    +
    +
    +
    + +

    +getStandardValues

    +
    +protected Collection<String> getStandardValues()
    +
    +
    Description copied from class: EnumProperty
    +
    Gets the list of acceptable values for this property. +

    +

    +
    Specified by:
    getStandardValues in class EnumProperty
    +
    +
    + +
    Returns:
    the list of acceptable values
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Categories.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Categories.html new file mode 100644 index 000000000..02227aaec --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Categories.html @@ -0,0 +1,380 @@ + + + + + + + +Categories (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Categories

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ListProperty<String>
    +          extended by biweekly.property.Categories
    +
    +
    +
    +
    public class Categories
    extends ListProperty<String>
    + + +

    +

    + Defines a list of "tags" or "keywords" that describe the component. +

    +

    + Examples: + +

    + //creating a new property (multi-valued)
    + Categories categories = new Categories("conference", "meeting");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.81-2
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + + + + +
    +Constructor Summary
    Categories() + +
    +          Creates a new categories property.
    Categories(List<String> categories) + +
    +          Creates a new categories property.
    Categories(String... categories) + +
    +          Creates a new categories property.
    +  + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetLanguage() + +
    +          Gets the language that the property value is written in.
    + voidsetLanguage(String language) + +
    +          Sets the language that the property value is written in.
    + + + + + + + +
    Methods inherited from class biweekly.property.ListProperty
    addValue, getValues, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Categories

    +
    +public Categories()
    +
    +
    Creates a new categories property. +

    +

    +
    + +

    +Categories

    +
    +public Categories(String... categories)
    +
    +
    Creates a new categories property. +

    +

    +
    Parameters:
    categories - the categories to initialize the property with
    +
    +
    + +

    +Categories

    +
    +public Categories(List<String> categories)
    +
    +
    Creates a new categories property. +

    +

    +
    Parameters:
    categories - the categories to initialize the property with
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getLanguage

    +
    +public String getLanguage()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the language that the property value is written in. +

    +

    +
    +
    +
    + +
    Returns:
    the language (e.g. "en" for English) or null if not set
    +
    +
    +
    + +

    +setLanguage

    +
    +public void setLanguage(String language)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the language that the property value is written in. +

    +

    +
    +
    +
    +
    Parameters:
    language - the language (e.g. "en" for English) or null to remove
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Classification.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Classification.html new file mode 100644 index 000000000..b359e7b22 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Classification.html @@ -0,0 +1,479 @@ + + + + + + + +Classification (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Classification

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.EnumProperty
    +                  extended by biweekly.property.Classification
    +
    +
    +
    +
    public class Classification
    extends EnumProperty
    + + +

    +

    + Defines the level of sensitivity of the iCalendar data. If not specified, the + data should be considered "public". +

    +

    + Examples: + +

    + //creating a new property
    + Classification classification = Classification.public_();
    + 
    + if (classification.isPublic()) {
    +        //its value is "PUBLIC"
    + }
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.82-3
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Classification(String classification) + +
    +          Creates a new classification property.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static Classificationconfidential() + +
    +          Creates a "confidential" classification property.
    +protected  Collection<String>getStandardValues() + +
    +          Gets the list of acceptable values for this property.
    + booleanisConfidential() + +
    +          Determines if the classification level is "confidential".
    + booleanisPrivate() + +
    +          Determines if the classification level is "private".
    + booleanisPublic() + +
    +          Determines if the classification level is "public".
    +static Classificationprivate_() + +
    +          Creates a "private" classification property.
    +static Classificationpublic_() + +
    +          Creates a "public" classification property.
    + + + + + + + +
    Methods inherited from class biweekly.property.EnumProperty
    is, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Classification

    +
    +public Classification(String classification)
    +
    +
    Creates a new classification property. Use the static factory methods to + create a property with a standard classification level. +

    +

    +
    Parameters:
    classification - the classification level (e.g. "PUBLIC")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +public_

    +
    +public static Classification public_()
    +
    +
    Creates a "public" classification property. +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isPublic

    +
    +public boolean isPublic()
    +
    +
    Determines if the classification level is "public". +

    +

    + +
    Returns:
    true if it's "public", false if not
    +
    +
    +
    + +

    +private_

    +
    +public static Classification private_()
    +
    +
    Creates a "private" classification property. +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isPrivate

    +
    +public boolean isPrivate()
    +
    +
    Determines if the classification level is "private". +

    +

    + +
    Returns:
    true if it's "private", false if not
    +
    +
    +
    + +

    +confidential

    +
    +public static Classification confidential()
    +
    +
    Creates a "confidential" classification property. +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isConfidential

    +
    +public boolean isConfidential()
    +
    +
    Determines if the classification level is "confidential". +

    +

    + +
    Returns:
    true if it's "confidential", false if not
    +
    +
    +
    + +

    +getStandardValues

    +
    +protected Collection<String> getStandardValues()
    +
    +
    Description copied from class: EnumProperty
    +
    Gets the list of acceptable values for this property. +

    +

    +
    Specified by:
    getStandardValues in class EnumProperty
    +
    +
    + +
    Returns:
    the list of acceptable values
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Comment.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Comment.html new file mode 100644 index 000000000..e02decbf7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Comment.html @@ -0,0 +1,410 @@ + + + + + + + +Comment (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Comment

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.Comment
    +
    +
    +
    +
    public class Comment
    extends TextProperty
    + + +

    +

    + Defines a free-text comment to be read by the user. +

    +

    + Examples: + +

    + Comment comment = new Comment("Free text");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.83-4
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Comment(String comment) + +
    +          Creates a comment property.
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetAltRepresentation() + +
    +          Gets a URI pointing to additional information about the entity + represented by the property.
    + StringgetLanguage() + +
    +          Gets the language that the property value is written in.
    + voidsetAltRepresentation(String uri) + +
    +          Sets a URI pointing to additional information about the entity + represented by the property.
    + voidsetLanguage(String language) + +
    +          Sets the language that the property value is written in.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Comment

    +
    +public Comment(String comment)
    +
    +
    Creates a comment property. +

    +

    +
    Parameters:
    comment - the comment
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getAltRepresentation

    +
    +public String getAltRepresentation()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets a URI pointing to additional information about the entity + represented by the property. +

    +

    +
    +
    +
    + +
    Returns:
    the URI or null if not set
    +
    +
    +
    + +

    +setAltRepresentation

    +
    +public void setAltRepresentation(String uri)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets a URI pointing to additional information about the entity + represented by the property. +

    +

    +
    +
    +
    +
    Parameters:
    uri - the URI or null to remove
    +
    +
    +
    + +

    +getLanguage

    +
    +public String getLanguage()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the language that the property value is written in. +

    +

    +
    +
    +
    + +
    Returns:
    the language (e.g. "en" for English) or null if not set
    +
    +
    +
    + +

    +setLanguage

    +
    +public void setLanguage(String language)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the language that the property value is written in. +

    +

    +
    +
    +
    +
    Parameters:
    language - the language (e.g. "en" for English) or null to remove
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Completed.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Completed.html new file mode 100644 index 000000000..576fd629c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Completed.html @@ -0,0 +1,296 @@ + + + + + + + +Completed (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Completed

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Date>
    +          extended by biweekly.property.DateTimeProperty
    +              extended by biweekly.property.Completed
    +
    +
    +
    +
    public class Completed
    extends DateTimeProperty
    + + +

    +

    + Defines the date and time that a to-do task was completed. +

    +

    + Examples: + +

    + Date datetime = ...
    + Completed completed = new Completed(datetime);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.94-5
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Completed(Date completed) + +
    +          Creates a completed property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Completed

    +
    +public Completed(Date completed)
    +
    +
    Creates a completed property. +

    +

    +
    Parameters:
    completed - the completion date
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Contact.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Contact.html new file mode 100644 index 000000000..9bca95a89 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Contact.html @@ -0,0 +1,411 @@ + + + + + + + +Contact (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Contact

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.Contact
    +
    +
    +
    +
    public class Contact
    extends TextProperty
    + + +

    +

    + Defines contact information for a person or other entity (for example, the + name of a business and its phone number). +

    +

    + Examples: + +

    + Contact contact = new Contact("Acme Co: (212) 555-1234");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.109-11
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Contact(String contact) + +
    +          Creates a contact property.
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetAltRepresentation() + +
    +          Gets a URI pointing to additional information about the entity + represented by the property.
    + StringgetLanguage() + +
    +          Gets the language that the property value is written in.
    + voidsetAltRepresentation(String uri) + +
    +          Sets a URI pointing to additional information about the entity + represented by the property.
    + voidsetLanguage(String language) + +
    +          Sets the language that the property value is written in.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Contact

    +
    +public Contact(String contact)
    +
    +
    Creates a contact property. +

    +

    +
    Parameters:
    contact - the contact information (e.g. "Acme Co: (212) 555-1234")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getAltRepresentation

    +
    +public String getAltRepresentation()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets a URI pointing to additional information about the entity + represented by the property. +

    +

    +
    +
    +
    + +
    Returns:
    the URI (such as a URL to a vCard) or null if not set
    +
    +
    +
    + +

    +setAltRepresentation

    +
    +public void setAltRepresentation(String uri)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets a URI pointing to additional information about the entity + represented by the property. +

    +

    +
    +
    +
    +
    Parameters:
    uri - the URI (such as a URL to a vCard) or null to remove
    +
    +
    +
    + +

    +getLanguage

    +
    +public String getLanguage()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the language that the property value is written in. +

    +

    +
    +
    +
    + +
    Returns:
    the language (e.g. "en" for English) or null if not set
    +
    +
    +
    + +

    +setLanguage

    +
    +public void setLanguage(String language)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the language that the property value is written in. +

    +

    +
    +
    +
    +
    Parameters:
    language - the language (e.g. "en" for English) or null to remove
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Created.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Created.html new file mode 100644 index 000000000..9d7e44b1f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Created.html @@ -0,0 +1,296 @@ + + + + + + + +Created (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Created

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Date>
    +          extended by biweekly.property.DateTimeProperty
    +              extended by biweekly.property.Created
    +
    +
    +
    +
    public class Created
    extends DateTimeProperty
    + + +

    +

    + Defines the date-time that the calendar information was initially created. +

    +

    + Examples: + +

    + Date datetime = ...
    + Created created = new Created(datetime);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.136
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Created(Date date) + +
    +          Creates a created property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Created

    +
    +public Created(Date date)
    +
    +
    Creates a created property. +

    +

    +
    Parameters:
    date - the creation date
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/DateDue.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/DateDue.html new file mode 100644 index 000000000..3b4d0474a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/DateDue.html @@ -0,0 +1,326 @@ + + + + + + + +DateDue (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class DateDue

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.DateOrDateTimeProperty
    +          extended by biweekly.property.DateDue
    +
    +
    +
    +
    public class DateDue
    extends DateOrDateTimeProperty
    + + +

    +

    + Defines the date that a to-do task is due by. +

    +

    + Examples: + +

    + //date and time
    + Date datetime = ...
    + DateDue due = new DateDue(datetime);
    + 
    + //date
    + Date date = ...
    + DateDue due = new DateDue(date, false);
    + 
    + //with timezone 
    + Date datetime = ... 
    + DateDue due = new DateDue(datetime); 
    + due.setTimezoneId("America/New_York");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.96-7
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.DateOrDateTimeProperty
    hasTime, localTime, rawComponents, value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    DateDue(Date dueDate) + +
    +          Creates a due date property.
    DateDue(Date dueDate, + boolean hasTime) + +
    +          Creates a due date property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.DateOrDateTimeProperty
    getRawComponents, getTimezoneId, getValue, hasTime, isLocalTime, setLocalTime, setRawComponents, setTimezone, setTimezoneId, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DateDue

    +
    +public DateDue(Date dueDate)
    +
    +
    Creates a due date property. +

    +

    +
    Parameters:
    dueDate - the due date
    +
    +
    + +

    +DateDue

    +
    +public DateDue(Date dueDate,
    +               boolean hasTime)
    +
    +
    Creates a due date property. +

    +

    +
    Parameters:
    dueDate - the due date
    hasTime - true to include the time component of the date, false not + to
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/DateEnd.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/DateEnd.html new file mode 100644 index 000000000..e0292081e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/DateEnd.html @@ -0,0 +1,326 @@ + + + + + + + +DateEnd (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class DateEnd

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.DateOrDateTimeProperty
    +          extended by biweekly.property.DateEnd
    +
    +
    +
    +
    public class DateEnd
    extends DateOrDateTimeProperty
    + + +

    +

    + Defines the date that an event or free/busy component ends. +

    +

    + Examples: + +

    + //date and time
    + Date datetime = ...
    + DateEnd dtend = new DateEnd(datetime);
    + 
    + //date
    + Date date = ...
    + DateEnd dtend = new DateEnd(date, false);
    + 
    + //with timezone 
    + Date datetime = ... 
    + DateEnd dtend = new DateEnd(datetime); 
    + dtend.setTimezoneId("America/New_York");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.95-6
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.DateOrDateTimeProperty
    hasTime, localTime, rawComponents, value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    DateEnd(Date endDate) + +
    +          Creates a date end property.
    DateEnd(Date endDate, + boolean hasTime) + +
    +          Creates a date end property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.DateOrDateTimeProperty
    getRawComponents, getTimezoneId, getValue, hasTime, isLocalTime, setLocalTime, setRawComponents, setTimezone, setTimezoneId, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DateEnd

    +
    +public DateEnd(Date endDate)
    +
    +
    Creates a date end property. +

    +

    +
    Parameters:
    endDate - the end date
    +
    +
    + +

    +DateEnd

    +
    +public DateEnd(Date endDate,
    +               boolean hasTime)
    +
    +
    Creates a date end property. +

    +

    +
    Parameters:
    endDate - the end date
    hasTime - true to include the time component of the date, false not + to
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/DateOrDateTimeProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/DateOrDateTimeProperty.html new file mode 100644 index 000000000..33599ad61 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/DateOrDateTimeProperty.html @@ -0,0 +1,660 @@ + + + + + + + +DateOrDateTimeProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class DateOrDateTimeProperty

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.DateOrDateTimeProperty
    +
    +
    +
    Direct Known Subclasses:
    DateDue, DateEnd, DateStart, RecurrenceId
    +
    +
    +
    +
    public class DateOrDateTimeProperty
    extends ICalProperty
    + + +

    +Represents a property whose value is a date or a date-time. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + +
    +Field Summary
    +protected  booleanhasTime + +
    +           
    +protected  booleanlocalTime + +
    +           
    +protected  DateTimeComponentsrawComponents + +
    +           
    +protected  Datevalue + +
    +           
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    DateOrDateTimeProperty(Date value, + boolean hasTime) + +
    +          Creates a new property.
    DateOrDateTimeProperty(DateTimeComponents rawComponents) + +
    +          Creates a new property.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + DateTimeComponentsgetRawComponents() + +
    +          Gets the raw components of the date-time value.
    + StringgetTimezoneId() + +
    +          Gets the timezone identifier.
    + DategetValue() + +
    +          Gets the date-time value.
    + booleanhasTime() + +
    +          Determines whether the date-time value has a time component.
    + booleanisLocalTime() + +
    +          Gets whether the date should be outputted in local time (without a + timezone).
    + voidsetLocalTime(boolean localTime) + +
    +          Sets whether the date should be outputted in local time (without a + timezone).
    + voidsetRawComponents(DateTimeComponents rawComponents) + +
    +          Sets the raw components of the date-time value.
    + voidsetTimezone(VTimezone timezone) + +
    +          Sets the property's timezone to a timezone that is defined within the + iCalendar object.
    + voidsetTimezoneId(String timezoneId) + +
    +          Sets the timezone identifier.
    + voidsetValue(Date value, + boolean hasTime) + +
    +          Sets the date-time value.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +value

    +
    +protected Date value
    +
    +
    +
    +
    +
    + +

    +rawComponents

    +
    +protected DateTimeComponents rawComponents
    +
    +
    +
    +
    +
    + +

    +hasTime

    +
    +protected boolean hasTime
    +
    +
    +
    +
    +
    + +

    +localTime

    +
    +protected boolean localTime
    +
    +
    +
    +
    + + + + + + + + +
    +Constructor Detail
    + +

    +DateOrDateTimeProperty

    +
    +public DateOrDateTimeProperty(DateTimeComponents rawComponents)
    +
    +
    Creates a new property. +

    +

    +
    Parameters:
    rawComponents - the raw components of the date-time value
    +
    +
    + +

    +DateOrDateTimeProperty

    +
    +public DateOrDateTimeProperty(Date value,
    +                              boolean hasTime)
    +
    +
    Creates a new property. +

    +

    +
    Parameters:
    value - the date-time value
    hasTime - true if the value has a time component, false if it is + strictly a date
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getValue

    +
    +public Date getValue()
    +
    +
    Gets the date-time value. +

    +

    + +
    Returns:
    the date-time value
    +
    +
    +
    + +

    +setValue

    +
    +public void setValue(Date value,
    +                     boolean hasTime)
    +
    +
    Sets the date-time value. +

    +

    +
    Parameters:
    value - the date-time value
    hasTime - true if the value has a time component, false if it is + strictly a date
    +
    +
    +
    + +

    +getRawComponents

    +
    +public DateTimeComponents getRawComponents()
    +
    +
    Gets the raw components of the date-time value. +

    +

    + +
    Returns:
    the raw components
    +
    +
    +
    + +

    +setRawComponents

    +
    +public void setRawComponents(DateTimeComponents rawComponents)
    +
    +
    Sets the raw components of the date-time value. +

    +

    +
    Parameters:
    rawComponents - the raw components
    +
    +
    +
    + +

    +hasTime

    +
    +public boolean hasTime()
    +
    +
    Determines whether the date-time value has a time component. +

    +

    + +
    Returns:
    true if the value has a time component, false if it is strictly a + date
    +
    +
    +
    + +

    +isLocalTime

    +
    +public boolean isLocalTime()
    +
    +
    Gets whether the date should be outputted in local time (without a + timezone). +

    +

    + +
    Returns:
    true to output the date without a timezone, false to include a + timezone
    +
    +
    +
    + +

    +setLocalTime

    +
    +public void setLocalTime(boolean localTime)
    +
    +
    Sets whether the date should be outputted in local time (without a + timezone). Use setTimezoneId(String) to specify a timezone. + Dates are written in UTC time by default. +

    +

    +
    Parameters:
    localTime - true to output the date without a timezone, false to + include a timezone (defaults to false)
    +
    +
    +
    + +

    +getTimezoneId

    +
    +public String getTimezoneId()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the timezone identifier. This either (a) references the + TimezoneId property of a VTimezone component, or (b) + specifies a globally-defined timezone (e.g. "America/New_York"). For a + list of globally-defined timezones, see the TZ database. +

    +

    +
    +
    +
    + +
    Returns:
    the timezone identifier or null if not set
    +
    +
    +
    + +

    +setTimezoneId

    +
    +public void setTimezoneId(String timezoneId)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the timezone identifier. This either (a) references the + TimezoneId property of a VTimezone component, or (b) + specifies a globally-defined timezone (e.g. "America/New_York"). For a + list of globally-defined timezones, see the TZ database. +

    +

    +
    +
    +
    +
    Parameters:
    timezoneId - the timezone identifier (e.g. "America/New_York") or + null to remove
    +
    +
    +
    + +

    +setTimezone

    +
    +public void setTimezone(VTimezone timezone)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the property's timezone to a timezone that is defined within the + iCalendar object. Use ICalProperty.setTimezoneId(String) to use a + globally-defined timezone (e.g. "America/New_York"). +

    +

    +
    +
    +
    +
    Parameters:
    timezone - the timezone component to reference or null to remove
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ICalProperty
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/DateStart.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/DateStart.html new file mode 100644 index 000000000..04d707ef7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/DateStart.html @@ -0,0 +1,354 @@ + + + + + + + +DateStart (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class DateStart

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.DateOrDateTimeProperty
    +          extended by biweekly.property.DateStart
    +
    +
    +
    +
    public class DateStart
    extends DateOrDateTimeProperty
    + + +

    +

    + Defines the date that an event, free/busy component, or timezone component + starts. +

    +

    + Examples: + +

    + //date and time
    + Date datetime = ...
    + DateStart dtstart = new DateStart(datetime);
    + 
    + //date
    + Date date = ...
    + DateStart dtstart = new DateStart(date, false);
    + 
    + //local date and time (don't print a timezone)
    + Date datetime = ...
    + DateStart dtstart = new DateStart(datetime);
    + dtstart.setLocalTime(true);
    + 
    + //with timezone 
    + Date datetime = ... 
    + DateStart dtstart = new DateStart(datetime); 
    + dtstart.setTimezoneId("America/New_York");
    + 
    + //raw components 
    + DateTimeComponents components = new DateTimeComponents(1999, 4, 4, 2, 0, 0, false);
    + DateStart dtstart = new DateStart(components);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.97-8
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.DateOrDateTimeProperty
    hasTime, localTime, rawComponents, value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + + + + +
    +Constructor Summary
    DateStart(Date startDate) + +
    +          Creates a start date property.
    DateStart(Date startDate, + boolean hasTime) + +
    +          Creates a start date property.
    DateStart(DateTimeComponents components) + +
    +          Creates a start date property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.DateOrDateTimeProperty
    getRawComponents, getTimezoneId, getValue, hasTime, isLocalTime, setLocalTime, setRawComponents, setTimezone, setTimezoneId, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DateStart

    +
    +public DateStart(Date startDate)
    +
    +
    Creates a start date property. +

    +

    +
    Parameters:
    startDate - the start date
    +
    +
    + +

    +DateStart

    +
    +public DateStart(Date startDate,
    +                 boolean hasTime)
    +
    +
    Creates a start date property. +

    +

    +
    Parameters:
    startDate - the start date
    hasTime - true to include the time component of the date, false not + to
    +
    +
    + +

    +DateStart

    +
    +public DateStart(DateTimeComponents components)
    +
    +
    Creates a start date property. +

    +

    +
    Parameters:
    components - the raw components of the date-time value
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/DateTimeProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/DateTimeProperty.html new file mode 100644 index 000000000..75f7ba691 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/DateTimeProperty.html @@ -0,0 +1,287 @@ + + + + + + + +DateTimeProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class DateTimeProperty

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Date>
    +          extended by biweekly.property.DateTimeProperty
    +
    +
    +
    Direct Known Subclasses:
    Completed, Created, DateTimeStamp, LastModified
    +
    +
    +
    +
    public class DateTimeProperty
    extends ValuedProperty<Date>
    + + +

    +Represents a property whose value is a date-time. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    DateTimeProperty(Date value) + +
    +          Creates a new property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DateTimeProperty

    +
    +public DateTimeProperty(Date value)
    +
    +
    Creates a new property. +

    +

    +
    Parameters:
    value - the date
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/DateTimeStamp.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/DateTimeStamp.html new file mode 100644 index 000000000..e260493b5 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/DateTimeStamp.html @@ -0,0 +1,305 @@ + + + + + + + +DateTimeStamp (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class DateTimeStamp

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Date>
    +          extended by biweekly.property.DateTimeProperty
    +              extended by biweekly.property.DateTimeStamp
    +
    +
    +
    +
    public class DateTimeStamp
    extends DateTimeProperty
    + + +

    +

    + The meaning of this property varies depending on the state of the iCalendar + object: +

      +
    • If a Method property exists: Defines the creation date of + the iCalendar object (not the creation date of the actual calendar data). Use + the Created property to define the date that the calendar data was + last created.
    • +
    • Otherwise - Defines the date that the calendar data was last + modified (the LastModified property also holds this information).
    • +
    +

    +

    + Examples: + +

    + Date datetime = ... 
    + DateTimeStamp dtstamp = new DateTimeStamp(datetime);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.137-8
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    DateTimeStamp(Date date) + +
    +          Creates a date time stamp property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DateTimeStamp

    +
    +public DateTimeStamp(Date date)
    +
    +
    Creates a date time stamp property. +

    +

    +
    Parameters:
    date - the date
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Description.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Description.html new file mode 100644 index 000000000..0cc71200d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Description.html @@ -0,0 +1,412 @@ + + + + + + + +Description (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Description

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.Description
    +
    +
    +
    +
    public class Description
    extends TextProperty
    + + +

    +

    + A detailed description of the component that this property belongs to. The + description should be a more detailed version of the text provided by the + Summary property. +

    +

    + Examples: + +

    + Description description = new Description("description text");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.84-5
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Description(String description) + +
    +          Creates a description property.
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetAltRepresentation() + +
    +          Gets a URI pointing to additional information about the entity + represented by the property.
    + StringgetLanguage() + +
    +          Gets the language that the property value is written in.
    + voidsetAltRepresentation(String uri) + +
    +          Sets a URI pointing to additional information about the entity + represented by the property.
    + voidsetLanguage(String language) + +
    +          Sets the language that the property value is written in.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Description

    +
    +public Description(String description)
    +
    +
    Creates a description property. +

    +

    +
    Parameters:
    description - the description
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getAltRepresentation

    +
    +public String getAltRepresentation()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets a URI pointing to additional information about the entity + represented by the property. +

    +

    +
    +
    +
    + +
    Returns:
    the URI or null if not set
    +
    +
    +
    + +

    +setAltRepresentation

    +
    +public void setAltRepresentation(String uri)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets a URI pointing to additional information about the entity + represented by the property. +

    +

    +
    +
    +
    +
    Parameters:
    uri - the URI or null to remove
    +
    +
    +
    + +

    +getLanguage

    +
    +public String getLanguage()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the language that the property value is written in. +

    +

    +
    +
    +
    + +
    Returns:
    the language (e.g. "en" for English) or null if not set
    +
    +
    +
    + +

    +setLanguage

    +
    +public void setLanguage(String language)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the language that the property value is written in. +

    +

    +
    +
    +
    +
    Parameters:
    language - the language (e.g. "en" for English) or null to remove
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/DurationProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/DurationProperty.html new file mode 100644 index 000000000..3a08f8471 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/DurationProperty.html @@ -0,0 +1,304 @@ + + + + + + + +DurationProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class DurationProperty

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Duration>
    +          extended by biweekly.property.DurationProperty
    +
    +
    +
    +
    public class DurationProperty
    extends ValuedProperty<Duration>
    + + +

    +

    + Defines a duration of time (for example, "2 hours and 30 minutes"). It has + different meanings depending on the component it belongs to: +

      +
    • VEvent - The duration of the event (used in place of a + DateEnd property).
    • +
    • VTodo - The duration of the to-do task (used in place of a + DateEnd property).
    • +
    • VAlarm - The pause between alarm repetitions.
    • +
    +

    + +

    + Examples: + +

    + Duration duration = Duration.builder().hours(2).minutes(30).build();
    + DurationProperty prop = new DurationProperty(duration);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.99
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    DurationProperty(Duration duration) + +
    +          Creates a duration property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DurationProperty

    +
    +public DurationProperty(Duration duration)
    +
    +
    Creates a duration property. +

    +

    +
    Parameters:
    duration - the duration value (e.g. "2 hours nad 30 minutes")
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/EnumProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/EnumProperty.html new file mode 100644 index 000000000..c6132ea3b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/EnumProperty.html @@ -0,0 +1,373 @@ + + + + + + + +EnumProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class EnumProperty

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.EnumProperty
    +
    +
    +
    Direct Known Subclasses:
    Action, CalendarScale, Classification, Status, Transparency
    +
    +
    +
    +
    public abstract class EnumProperty
    extends TextProperty
    + + +

    +Parent class for properties that have a defined set of acceptable values (for + example, Action). +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    EnumProperty(String value) + +
    +          Creates an enum property.
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected abstract  Collection<String>getStandardValues() + +
    +          Gets the list of acceptable values for this property.
    +protected  booleanis(String value) + +
    +          Compares the property's value with a given string (case-insensitive).
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +EnumProperty

    +
    +public EnumProperty(String value)
    +
    +
    Creates an enum property. +

    +

    +
    Parameters:
    value - the property value
    +
    + + + + + + + + +
    +Method Detail
    + +

    +is

    +
    +protected boolean is(String value)
    +
    +
    Compares the property's value with a given string (case-insensitive). +

    +

    +
    Parameters:
    value - the string +
    Returns:
    true if it's equal, false if not
    +
    +
    +
    + +

    +getStandardValues

    +
    +protected abstract Collection<String> getStandardValues()
    +
    +
    Gets the list of acceptable values for this property. +

    +

    + +
    Returns:
    the list of acceptable values
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ValuedProperty<String>
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/ExceptionDates.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/ExceptionDates.html new file mode 100644 index 000000000..519d738a9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/ExceptionDates.html @@ -0,0 +1,471 @@ + + + + + + + +ExceptionDates (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class ExceptionDates

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ListProperty<Date>
    +          extended by biweekly.property.ExceptionDates
    +
    +
    +
    +
    public class ExceptionDates
    extends ListProperty<Date>
    + + +

    +

    + Defines a list of exceptions to the recurrence rule defined in a component. +

    +

    + Examples: + +

    + //date and times
    + ExceptionDates exdate = new ExceptionDates(true);
    + Date datetime1 = ...;
    + exdate.addValue(datetime1);
    + Date datetime2 = ...;
    + exdate.addValue(datetime2);
    + 
    + //dates
    + ExceptionDates exdate = new ExceptionDates(false);
    + Date date1 = ...;
    + exdate.addValue(date1);
    + Date date2 = ...;
    + exdate.addValue(date2);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.118-20
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    ExceptionDates(boolean hasTime) + +
    +          Creates an exception dates property.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetTimezoneId() + +
    +          Gets the timezone identifier.
    + booleanhasTime() + +
    +          Gets whether the dates have time components.
    + voidsetHasTime(boolean hasTime) + +
    +          Sets whether the dates have time components.
    + voidsetTimezone(VTimezone timezone) + +
    +          Sets the property's timezone to a timezone that is defined within the + iCalendar object.
    + voidsetTimezoneId(String timezoneId) + +
    +          Sets the timezone identifier.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ListProperty
    addValue, getValues
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ExceptionDates

    +
    +public ExceptionDates(boolean hasTime)
    +
    +
    Creates an exception dates property. +

    +

    +
    Parameters:
    hasTime - true if the dates have a time component, false if they are + strictly dates
    +
    + + + + + + + + +
    +Method Detail
    + +

    +hasTime

    +
    +public boolean hasTime()
    +
    +
    Gets whether the dates have time components. +

    +

    + +
    Returns:
    true if the dates have time components, false if they are + strictly dates
    +
    +
    +
    + +

    +setHasTime

    +
    +public void setHasTime(boolean hasTime)
    +
    +
    Sets whether the dates have time components. +

    +

    +
    Parameters:
    hasTime - true if the dates have time components, false if they are + strictly dates
    +
    +
    +
    + +

    +getTimezoneId

    +
    +public String getTimezoneId()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the timezone identifier. This either (a) references the + TimezoneId property of a VTimezone component, or (b) + specifies a globally-defined timezone (e.g. "America/New_York"). For a + list of globally-defined timezones, see the TZ database. +

    +

    +
    +
    +
    + +
    Returns:
    the timezone identifier or null if not set
    +
    +
    +
    + +

    +setTimezoneId

    +
    +public void setTimezoneId(String timezoneId)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the timezone identifier. This either (a) references the + TimezoneId property of a VTimezone component, or (b) + specifies a globally-defined timezone (e.g. "America/New_York"). For a + list of globally-defined timezones, see the TZ database. +

    +

    +
    +
    +
    +
    Parameters:
    timezoneId - the timezone identifier (e.g. "America/New_York") or + null to remove
    +
    +
    +
    + +

    +setTimezone

    +
    +public void setTimezone(VTimezone timezone)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the property's timezone to a timezone that is defined within the + iCalendar object. Use ICalProperty.setTimezoneId(String) to use a + globally-defined timezone (e.g. "America/New_York"). +

    +

    +
    +
    +
    +
    Parameters:
    timezone - the timezone component to reference or null to remove
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ListProperty<Date>
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/ExceptionRule.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/ExceptionRule.html new file mode 100644 index 000000000..666cf2a07 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/ExceptionRule.html @@ -0,0 +1,341 @@ + + + + + + + +ExceptionRule (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class ExceptionRule

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Recurrence>
    +          extended by biweekly.property.RecurrenceProperty
    +              extended by biweekly.property.ExceptionRule
    +
    +
    +
    +
    public class ExceptionRule
    extends RecurrenceProperty
    + + +

    +

    + Defines an exception to a RecurrenceRule. +

    +

    + Note that this property has been removed from the latest version of the iCal + specification. Its use should be avoided. +

    +

    + Examples: + +

    + //"bi-weekly"
    + Recurrence recur = new Recurrence.Builder(Frequency.WEEKLY).interval(2).build();
    + ExceptionRule exrule = new ExceptionRule(recur);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 2445 p.114-15
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    ExceptionRule(Recurrence recur) + +
    +          Creates a new exception rule property.
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ExceptionRule

    +
    +public ExceptionRule(Recurrence recur)
    +
    +
    Creates a new exception rule property. +

    +

    +
    Parameters:
    recur - the recurrence rule
    +
    + + + + + + + + +
    +Method Detail
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class RecurrenceProperty
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/FreeBusy.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/FreeBusy.html new file mode 100644 index 000000000..c8a3a06af --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/FreeBusy.html @@ -0,0 +1,440 @@ + + + + + + + +FreeBusy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class FreeBusy

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.FreeBusy
    +
    +
    +
    +
    public class FreeBusy
    extends ICalProperty
    + + +

    +

    + Defines a person's availability over certain time periods (for example, + "busy" between 1pm-3pm and 4pm-5pm). Note that this property can contain + multiple time periods, but only one availability type may be defined (e.g. + "busy" or "free"). +

    +

    + Examples: + +

    + FreeBusy freebusy = new FreeBusy();
    + freebusy.setType(FreeBusyType.BUSY);
    + 
    + Date onePM = ...
    + Date threePM = ...
    + freebusy.addValue(onePM, threePM);
    + 
    + Date fourPM = ...
    + Duration oneHour = Duration.builder().hours(1).build();
    + freeBusy.addValue(fourPM, oneHour);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.100-1
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    FreeBusy() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddValue(Date start, + Date end) + +
    +          Adds a time period.
    + voidaddValue(Date start, + Duration duration) + +
    +          Adds a time period.
    + FreeBusyTypegetType() + +
    +          Gets the person's status over the time periods that are specified in this + property (for example, "free" or "busy").
    + List<Period>getValues() + +
    +          Gets all time periods.
    + voidsetType(FreeBusyType fbType) + +
    +          Sets the person's status over the time periods that are specified in this + property (for example, "free" or "busy").
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +FreeBusy

    +
    +public FreeBusy()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +addValue

    +
    +public void addValue(Date start,
    +                     Date end)
    +
    +
    Adds a time period. +

    +

    +
    Parameters:
    start - the start date
    end - the end date
    +
    +
    +
    + +

    +addValue

    +
    +public void addValue(Date start,
    +                     Duration duration)
    +
    +
    Adds a time period. +

    +

    +
    Parameters:
    start - the start date
    duration - the duration
    +
    +
    +
    + +

    +getValues

    +
    +public List<Period> getValues()
    +
    +
    Gets all time periods. +

    +

    + +
    Returns:
    the time periods
    +
    +
    +
    + +

    +getType

    +
    +public FreeBusyType getType()
    +
    +
    Gets the person's status over the time periods that are specified in this + property (for example, "free" or "busy"). If not set, the user should be + considered "busy". +

    +

    + +
    Returns:
    the type or null if not set
    Specification Reference:
    RFC 5545 p.20
    +
    +
    +
    + +

    +setType

    +
    +public void setType(FreeBusyType fbType)
    +
    +
    Sets the person's status over the time periods that are specified in this + property (for example, "free" or "busy"). If not set, the user should be + considered "busy". +

    +

    +
    Parameters:
    fbType - the type or null to remove
    Specification Reference:
    RFC 5545 p.20
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ICalProperty
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Geo.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Geo.html new file mode 100644 index 000000000..1aab1426a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Geo.html @@ -0,0 +1,431 @@ + + + + + + + +Geo (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Geo

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.Geo
    +
    +
    +
    +
    public class Geo
    extends ICalProperty
    + + +

    +

    + Defines a set of geographical coordinates. +

    +

    + Examples: + +

    + Geo geo = new Geo(40.714623, -74.006605);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.85-7
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Geo(Double latitude, + Double longitude) + +
    +          Creates a new geo property.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + DoublegetLatitude() + +
    +          Gets the latitude.
    + DoublegetLongitude() + +
    +          Gets the longitude.
    + voidsetLatitude(Double latitude) + +
    +          Sets the latitude.
    + voidsetLongitude(Double longitude) + +
    +          Sets the longitude.
    +static doubletoDecimal(int degrees, + int minutes, + int seconds) + +
    +          Converts a coordinate in the degrees-minutes-seconds format into its + decimal equivalent.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Geo

    +
    +public Geo(Double latitude,
    +           Double longitude)
    +
    +
    Creates a new geo property. +

    +

    +
    Parameters:
    latitude - the latitude
    longitude - the longitude
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getLatitude

    +
    +public Double getLatitude()
    +
    +
    Gets the latitude. +

    +

    + +
    Returns:
    the latitude
    +
    +
    +
    + +

    +setLatitude

    +
    +public void setLatitude(Double latitude)
    +
    +
    Sets the latitude. +

    +

    +
    Parameters:
    latitude - the latitude
    +
    +
    +
    + +

    +getLongitude

    +
    +public Double getLongitude()
    +
    +
    Gets the longitude. +

    +

    + +
    Returns:
    the longitude
    +
    +
    +
    + +

    +setLongitude

    +
    +public void setLongitude(Double longitude)
    +
    +
    Sets the longitude. +

    +

    +
    Parameters:
    longitude - the longitude
    +
    +
    +
    + +

    +toDecimal

    +
    +public static double toDecimal(int degrees,
    +                               int minutes,
    +                               int seconds)
    +
    +
    Converts a coordinate in the degrees-minutes-seconds format into its + decimal equivalent. +

    +

    +
    Parameters:
    degrees - the degrees
    minutes - the minutes
    seconds - the seconds +
    Returns:
    the decimal value
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ICalProperty
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/ICalProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/ICalProperty.html new file mode 100644 index 000000000..4edc6c5f3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/ICalProperty.html @@ -0,0 +1,516 @@ + + + + + + + +ICalProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class ICalProperty

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +
    +
    +
    Direct Known Subclasses:
    Attachment, DateOrDateTimeProperty, FreeBusy, Geo, ListProperty, RawProperty, RecurrenceDates, RequestStatus, Trigger, UtcOffsetProperty, ValuedProperty, Version
    +
    +
    +
    +
    public abstract class ICalProperty
    extends Object
    + + +

    +Base class for all iCalendar properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + +
    +Field Summary
    +protected  ICalParametersparameters + +
    +          The property parameters.
    +  + + + + + + + + + + +
    +Constructor Summary
    ICalProperty() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddParameter(String name, + String value) + +
    +          Adds a value to a parameter.
    + StringgetParameter(String name) + +
    +          Gets the first value of a parameter with the given name.
    + ICalParametersgetParameters() + +
    +          Gets the property's parameters.
    + List<String>getParameters(String name) + +
    +          Gets all values of a parameter with the given name.
    + voidremoveParameter(String name) + +
    +          Removes a parameter from the property.
    + voidsetParameter(String name, + Collection<String> values) + +
    +          Replaces all existing values of a parameter with the given values.
    + voidsetParameter(String name, + String value) + +
    +          Replaces all existing values of a parameter with the given value.
    + voidsetParameters(ICalParameters parameters) + +
    +          Sets the property's parameters
    + List<String>validate(List<ICalComponent> components) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +parameters

    +
    +protected ICalParameters parameters
    +
    +
    The property parameters. +

    +

    +
    +
    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalProperty

    +
    +public ICalProperty()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getParameters

    +
    +public ICalParameters getParameters()
    +
    +
    Gets the property's parameters. +

    +

    + +
    Returns:
    the parameters
    +
    +
    +
    + +

    +setParameters

    +
    +public void setParameters(ICalParameters parameters)
    +
    +
    Sets the property's parameters +

    +

    +
    Parameters:
    parameters - the parameters
    +
    +
    +
    + +

    +getParameter

    +
    +public String getParameter(String name)
    +
    +
    Gets the first value of a parameter with the given name. +

    +

    +
    Parameters:
    name - the parameter name (case insensitive, e.g. "LANGUAGE") +
    Returns:
    the parameter value or null if not found
    +
    +
    +
    + +

    +getParameters

    +
    +public List<String> getParameters(String name)
    +
    +
    Gets all values of a parameter with the given name. +

    +

    +
    Parameters:
    name - the parameter name (case insensitive, e.g. "LANGUAGE") +
    Returns:
    the parameter values
    +
    +
    +
    + +

    +addParameter

    +
    +public void addParameter(String name,
    +                         String value)
    +
    +
    Adds a value to a parameter. +

    +

    +
    Parameters:
    name - the parameter name (case insensitive, e.g. "LANGUAGE")
    value - the parameter value
    +
    +
    +
    + +

    +setParameter

    +
    +public void setParameter(String name,
    +                         String value)
    +
    +
    Replaces all existing values of a parameter with the given value. +

    +

    +
    Parameters:
    name - the parameter name (case insensitive, e.g. "LANGUAGE")
    value - the parameter value
    +
    +
    +
    + +

    +setParameter

    +
    +public void setParameter(String name,
    +                         Collection<String> values)
    +
    +
    Replaces all existing values of a parameter with the given values. +

    +

    +
    Parameters:
    name - the parameter name (case insensitive, e.g. "LANGUAGE")
    values - the parameter values
    +
    +
    +
    + +

    +removeParameter

    +
    +public void removeParameter(String name)
    +
    +
    Removes a parameter from the property. +

    +

    +
    Parameters:
    name - the parameter name (case insensitive, e.g. "LANGUAGE")
    +
    +
    +
    + +

    +validate

    +
    +public final List<String> validate(List<ICalComponent> components)
    +
    +
    Checks the property for data consistency problems or deviations from the + spec. These problems will not prevent the property from being written to + a data stream, but may prevent it from being parsed correctly by the + consuming application. These problems can largely be avoided by reading + the Javadocs of the property class, or by being familiar with the + iCalendar standard. +

    +

    +
    Parameters:
    components - the hierarchy of components that the property belongs + to +
    Returns:
    a list of warnings or an empty list if no problems were found
    See Also:
    ICalendar.validate()
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/IntegerProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/IntegerProperty.html new file mode 100644 index 000000000..f25fe22ef --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/IntegerProperty.html @@ -0,0 +1,287 @@ + + + + + + + +IntegerProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class IntegerProperty

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Integer>
    +          extended by biweekly.property.IntegerProperty
    +
    +
    +
    Direct Known Subclasses:
    PercentComplete, Priority, Repeat, Sequence
    +
    +
    +
    +
    public class IntegerProperty
    extends ValuedProperty<Integer>
    + + +

    +Represents a property whose value is an integer. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    IntegerProperty(Integer value) + +
    +          Creates a new integer property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +IntegerProperty

    +
    +public IntegerProperty(Integer value)
    +
    +
    Creates a new integer property. +

    +

    +
    Parameters:
    value - the property's value
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/LastModified.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/LastModified.html new file mode 100644 index 000000000..4b45298bc --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/LastModified.html @@ -0,0 +1,297 @@ + + + + + + + +LastModified (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class LastModified

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Date>
    +          extended by biweekly.property.DateTimeProperty
    +              extended by biweekly.property.LastModified
    +
    +
    +
    +
    public class LastModified
    extends DateTimeProperty
    + + +

    +

    + Defines the date and time that the calendar data in a component was last + changed. +

    +

    + Examples: + +

    + Date datetime = ...
    + LastModified lastModified = new LastModified(datetime);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.138
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    LastModified(Date date) + +
    +          Creates a last modified property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +LastModified

    +
    +public LastModified(Date date)
    +
    +
    Creates a last modified property. +

    +

    +
    Parameters:
    date - the date
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/ListProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/ListProperty.html new file mode 100644 index 000000000..41d8541fb --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/ListProperty.html @@ -0,0 +1,387 @@ + + + + + + + +ListProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class ListProperty<T>

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ListProperty<T>
    +
    +
    +
    Type Parameters:
    T - the value type
    +
    +
    Direct Known Subclasses:
    Categories, ExceptionDates, Resources
    +
    +
    +
    +
    public class ListProperty<T>
    extends ICalProperty
    + + +

    +Represents a property whose value is a list of values. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + + + + +
    +Constructor Summary
    ListProperty() + +
    +          Creates a new list property.
    ListProperty(List<T> values) + +
    +          Creates a new list property.
    ListProperty(T... values) + +
    +          Creates a new list property.
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddValue(T value) + +
    +          Adds a value to this property.
    + List<T>getValues() + +
    +          Gets the values of this property.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ListProperty

    +
    +public ListProperty()
    +
    +
    Creates a new list property. +

    +

    +
    + +

    +ListProperty

    +
    +public ListProperty(T... values)
    +
    +
    Creates a new list property. +

    +

    +
    Parameters:
    values - the values to initialize the property with
    +
    +
    + +

    +ListProperty

    +
    +public ListProperty(List<T> values)
    +
    +
    Creates a new list property. +

    +

    +
    Parameters:
    values - the values to initialize the property with
    +
    + + + + + + + + +
    +Method Detail
    + +

    +addValue

    +
    +public void addValue(T value)
    +
    +
    Adds a value to this property. +

    +

    +
    Parameters:
    value - the value to add
    +
    +
    +
    + +

    +getValues

    +
    +public List<T> getValues()
    +
    +
    Gets the values of this property. +

    +

    + +
    Returns:
    the values
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ICalProperty
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Location.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Location.html new file mode 100644 index 000000000..a1feaf930 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Location.html @@ -0,0 +1,410 @@ + + + + + + + +Location (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Location

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.Location
    +
    +
    +
    +
    public class Location
    extends TextProperty
    + + +

    +

    + Defines the physical location of an event. +

    +

    + Examples: + +

    + Location location = new Location("Room 32B");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.87-8
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Location(String location) + +
    +          Creates a location property.
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetAltRepresentation() + +
    +          Gets a URI pointing to additional information about the entity + represented by the property.
    + StringgetLanguage() + +
    +          Gets the language that the property value is written in.
    + voidsetAltRepresentation(String uri) + +
    +          Sets a URI pointing to additional information about the entity + represented by the property.
    + voidsetLanguage(String language) + +
    +          Sets the language that the property value is written in.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Location

    +
    +public Location(String location)
    +
    +
    Creates a location property. +

    +

    +
    Parameters:
    location - the location (e.g. "Room 101")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getAltRepresentation

    +
    +public String getAltRepresentation()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets a URI pointing to additional information about the entity + represented by the property. +

    +

    +
    +
    +
    + +
    Returns:
    the URI or null if not set
    +
    +
    +
    + +

    +setAltRepresentation

    +
    +public void setAltRepresentation(String uri)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets a URI pointing to additional information about the entity + represented by the property. +

    +

    +
    +
    +
    +
    Parameters:
    uri - the URI or null to remove
    +
    +
    +
    + +

    +getLanguage

    +
    +public String getLanguage()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the language that the property value is written in. +

    +

    +
    +
    +
    + +
    Returns:
    the language (e.g. "en" for English) or null if not set
    +
    +
    +
    + +

    +setLanguage

    +
    +public void setLanguage(String language)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the language that the property value is written in. +

    +

    +
    +
    +
    +
    Parameters:
    language - the language (e.g. "en" for English) or null to remove
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Method.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Method.html new file mode 100644 index 000000000..13c4b9004 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Method.html @@ -0,0 +1,296 @@ + + + + + + + +Method (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Method

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.Method
    +
    +
    +
    +
    public class Method
    extends TextProperty
    + + +

    +

    + Specifies the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity. +

    +

    + Examples: + +

    + Method method = new Method("value");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.77-8
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Method(String value) + +
    +          Creates a new method property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Method

    +
    +public Method(String value)
    +
    +
    Creates a new method property. +

    +

    +
    Parameters:
    value - the property value
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Organizer.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Organizer.html new file mode 100644 index 000000000..d3e69ed76 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Organizer.html @@ -0,0 +1,543 @@ + + + + + + + +Organizer (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Organizer

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.Organizer
    +
    +
    +
    +
    public class Organizer
    extends TextProperty
    + + +

    +

    + Defines an organizer. This property has different meanings depending on the + component it belongs to: +

      +
    • VEvent - The organizer of the event.
    • +
    • VTodo - The creator of the to-do task.
    • +
    • VJournal - The owner of the journal entry.
    • +
    • VFreeBusy - The person requesting the free/busy time.
    • +
    +

    +

    + Examples: + +

    + Organizer organizer = Organizer.email("johndoe@example.com");
    + organizer.setCommonName("John Doe");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.111-2
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Organizer(String uri) + +
    +          Creates an organizer property
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static Organizeremail(String email) + +
    +          Creates an organizer property using an email address as its value.
    + StringgetCommonName() + +
    +          Gets the display name of the person.
    + StringgetDirectoryEntry() + +
    +          Gets a URI that contains additional information about the person.
    + StringgetLanguage() + +
    +          Gets the language that the common name parameter is written in.
    + StringgetSentBy() + +
    +          Gets a person that is acting on behalf of the person defined in the + property.
    + voidsetCommonName(String commonName) + +
    +          Sets the display name of the person.
    + voidsetDirectoryEntry(String directoryEntry) + +
    +          Sets a URI that contains additional information about the person.
    + voidsetLanguage(String language) + +
    +          Sets the language that the common name parameter is written in.
    + voidsetSentBy(String sentBy) + +
    +          Sets a person that is acting on behalf of the person defined in the + property.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Organizer

    +
    +public Organizer(String uri)
    +
    +
    Creates an organizer property +

    +

    +
    Parameters:
    uri - a URI representing the organizer (typically, an email address, + e.g. "mailto:johndoe@example.com")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +email

    +
    +public static Organizer email(String email)
    +
    +
    Creates an organizer property using an email address as its value. +

    +

    +
    Parameters:
    email - the email address (e.g. "johndoe@example.com") +
    Returns:
    the property
    +
    +
    +
    + +

    +getSentBy

    +
    +public String getSentBy()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets a person that is acting on behalf of the person defined in the + property. +

    +

    +
    +
    +
    + +
    Returns:
    a URI representing the person (typically, an email URI, e.g. + "mailto:janedoe@example.com") or null if not set
    +
    +
    +
    + +

    +setSentBy

    +
    +public void setSentBy(String sentBy)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets a person that is acting on behalf of the person defined in the + property. +

    +

    +
    +
    +
    +
    Parameters:
    sentBy - a URI representing the person (typically, an email URI, e.g. + "mailto:janedoe@example.com") or null to remove
    +
    +
    +
    + +

    +getCommonName

    +
    +public String getCommonName()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the display name of the person. +

    +

    +
    +
    +
    + +
    Returns:
    the display name (e.g. "John Doe") or null if not set
    +
    +
    +
    + +

    +setCommonName

    +
    +public void setCommonName(String commonName)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the display name of the person. +

    +

    +
    +
    +
    +
    Parameters:
    commonName - the display name (e.g. "John Doe") or null to remove
    +
    +
    +
    + +

    +getDirectoryEntry

    +
    +public String getDirectoryEntry()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets a URI that contains additional information about the person. +

    +

    +
    +
    +
    + +
    Returns:
    the URI (e.g. an LDAP URI) or null if not set
    +
    +
    +
    + +

    +setDirectoryEntry

    +
    +public void setDirectoryEntry(String directoryEntry)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets a URI that contains additional information about the person. +

    +

    +
    +
    +
    +
    Parameters:
    directoryEntry - the URI (e.g. an LDAP URI) or null to remove
    +
    +
    +
    + +

    +getLanguage

    +
    +public String getLanguage()
    +
    +
    Gets the language that the common name parameter is written in. +

    +

    +
    +
    +
    + +
    Returns:
    the language (e.g. "en" for English) or null if not set
    +
    +
    +
    + +

    +setLanguage

    +
    +public void setLanguage(String language)
    +
    +
    Sets the language that the common name parameter is written in. +

    +

    +
    +
    +
    +
    Parameters:
    language - the language (e.g. "en" for English) or null to remove
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/PercentComplete.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/PercentComplete.html new file mode 100644 index 000000000..f49ef9cec --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/PercentComplete.html @@ -0,0 +1,338 @@ + + + + + + + +PercentComplete (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class PercentComplete

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Integer>
    +          extended by biweekly.property.IntegerProperty
    +              extended by biweekly.property.PercentComplete
    +
    +
    +
    +
    public class PercentComplete
    extends IntegerProperty
    + + +

    +

    + Defines a to-do task's level of completion. +

    +

    + Examples: + +

    + PercentComplete percentComplete = new PercentComplete(50); //50%
    + 
    + VTodo todo = new VTodo();
    + todo.setPercentComplete(50);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.88-9
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    PercentComplete(Integer percent) + +
    +          Creates a percent complete property.
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +PercentComplete

    +
    +public PercentComplete(Integer percent)
    +
    +
    Creates a percent complete property. +

    +

    +
    Parameters:
    percent - the percentage (e.g. "50" for 50%)
    +
    + + + + + + + + +
    +Method Detail
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ValuedProperty<Integer>
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Priority.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Priority.html new file mode 100644 index 000000000..92c5e9f51 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Priority.html @@ -0,0 +1,423 @@ + + + + + + + +Priority (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Priority

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Integer>
    +          extended by biweekly.property.IntegerProperty
    +              extended by biweekly.property.Priority
    +
    +
    +
    +
    public class Priority
    extends IntegerProperty
    + + +

    +

    + Defines the priority of an event or to-do task. +

    +

    + Examples: + +

    + //highest
    + Priority priority = new Priority(1);
    + 
    + //lowest
    + Priority priority = new Priority(9);
    + 
    + VTodo todo = new VTodo();
    + todo.setPriority(1);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.89-90
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Priority(Integer priority) + +
    +          Creates a priority property.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + booleanisHigh() + +
    +          Determines if this priority is considered "high" priority.
    + booleanisLow() + +
    +          Determines if this priority is considered "low" priority.
    + booleanisMedium() + +
    +          Determines if this priority is considered "medium" priority.
    + booleanisUndefined() + +
    +          Determines if this priority has an "undefined" value.
    + StringtoCuaPriority() + +
    +          Converts this priority to its two-character CUA code.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Priority

    +
    +public Priority(Integer priority)
    +
    +
    Creates a priority property. +

    +

    +
    Parameters:
    priority - the priority ("0" is undefined, "1" is the highest, "9" + is the lowest)
    +
    + + + + + + + + +
    +Method Detail
    + +

    +isHigh

    +
    +public boolean isHigh()
    +
    +
    Determines if this priority is considered "high" priority. +

    +

    + +
    Returns:
    true if the priority is between 1 and 4, false if not
    +
    +
    +
    + +

    +isMedium

    +
    +public boolean isMedium()
    +
    +
    Determines if this priority is considered "medium" priority. +

    +

    + +
    Returns:
    true if the priority is "5", false if not
    +
    +
    +
    + +

    +isLow

    +
    +public boolean isLow()
    +
    +
    Determines if this priority is considered "low" priority. +

    +

    + +
    Returns:
    true if the priority is between 6 and 9, false if not
    +
    +
    +
    + +

    +isUndefined

    +
    +public boolean isUndefined()
    +
    +
    Determines if this priority has an "undefined" value. +

    +

    + +
    Returns:
    true if the priority is "0", false if not
    +
    +
    +
    + +

    +toCuaPriority

    +
    +public String toCuaPriority()
    +
    +
    Converts this priority to its two-character CUA code. +

    +

    + +
    Returns:
    the CUA code (e.g. "B1" for "4") or null if the priority cannot + be converted to a CUA code
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/ProductId.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/ProductId.html new file mode 100644 index 000000000..fb2a06a1e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/ProductId.html @@ -0,0 +1,330 @@ + + + + + + + +ProductId (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class ProductId

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.ProductId
    +
    +
    +
    +
    public class ProductId
    extends TextProperty
    + + +

    +

    + Identifies the application that created the iCalendar object. +

    +

    + Examples: + +

    + ProductId prodid = new ProductId("-//Company//Application Name//EN");
    + 
    + ICalendar ical = new ICalendar();
    + ical.setProductId("-//Company//Application Name//EN");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.78-9
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    ProductId(String value) + +
    +          Creates a new product identifier property.
    +  + + + + + + + + + + + +
    +Method Summary
    +static ProductIdbiweekly() + +
    +          Creates a new product identifier property that represents this library.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ProductId

    +
    +public ProductId(String value)
    +
    +
    Creates a new product identifier property. +

    +

    +
    Parameters:
    value - a unique string representing the application (e.g. + "-//Company//Application Name//EN")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +biweekly

    +
    +public static ProductId biweekly()
    +
    +
    Creates a new product identifier property that represents this library. +

    +

    + +
    Returns:
    the property
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/RawProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/RawProperty.html new file mode 100644 index 000000000..a6e2512b5 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/RawProperty.html @@ -0,0 +1,347 @@ + + + + + + + +RawProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class RawProperty

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.RawProperty
    +
    +
    +
    +
    public class RawProperty
    extends ICalProperty
    + + +

    +A property that does not have a marshaller associated with it. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    RawProperty(String name, + ICalDataType dataType, + String value) + +
    +           
    RawProperty(String name, + String value) + +
    +           
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + ICalDataTypegetDataType() + +
    +           
    + StringgetName() + +
    +           
    + StringgetValue() + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RawProperty

    +
    +public RawProperty(String name,
    +                   String value)
    +
    +
    +
    + +

    +RawProperty

    +
    +public RawProperty(String name,
    +                   ICalDataType dataType,
    +                   String value)
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getValue

    +
    +public String getValue()
    +
    +
    +
    +
    +
    +
    + +

    +getDataType

    +
    +public ICalDataType getDataType()
    +
    +
    +
    +
    +
    +
    + +

    +getName

    +
    +public String getName()
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceDates.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceDates.html new file mode 100644 index 000000000..c4e8cab0f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceDates.html @@ -0,0 +1,509 @@ + + + + + + + +RecurrenceDates (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class RecurrenceDates

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.RecurrenceDates
    +
    +
    +
    +
    public class RecurrenceDates
    extends ICalProperty
    + + +

    +

    + Defines a list of dates or periods that help define a recurrence rule. It + must contain either dates or time periods. It cannot contain a combination of + both. +

    +

    + Examples: + +

    + //date-time values
    + Date datetime1 = ...
    + Date datetime2 = ...
    + List<Date> datetimes = Arrays.asList(datetime1, datetime2);
    + RecurrenceDates prop = new RecurrenceDates(datetimes, true);
    + 
    + //date values
    + Date date1 = ...
    + Date date2 = ...
    + List<Date> dates = Arrays.asList(date1, date2);
    + RecurrenceDates prop = new RecurrenceDates(dates, false);
    + 
    + //periods
    + Period period1 = ...
    + Period period2 = ...
    + List<Period> periods = Arrays.asList(period1, period2);
    + RecurrenceDates prop = new RecurrenceDates(periods, true);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.120-2
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    RecurrenceDates(List<Date> dates, + boolean hasTime) + +
    +          Creates a recurrence dates property.
    RecurrenceDates(List<Period> periods) + +
    +          Creates a recurrence dates property.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + List<Date>getDates() + +
    +          Gets the recurrence dates.
    + List<Period>getPeriods() + +
    +          Gets the time periods.
    + StringgetTimezoneId() + +
    +          Gets the timezone identifier.
    + booleanhasTime() + +
    +          Gets whether the recurrence dates have time components.
    + voidsetTimezone(VTimezone timezone) + +
    +          Sets the property's timezone to a timezone that is defined within the + iCalendar object.
    + voidsetTimezoneId(String timezoneId) + +
    +          Sets the timezone identifier.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RecurrenceDates

    +
    +public RecurrenceDates(List<Date> dates,
    +                       boolean hasTime)
    +
    +
    Creates a recurrence dates property. +

    +

    +
    Parameters:
    dates - the recurrence dates
    hasTime - true if the dates have a time component, false if they are + strictly dates
    +
    +
    + +

    +RecurrenceDates

    +
    +public RecurrenceDates(List<Period> periods)
    +
    +
    Creates a recurrence dates property. +

    +

    +
    Parameters:
    periods - the time periods
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getDates

    +
    +public List<Date> getDates()
    +
    +
    Gets the recurrence dates. +

    +

    + +
    Returns:
    the dates or null if this property contains periods
    +
    +
    +
    + +

    +hasTime

    +
    +public boolean hasTime()
    +
    +
    Gets whether the recurrence dates have time components. +

    +

    + +
    Returns:
    true if the dates have a time component, false if they are + strictly dates
    +
    +
    +
    + +

    +getPeriods

    +
    +public List<Period> getPeriods()
    +
    +
    Gets the time periods. +

    +

    + +
    Returns:
    the time periods or null if this property contains dates
    +
    +
    +
    + +

    +getTimezoneId

    +
    +public String getTimezoneId()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the timezone identifier. This either (a) references the + TimezoneId property of a VTimezone component, or (b) + specifies a globally-defined timezone (e.g. "America/New_York"). For a + list of globally-defined timezones, see the TZ database. +

    +

    +
    +
    +
    + +
    Returns:
    the timezone identifier or null if not set
    +
    +
    +
    + +

    +setTimezoneId

    +
    +public void setTimezoneId(String timezoneId)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the timezone identifier. This either (a) references the + TimezoneId property of a VTimezone component, or (b) + specifies a globally-defined timezone (e.g. "America/New_York"). For a + list of globally-defined timezones, see the TZ database. +

    +

    +
    +
    +
    +
    Parameters:
    timezoneId - the timezone identifier (e.g. "America/New_York") or + null to remove
    +
    +
    +
    + +

    +setTimezone

    +
    +public void setTimezone(VTimezone timezone)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the property's timezone to a timezone that is defined within the + iCalendar object. Use ICalProperty.setTimezoneId(String) to use a + globally-defined timezone (e.g. "America/New_York"). +

    +

    +
    +
    +
    +
    Parameters:
    timezone - the timezone component to reference or null to remove
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ICalProperty
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceId.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceId.html new file mode 100644 index 000000000..8c9fbfdcb --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceId.html @@ -0,0 +1,379 @@ + + + + + + + +RecurrenceId (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class RecurrenceId

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.DateOrDateTimeProperty
    +          extended by biweekly.property.RecurrenceId
    +
    +
    +
    +
    public class RecurrenceId
    extends DateOrDateTimeProperty
    + + +

    +

    + Records the original value of the DateStart property if a recurrence + instance has been modified. Used in conjunction with the Uid and + Sequence properties to uniquely identify a recurrence instance. +

    +

    + Examples: + +

    + //date-time value
    + Date datetime = ...
    + RecurrenceId recurrenceId = new RecurrenceId(datetime);
    + 
    + //datevalue
    + Date date = ...
    + RecurrenceId recurrenceId = new RecurrenceId(date, false);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.112-4
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.DateOrDateTimeProperty
    hasTime, localTime, rawComponents, value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    RecurrenceId(Date originalStartDate) + +
    +          Creates a recurrence ID property.
    RecurrenceId(Date originalStartDate, + boolean hasTime) + +
    +          Creates a recurrence ID property.
    +  + + + + + + + + + + + + + + + +
    +Method Summary
    + RangegetRange() + +
    +          Gets the effective range of recurrence instances from the instance + specified by this property.
    + voidsetRange(Range range) + +
    +          Sets the effective range of recurrence instances from the instance + specified by this property.
    + + + + + + + +
    Methods inherited from class biweekly.property.DateOrDateTimeProperty
    getRawComponents, getTimezoneId, getValue, hasTime, isLocalTime, setLocalTime, setRawComponents, setTimezone, setTimezoneId, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RecurrenceId

    +
    +public RecurrenceId(Date originalStartDate)
    +
    +
    Creates a recurrence ID property. +

    +

    +
    Parameters:
    originalStartDate - the original start date
    +
    +
    + +

    +RecurrenceId

    +
    +public RecurrenceId(Date originalStartDate,
    +                    boolean hasTime)
    +
    +
    Creates a recurrence ID property. +

    +

    +
    Parameters:
    originalStartDate - the original start date
    hasTime - true to include the time component of the date, false not + to
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getRange

    +
    +public Range getRange()
    +
    +
    Gets the effective range of recurrence instances from the instance + specified by this property. +

    +

    + +
    Returns:
    the range or null if not set
    Specification Reference:
    RFC 5545 p.23-4
    +
    +
    +
    + +

    +setRange

    +
    +public void setRange(Range range)
    +
    +
    Sets the effective range of recurrence instances from the instance + specified by this property. +

    +

    +
    Parameters:
    range - the range or null to remove
    Specification Reference:
    RFC 5545 p.23-4
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceProperty.html new file mode 100644 index 000000000..7b4a522d6 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceProperty.html @@ -0,0 +1,327 @@ + + + + + + + +RecurrenceProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class RecurrenceProperty

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Recurrence>
    +          extended by biweekly.property.RecurrenceProperty
    +
    +
    +
    Direct Known Subclasses:
    ExceptionRule, RecurrenceRule
    +
    +
    +
    +
    public class RecurrenceProperty
    extends ValuedProperty<Recurrence>
    + + +

    +Defines a property whose value is a recurrence rule. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    RecurrenceProperty(Recurrence recur) + +
    +          Creates a new recurrence property.
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RecurrenceProperty

    +
    +public RecurrenceProperty(Recurrence recur)
    +
    +
    Creates a new recurrence property. +

    +

    +
    Parameters:
    recur - the recurrence value
    +
    + + + + + + + + +
    +Method Detail
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ValuedProperty<Recurrence>
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceRule.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceRule.html new file mode 100644 index 000000000..e5415b6a8 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/RecurrenceRule.html @@ -0,0 +1,337 @@ + + + + + + + +RecurrenceRule (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class RecurrenceRule

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Recurrence>
    +          extended by biweekly.property.RecurrenceProperty
    +              extended by biweekly.property.RecurrenceRule
    +
    +
    +
    +
    public class RecurrenceRule
    extends RecurrenceProperty
    + + +

    +

    + Defines how often a component repeats. +

    +

    + Examples: + +

    + //"bi-weekly"
    + Recurrence recur = new Recurrence.Builder(Frequency.WEEKLY).interval(2).build();
    + RecurrenceRule rrule = new RecurrenceRule(recur);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.122-32
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    RecurrenceRule(Recurrence recur) + +
    +          Creates a new recurrence rule property.
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RecurrenceRule

    +
    +public RecurrenceRule(Recurrence recur)
    +
    +
    Creates a new recurrence rule property. +

    +

    +
    Parameters:
    recur - the recurrence rule
    +
    + + + + + + + + +
    +Method Detail
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class RecurrenceProperty
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/RelatedTo.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/RelatedTo.html new file mode 100644 index 000000000..fdb849f8c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/RelatedTo.html @@ -0,0 +1,350 @@ + + + + + + + +RelatedTo (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class RelatedTo

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.RelatedTo
    +
    +
    +
    +
    public class RelatedTo
    extends TextProperty
    + + +

    +

    + Defines a relationship between the component that this property belongs to + and another component. +

    +

    + Examples: + +

    + RelatedTo relatedTo = new RelatedTo("uid-value");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.115-6
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    RelatedTo(String uid) + +
    +          Creates a related-to property.
    +  + + + + + + + + + + + + + + + +
    +Method Summary
    + RelationshipTypegetRelationshipType() + +
    +          Gets the relationship type.
    + voidsetRelationshipType(RelationshipType relationshipType) + +
    +          Sets the relationship type.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RelatedTo

    +
    +public RelatedTo(String uid)
    +
    +
    Creates a related-to property. +

    +

    +
    Parameters:
    uid - the value of the Uid property of the component that + this property is referencing
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getRelationshipType

    +
    +public RelationshipType getRelationshipType()
    +
    +
    Gets the relationship type. +

    +

    + +
    Returns:
    the relationship type (e.g. "child") or null if not set
    Specification Reference:
    RFC 5545 p.25
    +
    +
    +
    + +

    +setRelationshipType

    +
    +public void setRelationshipType(RelationshipType relationshipType)
    +
    +
    Sets the relationship type. +

    +

    +
    Parameters:
    relationshipType - the relationship type (e.g. "child") or null to + remove
    Specification Reference:
    RFC 5545 p.25
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Repeat.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Repeat.html new file mode 100644 index 000000000..c24242c56 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Repeat.html @@ -0,0 +1,303 @@ + + + + + + + +Repeat (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Repeat

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Integer>
    +          extended by biweekly.property.IntegerProperty
    +              extended by biweekly.property.Repeat
    +
    +
    +
    +
    public class Repeat
    extends IntegerProperty
    + + +

    +

    + Defines the number of times an alarm should be repeated after its initial + trigger. Used in conjunction with DurationProperty, which defines the + length of the pause between repeats. +

    +

    + Examples: + +

    + //repeat 5 more times after the first time
    + Repeat relatedTo = new Repeat(5);
    + 
    + VAlarm alarm = ...;
    + alarm.setRepeat(5);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.133
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Repeat(Integer count) + +
    +          Creates a repeat property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Repeat

    +
    +public Repeat(Integer count)
    +
    +
    Creates a repeat property. +

    +

    +
    Parameters:
    count - the number of times to repeat the alarm (e.g. "2" to repeat + it two more times after it was initially triggered, for a total of three + times)
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/RequestStatus.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/RequestStatus.html new file mode 100644 index 000000000..238e78268 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/RequestStatus.html @@ -0,0 +1,525 @@ + + + + + + + +RequestStatus (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class RequestStatus

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.RequestStatus
    +
    +
    +
    +
    public class RequestStatus
    extends ICalProperty
    + + +

    +

    + Represents a response to a scheduling request, describing whether the request + was successfully processed or not. +

    +

    + Each property instance has a status code. The following status code families + are defined: +

      +
    • 1.x - The request has been received, but is still being processed. +
    • +
    • 2.x - The request was processed successfully.
    • +
    • 3.x - There is a client-side problem with the request (such as + some incorrect syntax).
    • +
    • 4.x - A server-side error occurred.
    • +
    +

    +

    + Examples: + +

    + RequestStatus requestStatus = new RequestStatus("2.0");
    + requestStatus.setDescription("Success");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.141-3
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    RequestStatus(String statusCode) + +
    +          Creates a request status property.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetDescription() + +
    +          Gets the human-readable description of the status.
    + StringgetExceptionText() + +
    +          Gets any additional data related to the response.
    + StringgetLanguage() + +
    +          Gets the language that the property value is written in.
    + StringgetStatusCode() + +
    +          Gets the status code.
    + voidsetDescription(String description) + +
    +          Sets a human-readable description of the status.
    + voidsetExceptionText(String exceptionText) + +
    +          Sets any additional data related to the response.
    + voidsetLanguage(String language) + +
    +          Sets the language that the property value is written in.
    + voidsetStatusCode(String statusCode) + +
    +          Sets a status code.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RequestStatus

    +
    +public RequestStatus(String statusCode)
    +
    +
    Creates a request status property. +

    +

    +
    Parameters:
    statusCode - the status code (e.g. "1.1.3")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getStatusCode

    +
    +public String getStatusCode()
    +
    +
    Gets the status code. The following status code families are defined: +
      +
    • 1.x - The request has been received, but is still being + processed.
    • +
    • 2.x - The request was processed successfully.
    • +
    • 3.x - There is a client-side problem with the request (such as + some incorrect syntax).
    • +
    • 4.x - A server-side error occurred.
    • +
    +

    +

    + +
    Returns:
    the status code (e.g. "1.1.3")
    +
    +
    +
    + +

    +setStatusCode

    +
    +public void setStatusCode(String statusCode)
    +
    +
    Sets a status code. The following status code families are defined: +
      +
    • 1.x - The request has been received, but is still being + processed.
    • +
    • 2.x - The request was processed successfully.
    • +
    • 3.x - There is a client-side problem with the request (such as + some incorrect syntax).
    • +
    • 4.x - A server-side error occurred.
    • +
    +

    +

    +
    Parameters:
    statusCode - the status code (e.g. "1.1.3")
    +
    +
    +
    + +

    +getDescription

    +
    +public String getDescription()
    +
    +
    Gets the human-readable description of the status. +

    +

    + +
    Returns:
    the description (e.g. "Success") or null if not set
    +
    +
    +
    + +

    +setDescription

    +
    +public void setDescription(String description)
    +
    +
    Sets a human-readable description of the status. +

    +

    +
    Parameters:
    description - the description (e.g. "Success") or null to remove
    +
    +
    +
    + +

    +getExceptionText

    +
    +public String getExceptionText()
    +
    +
    Gets any additional data related to the response. +

    +

    + +
    Returns:
    the additional data or null if not set
    +
    +
    +
    + +

    +setExceptionText

    +
    +public void setExceptionText(String exceptionText)
    +
    +
    Sets any additional data related to the response. +

    +

    +
    Parameters:
    exceptionText - the additional data or null to remove
    +
    +
    +
    + +

    +getLanguage

    +
    +public String getLanguage()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the language that the property value is written in. +

    +

    +
    +
    +
    + +
    Returns:
    the language (e.g. "en" for English) or null if not set
    +
    +
    +
    + +

    +setLanguage

    +
    +public void setLanguage(String language)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the language that the property value is written in. +

    +

    +
    +
    +
    +
    Parameters:
    language - the language (e.g. "en" for English) or null to remove
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ICalProperty
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Resources.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Resources.html new file mode 100644 index 000000000..79aab528f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Resources.html @@ -0,0 +1,437 @@ + + + + + + + +Resources (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Resources

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ListProperty<String>
    +          extended by biweekly.property.Resources
    +
    +
    +
    +
    public class Resources
    extends ListProperty<String>
    + + +

    +

    + Defines a list of resources that are needed for an event or to-do task (for + example a projector or DVD player). +

    +

    + Examples: + +

    + Resources resources = new Resources("projector", "DVD player");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.91
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + + + + +
    +Constructor Summary
    Resources() + +
    +          Creates a new resources property.
    Resources(List<String> values) + +
    +          Creates a new resources property.
    Resources(String... values) + +
    +          Creates a new resources property.
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetAltRepresentation() + +
    +          Gets a URI pointing to additional information about the entity + represented by the property.
    + StringgetLanguage() + +
    +          Gets the language that the property value is written in.
    + voidsetAltRepresentation(String uri) + +
    +          Sets a URI pointing to additional information about the entity + represented by the property.
    + voidsetLanguage(String language) + +
    +          Sets the language that the property value is written in.
    + + + + + + + +
    Methods inherited from class biweekly.property.ListProperty
    addValue, getValues, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Resources

    +
    +public Resources()
    +
    +
    Creates a new resources property. +

    +

    +
    + +

    +Resources

    +
    +public Resources(String... values)
    +
    +
    Creates a new resources property. +

    +

    +
    Parameters:
    values - the values to initialize the property with (e.g. "easel", + "projector")
    +
    +
    + +

    +Resources

    +
    +public Resources(List<String> values)
    +
    +
    Creates a new resources property. +

    +

    +
    Parameters:
    values - the values to initialize the property with (e.g. "easel", + "projector")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getAltRepresentation

    +
    +public String getAltRepresentation()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets a URI pointing to additional information about the entity + represented by the property. +

    +

    +
    +
    +
    + +
    Returns:
    the URI or null if not set
    +
    +
    +
    + +

    +setAltRepresentation

    +
    +public void setAltRepresentation(String uri)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets a URI pointing to additional information about the entity + represented by the property. +

    +

    +
    +
    +
    +
    Parameters:
    uri - the URI or null to remove
    +
    +
    +
    + +

    +getLanguage

    +
    +public String getLanguage()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the language that the property value is written in. +

    +

    +
    +
    +
    + +
    Returns:
    the language (e.g. "en" for English) or null if not set
    +
    +
    +
    + +

    +setLanguage

    +
    +public void setLanguage(String language)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the language that the property value is written in. +

    +

    +
    +
    +
    +
    Parameters:
    language - the language (e.g. "en" for English) or null to remove
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Sequence.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Sequence.html new file mode 100644 index 000000000..f962ee6a3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Sequence.html @@ -0,0 +1,331 @@ + + + + + + + +Sequence (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Sequence

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Integer>
    +          extended by biweekly.property.IntegerProperty
    +              extended by biweekly.property.Sequence
    +
    +
    +
    +
    public class Sequence
    extends IntegerProperty
    + + +

    +

    + Defines a revision number for an event, to-do task, or journal entry. This + number can be incremented every time a significant change is made to the + component. +

    +

    + Examples: + +

    + Sequence sequence = new Sequence(2);
    + 
    + VEvent event = ...
    + event.setSequence(2);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.138-9
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Sequence(Integer sequence) + +
    +          Creates a sequence property.
    +  + + + + + + + + + + + +
    +Method Summary
    + voidincrement() + +
    +          Increments the sequence number.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Sequence

    +
    +public Sequence(Integer sequence)
    +
    +
    Creates a sequence property. +

    +

    +
    Parameters:
    sequence - the sequence number (e.g. "0" for the initial version, + "1" for the first revision, etc)
    +
    + + + + + + + + +
    +Method Detail
    + +

    +increment

    +
    +public void increment()
    +
    +
    Increments the sequence number. +

    +

    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Status.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Status.html new file mode 100644 index 000000000..6c9656003 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Status.html @@ -0,0 +1,706 @@ + + + + + + + +Status (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Status

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.EnumProperty
    +                  extended by biweekly.property.Status
    +
    +
    +
    +
    public class Status
    extends EnumProperty
    + + +

    +

    + Defines the status of the component that this property belongs to, such as a + to-do task being in a "completed" state. +

    +

    + Examples: + +

    + //creating a new property
    + Status status = Status.completed();
    + 
    + if (status.isCompleted()) {
    +        //its value is "COMPLETED"
    + }
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.92-3
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Status(String status) + +
    +          Creates a status property.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static Statuscancelled() + +
    +          Creates a "cancelled" status property (only valid for event, to-do, and + journal components).
    +static Statuscompleted() + +
    +          Creates a "completed" status property (only valid for to-do components).
    +static Statusconfirmed() + +
    +          Creates a "confirmed" status property (only valid for event components).
    +static Statusdraft() + +
    +          Creates a "draft" status property (only valid for journal components).
    +static Statusfinal_() + +
    +          Creates a "final" status property (only valid for journal components).
    +protected  Collection<String>getStandardValues() + +
    +          Gets the list of acceptable values for this property.
    +static StatusinProgress() + +
    +          Creates a "in-progress" status property (only valid for to-do + components).
    + booleanisCancelled() + +
    +          Determines if the status is set to "cancelled".
    + booleanisCompleted() + +
    +          Determines if the status is set to "completed".
    + booleanisConfirmed() + +
    +          Determines if the status is set to "confirmed".
    + booleanisDraft() + +
    +          Determines if the status is set to "draft".
    + booleanisFinal() + +
    +          Determines if the status is set to "final".
    + booleanisInProgress() + +
    +          Determines if the status is set to "in-progress".
    + booleanisNeedsAction() + +
    +          Determines if the status is set to "needs-action".
    + booleanisTentative() + +
    +          Determines if the status is set to "tentative".
    +static StatusneedsAction() + +
    +          Creates a "needs-action" status property (only valid for to-do + components).
    +static Statustentative() + +
    +          Creates a "tentative" status property (only valid for event components).
    + + + + + + + +
    Methods inherited from class biweekly.property.EnumProperty
    is, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Status

    +
    +public Status(String status)
    +
    +
    Creates a status property. Use of this constructor is discouraged and may + put the property in an invalid state. Use one of the static factory + methods instead. +

    +

    +
    Parameters:
    status - the status (e.g. "TENTATIVE")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +tentative

    +
    +public static Status tentative()
    +
    +
    Creates a "tentative" status property (only valid for event components). +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isTentative

    +
    +public boolean isTentative()
    +
    +
    Determines if the status is set to "tentative". +

    +

    + +
    Returns:
    true if set to "tentative", false if not
    +
    +
    +
    + +

    +confirmed

    +
    +public static Status confirmed()
    +
    +
    Creates a "confirmed" status property (only valid for event components). +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isConfirmed

    +
    +public boolean isConfirmed()
    +
    +
    Determines if the status is set to "confirmed". +

    +

    + +
    Returns:
    true if set to "confirmed", false if not
    +
    +
    +
    + +

    +cancelled

    +
    +public static Status cancelled()
    +
    +
    Creates a "cancelled" status property (only valid for event, to-do, and + journal components). +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isCancelled

    +
    +public boolean isCancelled()
    +
    +
    Determines if the status is set to "cancelled". +

    +

    + +
    Returns:
    true if set to "cancelled", false if not
    +
    +
    +
    + +

    +needsAction

    +
    +public static Status needsAction()
    +
    +
    Creates a "needs-action" status property (only valid for to-do + components). +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isNeedsAction

    +
    +public boolean isNeedsAction()
    +
    +
    Determines if the status is set to "needs-action". +

    +

    + +
    Returns:
    true if set to "needs-action", false if not
    +
    +
    +
    + +

    +completed

    +
    +public static Status completed()
    +
    +
    Creates a "completed" status property (only valid for to-do components). +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isCompleted

    +
    +public boolean isCompleted()
    +
    +
    Determines if the status is set to "completed". +

    +

    + +
    Returns:
    true if set to "completed", false if not
    +
    +
    +
    + +

    +inProgress

    +
    +public static Status inProgress()
    +
    +
    Creates a "in-progress" status property (only valid for to-do + components). +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isInProgress

    +
    +public boolean isInProgress()
    +
    +
    Determines if the status is set to "in-progress". +

    +

    + +
    Returns:
    true if set to "in-progress", false if not
    +
    +
    +
    + +

    +draft

    +
    +public static Status draft()
    +
    +
    Creates a "draft" status property (only valid for journal components). +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isDraft

    +
    +public boolean isDraft()
    +
    +
    Determines if the status is set to "draft". +

    +

    + +
    Returns:
    true if set to "draft", false if not
    +
    +
    +
    + +

    +final_

    +
    +public static Status final_()
    +
    +
    Creates a "final" status property (only valid for journal components). +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isFinal

    +
    +public boolean isFinal()
    +
    +
    Determines if the status is set to "final". +

    +

    + +
    Returns:
    true if set to "final", false if not
    +
    +
    +
    + +

    +getStandardValues

    +
    +protected Collection<String> getStandardValues()
    +
    +
    Description copied from class: EnumProperty
    +
    Gets the list of acceptable values for this property. +

    +

    +
    Specified by:
    getStandardValues in class EnumProperty
    +
    +
    + +
    Returns:
    the list of acceptable values
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Summary.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Summary.html new file mode 100644 index 000000000..b11503f64 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Summary.html @@ -0,0 +1,415 @@ + + + + + + + +Summary (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Summary

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.Summary
    +
    +
    +
    +
    public class Summary
    extends TextProperty
    + + +

    +

    + Defines a short, one line summary of the component that this property belongs + to. The summary should be a more concise version of the text provided by the + Description property. +

    +

    + Examples: + +

    + Summary summary = new Summary("summary text");
    + 
    + VEvent event = ...;
    + event.setSummary("summary text");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.93-4
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Summary(String summary) + +
    +          Creates a new summary property.
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetAltRepresentation() + +
    +          Gets a URI pointing to additional information about the entity + represented by the property.
    + StringgetLanguage() + +
    +          Gets the language that the property value is written in.
    + voidsetAltRepresentation(String uri) + +
    +          Sets a URI pointing to additional information about the entity + represented by the property.
    + voidsetLanguage(String language) + +
    +          Sets the language that the property value is written in.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Summary

    +
    +public Summary(String summary)
    +
    +
    Creates a new summary property. +

    +

    +
    Parameters:
    summary - the summary
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getAltRepresentation

    +
    +public String getAltRepresentation()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets a URI pointing to additional information about the entity + represented by the property. +

    +

    +
    +
    +
    + +
    Returns:
    the URI or null if not set
    +
    +
    +
    + +

    +setAltRepresentation

    +
    +public void setAltRepresentation(String uri)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets a URI pointing to additional information about the entity + represented by the property. +

    +

    +
    +
    +
    +
    Parameters:
    uri - the URI or null to remove
    +
    +
    +
    + +

    +getLanguage

    +
    +public String getLanguage()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the language that the property value is written in. +

    +

    +
    +
    +
    + +
    Returns:
    the language (e.g. "en" for English) or null if not set
    +
    +
    +
    + +

    +setLanguage

    +
    +public void setLanguage(String language)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the language that the property value is written in. +

    +

    +
    +
    +
    +
    Parameters:
    language - the language (e.g. "en" for English) or null to remove
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/TextProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/TextProperty.html new file mode 100644 index 000000000..dd43ce221 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/TextProperty.html @@ -0,0 +1,288 @@ + + + + + + + +TextProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class TextProperty

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +
    +
    +
    Direct Known Subclasses:
    Attendee, Comment, Contact, Description, EnumProperty, Location, Method, Organizer, ProductId, RelatedTo, Summary, TimezoneId, TimezoneName, TimezoneUrl, Uid, Url
    +
    +
    +
    +
    public class TextProperty
    extends ValuedProperty<String>
    + + +

    +Represents a property whose value is a plain-text string. Note that this does + not always mean that the property has a data type of "text". +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    TextProperty(String value) + +
    +          Creates a new text property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TextProperty

    +
    +public TextProperty(String value)
    +
    +
    Creates a new text property. +

    +

    +
    Parameters:
    value - the property's value
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneId.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneId.html new file mode 100644 index 000000000..73d0e0e0b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneId.html @@ -0,0 +1,311 @@ + + + + + + + +TimezoneId (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class TimezoneId

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.TimezoneId
    +
    +
    +
    +
    public class TimezoneId
    extends TextProperty
    + + +

    +

    + Defines a unique identifier for a VTimezone component. The identifier + must be unique within the scope of the iCalendar object. +

    +

    + Date-time properties that support timezones (such as DateStart) can + format their date-time values according to the rules defined in the + VTimezone component, and then use this ID to reference the component + by assigning the ID to a TZID parameter. +

    +

    + All properties that support timezones will have + get/setTimezoneId() methods. If a property has no timezone + assigned to it, it is written in UTC. +

    +

    + Examples: + +

    + VTimezone timezone = new VTimezone("Eastern");
    + 
    + Date start = ...;
    + DateStart dtstart = new DateStart(start);
    + dtStart.setTimezoneId("Eastern");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.102-3
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    TimezoneId(String timezone) + +
    +          Creates a timezone identifier property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TimezoneId

    +
    +public TimezoneId(String timezone)
    +
    +
    Creates a timezone identifier property. +

    +

    +
    Parameters:
    timezone - the timezone identifier
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneName.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneName.html new file mode 100644 index 000000000..e94727876 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneName.html @@ -0,0 +1,365 @@ + + + + + + + +TimezoneName (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class TimezoneName

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.TimezoneName
    +
    +
    +
    +
    public class TimezoneName
    extends TextProperty
    + + +

    +

    + Defines a traditional, non-standard name for a timezone observance (for + example, "Eastern Standard Time" for standard time on the US east coast). +

    +

    + Examples: + +

    + //creating a new property
    + TimezoneName tzname = new TimezoneName("Eastern Standard Time");
    + 
    + //usage in a VTIMEZONE component
    + VTimezone timezone = new VTimezone("East Coast");
    + 
    + StandardTime standard = new StandardTime();
    + standard.setTimezoneName("Eastern Standard Time");
    + ...
    + timezone.addStandardTime(standard);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.103-4
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    TimezoneName(String name) + +
    +          Creates a timezone name property.
    +  + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetLanguage() + +
    +          Gets the language that the property value is written in.
    + voidsetLanguage(String language) + +
    +          Sets the language that the property value is written in.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TimezoneName

    +
    +public TimezoneName(String name)
    +
    +
    Creates a timezone name property. +

    +

    +
    Parameters:
    name - the timezone name (e.g. "EST")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getLanguage

    +
    +public String getLanguage()
    +
    +
    Description copied from class: ICalProperty
    +
    Gets the language that the property value is written in. +

    +

    +
    +
    +
    + +
    Returns:
    the language (e.g. "en" for English) or null if not set
    +
    +
    +
    + +

    +setLanguage

    +
    +public void setLanguage(String language)
    +
    +
    Description copied from class: ICalProperty
    +
    Sets the language that the property value is written in. +

    +

    +
    +
    +
    +
    Parameters:
    language - the language (e.g. "en" for English) or null to remove
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneOffsetFrom.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneOffsetFrom.html new file mode 100644 index 000000000..d88c5257e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneOffsetFrom.html @@ -0,0 +1,322 @@ + + + + + + + +TimezoneOffsetFrom (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class TimezoneOffsetFrom

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.UtcOffsetProperty
    +          extended by biweekly.property.TimezoneOffsetFrom
    +
    +
    +
    +
    public class TimezoneOffsetFrom
    extends UtcOffsetProperty
    + + +

    +

    + Defines the timezone offset that was in use before a timezone observance. +

    +

    + Examples: + +

    + //creating a new property
    + TimezoneOffsetFrom tzname = new TimezoneOffsetFrom(-5, 0);
    + 
    + //usage in a VTIMEZONE component
    + VTimezone timezone = ...
    + StandardTime standard = new StandardTime();
    + standard.setTimezoneOffsetFrom(-5, 0);
    + ...
    + timezone.addStandardTime(standard);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.104-5
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.UtcOffsetProperty
    offset
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    TimezoneOffsetFrom(Integer hourOffset, + Integer minuteOffset) + +
    +          Creates a new timezone offset from property.
    TimezoneOffsetFrom(UtcOffset offset) + +
    +          Creates a new timezone offset from property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.UtcOffsetProperty
    getHourOffset, getMinuteOffset, getOffset, setOffset, setOffset, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TimezoneOffsetFrom

    +
    +public TimezoneOffsetFrom(Integer hourOffset,
    +                          Integer minuteOffset)
    +
    +
    Creates a new timezone offset from property. +

    +

    +
    Parameters:
    hourOffset - the hour offset (e.g. "-5")
    minuteOffset - the minute offset (e.g. "0")
    +
    +
    + +

    +TimezoneOffsetFrom

    +
    +public TimezoneOffsetFrom(UtcOffset offset)
    +
    +
    Creates a new timezone offset from property. +

    +

    +
    Parameters:
    offset - the UTC offset
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneOffsetTo.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneOffsetTo.html new file mode 100644 index 000000000..71ba70bee --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneOffsetTo.html @@ -0,0 +1,323 @@ + + + + + + + +TimezoneOffsetTo (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class TimezoneOffsetTo

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.UtcOffsetProperty
    +          extended by biweekly.property.TimezoneOffsetTo
    +
    +
    +
    +
    public class TimezoneOffsetTo
    extends UtcOffsetProperty
    + + +

    +

    + Defines the timezone offset that is currently in use in a timezone + observance. +

    +

    + Examples: + +

    + //creating a new property
    + TimezoneOffsetTo tzname = new TimezoneOffsetTo(-4, 0);
    + 
    + //usage in a VTIMEZONE component
    + VTimezone timezone = ...
    + StandardTime standard = new StandardTime();
    + standard.setTimezoneOffsetTo(-4, 0);
    + ...
    + timezone.addStandardTime(standard);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.105-6
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.UtcOffsetProperty
    offset
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    TimezoneOffsetTo(int hourOffset, + int minuteOffset) + +
    +          Creates a new timezone offset to property.
    TimezoneOffsetTo(UtcOffset offset) + +
    +          Creates a new timezone offset to property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.UtcOffsetProperty
    getHourOffset, getMinuteOffset, getOffset, setOffset, setOffset, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TimezoneOffsetTo

    +
    +public TimezoneOffsetTo(int hourOffset,
    +                        int minuteOffset)
    +
    +
    Creates a new timezone offset to property. +

    +

    +
    Parameters:
    hourOffset - the hour offset (e.g. "-5")
    minuteOffset - the minute offset (e.g. "0")
    +
    +
    + +

    +TimezoneOffsetTo

    +
    +public TimezoneOffsetTo(UtcOffset offset)
    +
    +
    Creates a new timezone offset to property. +

    +

    +
    Parameters:
    offset - the UTC offset
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneUrl.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneUrl.html new file mode 100644 index 000000000..e3b03bbb4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/TimezoneUrl.html @@ -0,0 +1,302 @@ + + + + + + + +TimezoneUrl (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class TimezoneUrl

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.TimezoneUrl
    +
    +
    +
    +
    public class TimezoneUrl
    extends TextProperty
    + + +

    +

    + Defines a URL that points to an iCalendar object that contains further + information on a timezone. +

    +

    + Examples: + +

    + //creating a new property
    + TimezoneUrl tzurl = new TimezoneUrl("http://example.com/tz.ics");
    + 
    + //usage in a VTIMEZONE component
    + VTimezone timezone = ...
    + timezone.getTimezoneUrl("http://example.com/tz.ics");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.106
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    TimezoneUrl(String url) + +
    +          Creates a timezone URL property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TimezoneUrl

    +
    +public TimezoneUrl(String url)
    +
    +
    Creates a timezone URL property. +

    +

    +
    Parameters:
    url - the timezone URL (e.g. + "http://example.com/America-New_York.ics")
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Transparency.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Transparency.html new file mode 100644 index 000000000..7f111d602 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Transparency.html @@ -0,0 +1,444 @@ + + + + + + + +Transparency (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Transparency

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.EnumProperty
    +                  extended by biweekly.property.Transparency
    +
    +
    +
    +
    public class Transparency
    extends EnumProperty
    + + +

    +

    + Defines whether an event is visible to free/busy time searches. If an event + does not have this property, the event should be considered visible + ("opaque"). +

    +

    + Examples: + +

    + //creating a new property
    + Transparency transp = Transparency.opaque();
    + 
    + if (transp.isOpaque()) {
    +   //its value is "OPAQUE"
    + }
    + 
    + //usage in a VEVENT component
    + VEvent event = ...
    + event.setTransparency(true); //hidden from searches ("TRANSPARENT")
    + event.setTransparency(false); //visible to searches ("OPAQUE")
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.101-2
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Transparency(String value) + +
    +          Creates a new transparency property.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  Collection<String>getStandardValues() + +
    +          Gets the list of acceptable values for this property.
    + booleanisOpaque() + +
    +          Determines if the event is visible to free/busy time searches.
    + booleanisTransparent() + +
    +          Determines if the event is hidden from free/busy time searches.
    +static Transparencyopaque() + +
    +          Creates a property that marks the event as being visible to free/busy + time searches.
    +static Transparencytransparent() + +
    +          Creates a property that marks the event as being hidden from free/busy + time searches.
    + + + + + + + +
    Methods inherited from class biweekly.property.EnumProperty
    is, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Transparency

    +
    +public Transparency(String value)
    +
    +
    Creates a new transparency property. +

    +

    +
    Parameters:
    value - the value
    +
    + + + + + + + + +
    +Method Detail
    + +

    +opaque

    +
    +public static Transparency opaque()
    +
    +
    Creates a property that marks the event as being visible to free/busy + time searches. +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isOpaque

    +
    +public boolean isOpaque()
    +
    +
    Determines if the event is visible to free/busy time searches. +

    +

    + +
    Returns:
    true if it's visible, false if not
    +
    +
    +
    + +

    +transparent

    +
    +public static Transparency transparent()
    +
    +
    Creates a property that marks the event as being hidden from free/busy + time searches. +

    +

    + +
    Returns:
    the property
    +
    +
    +
    + +

    +isTransparent

    +
    +public boolean isTransparent()
    +
    +
    Determines if the event is hidden from free/busy time searches. +

    +

    + +
    Returns:
    true if it's hidden, false if not
    +
    +
    +
    + +

    +getStandardValues

    +
    +protected Collection<String> getStandardValues()
    +
    +
    Description copied from class: EnumProperty
    +
    Gets the list of acceptable values for this property. +

    +

    +
    Specified by:
    getStandardValues in class EnumProperty
    +
    +
    + +
    Returns:
    the list of acceptable values
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Trigger.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Trigger.html new file mode 100644 index 000000000..01427a7f0 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Trigger.html @@ -0,0 +1,469 @@ + + + + + + + +Trigger (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Trigger

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.Trigger
    +
    +
    +
    +
    public class Trigger
    extends ICalProperty
    + + +

    +

    + Defines when an alarm will be triggered. +

    +

    + Examples: + +

    + //15 minutes before the start time
    + Duration duration = Duration.builder().prior(true).minutes(15).build();
    + Trigger trigger = new Trigger(duration, Related.START);
    + VAlarm alarm = VAlarm.display(trigger, "Meeting in 15 minutes");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.133-6
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    Trigger(Date date) + +
    +          Creates a trigger property.
    Trigger(Duration duration, + Related related) + +
    +          Creates a trigger property.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + DategetDate() + +
    +          Gets the date-time that the alarm will trigger.
    + DurationgetDuration() + +
    +          Gets the relative time at which the alarm will trigger.
    + RelatedgetRelated() + +
    +          Gets the date-time field that the duration is relative to.
    + voidsetDate(Date date) + +
    +          Sets the date-time that the alarm will trigger.
    + voidsetDuration(Duration duration, + Related related) + +
    +          Sets a relative time at which the alarm will trigger.
    + voidsetRelated(Related related) + +
    +          Sets the date-time field that the duration is relative to.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Trigger

    +
    +public Trigger(Duration duration,
    +               Related related)
    +
    +
    Creates a trigger property. +

    +

    +
    Parameters:
    duration - the relative time
    related - the date-time field that the duration is relative to
    +
    +
    + +

    +Trigger

    +
    +public Trigger(Date date)
    +
    +
    Creates a trigger property. +

    +

    +
    Parameters:
    date - the date-time the alarm will trigger.
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getDuration

    +
    +public Duration getDuration()
    +
    +
    Gets the relative time at which the alarm will trigger. +

    +

    + +
    Returns:
    the relative time or null if an absolute time is set
    +
    +
    +
    + +

    +setDuration

    +
    +public void setDuration(Duration duration,
    +                        Related related)
    +
    +
    Sets a relative time at which the alarm will trigger. +

    +

    +
    Parameters:
    duration - the relative time
    related - the date-time field that the duration is relative to
    +
    +
    +
    + +

    +getDate

    +
    +public Date getDate()
    +
    +
    Gets the date-time that the alarm will trigger. +

    +

    + +
    Returns:
    the date-time or null if a relative duration is set
    +
    +
    +
    + +

    +setDate

    +
    +public void setDate(Date date)
    +
    +
    Sets the date-time that the alarm will trigger. +

    +

    +
    Parameters:
    date - the date-time the alarm will trigger.
    +
    +
    +
    + +

    +getRelated

    +
    +public Related getRelated()
    +
    +
    Gets the date-time field that the duration is relative to. +

    +

    + +
    Returns:
    the field or null if not set
    Specification Reference:
    RFC 5545 p.24
    +
    +
    +
    + +

    +setRelated

    +
    +public void setRelated(Related related)
    +
    +
    Sets the date-time field that the duration is relative to. +

    +

    +
    Parameters:
    related - the field or null to remove
    Specification Reference:
    RFC 5545 p.24
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ICalProperty
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Uid.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Uid.html new file mode 100644 index 000000000..16783f69f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Uid.html @@ -0,0 +1,329 @@ + + + + + + + +Uid (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Uid

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.Uid
    +
    +
    +
    +
    public class Uid
    extends TextProperty
    + + +

    +

    + Defines a unique identifier for a component. +

    +

    + Examples: + +

    + Uid uid = new Uid("...");
    + 
    + //random UID
    + Uid uid = Uid.random();
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.117-8
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Uid(String uid) + +
    +          Creates a UID property.
    +  + + + + + + + + + + + +
    +Method Summary
    +static Uidrandom() + +
    +          Creates a UID property that contains a random UID.
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Uid

    +
    +public Uid(String uid)
    +
    +
    Creates a UID property. +

    +

    +
    Parameters:
    uid - the UID
    +
    + + + + + + + + +
    +Method Detail
    + +

    +random

    +
    +public static Uid random()
    +
    +
    Creates a UID property that contains a random UID. +

    +

    + +
    Returns:
    the property
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Url.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Url.html new file mode 100644 index 000000000..0be74d351 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Url.html @@ -0,0 +1,295 @@ + + + + + + + +Url (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Url

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<String>
    +          extended by biweekly.property.TextProperty
    +              extended by biweekly.property.Url
    +
    +
    +
    +
    public class Url
    extends TextProperty
    + + +

    +

    + Points to a resource that contains additional information about a component. +

    +

    + Examples: + +

    + Url url = new Url("http://example.com");
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.116-7
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    Url(String url) + +
    +          Creates a URL property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Url

    +
    +public Url(String url)
    +
    +
    Creates a URL property. +

    +

    +
    Parameters:
    url - the URL (e.g. "http://example.com/resource.ics")
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/UtcOffsetProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/UtcOffsetProperty.html new file mode 100644 index 000000000..c403b4e2a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/UtcOffsetProperty.html @@ -0,0 +1,444 @@ + + + + + + + +UtcOffsetProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class UtcOffsetProperty

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.UtcOffsetProperty
    +
    +
    +
    Direct Known Subclasses:
    TimezoneOffsetFrom, TimezoneOffsetTo
    +
    +
    +
    +
    public class UtcOffsetProperty
    extends ICalProperty
    + + +

    +Represents a property whose value is a timezone offset. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + +
    +Field Summary
    +protected  UtcOffsetoffset + +
    +           
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    UtcOffsetProperty(int hourOffset, + int minuteOffset) + +
    +           
    UtcOffsetProperty(UtcOffset offset) + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + intgetHourOffset() + +
    +           
    + intgetMinuteOffset() + +
    +           
    + UtcOffsetgetOffset() + +
    +           
    + voidsetOffset(int hourOffset, + int minuteOffset) + +
    +           
    + voidsetOffset(UtcOffset offset) + +
    +           
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +offset

    +
    +protected UtcOffset offset
    +
    +
    +
    +
    + + + + + + + + +
    +Constructor Detail
    + +

    +UtcOffsetProperty

    +
    +public UtcOffsetProperty(int hourOffset,
    +                         int minuteOffset)
    +
    +
    +
    + +

    +UtcOffsetProperty

    +
    +public UtcOffsetProperty(UtcOffset offset)
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getHourOffset

    +
    +public int getHourOffset()
    +
    +
    +
    +
    +
    +
    + +

    +getMinuteOffset

    +
    +public int getMinuteOffset()
    +
    +
    +
    +
    +
    +
    + +

    +getOffset

    +
    +public UtcOffset getOffset()
    +
    +
    +
    +
    +
    +
    + +

    +setOffset

    +
    +public void setOffset(int hourOffset,
    +                      int minuteOffset)
    +
    +
    +
    +
    +
    +
    + +

    +setOffset

    +
    +public void setOffset(UtcOffset offset)
    +
    +
    +
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ICalProperty
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/ValuedProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/ValuedProperty.html new file mode 100644 index 000000000..522c895ab --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/ValuedProperty.html @@ -0,0 +1,381 @@ + + + + + + + +ValuedProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class ValuedProperty<T>

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<T>
    +
    +
    +
    Type Parameters:
    T - the value type (e.g. String)
    +
    +
    Direct Known Subclasses:
    DateTimeProperty, DurationProperty, IntegerProperty, RecurrenceProperty, TextProperty, Xml
    +
    +
    +
    +
    public class ValuedProperty<T>
    extends ICalProperty
    + + +

    +Represents a property whose data model consists of a single object (such as a + String). +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + +
    +Field Summary
    +protected  Tvalue + +
    +           
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + +
    +Constructor Summary
    ValuedProperty(T value) + +
    +          Creates a new valued property.
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + TgetValue() + +
    +          Gets the value of this property.
    + voidsetValue(T value) + +
    +          Sets the value of this property.
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +value

    +
    +protected T value
    +
    +
    +
    +
    + + + + + + + + +
    +Constructor Detail
    + +

    +ValuedProperty

    +
    +public ValuedProperty(T value)
    +
    +
    Creates a new valued property. +

    +

    +
    Parameters:
    value - the property's value
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getValue

    +
    +public T getValue()
    +
    +
    Gets the value of this property. +

    +

    + +
    Returns:
    the value
    +
    +
    +
    + +

    +setValue

    +
    +public void setValue(T value)
    +
    +
    Sets the value of this property. +

    +

    +
    Parameters:
    value - the value
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ICalProperty
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Version.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Version.html new file mode 100644 index 000000000..7be69965f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Version.html @@ -0,0 +1,484 @@ + + + + + + + +Version (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Version

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.Version
    +
    +
    +
    +
    public class Version
    extends ICalProperty
    + + +

    +

    + Specifies the min/max versions a consumer must support in order to + successfully parse the iCalendar object. +

    +

    + Examples: + +

    + //the default iCal version
    + Version version = Version.v2_0();
    + 
    + if (verison.isV2_0()) {
    +        //version is "2.0"
    + }
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.79-80
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    Version(String version) + +
    +          Creates a new version property.
    Version(String minVersion, + String maxVersion) + +
    +          Creates a new version property.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetMaxVersion() + +
    +          Gets the maximum version that a consumer must support in order to + successfully parse the iCalendar object.
    + StringgetMinVersion() + +
    +          Gets the minimum version that a consumer must support in order to + successfully parse the iCalendar object.
    + booleanisV2_0() + +
    +          Determines if this version is the default iCalendar version.
    + voidsetMaxVersion(String maxVersion) + +
    +          Sets the maximum version that a consumer must support in order to + successfully parse the iCalendar object.
    + voidsetMinVersion(String minVersion) + +
    +          Sets the minimum version that a consumer must support in order to + successfully parse the iCalendar object.
    +static Versionv2_0() + +
    +          Creates a version property that is set to the default iCalendar version + (2.0).
    +protected  voidvalidate(List<ICalComponent> components, + List<String> warnings) + +
    +          Checks the property for data consistency problems or deviations from the + spec.
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Version

    +
    +public Version(String version)
    +
    +
    Creates a new version property. +

    +

    +
    Parameters:
    version - the version that a consumer must support in order to + successfully parse the iCalendar object
    +
    +
    + +

    +Version

    +
    +public Version(String minVersion,
    +               String maxVersion)
    +
    +
    Creates a new version property. +

    +

    +
    Parameters:
    minVersion - the minimum version that a consumer must support in + order to successfully parse the iCalendar object
    maxVersion - the maximum version that a consumer must support in + order to successfully parse the iCalendar object
    +
    + + + + + + + + +
    +Method Detail
    + +

    +v2_0

    +
    +public static Version v2_0()
    +
    +
    Creates a version property that is set to the default iCalendar version + (2.0). +

    +

    + +
    Returns:
    the property instance
    +
    +
    +
    + +

    +isV2_0

    +
    +public boolean isV2_0()
    +
    +
    Determines if this version is the default iCalendar version. +

    +

    + +
    Returns:
    true if the version is "2.0", false if not
    +
    +
    +
    + +

    +getMinVersion

    +
    +public String getMinVersion()
    +
    +
    Gets the minimum version that a consumer must support in order to + successfully parse the iCalendar object. +

    +

    + +
    Returns:
    the minimum version or null if not set
    +
    +
    +
    + +

    +setMinVersion

    +
    +public void setMinVersion(String minVersion)
    +
    +
    Sets the minimum version that a consumer must support in order to + successfully parse the iCalendar object. +

    +

    +
    Parameters:
    minVersion - the minimum version or null to remove
    +
    +
    +
    + +

    +getMaxVersion

    +
    +public String getMaxVersion()
    +
    +
    Gets the maximum version that a consumer must support in order to + successfully parse the iCalendar object. +

    +

    + +
    Returns:
    the maximum version or null if not set
    +
    +
    +
    + +

    +setMaxVersion

    +
    +public void setMaxVersion(String maxVersion)
    +
    +
    Sets the maximum version that a consumer must support in order to + successfully parse the iCalendar object. +

    +

    +
    Parameters:
    maxVersion - the maximum version (this field is required)
    +
    +
    +
    + +

    +validate

    +
    +protected void validate(List<ICalComponent> components,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalProperty
    +
    Checks the property for data consistency problems or deviations from the + spec. Meant to be overridden by child classes that wish to provide + validation logic. +

    +

    +
    Overrides:
    validate in class ICalProperty
    +
    +
    +
    Parameters:
    components - the hierarchy of components that the property belongs + to
    warnings - the list to add the warnings to
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/Xml.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/Xml.html new file mode 100644 index 000000000..dd7bb8f7b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/Xml.html @@ -0,0 +1,339 @@ + + + + + + + +Xml (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property +
    +Class Xml

    +
    +java.lang.Object
    +  extended by biweekly.property.ICalProperty
    +      extended by biweekly.property.ValuedProperty<Document>
    +          extended by biweekly.property.Xml
    +
    +
    +
    +
    public class Xml
    extends ValuedProperty<Document>
    + + +

    +

    + Used for storing properties parsed from xCal documents whose XML namespaces + are not part of the xCal XML namespace. +

    +

    + Examples: + +

    + //creating a new property
    + Xml xml = new Xml("<company xmlns=\"http://example.com\"><ceo>John Doe</ceo><name>Acme Co</name></company>");
    + 
    + //getting the parsed DOM
    + org.w3c.dom.Document document = xml.getValue();
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 6321 p.17-8
    +
    + +

    + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.ValuedProperty
    value
    + + + + + + + +
    Fields inherited from class biweekly.property.ICalProperty
    parameters
    +  + + + + + + + + + + + + + + + + +
    +Constructor Summary
    Xml(Document document) + +
    +          Creates an XML property.
    Xml(Element element) + +
    +          Creates an XML property.
    Xml(String xml) + +
    +          Creates an XML property.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class biweekly.property.ValuedProperty
    getValue, setValue, validate
    + + + + + + + +
    Methods inherited from class biweekly.property.ICalProperty
    addParameter, getParameter, getParameters, getParameters, removeParameter, setParameter, setParameter, setParameters, validate
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Xml

    +
    +public Xml(String xml)
    +    throws SAXException
    +
    +
    Creates an XML property. +

    +

    +
    Parameters:
    xml - the XML to use as the property's value +
    Throws: +
    SAXException - if the XML cannot be parsed
    +
    +
    + +

    +Xml

    +
    +public Xml(Element element)
    +
    +
    Creates an XML property. +

    +

    +
    Parameters:
    element - the XML element to use as the property's value (the + element is imported into an empty Document object)
    +
    +
    + +

    +Xml

    +
    +public Xml(Document document)
    +
    +
    Creates an XML property. +

    +

    +
    Parameters:
    document - the XML document to use as the property's value
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Action.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Action.html new file mode 100644 index 000000000..59f213a83 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Action.html @@ -0,0 +1,286 @@ + + + + + + + +Uses of Class biweekly.property.Action (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Action

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use Action
    biweekly.component  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Action in biweekly.component
    +  +

    + + + + + + + + + +
    Methods in biweekly.component that return Action
    + ActionVAlarm.getAction() + +
    +          Gets the type of action to invoke when the alarm is triggered.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type Action
    + voidVAlarm.setAction(Action action) + +
    +          Sets the type of action to invoke when the alarm is triggered.
    +  +

    + + + + + + + + +
    Constructors in biweekly.component with parameters of type Action
    VAlarm(Action action, + Trigger trigger) + +
    +          Creates a new alarm.
    +  +

    + + + + + +
    +Uses of Action in biweekly.property
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property that return Action
    +static ActionAction.audio() + +
    +          Creates an "audio" action property.
    +static ActionAction.display() + +
    +          Creates an "display" action property.
    +static ActionAction.email() + +
    +          Creates an "email" action property.
    +  +

    + + + + + +
    +Uses of Action in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Action
    +protected  ActionActionMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Attachment.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Attachment.html new file mode 100644 index 000000000..3f9a5b87c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Attachment.html @@ -0,0 +1,357 @@ + + + + + + + +Uses of Class biweekly.property.Attachment (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Attachment

    +
    + + + + + + + + + + + + + +
    +Packages that use Attachment
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Attachment in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type Attachment
    + List<Attachment>VTodo.getAttachments() + +
    +          Gets any attachments that are associated with the to-do.
    + List<Attachment>VJournal.getAttachments() + +
    +          Gets any attachments that are associated with the journal entry.
    + List<Attachment>VEvent.getAttachments() + +
    +          Gets any attachments that are associated with the event.
    + List<Attachment>VAlarm.getAttachments() + +
    +          Gets any attachments that are associated with the alarm.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Attachment
    + voidVTodo.addAttachment(Attachment attachment) + +
    +          Adds an attachment to the to-do.
    + voidVJournal.addAttachment(Attachment attachment) + +
    +          Adds an attachment to the journal entry.
    + voidVEvent.addAttachment(Attachment attachment) + +
    +          Adds an attachment to the event.
    + voidVAlarm.addAttachment(Attachment attachment) + +
    +          Adds an attachment to the alarm.
    +static VAlarmVAlarm.audio(Trigger trigger, + Attachment sound) + +
    +          Creates an audio alarm.
    +  +

    + + + + + +
    +Uses of Attachment in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Attachment
    +protected  AttachmentAttachmentMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  AttachmentAttachmentMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  AttachmentAttachmentMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type Attachment
    +protected  ICalDataTypeAttachmentMarshaller._dataType(Attachment property) + +
    +           
    +protected  voidAttachmentMarshaller._prepareParameters(Attachment property, + ICalParameters copy) + +
    +           
    +protected  JCalValueAttachmentMarshaller._writeJson(Attachment property) + +
    +           
    +protected  StringAttachmentMarshaller._writeText(Attachment property) + +
    +           
    +protected  voidAttachmentMarshaller._writeXml(Attachment property, + XCalElement element) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Attendee.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Attendee.html new file mode 100644 index 000000000..d25e2cb5d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Attendee.html @@ -0,0 +1,353 @@ + + + + + + + +Uses of Class biweekly.property.Attendee (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Attendee

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use Attendee
    biweekly.component  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Attendee in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Attendee
    + AttendeeVTodo.addAttendee(String email) + +
    +          Adds a person who is involved in the to-do.
    + AttendeeVJournal.addAttendee(String email) + +
    +          Adds a person who is involved in the journal entry.
    + AttendeeVEvent.addAttendee(String email) + +
    +          Adds a person who is attending the event.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type Attendee
    + List<Attendee>VTodo.getAttendees() + +
    +          Gets the people who are involved in the to-do.
    + List<Attendee>VJournal.getAttendees() + +
    +          Gets the people who are involved in the journal entry.
    + List<Attendee>VFreeBusy.getAttendees() + +
    +          Gets the people who are involved in the free/busy entry.
    + List<Attendee>VEvent.getAttendees() + +
    +          Gets the people who are attending the event.
    + List<Attendee>VAlarm.getAttendees() + +
    +          Gets the people who will be emailed when the alarm fires (only applicable + for EMAIL alarms).
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Attendee
    + voidVTodo.addAttendee(Attendee attendee) + +
    +          Adds a person who is involved in the to-do.
    + voidVJournal.addAttendee(Attendee attendee) + +
    +          Adds a person who is involved in the journal entry.
    + voidVFreeBusy.addAttendee(Attendee attendee) + +
    +          Adds a person who is involved in the free/busy entry.
    + voidVEvent.addAttendee(Attendee attendee) + +
    +          Adds a person who is attending the event.
    + voidVAlarm.addAttendee(Attendee attendee) + +
    +          Adds a person who will be emailed when the alarm fires (only applicable + for EMAIL alarms).
    +  +

    + + + + + +
    +Uses of Attendee in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return Attendee
    +static AttendeeAttendee.email(String email) + +
    +          Creates an attendee property using an email address as its value.
    +  +

    + + + + + +
    +Uses of Attendee in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Attendee
    +protected  AttendeeAttendeeMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/CalendarScale.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/CalendarScale.html new file mode 100644 index 000000000..6f3e83712 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/CalendarScale.html @@ -0,0 +1,255 @@ + + + + + + + +Uses of Class biweekly.property.CalendarScale (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.CalendarScale

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use CalendarScale
    biweekly  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of CalendarScale in biweekly
    +  +

    + + + + + + + + + +
    Methods in biweekly that return CalendarScale
    + CalendarScaleICalendar.getCalendarScale() + +
    +          Gets the calendar system that this iCalendar object uses.
    +  +

    + + + + + + + + + +
    Methods in biweekly with parameters of type CalendarScale
    + voidICalendar.setCalendarScale(CalendarScale calendarScale) + +
    +          Sets the calendar system that this iCalendar object uses.
    +  +

    + + + + + +
    +Uses of CalendarScale in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return CalendarScale
    +static CalendarScaleCalendarScale.gregorian() + +
    +          Creates a new property whose value is set to "gregorian".
    +  +

    + + + + + +
    +Uses of CalendarScale in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return CalendarScale
    +protected  CalendarScaleCalendarScaleMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Categories.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Categories.html new file mode 100644 index 000000000..cf80f530f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Categories.html @@ -0,0 +1,315 @@ + + + + + + + +Uses of Class biweekly.property.Categories (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Categories

    +
    + + + + + + + + + + + + + +
    +Packages that use Categories
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Categories in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Categories
    + CategoriesVTodo.addCategories(List<String> categories) + +
    +          Adds a list of "tags" or "keywords" that describe the to-do.
    + CategoriesVJournal.addCategories(List<String> categories) + +
    +          Adds a list of "tags" or "keywords" that describe the journal entry.
    + CategoriesVEvent.addCategories(List<String> categories) + +
    +          Adds a list of "tags" or "keywords" that describe the event.
    + CategoriesVTodo.addCategories(String... categories) + +
    +          Adds a list of "tags" or "keywords" that describe the to-do.
    + CategoriesVJournal.addCategories(String... categories) + +
    +          Adds a list of "tags" or "keywords" that describe the journal entry.
    + CategoriesVEvent.addCategories(String... categories) + +
    +          Adds a list of "tags" or "keywords" that describe the event.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type Categories
    + List<Categories>VTodo.getCategories() + +
    +          Gets a list of "tags" or "keywords" that describe the to-do.
    + List<Categories>VJournal.getCategories() + +
    +          Gets a list of "tags" or "keywords" that describe the journal entry.
    + List<Categories>VEvent.getCategories() + +
    +          Gets a list of "tags" or "keywords" that describe the event.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Categories
    + voidVTodo.addCategories(Categories categories) + +
    +          Adds a list of "tags" or "keywords" that describe the to-do.
    + voidVJournal.addCategories(Categories categories) + +
    +          Adds a list of "tags" or "keywords" that describe the journal entry.
    + voidVEvent.addCategories(Categories categories) + +
    +          Adds a list of "tags" or "keywords" that describe the event.
    +  +

    + + + + + +
    +Uses of Categories in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Categories
    + CategoriesCategoriesMarshaller.newInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Classification.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Classification.html new file mode 100644 index 000000000..692001a47 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Classification.html @@ -0,0 +1,327 @@ + + + + + + + +Uses of Class biweekly.property.Classification (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Classification

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use Classification
    biweekly.component  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Classification in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Classification
    + ClassificationVTodo.getClassification() + +
    +          Gets the level of sensitivity of the to-do data.
    + ClassificationVJournal.getClassification() + +
    +          Gets the level of sensitivity of the journal entry.
    + ClassificationVEvent.getClassification() + +
    +          Gets the level of sensitivity of the event data.
    + ClassificationVTodo.setClassification(String classification) + +
    +          Sets the level of sensitivity of the to-do data.
    + ClassificationVJournal.setClassification(String classification) + +
    +          Sets the level of sensitivity of the journal entry.
    + ClassificationVEvent.setClassification(String classification) + +
    +          Sets the level of sensitivity of the event data.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Classification
    + voidVTodo.setClassification(Classification classification) + +
    +          Sets the level of sensitivity of the to-do data.
    + voidVJournal.setClassification(Classification classification) + +
    +          Sets the level of sensitivity of the journal entry.
    + voidVEvent.setClassification(Classification classification) + +
    +          Sets the level of sensitivity of the event data.
    +  +

    + + + + + +
    +Uses of Classification in biweekly.property
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property that return Classification
    +static ClassificationClassification.confidential() + +
    +          Creates a "confidential" classification property.
    +static ClassificationClassification.private_() + +
    +          Creates a "private" classification property.
    +static ClassificationClassification.public_() + +
    +          Creates a "public" classification property.
    +  +

    + + + + + +
    +Uses of Classification in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Classification
    +protected  ClassificationClassificationMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Comment.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Comment.html new file mode 100644 index 000000000..9b001db9d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Comment.html @@ -0,0 +1,338 @@ + + + + + + + +Uses of Class biweekly.property.Comment (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Comment

    +
    + + + + + + + + + + + + + +
    +Packages that use Comment
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Comment in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Comment
    + CommentVTodo.addComment(String comment) + +
    +          Adds a comment to the to-do.
    + CommentVJournal.addComment(String comment) + +
    +          Adds a comment to the journal entry.
    + CommentVFreeBusy.addComment(String comment) + +
    +          Adds a comment to the free/busy entry.
    + CommentVEvent.addComment(String comment) + +
    +          Adds a comment to the event.
    + CommentObservance.addComment(String comment) + +
    +          Adds a comment to the timezone observance.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type Comment
    + List<Comment>VTodo.getComments() + +
    +          Gets the comments attached to the to-do.
    + List<Comment>VJournal.getComments() + +
    +          Gets the comments attached to the journal entry.
    + List<Comment>VFreeBusy.getComments() + +
    +          Gets the comments attached to the free/busy entry.
    + List<Comment>VEvent.getComments() + +
    +          Gets the comments attached to the event.
    + List<Comment>Observance.getComments() + +
    +          Gets the comments attached to the timezone observance.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Comment
    + voidVTodo.addComment(Comment comment) + +
    +          Adds a comment to the to-do.
    + voidVJournal.addComment(Comment comment) + +
    +          Adds a comment to the journal entry.
    + voidVFreeBusy.addComment(Comment comment) + +
    +          Adds a comment to the free/busy entry.
    + voidVEvent.addComment(Comment comment) + +
    +          Adds a comment to the event.
    + voidObservance.addComment(Comment comment) + +
    +          Adds a comment to the timezone observance.
    +  +

    + + + + + +
    +Uses of Comment in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Comment
    +protected  CommentCommentMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Completed.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Completed.html new file mode 100644 index 000000000..b80cb4aae --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Completed.html @@ -0,0 +1,234 @@ + + + + + + + +Uses of Class biweekly.property.Completed (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Completed

    +
    + + + + + + + + + + + + + +
    +Packages that use Completed
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Completed in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return Completed
    + CompletedVTodo.getCompleted() + +
    +          Gets the date and time that the to-do was completed.
    + CompletedVTodo.setCompleted(Date completed) + +
    +          Sets the date and time that the to-do was completed.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type Completed
    + voidVTodo.setCompleted(Completed completed) + +
    +          Sets the date and time that the to-do was completed.
    +  +

    + + + + + +
    +Uses of Completed in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Completed
    +protected  CompletedCompletedMarshaller.newInstance(Date date) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Contact.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Contact.html new file mode 100644 index 000000000..a43365425 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Contact.html @@ -0,0 +1,314 @@ + + + + + + + +Uses of Class biweekly.property.Contact (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Contact

    +
    + + + + + + + + + + + + + +
    +Packages that use Contact
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Contact in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Contact
    + ContactVTodo.addContact(String contact) + +
    +          Adds a contact to the to-do.
    + ContactVJournal.addContact(String contact) + +
    +          Adds a contact to the journal entry.
    + ContactVFreeBusy.addContact(String contact) + +
    +          Sets the contact for the free/busy entry.
    + ContactVEvent.addContact(String contact) + +
    +          Adds a contact to the event.
    + ContactVFreeBusy.getContact() + +
    +          Gets the contact associated with the free/busy entry.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type Contact
    + List<Contact>VTodo.getContacts() + +
    +          Gets the contacts associated with the to-do.
    + List<Contact>VJournal.getContacts() + +
    +          Gets the contacts associated with the journal entry.
    + List<Contact>VEvent.getContacts() + +
    +          Gets the contacts associated with the event.
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Contact
    + voidVTodo.addContact(Contact contact) + +
    +          Adds a contact to the to-do.
    + voidVJournal.addContact(Contact contact) + +
    +          Adds a contact to the journal entry.
    + voidVEvent.addContact(Contact contact) + +
    +          Adds a contact to the event.
    + voidVFreeBusy.setContact(Contact contact) + +
    +          Sets the contact for the free/busy entry.
    +  +

    + + + + + +
    +Uses of Contact in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Contact
    +protected  ContactContactMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Created.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Created.html new file mode 100644 index 000000000..25336dfd5 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Created.html @@ -0,0 +1,282 @@ + + + + + + + +Uses of Class biweekly.property.Created (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Created

    +
    + + + + + + + + + + + + + +
    +Packages that use Created
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Created in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Created
    + CreatedVTodo.getCreated() + +
    +          Gets the date-time that the to-do was initially created.
    + CreatedVJournal.getCreated() + +
    +          Gets the date-time that the journal entry was initially created.
    + CreatedVEvent.getCreated() + +
    +          Gets the date-time that the event was initially created.
    + CreatedVTodo.setCreated(Date created) + +
    +          Sets the date-time that the to-do was initially created.
    + CreatedVJournal.setCreated(Date created) + +
    +          Sets the date-time that the journal entry was initially created.
    + CreatedVEvent.setCreated(Date created) + +
    +          Sets the date-time that the event was initially created.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Created
    + voidVTodo.setCreated(Created created) + +
    +          Sets the date-time that the to-do was initially created.
    + voidVJournal.setCreated(Created created) + +
    +          Sets the date-time that the journal entry was initially created.
    + voidVEvent.setCreated(Created created) + +
    +          Sets the date-time that the event was initially created.
    +  +

    + + + + + +
    +Uses of Created in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Created
    +protected  CreatedCreatedMarshaller.newInstance(Date date) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateDue.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateDue.html new file mode 100644 index 000000000..521b44dd3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateDue.html @@ -0,0 +1,235 @@ + + + + + + + +Uses of Class biweekly.property.DateDue (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.DateDue

    +
    + + + + + + + + + + + + + +
    +Packages that use DateDue
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of DateDue in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return DateDue
    + DateDueVTodo.getDateDue() + +
    +          Gets the date that a to-do is due by.
    + DateDueVTodo.setDateDue(Date dateDue) + +
    +          Sets the date that a to-do is due by.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type DateDue
    + voidVTodo.setDateDue(DateDue dateDue) + +
    +          Sets the date that a to-do is due by.
    +  +

    + + + + + +
    +Uses of DateDue in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return DateDue
    +protected  DateDueDateDueMarshaller.newInstance(Date date, + boolean hasTime) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateEnd.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateEnd.html new file mode 100644 index 000000000..67a15f12d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateEnd.html @@ -0,0 +1,259 @@ + + + + + + + +Uses of Class biweekly.property.DateEnd (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.DateEnd

    +
    + + + + + + + + + + + + + +
    +Packages that use DateEnd
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of DateEnd in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return DateEnd
    + DateEndVFreeBusy.getDateEnd() + +
    +          Gets the date that the free/busy entry ends.
    + DateEndVEvent.getDateEnd() + +
    +          Gets the date that the event ends.
    + DateEndVFreeBusy.setDateEnd(Date dateEnd) + +
    +          Sets the date that the free/busy entry ends.
    + DateEndVEvent.setDateEnd(Date dateEnd) + +
    +          Sets the date that the event ends.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type DateEnd
    + voidVFreeBusy.setDateEnd(DateEnd dateEnd) + +
    +          Sets the date that the free/busy entry ends.
    + voidVEvent.setDateEnd(DateEnd dateEnd) + +
    +          Sets the date that the event ends.
    +  +

    + + + + + +
    +Uses of DateEnd in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return DateEnd
    +protected  DateEndDateEndMarshaller.newInstance(Date date, + boolean hasTime) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateOrDateTimeProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateOrDateTimeProperty.html new file mode 100644 index 000000000..422f0ec32 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateOrDateTimeProperty.html @@ -0,0 +1,240 @@ + + + + + + + +Uses of Class biweekly.property.DateOrDateTimeProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.DateOrDateTimeProperty

    +
    + + + + + + + + + + + + + +
    +Packages that use DateOrDateTimeProperty
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of DateOrDateTimeProperty in biweekly.property
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of DateOrDateTimeProperty in biweekly.property
    + classDateDue + +
    +           + Defines the date that a to-do task is due by.
    + classDateEnd + +
    +           + Defines the date that an event or free/busy component ends.
    + classDateStart + +
    +           + Defines the date that an event, free/busy component, or timezone component + starts.
    + classRecurrenceId + +
    +           + Records the original value of the DateStart property if a recurrence + instance has been modified.
    +  +

    + + + + + +
    +Uses of DateOrDateTimeProperty in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Classes in biweekly.property.marshaller with type parameters of type DateOrDateTimeProperty
    + classDateOrDateTimePropertyMarshaller<T extends DateOrDateTimeProperty> + +
    +          Marshals properties that have either "date" or "date-time" values.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateStart.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateStart.html new file mode 100644 index 000000000..21d5739c3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateStart.html @@ -0,0 +1,333 @@ + + + + + + + +Uses of Class biweekly.property.DateStart (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.DateStart

    +
    + + + + + + + + + + + + + +
    +Packages that use DateStart
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of DateStart in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return DateStart
    + DateStartVTodo.getDateStart() + +
    +          Gets the date that the to-do starts.
    + DateStartVJournal.getDateStart() + +
    +          Gets the date that the journal entry starts.
    + DateStartVFreeBusy.getDateStart() + +
    +          Gets the date that the free/busy entry starts.
    + DateStartVEvent.getDateStart() + +
    +          Gets the date that the event starts.
    + DateStartObservance.getDateStart() + +
    +          Gets the date that the timezone observance starts.
    + DateStartVTodo.setDateStart(Date dateStart) + +
    +          Sets the date that the to-do starts.
    + DateStartVJournal.setDateStart(Date dateStart) + +
    +          Sets the date that the journal entry starts.
    + DateStartVFreeBusy.setDateStart(Date dateStart) + +
    +          Sets the date that the free/busy entry starts.
    + DateStartVEvent.setDateStart(Date dateStart) + +
    +          Sets the date that the event starts (required if no Method + property is defined).
    + DateStartObservance.setDateStart(DateTimeComponents components) + +
    +          Sets the date that the timezone observance starts.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type DateStart
    + voidVTodo.setDateStart(DateStart dateStart) + +
    +          Sets the date that the to-do starts.
    + voidVJournal.setDateStart(DateStart dateStart) + +
    +          Sets the date that the journal entry starts.
    + voidVFreeBusy.setDateStart(DateStart dateStart) + +
    +          Sets the date that the free/busy entry starts.
    + voidVEvent.setDateStart(DateStart dateStart) + +
    +          Sets the date that the event starts (required if no Method + property is defined).
    + voidObservance.setDateStart(DateStart dateStart) + +
    +          Sets the date that the timezone observance starts.
    +  +

    + + + + + +
    +Uses of DateStart in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return DateStart
    +protected  DateStartDateStartMarshaller.newInstance(Date date, + boolean hasTime) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateTimeProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateTimeProperty.html new file mode 100644 index 000000000..23dbd3473 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateTimeProperty.html @@ -0,0 +1,243 @@ + + + + + + + +Uses of Class biweekly.property.DateTimeProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.DateTimeProperty

    +
    + + + + + + + + + + + + + +
    +Packages that use DateTimeProperty
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of DateTimeProperty in biweekly.property
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of DateTimeProperty in biweekly.property
    + classCompleted + +
    +           + Defines the date and time that a to-do task was completed.
    + classCreated + +
    +           + Defines the date-time that the calendar information was initially created.
    + classDateTimeStamp + +
    +           + The meaning of this property varies depending on the state of the iCalendar + object: + + If a Method property exists: Defines the creation date of + the iCalendar object (not the creation date of the actual calendar data).
    + classLastModified + +
    +           + Defines the date and time that the calendar data in a component was last + changed.
    +  +

    + + + + + +
    +Uses of DateTimeProperty in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Classes in biweekly.property.marshaller with type parameters of type DateTimeProperty
    + classDateTimePropertyMarshaller<T extends DateTimeProperty> + +
    +          Marshals properties that have "date-time" values.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateTimeStamp.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateTimeStamp.html new file mode 100644 index 000000000..0188d1ff1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DateTimeStamp.html @@ -0,0 +1,342 @@ + + + + + + + +Uses of Class biweekly.property.DateTimeStamp (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.DateTimeStamp

    +
    + + + + + + + + + + + + + +
    +Packages that use DateTimeStamp
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of DateTimeStamp in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return DateTimeStamp
    + DateTimeStampVTodo.getDateTimeStamp() + +
    +          Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the to-do was + last modified (the LastModified property also holds this + information).
    + DateTimeStampVJournal.getDateTimeStamp() + +
    +          Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the journal + entry was last modified (the LastModified property also holds + this information).
    + DateTimeStampVFreeBusy.getDateTimeStamp() + +
    +          Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the free/busy + entry was last modified (the LastModified property also holds + this information).
    + DateTimeStampVEvent.getDateTimeStamp() + +
    +          Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the event was + last modified (the LastModified property also holds this + information).
    + DateTimeStampVTodo.setDateTimeStamp(Date dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the to-do was + last modified (the LastModified property also holds this + information).
    + DateTimeStampVJournal.setDateTimeStamp(Date dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the journal + entry was last modified (the LastModified property also holds + this information).
    + DateTimeStampVFreeBusy.setDateTimeStamp(Date dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the free/busy + entry was last modified (the LastModified property also holds + this information).
    + DateTimeStampVEvent.setDateTimeStamp(Date dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the event was + last modified (the LastModified property also holds this + information).
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type DateTimeStamp
    + voidVTodo.setDateTimeStamp(DateTimeStamp dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the to-do was + last modified (the LastModified property also holds this + information).
    + voidVJournal.setDateTimeStamp(DateTimeStamp dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the journal + entry was last modified (the LastModified property also holds + this information).
    + voidVFreeBusy.setDateTimeStamp(DateTimeStamp dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the free/busy + entry was last modified (the LastModified property also holds + this information).
    + voidVEvent.setDateTimeStamp(DateTimeStamp dateTimeStamp) + +
    +          Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the event was + last modified (the LastModified property also holds this + information).
    +  +

    + + + + + +
    +Uses of DateTimeStamp in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return DateTimeStamp
    +protected  DateTimeStampDateTimeStampMarshaller.newInstance(Date date) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Description.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Description.html new file mode 100644 index 000000000..83101578a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Description.html @@ -0,0 +1,317 @@ + + + + + + + +Uses of Class biweekly.property.Description (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Description

    +
    + + + + + + + + + + + + + +
    +Packages that use Description
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Description in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Description
    + DescriptionVJournal.addDescription(String description) + +
    +          Adds a detailed description to the journal entry.
    + DescriptionVTodo.getDescription() + +
    +          Gets a detailed description of the to-do.
    + DescriptionVEvent.getDescription() + +
    +          Gets a detailed description of the event.
    + DescriptionVAlarm.getDescription() + +
    +           + Gets a detailed description of the alarm.
    + DescriptionVTodo.setDescription(String description) + +
    +          Sets a detailed description of the to-do.
    + DescriptionVEvent.setDescription(String description) + +
    +          Sets a detailed description of the event.
    + DescriptionVAlarm.setDescription(String description) + +
    +           + Sets a detailed description of the alarm.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type Description
    + List<Description>VJournal.getDescriptions() + +
    +          Gets the detailed descriptions to the journal entry.
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Description
    + voidVJournal.addDescription(Description description) + +
    +          Adds a detailed description to the journal entry.
    + voidVTodo.setDescription(Description description) + +
    +          Sets a detailed description of the to-do.
    + voidVEvent.setDescription(Description description) + +
    +          Sets a detailed description of the event.
    + voidVAlarm.setDescription(Description description) + +
    +           + Sets a detailed description of the alarm.
    +  +

    + + + + + +
    +Uses of Description in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Description
    +protected  DescriptionDescriptionMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DurationProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DurationProperty.html new file mode 100644 index 000000000..37e97b85f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/DurationProperty.html @@ -0,0 +1,339 @@ + + + + + + + +Uses of Class biweekly.property.DurationProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.DurationProperty

    +
    + + + + + + + + + + + + + +
    +Packages that use DurationProperty
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of DurationProperty in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return DurationProperty
    + DurationPropertyVTodo.getDuration() + +
    +          Gets the duration of the to-do.
    + DurationPropertyVEvent.getDuration() + +
    +          Gets the duration of the event.
    + DurationPropertyVAlarm.getDuration() + +
    +          Gets the length of the pause between alarm repetitions.
    + DurationPropertyVTodo.setDuration(Duration duration) + +
    +          Sets the duration of the to-do.
    + DurationPropertyVEvent.setDuration(Duration duration) + +
    +          Sets the duration of the event.
    + DurationPropertyVAlarm.setDuration(Duration duration) + +
    +          Sets the length of the pause between alarm repetitions.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type DurationProperty
    + voidVTodo.setDuration(DurationProperty duration) + +
    +          Sets the duration of the to-do.
    + voidVEvent.setDuration(DurationProperty duration) + +
    +          Sets the duration of the event.
    + voidVAlarm.setDuration(DurationProperty duration) + +
    +          Sets the length of the pause between alarm repetitions.
    +  +

    + + + + + +
    +Uses of DurationProperty in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return DurationProperty
    +protected  DurationPropertyDurationPropertyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  DurationPropertyDurationPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  DurationPropertyDurationPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type DurationProperty
    +protected  JCalValueDurationPropertyMarshaller._writeJson(DurationProperty property) + +
    +           
    +protected  StringDurationPropertyMarshaller._writeText(DurationProperty property) + +
    +           
    +protected  voidDurationPropertyMarshaller._writeXml(DurationProperty property, + XCalElement element) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/EnumProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/EnumProperty.html new file mode 100644 index 000000000..c80f90a3f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/EnumProperty.html @@ -0,0 +1,219 @@ + + + + + + + +Uses of Class biweekly.property.EnumProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.EnumProperty

    +
    + + + + + + + + + +
    +Packages that use EnumProperty
    biweekly.property  
    +  +

    + + + + + +
    +Uses of EnumProperty in biweekly.property
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of EnumProperty in biweekly.property
    + classAction + +
    +           + Defines the type of action to invoke when an alarm is triggered.
    + classCalendarScale + +
    +           + Specifies the calendar system that this iCalendar object uses.
    + classClassification + +
    +           + Defines the level of sensitivity of the iCalendar data.
    + classStatus + +
    +           + Defines the status of the component that this property belongs to, such as a + to-do task being in a "completed" state.
    + classTransparency + +
    +           + Defines whether an event is visible to free/busy time searches.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ExceptionDates.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ExceptionDates.html new file mode 100644 index 000000000..137464e4d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ExceptionDates.html @@ -0,0 +1,344 @@ + + + + + + + +Uses of Class biweekly.property.ExceptionDates (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.ExceptionDates

    +
    + + + + + + + + + + + + + +
    +Packages that use ExceptionDates
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ExceptionDates in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type ExceptionDates
    + List<ExceptionDates>VTodo.getExceptionDates() + +
    +          Gets the list of exceptions to the recurrence rule defined in the to-do + (if one is defined).
    + List<ExceptionDates>VJournal.getExceptionDates() + +
    +          Gets the list of exceptions to the recurrence rule defined in the journal + entry (if one is defined).
    + List<ExceptionDates>VEvent.getExceptionDates() + +
    +          Gets the list of exceptions to the recurrence rule defined in the event + (if one is defined).
    + List<ExceptionDates>Observance.getExceptionDates() + +
    +          Gets the list of exceptions to the timezone observance.
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type ExceptionDates
    + voidVTodo.addExceptionDates(ExceptionDates exceptionDates) + +
    +          Adds a list of exceptions to the recurrence rule defined in the to-do (if + one is defined).
    + voidVJournal.addExceptionDates(ExceptionDates exceptionDates) + +
    +          Adds a list of exceptions to the recurrence rule defined in the journal + entry (if one is defined).
    + voidVEvent.addExceptionDates(ExceptionDates exceptionDates) + +
    +          Adds a list of exceptions to the recurrence rule defined in the event (if + one is defined).
    + voidObservance.addExceptionDates(ExceptionDates exceptionDates) + +
    +          Adds a list of exceptions to the timezone observance.
    +  +

    + + + + + +
    +Uses of ExceptionDates in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return ExceptionDates
    +protected  ExceptionDatesExceptionDatesMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  ExceptionDatesExceptionDatesMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  ExceptionDatesExceptionDatesMarshaller.newInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type ExceptionDates
    +protected  ICalDataTypeExceptionDatesMarshaller._dataType(ExceptionDates property) + +
    +           
    +protected  JCalValueExceptionDatesMarshaller._writeJson(ExceptionDates property) + +
    +           
    +protected  voidExceptionDatesMarshaller._writeXml(ExceptionDates property, + XCalElement element) + +
    +           
    +protected  StringExceptionDatesMarshaller.writeValue(ExceptionDates property, + Date value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ExceptionRule.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ExceptionRule.html new file mode 100644 index 000000000..dce54c801 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ExceptionRule.html @@ -0,0 +1,299 @@ + + + + + + + +Uses of Class biweekly.property.ExceptionRule (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.ExceptionRule

    +
    + + + + + + + + + + + + + +
    +Packages that use ExceptionRule
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ExceptionRule in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return ExceptionRule
    + ExceptionRuleVTodo.addExceptionRule(Recurrence recur) + +
    +           + Adds an exception for the RecurrenceRule property.
    + ExceptionRuleVJournal.addExceptionRule(Recurrence recur) + +
    +           + Adds an exception for the RecurrenceRule property.
    + ExceptionRuleVEvent.addExceptionRule(Recurrence recur) + +
    +           + Adds an exception for the RecurrenceRule property.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type ExceptionRule
    + List<ExceptionRule>VTodo.getExceptionRules() + +
    +           + Gets the exceptions for the RecurrenceRule property.
    + List<ExceptionRule>VJournal.getExceptionRules() + +
    +           + Gets the exceptions for the RecurrenceRule property.
    + List<ExceptionRule>VEvent.getExceptionRules() + +
    +           + Gets the exceptions for the RecurrenceRule property.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type ExceptionRule
    + voidVTodo.addExceptionRule(ExceptionRule exceptionRule) + +
    +           + Adds an exception for the RecurrenceRule property.
    + voidVJournal.addExceptionRule(ExceptionRule exceptionRule) + +
    +           + Adds an exception for the RecurrenceRule property.
    + voidVEvent.addExceptionRule(ExceptionRule exceptionRule) + +
    +           + Adds an exception for the RecurrenceRule property.
    +  +

    + + + + + +
    +Uses of ExceptionRule in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return ExceptionRule
    +protected  ExceptionRuleExceptionRuleMarshaller.newInstance(Recurrence recur) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/FreeBusy.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/FreeBusy.html new file mode 100644 index 000000000..b4cf1c12b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/FreeBusy.html @@ -0,0 +1,315 @@ + + + + + + + +Uses of Class biweekly.property.FreeBusy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.FreeBusy

    +
    + + + + + + + + + + + + + +
    +Packages that use FreeBusy
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of FreeBusy in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return FreeBusy
    + FreeBusyVFreeBusy.addFreeBusy(FreeBusyType type, + Date start, + Date end) + +
    +          Adds a single time period for which the person is free or busy (for + example, "free" between 1pm-3pm).
    + FreeBusyVFreeBusy.addFreeBusy(FreeBusyType type, + Date start, + Duration duration) + +
    +          Adds a single time period for which the person is free or busy (for + example, "free" for 2 hours after 1pm).
    +  +

    + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type FreeBusy
    + List<FreeBusy>VFreeBusy.getFreeBusy() + +
    +          Gets the person's availabilities over certain time periods (for example, + "free" between 1pm-3pm, but "busy" between 3pm-4pm).
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type FreeBusy
    + voidVFreeBusy.addFreeBusy(FreeBusy freeBusy) + +
    +          Adds a list of time periods for which the person is free or busy (for + example, "free" between 1pm-3pm and 4pm-5pm).
    +  +

    + + + + + +
    +Uses of FreeBusy in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return FreeBusy
    +protected  FreeBusyFreeBusyMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  FreeBusyFreeBusyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  FreeBusyFreeBusyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type FreeBusy
    +protected  JCalValueFreeBusyMarshaller._writeJson(FreeBusy property) + +
    +           
    +protected  StringFreeBusyMarshaller._writeText(FreeBusy property) + +
    +           
    +protected  voidFreeBusyMarshaller._writeXml(FreeBusy property, + XCalElement element) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Geo.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Geo.html new file mode 100644 index 000000000..88e93b15c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Geo.html @@ -0,0 +1,299 @@ + + + + + + + +Uses of Class biweekly.property.Geo (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Geo

    +
    + + + + + + + + + + + + + +
    +Packages that use Geo
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Geo in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return Geo
    + GeoVTodo.getGeo() + +
    +          Gets a set of geographical coordinates.
    + GeoVEvent.getGeo() + +
    +          Gets a set of geographical coordinates.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Geo
    + voidVTodo.setGeo(Geo geo) + +
    +          Sets a set of geographical coordinates.
    + voidVEvent.setGeo(Geo geo) + +
    +          Sets a set of geographical coordinates.
    +  +

    + + + + + +
    +Uses of Geo in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Geo
    +protected  GeoGeoMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  GeoGeoMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  GeoGeoMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type Geo
    +protected  JCalValueGeoMarshaller._writeJson(Geo property) + +
    +           
    +protected  StringGeoMarshaller._writeText(Geo property) + +
    +           
    +protected  voidGeoMarshaller._writeXml(Geo property, + XCalElement element) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ICalProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ICalProperty.html new file mode 100644 index 000000000..6e380e250 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ICalProperty.html @@ -0,0 +1,1280 @@ + + + + + + + +Uses of Class biweekly.property.ICalProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.ICalProperty

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use ICalProperty
    biweekly  
    biweekly.component  
    biweekly.component.marshaller  
    biweekly.io  
    biweekly.io.json  
    biweekly.io.text  
    biweekly.io.xml  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ICalProperty in biweekly
    +  +

    + + + + + + + + + +
    Methods in biweekly that return ICalProperty
    + ICalPropertyValidationWarnings.WarningsGroup.getProperty() + +
    +          Gets the property object that caused the validation warnings.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Method parameters in biweekly with type arguments of type ICalProperty
    + List<ValidationWarnings.WarningsGroup>ValidationWarnings.getByProperty(Class<? extends ICalProperty> propertyClass) + +
    +          Gets all validation warnings of a given property.
    + Biweekly.ParserChainTextReaderBiweekly.ParserChainTextReader.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainTextStringBiweekly.ParserChainTextString.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainXmlStringBiweekly.ParserChainXmlString.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainXmlReaderBiweekly.ParserChainXmlReader.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainXmlDocumentBiweekly.ParserChainXmlDocument.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainJsonReaderBiweekly.ParserChainJsonReader.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainJsonStringBiweekly.ParserChainJsonString.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.WriterChainXmlBiweekly.WriterChainXml.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    +  +

    + + + + + + + + +
    Constructors in biweekly with parameters of type ICalProperty
    ValidationWarnings.WarningsGroup(ICalProperty property, + List<ICalComponent> componentHierarchy, + List<String> messages) + +
    +          Creates a new set of validation warnings for a property.
    +  +

    + + + + + +
    +Uses of ICalProperty in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Fields in biweekly.component with type parameters of type ICalProperty
    +protected  ListMultimap<Class<? extends ICalProperty>,ICalProperty>ICalComponent.properties + +
    +           
    +protected  ListMultimap<Class<? extends ICalProperty>,ICalProperty>ICalComponent.properties + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with type parameters of type ICalProperty
    + + + + + +
    +<T extends ICalProperty> +
    +List<T>
    +
    ICalComponent.getProperties(Class<T> clazz) + +
    +          Gets all properties of a given class.
    + + + + + +
    +<T extends ICalProperty> +
    +T
    +
    ICalComponent.getProperty(Class<T> clazz) + +
    +          Gets the first property of a given class.
    + + + + + +
    +<T extends ICalProperty> +
    +void
    +
    ICalComponent.setProperty(Class<T> clazz, + T property) + +
    +          Replaces all existing properties of the given class with a single + property instance.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type ICalProperty
    + ListMultimap<Class<? extends ICalProperty>,ICalProperty>ICalComponent.getProperties() + +
    +          Gets all the properties associated with this component.
    + ListMultimap<Class<? extends ICalProperty>,ICalProperty>ICalComponent.getProperties() + +
    +          Gets all the properties associated with this component.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type ICalProperty
    + voidICalComponent.addProperty(ICalProperty property) + +
    +          Adds a property to this component.
    + voidICalComponent.setProperty(ICalProperty property) + +
    +          Replaces all existing properties of the given class with a single + property instance.
    +  +

    + + + + + + + + + +
    Method parameters in biweekly.component with type arguments of type ICalProperty
    + voidICalComponent.removeProperties(Class<? extends ICalProperty> clazz) + +
    +          Removes properties from the iCalendar object.
    +  +

    + + + + + +
    +Uses of ICalProperty in biweekly.component.marshaller
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component.marshaller that return types with arguments of type ICalProperty
    + List<ICalProperty>ICalComponentMarshaller.getProperties(T component) + +
    +          Gets the properties to marshal.
    + List<ICalProperty>VFreeBusyMarshaller.getProperties(VFreeBusy component) + +
    +           
    +  +

    + + + + + +
    +Uses of ICalProperty in biweekly.io
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.io that return types with arguments of type ICalProperty
    + ICalPropertyMarshaller<? extends ICalProperty>ICalMarshallerRegistrar.getPropertyMarshaller(Class<? extends ICalProperty> clazz) + +
    +          Gets a property marshaller by class.
    + ICalPropertyMarshaller<? extends ICalProperty>ICalMarshallerRegistrar.getPropertyMarshaller(ICalProperty property) + +
    +          Gets the appropriate property marshaller for a given property instance.
    + ICalPropertyMarshaller<? extends ICalProperty>ICalMarshallerRegistrar.getPropertyMarshaller(QName qname) + +
    +          Gets a property marshaller by XML local name and namespace.
    + ICalPropertyMarshaller<? extends ICalProperty>ICalMarshallerRegistrar.getPropertyMarshaller(String propertyName) + +
    +          Gets a property marshaller by name.
    +  +

    + + + + + + + + + +
    Methods in biweekly.io with parameters of type ICalProperty
    + ICalPropertyMarshaller<? extends ICalProperty>ICalMarshallerRegistrar.getPropertyMarshaller(ICalProperty property) + +
    +          Gets the appropriate property marshaller for a given property instance.
    +  +

    + + + + + + + + + + + + + + + + + +
    Method parameters in biweekly.io with type arguments of type ICalProperty
    + ICalPropertyMarshaller<? extends ICalProperty>ICalMarshallerRegistrar.getPropertyMarshaller(Class<? extends ICalProperty> clazz) + +
    +          Gets a property marshaller by class.
    + voidICalMarshallerRegistrar.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Registers a property marshaller.
    + voidICalMarshallerRegistrar.unregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Unregisters a property marshaller
    +  +

    + + + + + +
    +Uses of ICalProperty in biweekly.io.json
    +  +

    + + + + + + + + + + + + + +
    Method parameters in biweekly.io.json with type arguments of type ICalProperty
    + voidJCalWriter.registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    + voidJCalReader.registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    +  +

    + + + + + +
    +Uses of ICalProperty in biweekly.io.text
    +  +

    + + + + + + + + + + + + + +
    Method parameters in biweekly.io.text with type arguments of type ICalProperty
    + voidICalWriter.registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    + voidICalReader.registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    +  +

    + + + + + +
    +Uses of ICalProperty in biweekly.io.xml
    +  +

    + + + + + + + + + +
    Method parameters in biweekly.io.xml with type arguments of type ICalProperty
    + voidXCalDocument.registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    +  +

    + + + + + +
    +Uses of ICalProperty in biweekly.property
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of ICalProperty in biweekly.property
    + classAction + +
    +           + Defines the type of action to invoke when an alarm is triggered.
    + classAttachment + +
    +           + Represents a binary resource that is associated with an event, to-do, journal + entry, or alarm.
    + classAttendee + +
    +           + Defines an attendee (such as a person attending an event).
    + classCalendarScale + +
    +           + Specifies the calendar system that this iCalendar object uses.
    + classCategories + +
    +           + Defines a list of "tags" or "keywords" that describe the component.
    + classClassification + +
    +           + Defines the level of sensitivity of the iCalendar data.
    + classComment + +
    +           + Defines a free-text comment to be read by the user.
    + classCompleted + +
    +           + Defines the date and time that a to-do task was completed.
    + classContact + +
    +           + Defines contact information for a person or other entity (for example, the + name of a business and its phone number).
    + classCreated + +
    +           + Defines the date-time that the calendar information was initially created.
    + classDateDue + +
    +           + Defines the date that a to-do task is due by.
    + classDateEnd + +
    +           + Defines the date that an event or free/busy component ends.
    + classDateOrDateTimeProperty + +
    +          Represents a property whose value is a date or a date-time.
    + classDateStart + +
    +           + Defines the date that an event, free/busy component, or timezone component + starts.
    + classDateTimeProperty + +
    +          Represents a property whose value is a date-time.
    + classDateTimeStamp + +
    +           + The meaning of this property varies depending on the state of the iCalendar + object: + + If a Method property exists: Defines the creation date of + the iCalendar object (not the creation date of the actual calendar data).
    + classDescription + +
    +           + A detailed description of the component that this property belongs to.
    + classDurationProperty + +
    +           + Defines a duration of time (for example, "2 hours and 30 minutes").
    + classEnumProperty + +
    +          Parent class for properties that have a defined set of acceptable values (for + example, Action).
    + classExceptionDates + +
    +           + Defines a list of exceptions to the recurrence rule defined in a component.
    + classExceptionRule + +
    +           + Defines an exception to a RecurrenceRule.
    + classFreeBusy + +
    +           + Defines a person's availability over certain time periods (for example, + "busy" between 1pm-3pm and 4pm-5pm).
    + classGeo + +
    +           + Defines a set of geographical coordinates.
    + classIntegerProperty + +
    +          Represents a property whose value is an integer.
    + classLastModified + +
    +           + Defines the date and time that the calendar data in a component was last + changed.
    + classListProperty<T> + +
    +          Represents a property whose value is a list of values.
    + classLocation + +
    +           + Defines the physical location of an event.
    + classMethod + +
    +           + Specifies the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity.
    + classOrganizer + +
    +           + Defines an organizer.
    + classPercentComplete + +
    +           + Defines a to-do task's level of completion.
    + classPriority + +
    +           + Defines the priority of an event or to-do task.
    + classProductId + +
    +           + Identifies the application that created the iCalendar object.
    + classRawProperty + +
    +          A property that does not have a marshaller associated with it.
    + classRecurrenceDates + +
    +           + Defines a list of dates or periods that help define a recurrence rule.
    + classRecurrenceId + +
    +           + Records the original value of the DateStart property if a recurrence + instance has been modified.
    + classRecurrenceProperty + +
    +          Defines a property whose value is a recurrence rule.
    + classRecurrenceRule + +
    +           + Defines how often a component repeats.
    + classRelatedTo + +
    +           + Defines a relationship between the component that this property belongs to + and another component.
    + classRepeat + +
    +           + Defines the number of times an alarm should be repeated after its initial + trigger.
    + classRequestStatus + +
    +           + Represents a response to a scheduling request, describing whether the request + was successfully processed or not.
    + classResources + +
    +           + Defines a list of resources that are needed for an event or to-do task (for + example a projector or DVD player).
    + classSequence + +
    +           + Defines a revision number for an event, to-do task, or journal entry.
    + classStatus + +
    +           + Defines the status of the component that this property belongs to, such as a + to-do task being in a "completed" state.
    + classSummary + +
    +           + Defines a short, one line summary of the component that this property belongs + to.
    + classTextProperty + +
    +          Represents a property whose value is a plain-text string.
    + classTimezoneId + +
    +           + Defines a unique identifier for a VTimezone component.
    + classTimezoneName + +
    +           + Defines a traditional, non-standard name for a timezone observance (for + example, "Eastern Standard Time" for standard time on the US east coast).
    + classTimezoneOffsetFrom + +
    +           + Defines the timezone offset that was in use before a timezone observance.
    + classTimezoneOffsetTo + +
    +           + Defines the timezone offset that is currently in use in a timezone + observance.
    + classTimezoneUrl + +
    +           + Defines a URL that points to an iCalendar object that contains further + information on a timezone.
    + classTransparency + +
    +           + Defines whether an event is visible to free/busy time searches.
    + classTrigger + +
    +           + Defines when an alarm will be triggered.
    + classUid + +
    +           + Defines a unique identifier for a component.
    + classUrl + +
    +           + Points to a resource that contains additional information about a component.
    + classUtcOffsetProperty + +
    +          Represents a property whose value is a timezone offset.
    + classValuedProperty<T> + +
    +          Represents a property whose data model consists of a single object (such as a + String).
    + classVersion + +
    +           + Specifies the min/max versions a consumer must support in order to + successfully parse the iCalendar object.
    + classXml + +
    +           + Used for storing properties parsed from xCal documents whose XML namespaces + are not part of the xCal XML namespace.
    +  +

    + + + + + +
    +Uses of ICalProperty in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + +
    Classes in biweekly.property.marshaller with type parameters of type ICalProperty
    + classICalPropertyMarshaller<T extends ICalProperty> + +
    +          Base class for iCalendar property marshallers.
    +static classICalPropertyMarshaller.Result<T extends ICalProperty> + +
    +          Represents the result of an unmarshal operation.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/IntegerProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/IntegerProperty.html new file mode 100644 index 000000000..106361ef6 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/IntegerProperty.html @@ -0,0 +1,239 @@ + + + + + + + +Uses of Class biweekly.property.IntegerProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.IntegerProperty

    +
    + + + + + + + + + + + + + +
    +Packages that use IntegerProperty
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of IntegerProperty in biweekly.property
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of IntegerProperty in biweekly.property
    + classPercentComplete + +
    +           + Defines a to-do task's level of completion.
    + classPriority + +
    +           + Defines the priority of an event or to-do task.
    + classRepeat + +
    +           + Defines the number of times an alarm should be repeated after its initial + trigger.
    + classSequence + +
    +           + Defines a revision number for an event, to-do task, or journal entry.
    +  +

    + + + + + +
    +Uses of IntegerProperty in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Classes in biweekly.property.marshaller with type parameters of type IntegerProperty
    + classIntegerPropertyMarshaller<T extends IntegerProperty> + +
    +          Marshals properties that have integer values.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/LastModified.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/LastModified.html new file mode 100644 index 000000000..3f771f43d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/LastModified.html @@ -0,0 +1,306 @@ + + + + + + + +Uses of Class biweekly.property.LastModified (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.LastModified

    +
    + + + + + + + + + + + + + +
    +Packages that use LastModified
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of LastModified in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return LastModified
    + LastModifiedVTodo.getLastModified() + +
    +          Gets the date-time that the to-do was last changed.
    + LastModifiedVTimezone.getLastModified() + +
    +          Gets the date-time that the timezone data was last changed.
    + LastModifiedVJournal.getLastModified() + +
    +          Gets the date-time that the journal entry was last changed.
    + LastModifiedVEvent.getLastModified() + +
    +          Gets the date-time that the event was last changed.
    + LastModifiedVTodo.setLastModified(Date lastModified) + +
    +          Sets the date-time that the to-do was last changed.
    + LastModifiedVTimezone.setLastModified(Date lastModified) + +
    +          Sets the date-time that the timezone data was last changed.
    + LastModifiedVJournal.setLastModified(Date lastModified) + +
    +          Sets the date-time that the journal entry was last changed.
    + LastModifiedVEvent.setLastModified(Date lastModified) + +
    +          Sets the date-time that the event was last changed.
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type LastModified
    + voidVTodo.setLastModified(LastModified lastModified) + +
    +          Sets the date-time that the to-do was last changed.
    + voidVTimezone.setLastModified(LastModified lastModified) + +
    +          Sets the date-time that the timezone data was last changed.
    + voidVJournal.setLastModified(LastModified lastModified) + +
    +          Sets the date-time that the journal entry was last changed.
    + voidVEvent.setLastModified(LastModified lastModified) + +
    +          Sets the date-time that event was last changed.
    +  +

    + + + + + +
    +Uses of LastModified in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return LastModified
    +protected  LastModifiedLastModifiedMarshaller.newInstance(Date date) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ListProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ListProperty.html new file mode 100644 index 000000000..e055cda33 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ListProperty.html @@ -0,0 +1,238 @@ + + + + + + + +Uses of Class biweekly.property.ListProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.ListProperty

    +
    + + + + + + + + + + + + + +
    +Packages that use ListProperty
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ListProperty in biweekly.property
    +  +

    + + + + + + + + + + + + + + + + + +
    Subclasses of ListProperty in biweekly.property
    + classCategories + +
    +           + Defines a list of "tags" or "keywords" that describe the component.
    + classExceptionDates + +
    +           + Defines a list of exceptions to the recurrence rule defined in a component.
    + classResources + +
    +           + Defines a list of resources that are needed for an event or to-do task (for + example a projector or DVD player).
    +  +

    + + + + + +
    +Uses of ListProperty in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + +
    Classes in biweekly.property.marshaller with type parameters of type ListProperty
    + classListPropertyMarshaller<T extends ListProperty<V>,V> + +
    +          Marshals properties that contain a list of values.
    + classTextListPropertyMarshaller<T extends ListProperty<String>> + +
    +          Marshals properties that have a list of text values.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Location.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Location.html new file mode 100644 index 000000000..94283a1d7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Location.html @@ -0,0 +1,258 @@ + + + + + + + +Uses of Class biweekly.property.Location (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Location

    +
    + + + + + + + + + + + + + +
    +Packages that use Location
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Location in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Location
    + LocationVTodo.getLocation() + +
    +          Gets the physical location of the to-do.
    + LocationVEvent.getLocation() + +
    +          Gets the physical location of the event.
    + LocationVTodo.setLocation(String location) + +
    +          Sets the physical location of the to-do.
    + LocationVEvent.setLocation(String location) + +
    +          Sets the physical location of the event.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Location
    + voidVTodo.setLocation(Location location) + +
    +          Sets the physical location of the to-do.
    + voidVEvent.setLocation(Location location) + +
    +          Sets the physical location of the event.
    +  +

    + + + + + +
    +Uses of Location in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Location
    +protected  LocationLocationMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Method.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Method.html new file mode 100644 index 000000000..ac1411e09 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Method.html @@ -0,0 +1,237 @@ + + + + + + + +Uses of Class biweekly.property.Method (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Method

    +
    + + + + + + + + + + + + + +
    +Packages that use Method
    biweekly  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Method in biweekly
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly that return Method
    + MethodICalendar.getMethod() + +
    +          Gets the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity.
    + MethodICalendar.setMethod(String method) + +
    +          Sets the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity.
    +  +

    + + + + + + + + + +
    Methods in biweekly with parameters of type Method
    + voidICalendar.setMethod(Method method) + +
    +          Sets the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity.
    +  +

    + + + + + +
    +Uses of Method in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Method
    +protected  MethodMethodMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Organizer.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Organizer.html new file mode 100644 index 000000000..7fe095ed3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Organizer.html @@ -0,0 +1,335 @@ + + + + + + + +Uses of Class biweekly.property.Organizer (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Organizer

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use Organizer
    biweekly.component  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Organizer in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Organizer
    + OrganizerVTodo.getOrganizer() + +
    +          Gets the organizer of the to-do.
    + OrganizerVJournal.getOrganizer() + +
    +          Gets the organizer of the journal entry.
    + OrganizerVFreeBusy.getOrganizer() + +
    +          Gets the person requesting the free/busy time.
    + OrganizerVEvent.getOrganizer() + +
    +          Gets the organizer of the event.
    + OrganizerVTodo.setOrganizer(String email) + +
    +          Sets the organizer of the to-do.
    + OrganizerVJournal.setOrganizer(String email) + +
    +          Sets the organizer of the journal entry.
    + OrganizerVFreeBusy.setOrganizer(String email) + +
    +          Sets the person requesting the free/busy time.
    + OrganizerVEvent.setOrganizer(String email) + +
    +          Sets the organizer of the event.
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Organizer
    + voidVTodo.setOrganizer(Organizer organizer) + +
    +          Sets the organizer of the to-do.
    + voidVJournal.setOrganizer(Organizer organizer) + +
    +          Sets the organizer of the journal entry.
    + voidVFreeBusy.setOrganizer(Organizer organizer) + +
    +          Sets the person requesting the free/busy time.
    + voidVEvent.setOrganizer(Organizer organizer) + +
    +          Sets the organizer of the event.
    +  +

    + + + + + +
    +Uses of Organizer in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return Organizer
    +static OrganizerOrganizer.email(String email) + +
    +          Creates an organizer property using an email address as its value.
    +  +

    + + + + + +
    +Uses of Organizer in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Organizer
    +protected  OrganizerOrganizerMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/PercentComplete.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/PercentComplete.html new file mode 100644 index 000000000..6d8f0435a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/PercentComplete.html @@ -0,0 +1,234 @@ + + + + + + + +Uses of Class biweekly.property.PercentComplete (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.PercentComplete

    +
    + + + + + + + + + + + + + +
    +Packages that use PercentComplete
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of PercentComplete in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return PercentComplete
    + PercentCompleteVTodo.getPercentComplete() + +
    +          Gets the amount that the to-do task has been completed.
    + PercentCompleteVTodo.setPercentComplete(Integer percent) + +
    +          Sets the amount that the to-do task has been completed.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type PercentComplete
    + voidVTodo.setPercentComplete(PercentComplete percentComplete) + +
    +          Sets the amount that the to-do task has been completed.
    +  +

    + + + + + +
    +Uses of PercentComplete in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return PercentComplete
    +protected  PercentCompletePercentCompleteMarshaller.newInstance(Integer value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Priority.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Priority.html new file mode 100644 index 000000000..774c6b178 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Priority.html @@ -0,0 +1,258 @@ + + + + + + + +Uses of Class biweekly.property.Priority (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Priority

    +
    + + + + + + + + + + + + + +
    +Packages that use Priority
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Priority in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Priority
    + PriorityVTodo.getPriority() + +
    +          Gets the priority of the to-do.
    + PriorityVEvent.getPriority() + +
    +          Gets the priority of the event.
    + PriorityVTodo.setPriority(Integer priority) + +
    +          Sets the priority of the to-do.
    + PriorityVEvent.setPriority(Integer priority) + +
    +          Sets the priority of the event.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Priority
    + voidVTodo.setPriority(Priority priority) + +
    +          Sets the priority of the to-do.
    + voidVEvent.setPriority(Priority priority) + +
    +          Sets the priority of the event.
    +  +

    + + + + + +
    +Uses of Priority in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Priority
    +protected  PriorityPriorityMarshaller.newInstance(Integer value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ProductId.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ProductId.html new file mode 100644 index 000000000..2119395e1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ProductId.html @@ -0,0 +1,263 @@ + + + + + + + +Uses of Class biweekly.property.ProductId (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.ProductId

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use ProductId
    biweekly  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ProductId in biweekly
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly that return ProductId
    + ProductIdICalendar.getProductId() + +
    +          Gets the name of the application that created the iCalendar object.
    + ProductIdICalendar.setProductId(String prodId) + +
    +          Sets the application that created the iCalendar object.
    +  +

    + + + + + + + + + +
    Methods in biweekly with parameters of type ProductId
    + voidICalendar.setProductId(ProductId prodId) + +
    +          Sets the name of the application that created the iCalendar object.
    +  +

    + + + + + +
    +Uses of ProductId in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return ProductId
    +static ProductIdProductId.biweekly() + +
    +          Creates a new product identifier property that represents this library.
    +  +

    + + + + + +
    +Uses of ProductId in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return ProductId
    +protected  ProductIdProductIdMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RawProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RawProperty.html new file mode 100644 index 000000000..6c5a4c25f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RawProperty.html @@ -0,0 +1,311 @@ + + + + + + + +Uses of Class biweekly.property.RawProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.RawProperty

    +
    + + + + + + + + + + + + + +
    +Packages that use RawProperty
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of RawProperty in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return RawProperty
    + RawPropertyICalComponent.addExperimentalProperty(String name, + ICalDataType dataType, + String value) + +
    +          Adds an experimental property to this component.
    + RawPropertyICalComponent.addExperimentalProperty(String name, + String value) + +
    +          Adds an experimental property to this component.
    + RawPropertyICalComponent.getExperimentalProperty(String name) + +
    +          Gets the first experimental property with a given name.
    + RawPropertyICalComponent.setExperimentalProperty(String name, + ICalDataType dataType, + String value) + +
    +          Adds an experimental property to this component, removing all existing + properties that have the same name.
    + RawPropertyICalComponent.setExperimentalProperty(String name, + String value) + +
    +          Adds an experimental property to this component, removing all existing + properties that have the same name.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type RawProperty
    + List<RawProperty>ICalComponent.getExperimentalProperties() + +
    +          Gets all experimental properties associated with this component.
    + List<RawProperty>ICalComponent.getExperimentalProperties(String name) + +
    +          Gets all experimental properties with a given name.
    +  +

    + + + + + +
    +Uses of RawProperty in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return RawProperty
    +protected  RawPropertyRawPropertyMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RawPropertyRawPropertyMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type RawProperty
    +protected  ICalDataTypeRawPropertyMarshaller._dataType(RawProperty property) + +
    +           
    +protected  StringRawPropertyMarshaller._writeText(RawProperty property) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceDates.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceDates.html new file mode 100644 index 000000000..a06d78d5e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceDates.html @@ -0,0 +1,347 @@ + + + + + + + +Uses of Class biweekly.property.RecurrenceDates (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.RecurrenceDates

    +
    + + + + + + + + + + + + + +
    +Packages that use RecurrenceDates
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of RecurrenceDates in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type RecurrenceDates
    + List<RecurrenceDates>VTodo.getRecurrenceDates() + +
    +          Gets the list of dates/periods that help define the recurrence rule of + this to-do (if one is defined).
    + List<RecurrenceDates>VJournal.getRecurrenceDates() + +
    +          Gets the list of dates/periods that help define the recurrence rule of + this journal entry (if one is defined).
    + List<RecurrenceDates>VEvent.getRecurrenceDates() + +
    +          Gets the list of dates/periods that help define the recurrence rule of + this event (if one is defined).
    + List<RecurrenceDates>Observance.getRecurrenceDates() + +
    +          Gets the list of dates/periods that help define the recurrence rule of + this timezone observance (if one is defined).
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type RecurrenceDates
    + voidVTodo.addRecurrenceDates(RecurrenceDates recurrenceDates) + +
    +          Adds a list of dates/periods that help define the recurrence rule of this + to-do (if one is defined).
    + voidVJournal.addRecurrenceDates(RecurrenceDates recurrenceDates) + +
    +          Adds a list of dates/periods that help define the recurrence rule of this + journal entry (if one is defined).
    + voidVEvent.addRecurrenceDates(RecurrenceDates recurrenceDates) + +
    +          Adds a list of dates/periods that help define the recurrence rule of this + event (if one is defined).
    + voidObservance.addRecurrenceDates(RecurrenceDates recurrenceDates) + +
    +          Adds a list of dates/periods that help define the recurrence rule of this + timezone observance (if one is defined).
    +  +

    + + + + + +
    +Uses of RecurrenceDates in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return RecurrenceDates
    +protected  RecurrenceDatesRecurrenceDatesMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RecurrenceDatesRecurrenceDatesMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RecurrenceDatesRecurrenceDatesMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type RecurrenceDates
    +protected  ICalDataTypeRecurrenceDatesMarshaller._dataType(RecurrenceDates property) + +
    +           
    +protected  JCalValueRecurrenceDatesMarshaller._writeJson(RecurrenceDates property) + +
    +           
    +protected  StringRecurrenceDatesMarshaller._writeText(RecurrenceDates property) + +
    +           
    +protected  voidRecurrenceDatesMarshaller._writeXml(RecurrenceDates property, + XCalElement element) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceId.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceId.html new file mode 100644 index 000000000..d41edd506 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceId.html @@ -0,0 +1,292 @@ + + + + + + + +Uses of Class biweekly.property.RecurrenceId (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.RecurrenceId

    +
    + + + + + + + + + + + + + +
    +Packages that use RecurrenceId
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of RecurrenceId in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return RecurrenceId
    + RecurrenceIdVTodo.getRecurrenceId() + +
    +          Gets the original value of the DateStart property if the to-do is + recurring and has been modified.
    + RecurrenceIdVJournal.getRecurrenceId() + +
    +          Gets the original value of the DateStart property if the event is + recurring and has been modified.
    + RecurrenceIdVEvent.getRecurrenceId() + +
    +          Gets the original value of the DateStart property if the event is + recurring and has been modified.
    + RecurrenceIdVTodo.setRecurrenceId(Date originalStartDate) + +
    +          Sets the original value of the DateStart property if the to-do is + recurring and has been modified.
    + RecurrenceIdVJournal.setRecurrenceId(Date originalStartDate) + +
    +          Sets the original value of the DateStart property if the journal + entry is recurring and has been modified.
    + RecurrenceIdVEvent.setRecurrenceId(Date originalStartDate) + +
    +          Sets the original value of the DateStart property if the event is + recurring and has been modified.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type RecurrenceId
    + voidVTodo.setRecurrenceId(RecurrenceId recurrenceId) + +
    +          Sets the original value of the DateStart property if the to-do is + recurring and has been modified.
    + voidVJournal.setRecurrenceId(RecurrenceId recurrenceId) + +
    +          Sets the original value of the DateStart property if the event is + recurring and has been modified.
    + voidVEvent.setRecurrenceId(RecurrenceId recurrenceId) + +
    +          Sets the original value of the DateStart property if the event is + recurring and has been modified.
    +  +

    + + + + + +
    +Uses of RecurrenceId in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return RecurrenceId
    +protected  RecurrenceIdRecurrenceIdMarshaller.newInstance(Date date, + boolean hasTime) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceProperty.html new file mode 100644 index 000000000..712f5392a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceProperty.html @@ -0,0 +1,220 @@ + + + + + + + +Uses of Class biweekly.property.RecurrenceProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.RecurrenceProperty

    +
    + + + + + + + + + + + + + +
    +Packages that use RecurrenceProperty
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of RecurrenceProperty in biweekly.property
    +  +

    + + + + + + + + + + + + + +
    Subclasses of RecurrenceProperty in biweekly.property
    + classExceptionRule + +
    +           + Defines an exception to a RecurrenceRule.
    + classRecurrenceRule + +
    +           + Defines how often a component repeats.
    +  +

    + + + + + +
    +Uses of RecurrenceProperty in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Classes in biweekly.property.marshaller with type parameters of type RecurrenceProperty
    + classRecurrencePropertyMarshaller<T extends RecurrenceProperty> + +
    +          Marshals properties whose values are Recurrence.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceRule.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceRule.html new file mode 100644 index 000000000..adff4d920 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RecurrenceRule.html @@ -0,0 +1,306 @@ + + + + + + + +Uses of Class biweekly.property.RecurrenceRule (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.RecurrenceRule

    +
    + + + + + + + + + + + + + +
    +Packages that use RecurrenceRule
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of RecurrenceRule in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return RecurrenceRule
    + RecurrenceRuleVTodo.getRecurrenceRule() + +
    +          Gets how often the to-do repeats.
    + RecurrenceRuleVJournal.getRecurrenceRule() + +
    +          Gets how often the journal entry repeats.
    + RecurrenceRuleVEvent.getRecurrenceRule() + +
    +          Gets how often the event repeats.
    + RecurrenceRuleObservance.getRecurrenceRule() + +
    +          Gets how often the timezone observance repeats.
    + RecurrenceRuleVTodo.setRecurrenceRule(Recurrence recur) + +
    +          Sets how often the to-do repeats.
    + RecurrenceRuleVJournal.setRecurrenceRule(Recurrence recur) + +
    +          Sets how often the journal entry repeats.
    + RecurrenceRuleVEvent.setRecurrenceRule(Recurrence recur) + +
    +          Sets how often the event repeats.
    + RecurrenceRuleObservance.setRecurrenceRule(Recurrence recur) + +
    +          Sets how often the timezone observance repeats.
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type RecurrenceRule
    + voidVTodo.setRecurrenceRule(RecurrenceRule recurrenceRule) + +
    +          Sets how often the to-do repeats.
    + voidVJournal.setRecurrenceRule(RecurrenceRule recurrenceRule) + +
    +          Sets how often the journal entry repeats.
    + voidVEvent.setRecurrenceRule(RecurrenceRule recurrenceRule) + +
    +          Sets how often the event repeats.
    + voidObservance.setRecurrenceRule(RecurrenceRule recurrenceRule) + +
    +          Sets how often the timezone observance repeats.
    +  +

    + + + + + +
    +Uses of RecurrenceRule in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return RecurrenceRule
    +protected  RecurrenceRuleRecurrenceRuleMarshaller.newInstance(Recurrence recur) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RelatedTo.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RelatedTo.html new file mode 100644 index 000000000..3569555e8 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RelatedTo.html @@ -0,0 +1,290 @@ + + + + + + + +Uses of Class biweekly.property.RelatedTo (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.RelatedTo

    +
    + + + + + + + + + + + + + +
    +Packages that use RelatedTo
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of RelatedTo in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return RelatedTo
    + RelatedToVTodo.addRelatedTo(String uid) + +
    +          Adds a component that the to-do is related to.
    + RelatedToVJournal.addRelatedTo(String uid) + +
    +          Adds a component that the journal entry is related to.
    + RelatedToVEvent.addRelatedTo(String uid) + +
    +          Adds a component that the event is related to.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type RelatedTo
    + List<RelatedTo>VTodo.getRelatedTo() + +
    +          Gets the components that the to-do is related to.
    + List<RelatedTo>VJournal.getRelatedTo() + +
    +          Gets the components that the journal entry is related to.
    + List<RelatedTo>VEvent.getRelatedTo() + +
    +          Gets the components that the event is related to.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type RelatedTo
    + voidVTodo.addRelatedTo(RelatedTo relatedTo) + +
    +          Adds a component that the to-do is related to.
    + voidVJournal.addRelatedTo(RelatedTo relatedTo) + +
    +          Adds a component that the journal entry is related to.
    + voidVEvent.addRelatedTo(RelatedTo relatedTo) + +
    +          Adds a component that the event is related to.
    +  +

    + + + + + +
    +Uses of RelatedTo in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return RelatedTo
    +protected  RelatedToRelatedToMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Repeat.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Repeat.html new file mode 100644 index 000000000..3bc1ec575 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Repeat.html @@ -0,0 +1,237 @@ + + + + + + + +Uses of Class biweekly.property.Repeat (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Repeat

    +
    + + + + + + + + + + + + + +
    +Packages that use Repeat
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Repeat in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return Repeat
    + RepeatVAlarm.getRepeat() + +
    +          Gets the number of times an alarm should be repeated after its initial + trigger.
    + RepeatVAlarm.setRepeat(Integer count) + +
    +          Sets the number of times an alarm should be repeated after its initial + trigger.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type Repeat
    + voidVAlarm.setRepeat(Repeat repeat) + +
    +          Sets the number of times an alarm should be repeated after its initial + trigger.
    +  +

    + + + + + +
    +Uses of Repeat in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Repeat
    +protected  RepeatRepeatMarshaller.newInstance(Integer value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RequestStatus.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RequestStatus.html new file mode 100644 index 000000000..da4653cc4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/RequestStatus.html @@ -0,0 +1,331 @@ + + + + + + + +Uses of Class biweekly.property.RequestStatus (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.RequestStatus

    +
    + + + + + + + + + + + + + +
    +Packages that use RequestStatus
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of RequestStatus in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return RequestStatus
    + RequestStatusVTodo.getRequestStatus() + +
    +          Gets the response to a scheduling request.
    + RequestStatusVJournal.getRequestStatus() + +
    +          Gets the response to a scheduling request.
    + RequestStatusVFreeBusy.getRequestStatus() + +
    +          Gets the response to a scheduling request.
    + RequestStatusVEvent.getRequestStatus() + +
    +          Gets the response to a scheduling request.
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type RequestStatus
    + voidVTodo.setRequestStatus(RequestStatus requestStatus) + +
    +          Sets the response to a scheduling request.
    + voidVJournal.setRequestStatus(RequestStatus requestStatus) + +
    +          Sets the response to a scheduling request.
    + voidVFreeBusy.setRequestStatus(RequestStatus requestStatus) + +
    +          Sets the response to a scheduling request.
    + voidVEvent.setRequestStatus(RequestStatus requestStatus) + +
    +          Sets the response to a scheduling request.
    +  +

    + + + + + +
    +Uses of RequestStatus in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return RequestStatus
    +protected  RequestStatusRequestStatusMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RequestStatusRequestStatusMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  RequestStatusRequestStatusMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type RequestStatus
    +protected  JCalValueRequestStatusMarshaller._writeJson(RequestStatus property) + +
    +           
    +protected  StringRequestStatusMarshaller._writeText(RequestStatus property) + +
    +           
    +protected  voidRequestStatusMarshaller._writeXml(RequestStatus property, + XCalElement element) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Resources.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Resources.html new file mode 100644 index 000000000..81ae20083 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Resources.html @@ -0,0 +1,283 @@ + + + + + + + +Uses of Class biweekly.property.Resources (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Resources

    +
    + + + + + + + + + + + + + +
    +Packages that use Resources
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Resources in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Resources
    + ResourcesVTodo.addResources(List<String> resources) + +
    +          Adds a list of resources that are needed for the to-do.
    + ResourcesVEvent.addResources(List<String> resources) + +
    +          Adds a list of resources that are needed for the event.
    + ResourcesVTodo.addResources(String... resources) + +
    +          Adds a list of resources that are needed for the to-do.
    + ResourcesVEvent.addResources(String... resources) + +
    +          Adds a list of resources that are needed for the event.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type Resources
    + List<Resources>VTodo.getResources() + +
    +          Gets the resources that are needed for the to-do.
    + List<Resources>VEvent.getResources() + +
    +          Gets the resources that are needed for the event.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Resources
    + voidVTodo.addResources(Resources resources) + +
    +          Adds a list of resources that are needed for the to-do.
    + voidVEvent.addResources(Resources resources) + +
    +          Adds a list of resources that are needed for the event.
    +  +

    + + + + + +
    +Uses of Resources in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Resources
    + ResourcesResourcesMarshaller.newInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Sequence.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Sequence.html new file mode 100644 index 000000000..76bc118ae --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Sequence.html @@ -0,0 +1,282 @@ + + + + + + + +Uses of Class biweekly.property.Sequence (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Sequence

    +
    + + + + + + + + + + + + + +
    +Packages that use Sequence
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Sequence in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Sequence
    + SequenceVTodo.getSequence() + +
    +          Gets the revision number of the to-do.
    + SequenceVJournal.getSequence() + +
    +          Gets the revision number of the journal entry.
    + SequenceVEvent.getSequence() + +
    +          Gets the revision number of the event.
    + SequenceVTodo.setSequence(Integer sequence) + +
    +          Sets the revision number of the to-do.
    + SequenceVJournal.setSequence(Integer sequence) + +
    +          Sets the revision number of the journal entry.
    + SequenceVEvent.setSequence(Integer sequence) + +
    +          Sets the revision number of the event.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Sequence
    + voidVTodo.setSequence(Sequence sequence) + +
    +          Sets the revision number of the to-do.
    + voidVJournal.setSequence(Sequence sequence) + +
    +          Sets the revision number of the journal entry.
    + voidVEvent.setSequence(Sequence sequence) + +
    +          Sets the revision number of the event.
    +  +

    + + + + + +
    +Uses of Sequence in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Sequence
    +protected  SequenceSequenceMarshaller.newInstance(Integer value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Status.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Status.html new file mode 100644 index 000000000..61a8518da --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Status.html @@ -0,0 +1,346 @@ + + + + + + + +Uses of Class biweekly.property.Status (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Status

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use Status
    biweekly.component  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Status in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Status
    + StatusVTodo.getStatus() + +
    +          Gets the status of the to-do.
    + StatusVJournal.getStatus() + +
    +          Gets the status of the journal entry.
    + StatusVEvent.getStatus() + +
    +          Gets the status of the event.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Status
    + voidVTodo.setStatus(Status status) + +
    +          Sets the status of the to-do.
    + voidVJournal.setStatus(Status status) + +
    +          Sets the status of the journal entry.
    + voidVEvent.setStatus(Status status) + +
    +          Sets the status of the event.
    +  +

    + + + + + +
    +Uses of Status in biweekly.property
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property that return Status
    +static StatusStatus.cancelled() + +
    +          Creates a "cancelled" status property (only valid for event, to-do, and + journal components).
    +static StatusStatus.completed() + +
    +          Creates a "completed" status property (only valid for to-do components).
    +static StatusStatus.confirmed() + +
    +          Creates a "confirmed" status property (only valid for event components).
    +static StatusStatus.draft() + +
    +          Creates a "draft" status property (only valid for journal components).
    +static StatusStatus.final_() + +
    +          Creates a "final" status property (only valid for journal components).
    +static StatusStatus.inProgress() + +
    +          Creates a "in-progress" status property (only valid for to-do + components).
    +static StatusStatus.needsAction() + +
    +          Creates a "needs-action" status property (only valid for to-do + components).
    +static StatusStatus.tentative() + +
    +          Creates a "tentative" status property (only valid for event components).
    +  +

    + + + + + +
    +Uses of Status in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Status
    +protected  StatusStatusMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Summary.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Summary.html new file mode 100644 index 000000000..0bff5da13 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Summary.html @@ -0,0 +1,309 @@ + + + + + + + +Uses of Class biweekly.property.Summary (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Summary

    +
    + + + + + + + + + + + + + +
    +Packages that use Summary
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Summary in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Summary
    + SummaryVTodo.getSummary() + +
    +          Gets the summary of the to-do.
    + SummaryVJournal.getSummary() + +
    +          Gets the summary of the journal entry.
    + SummaryVEvent.getSummary() + +
    +          Gets the summary of the event.
    + SummaryVAlarm.getSummary() + +
    +           + Gets the summary of the alarm.
    + SummaryVTodo.setSummary(String summary) + +
    +          Sets the summary of the to-do.
    + SummaryVJournal.setSummary(String summary) + +
    +          Sets the summary of the journal entry.
    + SummaryVEvent.setSummary(String summary) + +
    +          Sets the summary of the event.
    + SummaryVAlarm.setSummary(String summary) + +
    +           + Sets the summary of the alarm.
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Summary
    + voidVTodo.setSummary(Summary summary) + +
    +          Sets the summary of the to-do.
    + voidVJournal.setSummary(Summary summary) + +
    +          Sets the summary of the journal entry.
    + voidVEvent.setSummary(Summary summary) + +
    +          Sets the summary of the event.
    + voidVAlarm.setSummary(Summary summary) + +
    +           + Sets the summary of the alarm.
    +  +

    + + + + + +
    +Uses of Summary in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Summary
    +protected  SummarySummaryMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TextProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TextProperty.html new file mode 100644 index 000000000..0baa5807a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TextProperty.html @@ -0,0 +1,398 @@ + + + + + + + +Uses of Class biweekly.property.TextProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.TextProperty

    +
    + + + + + + + + + + + + + +
    +Packages that use TextProperty
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of TextProperty in biweekly.property
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of TextProperty in biweekly.property
    + classAction + +
    +           + Defines the type of action to invoke when an alarm is triggered.
    + classAttendee + +
    +           + Defines an attendee (such as a person attending an event).
    + classCalendarScale + +
    +           + Specifies the calendar system that this iCalendar object uses.
    + classClassification + +
    +           + Defines the level of sensitivity of the iCalendar data.
    + classComment + +
    +           + Defines a free-text comment to be read by the user.
    + classContact + +
    +           + Defines contact information for a person or other entity (for example, the + name of a business and its phone number).
    + classDescription + +
    +           + A detailed description of the component that this property belongs to.
    + classEnumProperty + +
    +          Parent class for properties that have a defined set of acceptable values (for + example, Action).
    + classLocation + +
    +           + Defines the physical location of an event.
    + classMethod + +
    +           + Specifies the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity.
    + classOrganizer + +
    +           + Defines an organizer.
    + classProductId + +
    +           + Identifies the application that created the iCalendar object.
    + classRelatedTo + +
    +           + Defines a relationship between the component that this property belongs to + and another component.
    + classStatus + +
    +           + Defines the status of the component that this property belongs to, such as a + to-do task being in a "completed" state.
    + classSummary + +
    +           + Defines a short, one line summary of the component that this property belongs + to.
    + classTimezoneId + +
    +           + Defines a unique identifier for a VTimezone component.
    + classTimezoneName + +
    +           + Defines a traditional, non-standard name for a timezone observance (for + example, "Eastern Standard Time" for standard time on the US east coast).
    + classTimezoneUrl + +
    +           + Defines a URL that points to an iCalendar object that contains further + information on a timezone.
    + classTransparency + +
    +           + Defines whether an event is visible to free/busy time searches.
    + classUid + +
    +           + Defines a unique identifier for a component.
    + classUrl + +
    +           + Points to a resource that contains additional information about a component.
    +  +

    + + + + + +
    +Uses of TextProperty in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Classes in biweekly.property.marshaller with type parameters of type TextProperty
    + classTextPropertyMarshaller<T extends TextProperty> + +
    +          Marshals properties that have text values.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneId.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneId.html new file mode 100644 index 000000000..a28b01e83 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneId.html @@ -0,0 +1,234 @@ + + + + + + + +Uses of Class biweekly.property.TimezoneId (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.TimezoneId

    +
    + + + + + + + + + + + + + +
    +Packages that use TimezoneId
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of TimezoneId in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return TimezoneId
    + TimezoneIdVTimezone.getTimezoneId() + +
    +          Gets the ID for this timezone.
    + TimezoneIdVTimezone.setTimezoneId(String timezoneId) + +
    +          Sets an ID for this timezone.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type TimezoneId
    + voidVTimezone.setTimezoneId(TimezoneId timezoneId) + +
    +          Sets an ID for this timezone.
    +  +

    + + + + + +
    +Uses of TimezoneId in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return TimezoneId
    +protected  TimezoneIdTimezoneIdMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneName.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneName.html new file mode 100644 index 000000000..53dec3a6c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneName.html @@ -0,0 +1,242 @@ + + + + + + + +Uses of Class biweekly.property.TimezoneName (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.TimezoneName

    +
    + + + + + + + + + + + + + +
    +Packages that use TimezoneName
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of TimezoneName in biweekly.component
    +  +

    + + + + + + + + + +
    Methods in biweekly.component that return TimezoneName
    + TimezoneNameObservance.addTimezoneName(String timezoneName) + +
    +          Adds a traditional, non-standard name for the timezone observance.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component that return types with arguments of type TimezoneName
    + List<TimezoneName>Observance.getTimezoneNames() + +
    +          Gets the traditional, non-standard names for the timezone observance.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type TimezoneName
    + voidObservance.addTimezoneName(TimezoneName timezoneName) + +
    +          Adds a traditional, non-standard name for the timezone observance.
    +  +

    + + + + + +
    +Uses of TimezoneName in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return TimezoneName
    +protected  TimezoneNameTimezoneNameMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneOffsetFrom.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneOffsetFrom.html new file mode 100644 index 000000000..093df3023 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneOffsetFrom.html @@ -0,0 +1,235 @@ + + + + + + + +Uses of Class biweekly.property.TimezoneOffsetFrom (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.TimezoneOffsetFrom

    +
    + + + + + + + + + + + + + +
    +Packages that use TimezoneOffsetFrom
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of TimezoneOffsetFrom in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return TimezoneOffsetFrom
    + TimezoneOffsetFromObservance.getTimezoneOffsetFrom() + +
    +          Gets the UTC offset that the timezone observance transitions from.
    + TimezoneOffsetFromObservance.setTimezoneOffsetFrom(Integer hour, + Integer minute) + +
    +          Sets the UTC offset that the timezone observance transitions from.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type TimezoneOffsetFrom
    + voidObservance.setTimezoneOffsetFrom(TimezoneOffsetFrom timezoneOffsetFrom) + +
    +          Sets the UTC offset that the timezone observance transitions from.
    +  +

    + + + + + +
    +Uses of TimezoneOffsetFrom in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return TimezoneOffsetFrom
    +protected  TimezoneOffsetFromTimezoneOffsetFromMarshaller.newInstance(UtcOffset offset) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneOffsetTo.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneOffsetTo.html new file mode 100644 index 000000000..33d5c1c10 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneOffsetTo.html @@ -0,0 +1,235 @@ + + + + + + + +Uses of Class biweekly.property.TimezoneOffsetTo (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.TimezoneOffsetTo

    +
    + + + + + + + + + + + + + +
    +Packages that use TimezoneOffsetTo
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of TimezoneOffsetTo in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return TimezoneOffsetTo
    + TimezoneOffsetToObservance.getTimezoneOffsetTo() + +
    +          Gets the UTC offset that the timezone observance transitions to.
    + TimezoneOffsetToObservance.setTimezoneOffsetTo(Integer hour, + Integer minute) + +
    +          Sets the UTC offset that the timezone observance transitions to.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type TimezoneOffsetTo
    + voidObservance.setTimezoneOffsetTo(TimezoneOffsetTo timezoneOffsetTo) + +
    +          Sets the UTC offset that the timezone observance transitions to.
    +  +

    + + + + + +
    +Uses of TimezoneOffsetTo in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return TimezoneOffsetTo
    +protected  TimezoneOffsetToTimezoneOffsetToMarshaller.newInstance(UtcOffset offset) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneUrl.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneUrl.html new file mode 100644 index 000000000..ff0d1f74d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/TimezoneUrl.html @@ -0,0 +1,237 @@ + + + + + + + +Uses of Class biweekly.property.TimezoneUrl (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.TimezoneUrl

    +
    + + + + + + + + + + + + + +
    +Packages that use TimezoneUrl
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of TimezoneUrl in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return TimezoneUrl
    + TimezoneUrlVTimezone.getTimezoneUrl() + +
    +          Gets the timezone URL, which points to an iCalendar object that contains + further information on the timezone.
    + TimezoneUrlVTimezone.setTimezoneUrl(String url) + +
    +          Sets the timezone URL, which points to an iCalendar object that contains + further information on the timezone.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type TimezoneUrl
    + voidVTimezone.setTimezoneUrl(TimezoneUrl url) + +
    +          Sets the timezone URL, which points to an iCalendar object that contains + further information on the timezone.
    +  +

    + + + + + +
    +Uses of TimezoneUrl in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return TimezoneUrl
    +protected  TimezoneUrlTimezoneUrlMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Transparency.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Transparency.html new file mode 100644 index 000000000..032ed0327 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Transparency.html @@ -0,0 +1,273 @@ + + + + + + + +Uses of Class biweekly.property.Transparency (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Transparency

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use Transparency
    biweekly.component  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Transparency in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return Transparency
    + TransparencyVEvent.getTransparency() + +
    +          Gets whether an event is visible to free/busy time searches.
    + TransparencyVEvent.setTransparency(Boolean transparent) + +
    +          Sets whether an event is visible to free/busy time searches.
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type Transparency
    + voidVEvent.setTransparency(Transparency transparency) + +
    +          Sets whether an event is visible to free/busy time searches.
    +  +

    + + + + + +
    +Uses of Transparency in biweekly.property
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.property that return Transparency
    +static TransparencyTransparency.opaque() + +
    +          Creates a property that marks the event as being visible to free/busy + time searches.
    +static TransparencyTransparency.transparent() + +
    +          Creates a property that marks the event as being hidden from free/busy + time searches.
    +  +

    + + + + + +
    +Uses of Transparency in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Transparency
    +protected  TransparencyTransparencyMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Trigger.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Trigger.html new file mode 100644 index 000000000..6fc4b2982 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Trigger.html @@ -0,0 +1,354 @@ + + + + + + + +Uses of Class biweekly.property.Trigger (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Trigger

    +
    + + + + + + + + + + + + + +
    +Packages that use Trigger
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Trigger in biweekly.component
    +  +

    + + + + + + + + + +
    Methods in biweekly.component that return Trigger
    + TriggerVAlarm.getTrigger() + +
    +          Gets when the alarm will be triggered.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Trigger
    +static VAlarmVAlarm.audio(Trigger trigger) + +
    +          Creates an audio alarm.
    +static VAlarmVAlarm.audio(Trigger trigger, + Attachment sound) + +
    +          Creates an audio alarm.
    +static VAlarmVAlarm.display(Trigger trigger, + String displayText) + +
    +          Creates a display alarm.
    +static VAlarmVAlarm.email(Trigger trigger, + String subject, + String body, + List<String> recipients) + +
    +          Creates an email alarm.
    +static VAlarmVAlarm.email(Trigger trigger, + String subject, + String body, + String... recipients) + +
    +          Creates an email alarm.
    + voidVAlarm.setTrigger(Trigger trigger) + +
    +          Sets when the alarm will be triggered.
    +  +

    + + + + + + + + +
    Constructors in biweekly.component with parameters of type Trigger
    VAlarm(Action action, + Trigger trigger) + +
    +          Creates a new alarm.
    +  +

    + + + + + +
    +Uses of Trigger in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Trigger
    +protected  TriggerTriggerMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TriggerTriggerMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  TriggerTriggerMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type Trigger
    +protected  ICalDataTypeTriggerMarshaller._dataType(Trigger property) + +
    +           
    +protected  JCalValueTriggerMarshaller._writeJson(Trigger property) + +
    +           
    +protected  StringTriggerMarshaller._writeText(Trigger property) + +
    +           
    +protected  voidTriggerMarshaller._writeXml(Trigger property, + XCalElement element) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Uid.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Uid.html new file mode 100644 index 000000000..05ae0d284 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Uid.html @@ -0,0 +1,335 @@ + + + + + + + +Uses of Class biweekly.property.Uid (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Uid

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use Uid
    biweekly.component  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Uid in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Uid
    + UidVTodo.getUid() + +
    +          Gets the unique identifier for this to-do.
    + UidVJournal.getUid() + +
    +          Gets the unique identifier for this journal entry.
    + UidVFreeBusy.getUid() + +
    +          Gets the unique identifier for this free/busy entry.
    + UidVEvent.getUid() + +
    +          Gets the unique identifier for this event.
    + UidVTodo.setUid(String uid) + +
    +          Sets the unique identifier for this to-do.
    + UidVJournal.setUid(String uid) + +
    +          Sets the unique identifier for this journal entry.
    + UidVFreeBusy.setUid(String uid) + +
    +          Sets the unique identifier for this free/busy entry.
    + UidVEvent.setUid(String uid) + +
    +          Sets the unique identifier for this event.
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Uid
    + voidVTodo.setUid(Uid uid) + +
    +          Sets the unique identifier for this to-do.
    + voidVJournal.setUid(Uid uid) + +
    +          Sets the unique identifier for this journal entry.
    + voidVFreeBusy.setUid(Uid uid) + +
    +          Sets the unique identifier for this free/busy entry.
    + voidVEvent.setUid(Uid uid) + +
    +          Sets the unique identifier for this event.
    +  +

    + + + + + +
    +Uses of Uid in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return Uid
    +static UidUid.random() + +
    +          Creates a UID property that contains a random UID.
    +  +

    + + + + + +
    +Uses of Uid in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Uid
    +protected  UidUidMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Url.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Url.html new file mode 100644 index 000000000..f60140356 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Url.html @@ -0,0 +1,318 @@ + + + + + + + +Uses of Class biweekly.property.Url (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Url

    +
    + + + + + + + + + + + + + +
    +Packages that use Url
    biweekly.component  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Url in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component that return Url
    + UrlVTodo.getUrl() + +
    +          Gets a URL to a resource that contains additional information about the + to-do.
    + UrlVJournal.getUrl() + +
    +          Gets a URL to a resource that contains additional information about the + journal entry.
    + UrlVFreeBusy.getUrl() + +
    +          Gets a URL to a resource that contains additional information about the + free/busy entry.
    + UrlVEvent.getUrl() + +
    +          Gets a URL to a resource that contains additional information about the + event.
    + UrlVTodo.setUrl(String url) + +
    +          Sets a URL to a resource that contains additional information about the + to-do.
    + UrlVJournal.setUrl(String url) + +
    +          Sets a URL to a resource that contains additional information about the + journal entry.
    + UrlVFreeBusy.setUrl(String url) + +
    +          Sets a URL to a resource that contains additional information about the + free/busy entry.
    + UrlVEvent.setUrl(String url) + +
    +          Sets a URL to a resource that contains additional information about the + event.
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Url
    + voidVTodo.setUrl(Url url) + +
    +          Sets a URL to a resource that contains additional information about the + to-do.
    + voidVJournal.setUrl(Url url) + +
    +          Sets a URL to a resource that contains additional information about the + journal entry.
    + voidVFreeBusy.setUrl(Url url) + +
    +          Sets a URL to a resource that contains additional information about the + free/busy entry.
    + voidVEvent.setUrl(Url url) + +
    +          Sets a URL to a resource that contains additional information about the + event.
    +  +

    + + + + + +
    +Uses of Url in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Url
    +protected  UrlUrlMarshaller.newInstance(String value) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/UtcOffsetProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/UtcOffsetProperty.html new file mode 100644 index 000000000..d2c7267d0 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/UtcOffsetProperty.html @@ -0,0 +1,221 @@ + + + + + + + +Uses of Class biweekly.property.UtcOffsetProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.UtcOffsetProperty

    +
    + + + + + + + + + + + + + +
    +Packages that use UtcOffsetProperty
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of UtcOffsetProperty in biweekly.property
    +  +

    + + + + + + + + + + + + + +
    Subclasses of UtcOffsetProperty in biweekly.property
    + classTimezoneOffsetFrom + +
    +           + Defines the timezone offset that was in use before a timezone observance.
    + classTimezoneOffsetTo + +
    +           + Defines the timezone offset that is currently in use in a timezone + observance.
    +  +

    + + + + + +
    +Uses of UtcOffsetProperty in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Classes in biweekly.property.marshaller with type parameters of type UtcOffsetProperty
    + classUtcOffsetPropertyMarshaller<T extends UtcOffsetProperty> + +
    +          Marshals properties that have UTC offset values.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ValuedProperty.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ValuedProperty.html new file mode 100644 index 000000000..13c036434 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/ValuedProperty.html @@ -0,0 +1,516 @@ + + + + + + + +Uses of Class biweekly.property.ValuedProperty (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.ValuedProperty

    +
    + + + + + + + + + +
    +Packages that use ValuedProperty
    biweekly.property  
    +  +

    + + + + + +
    +Uses of ValuedProperty in biweekly.property
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of ValuedProperty in biweekly.property
    + classAction + +
    +           + Defines the type of action to invoke when an alarm is triggered.
    + classAttendee + +
    +           + Defines an attendee (such as a person attending an event).
    + classCalendarScale + +
    +           + Specifies the calendar system that this iCalendar object uses.
    + classClassification + +
    +           + Defines the level of sensitivity of the iCalendar data.
    + classComment + +
    +           + Defines a free-text comment to be read by the user.
    + classCompleted + +
    +           + Defines the date and time that a to-do task was completed.
    + classContact + +
    +           + Defines contact information for a person or other entity (for example, the + name of a business and its phone number).
    + classCreated + +
    +           + Defines the date-time that the calendar information was initially created.
    + classDateTimeProperty + +
    +          Represents a property whose value is a date-time.
    + classDateTimeStamp + +
    +           + The meaning of this property varies depending on the state of the iCalendar + object: + + If a Method property exists: Defines the creation date of + the iCalendar object (not the creation date of the actual calendar data).
    + classDescription + +
    +           + A detailed description of the component that this property belongs to.
    + classDurationProperty + +
    +           + Defines a duration of time (for example, "2 hours and 30 minutes").
    + classEnumProperty + +
    +          Parent class for properties that have a defined set of acceptable values (for + example, Action).
    + classExceptionRule + +
    +           + Defines an exception to a RecurrenceRule.
    + classIntegerProperty + +
    +          Represents a property whose value is an integer.
    + classLastModified + +
    +           + Defines the date and time that the calendar data in a component was last + changed.
    + classLocation + +
    +           + Defines the physical location of an event.
    + classMethod + +
    +           + Specifies the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity.
    + classOrganizer + +
    +           + Defines an organizer.
    + classPercentComplete + +
    +           + Defines a to-do task's level of completion.
    + classPriority + +
    +           + Defines the priority of an event or to-do task.
    + classProductId + +
    +           + Identifies the application that created the iCalendar object.
    + classRecurrenceProperty + +
    +          Defines a property whose value is a recurrence rule.
    + classRecurrenceRule + +
    +           + Defines how often a component repeats.
    + classRelatedTo + +
    +           + Defines a relationship between the component that this property belongs to + and another component.
    + classRepeat + +
    +           + Defines the number of times an alarm should be repeated after its initial + trigger.
    + classSequence + +
    +           + Defines a revision number for an event, to-do task, or journal entry.
    + classStatus + +
    +           + Defines the status of the component that this property belongs to, such as a + to-do task being in a "completed" state.
    + classSummary + +
    +           + Defines a short, one line summary of the component that this property belongs + to.
    + classTextProperty + +
    +          Represents a property whose value is a plain-text string.
    + classTimezoneId + +
    +           + Defines a unique identifier for a VTimezone component.
    + classTimezoneName + +
    +           + Defines a traditional, non-standard name for a timezone observance (for + example, "Eastern Standard Time" for standard time on the US east coast).
    + classTimezoneUrl + +
    +           + Defines a URL that points to an iCalendar object that contains further + information on a timezone.
    + classTransparency + +
    +           + Defines whether an event is visible to free/busy time searches.
    + classUid + +
    +           + Defines a unique identifier for a component.
    + classUrl + +
    +           + Points to a resource that contains additional information about a component.
    + classXml + +
    +           + Used for storing properties parsed from xCal documents whose XML namespaces + are not part of the xCal XML namespace.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Version.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Version.html new file mode 100644 index 000000000..df7c9a06d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Version.html @@ -0,0 +1,315 @@ + + + + + + + +Uses of Class biweekly.property.Version (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Version

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use Version
    biweekly  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Version in biweekly
    +  +

    + + + + + + + + + +
    Methods in biweekly that return Version
    + VersionICalendar.getVersion() + +
    +          Gets the min/max versions a consumer must support in order to + successfully parse the iCalendar object.
    +  +

    + + + + + + + + + +
    Methods in biweekly with parameters of type Version
    + voidICalendar.setVersion(Version version) + +
    +          Sets the min/max versions a consumer must support in order to + successfully parse the iCalendar object.
    +  +

    + + + + + +
    +Uses of Version in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return Version
    +static VersionVersion.v2_0() + +
    +          Creates a version property that is set to the default iCalendar version + (2.0).
    +  +

    + + + + + +
    +Uses of Version in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Version
    +protected  VersionVersionMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  VersionVersionMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  VersionVersionMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type Version
    +protected  JCalValueVersionMarshaller._writeJson(Version property) + +
    +           
    +protected  StringVersionMarshaller._writeText(Version property) + +
    +           
    +protected  voidVersionMarshaller._writeXml(Version property, + XCalElement element) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Xml.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Xml.html new file mode 100644 index 000000000..f041955ce --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/class-use/Xml.html @@ -0,0 +1,238 @@ + + + + + + + +Uses of Class biweekly.property.Xml (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.Xml

    +
    + + + + + + + + + +
    +Packages that use Xml
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of Xml in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return Xml
    +protected  XmlXmlMarshaller._parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  XmlXmlMarshaller._parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  XmlXmlMarshaller._parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type Xml
    +protected  JCalValueXmlMarshaller._writeJson(Xml property) + +
    +           
    +protected  StringXmlMarshaller._writeText(Xml property) + +
    +           
    +protected  voidXmlMarshaller._writeXml(Xml property, + XCalElement element) + +
    +           
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/doc-files/shBrushJava.js b/libs/biweekly-0.3.1-javadoc/biweekly/property/doc-files/shBrushJava.js new file mode 100644 index 000000000..d692fd638 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/doc-files/shBrushJava.js @@ -0,0 +1,57 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'abstract assert boolean break byte case catch char class const ' + + 'continue default do double else enum extends ' + + 'false final finally float for goto if implements import ' + + 'instanceof int interface long native new null ' + + 'package private protected public return ' + + 'short static strictfp super switch synchronized this throw throws true ' + + 'transient try void volatile while'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: /\/\*([^\*][\s\S]*)?\*\//gm, css: 'comments' }, // multiline comments + { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, css: 'preprocessor' }, // documentation comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers + { regex: /(?!\@interface\b)\@[\$\w]+\b/g, css: 'color1' }, // annotation @anno + { regex: /\@interface\b/g, css: 'color2' }, // @interface keyword + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // java keyword + ]; + + this.forHtmlScript({ + left : /(<|<)%[@!=]?/g, + right : /%(>|>)/g + }); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['java']; + + SyntaxHighlighter.brushes.Java = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/doc-files/shCore.js b/libs/biweekly-0.3.1-javadoc/biweekly/property/doc-files/shCore.js new file mode 100644 index 000000000..b47b64547 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/doc-files/shCore.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a-1},3d:6(g){e+=g}};c1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;be.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;dd.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a\'+c+""});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.Pb.P)H 1;Y I(a.Lb.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'\'+c+""+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v<3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;">1v3v 3.0.76 (72 73 3x)1Z://3u.2w/1v70 17 6U 71.6T 6X-3x 6Y 6D.6t 61 60 J 1k, 5Z 5R 5V <2R/>5U 5T 5S!\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'\',d=e.16.2x,h=d.2X,g=0;g";H c},2o:6(a,b,c){H\'<2W>\'+c+""},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;md)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P\'+c+""},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i\'+j+"":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"":"")+\'<2d 1g="17">\'+b+""},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{})) diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ActionMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ActionMarshaller.html new file mode 100644 index 000000000..7792f96c3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ActionMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +ActionMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ActionMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<Action>
    +          extended by biweekly.property.marshaller.ActionMarshaller
    +
    +
    +
    +
    public class ActionMarshaller
    extends TextPropertyMarshaller<Action>
    + + +

    +Marshals Action properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    ActionMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  ActionnewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ActionMarshaller

    +
    +public ActionMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Action newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<Action>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/AttachmentMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/AttachmentMarshaller.html new file mode 100644 index 000000000..f58784eef --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/AttachmentMarshaller.html @@ -0,0 +1,638 @@ + + + + + + + +AttachmentMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class AttachmentMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<Attachment>
    +      extended by biweekly.property.marshaller.AttachmentMarshaller
    +
    +
    +
    +
    public class AttachmentMarshaller
    extends ICalPropertyMarshaller<Attachment>
    + + +

    +Marshals Attachment properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    AttachmentMarshaller() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  ICalDataType_dataType(Attachment property) + +
    +           + Determines the data type of a property instance.
    +protected  Attachment_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  Attachment_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  Attachment_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  void_prepareParameters(Attachment property, + ICalParameters copy) + +
    +           + Sanitizes a property's parameters before the property is written.
    +protected  JCalValue_writeJson(Attachment property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(Attachment property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(Attachment property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +AttachmentMarshaller

    +
    +public AttachmentMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_prepareParameters

    +
    +protected void _prepareParameters(Attachment property,
    +                                  ICalParameters copy)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Sanitizes a property's parameters before the property is written. +

    +

    + This method should be overridden by child classes that wish to tweak the + property's parameters before the property is written. The default + implementation of this method does nothing. +

    +

    +

    +
    Overrides:
    _prepareParameters in class ICalPropertyMarshaller<Attachment>
    +
    +
    +
    Parameters:
    property - the property
    copy - the list of parameters to make modifications to (it is a copy + of the property's parameters)
    +
    +
    +
    + +

    +_dataType

    +
    +protected ICalDataType _dataType(Attachment property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Determines the data type of a property instance. +

    +

    + This method should be overridden by child classes if a property's data + type changes depending on its value. The default implementation of this + method returns the property's default data type. +

    +

    +

    +
    Overrides:
    _dataType in class ICalPropertyMarshaller<Attachment>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the data type or null if unknown
    +
    +
    +
    + +

    +_writeText

    +
    +protected String _writeText(Attachment property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<Attachment>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected Attachment _parseText(String value,
    +                                ICalDataType dataType,
    +                                ICalParameters parameters,
    +                                List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<Attachment>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(Attachment property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<Attachment>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected Attachment _parseXml(XCalElement element,
    +                               ICalParameters parameters,
    +                               List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<Attachment>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(Attachment property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<Attachment>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected Attachment _parseJson(JCalValue value,
    +                                ICalDataType dataType,
    +                                ICalParameters parameters,
    +                                List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<Attachment>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/AttendeeMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/AttendeeMarshaller.html new file mode 100644 index 000000000..33c25286d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/AttendeeMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +AttendeeMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class AttendeeMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<Attendee>
    +          extended by biweekly.property.marshaller.AttendeeMarshaller
    +
    +
    +
    +
    public class AttendeeMarshaller
    extends TextPropertyMarshaller<Attendee>
    + + +

    +Marshals Attendee properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    AttendeeMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  AttendeenewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +AttendeeMarshaller

    +
    +public AttendeeMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Attendee newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<Attendee>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CalendarScaleMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CalendarScaleMarshaller.html new file mode 100644 index 000000000..3b066e42e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CalendarScaleMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +CalendarScaleMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class CalendarScaleMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<CalendarScale>
    +          extended by biweekly.property.marshaller.CalendarScaleMarshaller
    +
    +
    +
    +
    public class CalendarScaleMarshaller
    extends TextPropertyMarshaller<CalendarScale>
    + + +

    +Marshals CalendarScale properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    CalendarScaleMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  CalendarScalenewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +CalendarScaleMarshaller

    +
    +public CalendarScaleMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected CalendarScale newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<CalendarScale>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CategoriesMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CategoriesMarshaller.html new file mode 100644 index 000000000..c74946005 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CategoriesMarshaller.html @@ -0,0 +1,333 @@ + + + + + + + +CategoriesMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class CategoriesMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.ListPropertyMarshaller<T,String>
    +          extended by biweekly.property.marshaller.TextListPropertyMarshaller<Categories>
    +              extended by biweekly.property.marshaller.CategoriesMarshaller
    +
    +
    +
    +
    public class CategoriesMarshaller
    extends TextListPropertyMarshaller<Categories>
    + + +

    +Marshals Categories properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    CategoriesMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    + CategoriesnewInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextListPropertyMarshaller
    readValue, writeValue
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ListPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +CategoriesMarshaller

    +
    +public CategoriesMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +public Categories newInstance(ICalDataType dataType,
    +                              ICalParameters parameters)
    +
    +
    +
    Specified by:
    newInstance in class ListPropertyMarshaller<Categories,String>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ClassificationMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ClassificationMarshaller.html new file mode 100644 index 000000000..b1ac4345a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ClassificationMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +ClassificationMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ClassificationMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<Classification>
    +          extended by biweekly.property.marshaller.ClassificationMarshaller
    +
    +
    +
    +
    public class ClassificationMarshaller
    extends TextPropertyMarshaller<Classification>
    + + +

    +Marshals Classification properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    ClassificationMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  ClassificationnewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ClassificationMarshaller

    +
    +public ClassificationMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Classification newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<Classification>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CommentMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CommentMarshaller.html new file mode 100644 index 000000000..a84f8a225 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CommentMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +CommentMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class CommentMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<Comment>
    +          extended by biweekly.property.marshaller.CommentMarshaller
    +
    +
    +
    +
    public class CommentMarshaller
    extends TextPropertyMarshaller<Comment>
    + + +

    +Marshals Comment properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    CommentMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  CommentnewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +CommentMarshaller

    +
    +public CommentMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Comment newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<Comment>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CompletedMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CompletedMarshaller.html new file mode 100644 index 000000000..0473debe6 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CompletedMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +CompletedMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class CompletedMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.DateTimePropertyMarshaller<Completed>
    +          extended by biweekly.property.marshaller.CompletedMarshaller
    +
    +
    +
    +
    public class CompletedMarshaller
    extends DateTimePropertyMarshaller<Completed>
    + + +

    +Marshals Completed properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    CompletedMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  CompletednewInstance(Date date) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.DateTimePropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +CompletedMarshaller

    +
    +public CompletedMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Completed newInstance(Date date)
    +
    +
    +
    Specified by:
    newInstance in class DateTimePropertyMarshaller<Completed>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ContactMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ContactMarshaller.html new file mode 100644 index 000000000..1a7c33cd3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ContactMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +ContactMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ContactMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<Contact>
    +          extended by biweekly.property.marshaller.ContactMarshaller
    +
    +
    +
    +
    public class ContactMarshaller
    extends TextPropertyMarshaller<Contact>
    + + +

    +Marshals Contact properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    ContactMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  ContactnewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ContactMarshaller

    +
    +public ContactMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Contact newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<Contact>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CreatedMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CreatedMarshaller.html new file mode 100644 index 000000000..ac1df023a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/CreatedMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +CreatedMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class CreatedMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.DateTimePropertyMarshaller<Created>
    +          extended by biweekly.property.marshaller.CreatedMarshaller
    +
    +
    +
    +
    public class CreatedMarshaller
    extends DateTimePropertyMarshaller<Created>
    + + +

    +Marshals Created properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    CreatedMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  CreatednewInstance(Date date) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.DateTimePropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +CreatedMarshaller

    +
    +public CreatedMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Created newInstance(Date date)
    +
    +
    +
    Specified by:
    newInstance in class DateTimePropertyMarshaller<Created>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateDueMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateDueMarshaller.html new file mode 100644 index 000000000..e777e3d85 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateDueMarshaller.html @@ -0,0 +1,323 @@ + + + + + + + +DateDueMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class DateDueMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.DateOrDateTimePropertyMarshaller<DateDue>
    +          extended by biweekly.property.marshaller.DateDueMarshaller
    +
    +
    +
    +
    public class DateDueMarshaller
    extends DateOrDateTimePropertyMarshaller<DateDue>
    + + +

    +Marshals DateDue properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    DateDueMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  DateDuenewInstance(Date date, + boolean hasTime) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.DateOrDateTimePropertyMarshaller
    _dataType, _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DateDueMarshaller

    +
    +public DateDueMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected DateDue newInstance(Date date,
    +                              boolean hasTime)
    +
    +
    +
    Specified by:
    newInstance in class DateOrDateTimePropertyMarshaller<DateDue>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateEndMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateEndMarshaller.html new file mode 100644 index 000000000..10dfc1d94 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateEndMarshaller.html @@ -0,0 +1,323 @@ + + + + + + + +DateEndMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class DateEndMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.DateOrDateTimePropertyMarshaller<DateEnd>
    +          extended by biweekly.property.marshaller.DateEndMarshaller
    +
    +
    +
    +
    public class DateEndMarshaller
    extends DateOrDateTimePropertyMarshaller<DateEnd>
    + + +

    +Marshals DateEnd properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    DateEndMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  DateEndnewInstance(Date date, + boolean hasTime) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.DateOrDateTimePropertyMarshaller
    _dataType, _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DateEndMarshaller

    +
    +public DateEndMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected DateEnd newInstance(Date date,
    +                              boolean hasTime)
    +
    +
    +
    Specified by:
    newInstance in class DateOrDateTimePropertyMarshaller<DateEnd>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateOrDateTimePropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateOrDateTimePropertyMarshaller.html new file mode 100644 index 000000000..329d8fd7b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateOrDateTimePropertyMarshaller.html @@ -0,0 +1,630 @@ + + + + + + + +DateOrDateTimePropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class DateOrDateTimePropertyMarshaller<T extends DateOrDateTimeProperty>

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.DateOrDateTimePropertyMarshaller<T>
    +
    +
    +
    Type Parameters:
    T - the property class
    +
    +
    Direct Known Subclasses:
    DateDueMarshaller, DateEndMarshaller, DateStartMarshaller, RecurrenceIdMarshaller
    +
    +
    +
    +
    public abstract class DateOrDateTimePropertyMarshaller<T extends DateOrDateTimeProperty>
    extends ICalPropertyMarshaller<T>
    + + +

    +Marshals properties that have either "date" or "date-time" values. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    DateOrDateTimePropertyMarshaller(Class<T> clazz, + String propertyName) + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  ICalDataType_dataType(T property) + +
    +           + Determines the data type of a property instance.
    +protected  T_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  T_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  T_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(T property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(T property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(T property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    +protected abstract  TnewInstance(Date date, + boolean hasTime) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DateOrDateTimePropertyMarshaller

    +
    +public DateOrDateTimePropertyMarshaller(Class<T> clazz,
    +                                        String propertyName)
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_dataType

    +
    +protected ICalDataType _dataType(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Determines the data type of a property instance. +

    +

    + This method should be overridden by child classes if a property's data + type changes depending on its value. The default implementation of this + method returns the property's default data type. +

    +

    +

    +
    Overrides:
    _dataType in class ICalPropertyMarshaller<T extends DateOrDateTimeProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the data type or null if unknown
    +
    +
    +
    + +

    +_writeText

    +
    +protected String _writeText(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<T extends DateOrDateTimeProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected T _parseText(String value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<T extends DateOrDateTimeProperty>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(T property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<T extends DateOrDateTimeProperty>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected T _parseXml(XCalElement element,
    +                      ICalParameters parameters,
    +                      List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<T extends DateOrDateTimeProperty>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<T extends DateOrDateTimeProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected T _parseJson(JCalValue value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<T extends DateOrDateTimeProperty>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +newInstance

    +
    +protected abstract T newInstance(Date date,
    +                                 boolean hasTime)
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateStartMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateStartMarshaller.html new file mode 100644 index 000000000..6f9687d2f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateStartMarshaller.html @@ -0,0 +1,323 @@ + + + + + + + +DateStartMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class DateStartMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.DateOrDateTimePropertyMarshaller<DateStart>
    +          extended by biweekly.property.marshaller.DateStartMarshaller
    +
    +
    +
    +
    public class DateStartMarshaller
    extends DateOrDateTimePropertyMarshaller<DateStart>
    + + +

    +Marshals DateStart properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    DateStartMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  DateStartnewInstance(Date date, + boolean hasTime) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.DateOrDateTimePropertyMarshaller
    _dataType, _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DateStartMarshaller

    +
    +public DateStartMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected DateStart newInstance(Date date,
    +                                boolean hasTime)
    +
    +
    +
    Specified by:
    newInstance in class DateOrDateTimePropertyMarshaller<DateStart>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateTimePropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateTimePropertyMarshaller.html new file mode 100644 index 000000000..36108b905 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateTimePropertyMarshaller.html @@ -0,0 +1,594 @@ + + + + + + + +DateTimePropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class DateTimePropertyMarshaller<T extends DateTimeProperty>

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.DateTimePropertyMarshaller<T>
    +
    +
    +
    Type Parameters:
    T - the property class
    +
    +
    Direct Known Subclasses:
    CompletedMarshaller, CreatedMarshaller, DateTimeStampMarshaller, LastModifiedMarshaller
    +
    +
    +
    +
    public abstract class DateTimePropertyMarshaller<T extends DateTimeProperty>
    extends ICalPropertyMarshaller<T>
    + + +

    +Marshals properties that have "date-time" values. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    DateTimePropertyMarshaller(Class<T> clazz, + String propertyName) + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  T_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  T_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  T_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(T property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(T property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(T property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    +protected abstract  TnewInstance(Date date) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DateTimePropertyMarshaller

    +
    +public DateTimePropertyMarshaller(Class<T> clazz,
    +                                  String propertyName)
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_writeText

    +
    +protected String _writeText(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<T extends DateTimeProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected T _parseText(String value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<T extends DateTimeProperty>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(T property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<T extends DateTimeProperty>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected T _parseXml(XCalElement element,
    +                      ICalParameters parameters,
    +                      List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<T extends DateTimeProperty>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<T extends DateTimeProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected T _parseJson(JCalValue value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<T extends DateTimeProperty>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +newInstance

    +
    +protected abstract T newInstance(Date date)
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateTimeStampMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateTimeStampMarshaller.html new file mode 100644 index 000000000..ae0c896f3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DateTimeStampMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +DateTimeStampMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class DateTimeStampMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.DateTimePropertyMarshaller<DateTimeStamp>
    +          extended by biweekly.property.marshaller.DateTimeStampMarshaller
    +
    +
    +
    +
    public class DateTimeStampMarshaller
    extends DateTimePropertyMarshaller<DateTimeStamp>
    + + +

    +Marshals DateTimeStamp properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    DateTimeStampMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  DateTimeStampnewInstance(Date date) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.DateTimePropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DateTimeStampMarshaller

    +
    +public DateTimeStampMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected DateTimeStamp newInstance(Date date)
    +
    +
    +
    Specified by:
    newInstance in class DateTimePropertyMarshaller<DateTimeStamp>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DescriptionMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DescriptionMarshaller.html new file mode 100644 index 000000000..0b0f28f0c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DescriptionMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +DescriptionMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class DescriptionMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<Description>
    +          extended by biweekly.property.marshaller.DescriptionMarshaller
    +
    +
    +
    +
    public class DescriptionMarshaller
    extends TextPropertyMarshaller<Description>
    + + +

    +Marshals Description properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    DescriptionMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  DescriptionnewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DescriptionMarshaller

    +
    +public DescriptionMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Description newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<Description>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DurationPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DurationPropertyMarshaller.html new file mode 100644 index 000000000..4ad50accf --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/DurationPropertyMarshaller.html @@ -0,0 +1,568 @@ + + + + + + + +DurationPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class DurationPropertyMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<DurationProperty>
    +      extended by biweekly.property.marshaller.DurationPropertyMarshaller
    +
    +
    +
    +
    public class DurationPropertyMarshaller
    extends ICalPropertyMarshaller<DurationProperty>
    + + +

    +Marshals DurationProperty properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    DurationPropertyMarshaller() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  DurationProperty_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  DurationProperty_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  DurationProperty_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(DurationProperty property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(DurationProperty property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(DurationProperty property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DurationPropertyMarshaller

    +
    +public DurationPropertyMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_writeText

    +
    +protected String _writeText(DurationProperty property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<DurationProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected DurationProperty _parseText(String value,
    +                                      ICalDataType dataType,
    +                                      ICalParameters parameters,
    +                                      List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<DurationProperty>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(DurationProperty property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<DurationProperty>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected DurationProperty _parseXml(XCalElement element,
    +                                     ICalParameters parameters,
    +                                     List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<DurationProperty>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(DurationProperty property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<DurationProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected DurationProperty _parseJson(JCalValue value,
    +                                      ICalDataType dataType,
    +                                      ICalParameters parameters,
    +                                      List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<DurationProperty>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ExceptionDatesMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ExceptionDatesMarshaller.html new file mode 100644 index 000000000..fdf81f1d4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ExceptionDatesMarshaller.html @@ -0,0 +1,621 @@ + + + + + + + +ExceptionDatesMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ExceptionDatesMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.ListPropertyMarshaller<ExceptionDates,Date>
    +          extended by biweekly.property.marshaller.ExceptionDatesMarshaller
    +
    +
    +
    +
    public class ExceptionDatesMarshaller
    extends ListPropertyMarshaller<ExceptionDates,Date>
    + + +

    +Marshals ExceptionDates properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    ExceptionDatesMarshaller() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  ICalDataType_dataType(ExceptionDates property) + +
    +           + Determines the data type of a property instance.
    +protected  ExceptionDates_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  ExceptionDates_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(ExceptionDates property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  void_writeXml(ExceptionDates property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    +protected  ExceptionDatesnewInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    +protected  DatereadValue(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  StringwriteValue(ExceptionDates property, + Date value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ListPropertyMarshaller
    _parseText, _writeText
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ExceptionDatesMarshaller

    +
    +public ExceptionDatesMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_dataType

    +
    +protected ICalDataType _dataType(ExceptionDates property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Determines the data type of a property instance. +

    +

    + This method should be overridden by child classes if a property's data + type changes depending on its value. The default implementation of this + method returns the property's default data type. +

    +

    +

    +
    Overrides:
    _dataType in class ICalPropertyMarshaller<ExceptionDates>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the data type or null if unknown
    +
    +
    +
    + +

    +newInstance

    +
    +protected ExceptionDates newInstance(ICalDataType dataType,
    +                                     ICalParameters parameters)
    +
    +
    +
    Specified by:
    newInstance in class ListPropertyMarshaller<ExceptionDates,Date>
    +
    +
    +
    +
    +
    +
    + +

    +writeValue

    +
    +protected String writeValue(ExceptionDates property,
    +                            Date value)
    +
    +
    +
    Specified by:
    writeValue in class ListPropertyMarshaller<ExceptionDates,Date>
    +
    +
    +
    +
    +
    +
    + +

    +readValue

    +
    +protected Date readValue(String value,
    +                         ICalDataType dataType,
    +                         ICalParameters parameters,
    +                         List<String> warnings)
    +
    +
    +
    Specified by:
    readValue in class ListPropertyMarshaller<ExceptionDates,Date>
    +
    +
    +
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(ExceptionDates property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ListPropertyMarshaller<ExceptionDates,Date>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected ExceptionDates _parseXml(XCalElement element,
    +                                   ICalParameters parameters,
    +                                   List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ListPropertyMarshaller<ExceptionDates,Date>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(ExceptionDates property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ListPropertyMarshaller<ExceptionDates,Date>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected ExceptionDates _parseJson(JCalValue value,
    +                                    ICalDataType dataType,
    +                                    ICalParameters parameters,
    +                                    List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ListPropertyMarshaller<ExceptionDates,Date>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ExceptionRuleMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ExceptionRuleMarshaller.html new file mode 100644 index 000000000..1e3e82769 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ExceptionRuleMarshaller.html @@ -0,0 +1,325 @@ + + + + + + + +ExceptionRuleMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ExceptionRuleMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.RecurrencePropertyMarshaller<ExceptionRule>
    +          extended by biweekly.property.marshaller.ExceptionRuleMarshaller
    +
    +
    +
    +
    public class ExceptionRuleMarshaller
    extends RecurrencePropertyMarshaller<ExceptionRule>
    + + +

    +Marshals ExceptionRule properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    ExceptionRuleMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  ExceptionRulenewInstance(Recurrence recur) + +
    +          Creates a new instance of the recurrence property.
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.RecurrencePropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ExceptionRuleMarshaller

    +
    +public ExceptionRuleMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected ExceptionRule newInstance(Recurrence recur)
    +
    +
    Description copied from class: RecurrencePropertyMarshaller
    +
    Creates a new instance of the recurrence property. +

    +

    +
    Specified by:
    newInstance in class RecurrencePropertyMarshaller<ExceptionRule>
    +
    +
    +
    Parameters:
    recur - the recurrence value +
    Returns:
    the new instance
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/FreeBusyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/FreeBusyMarshaller.html new file mode 100644 index 000000000..8ced7e913 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/FreeBusyMarshaller.html @@ -0,0 +1,568 @@ + + + + + + + +FreeBusyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class FreeBusyMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<FreeBusy>
    +      extended by biweekly.property.marshaller.FreeBusyMarshaller
    +
    +
    +
    +
    public class FreeBusyMarshaller
    extends ICalPropertyMarshaller<FreeBusy>
    + + +

    +Marshals FreeBusy properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    FreeBusyMarshaller() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  FreeBusy_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  FreeBusy_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  FreeBusy_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(FreeBusy property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(FreeBusy property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(FreeBusy property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +FreeBusyMarshaller

    +
    +public FreeBusyMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_writeText

    +
    +protected String _writeText(FreeBusy property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<FreeBusy>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected FreeBusy _parseText(String value,
    +                              ICalDataType dataType,
    +                              ICalParameters parameters,
    +                              List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<FreeBusy>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(FreeBusy property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<FreeBusy>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected FreeBusy _parseXml(XCalElement element,
    +                             ICalParameters parameters,
    +                             List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<FreeBusy>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(FreeBusy property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<FreeBusy>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected FreeBusy _parseJson(JCalValue value,
    +                              ICalDataType dataType,
    +                              ICalParameters parameters,
    +                              List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<FreeBusy>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/GeoMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/GeoMarshaller.html new file mode 100644 index 000000000..17829fea1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/GeoMarshaller.html @@ -0,0 +1,568 @@ + + + + + + + +GeoMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class GeoMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<Geo>
    +      extended by biweekly.property.marshaller.GeoMarshaller
    +
    +
    +
    +
    public class GeoMarshaller
    extends ICalPropertyMarshaller<Geo>
    + + +

    +Marshals Geo properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    GeoMarshaller() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  Geo_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  Geo_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  Geo_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(Geo property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(Geo property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(Geo property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +GeoMarshaller

    +
    +public GeoMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_writeText

    +
    +protected String _writeText(Geo property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<Geo>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected Geo _parseText(String value,
    +                         ICalDataType dataType,
    +                         ICalParameters parameters,
    +                         List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<Geo>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(Geo property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<Geo>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected Geo _parseXml(XCalElement element,
    +                        ICalParameters parameters,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<Geo>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(Geo property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<Geo>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected Geo _parseJson(JCalValue value,
    +                         ICalDataType dataType,
    +                         ICalParameters parameters,
    +                         List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<Geo>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.DateParser.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.DateParser.html new file mode 100644 index 000000000..f974b1d1d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.DateParser.html @@ -0,0 +1,351 @@ + + + + + + + +ICalPropertyMarshaller.DateParser (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ICalPropertyMarshaller.DateParser

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller.DateParser
    +
    +
    +
    Enclosing class:
    ICalPropertyMarshaller<T extends ICalProperty>
    +
    +
    +
    +
    protected static class ICalPropertyMarshaller.DateParser
    extends Object
    + + +

    +Factory class for parsing dates. +

    + +

    +


    + +

    + + + + + + + + + + + +
    +Constructor Summary
    ICalPropertyMarshaller.DateParser(String value) + +
    +          Creates a new date writer object.
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + Dateparse() + +
    +          Parses the date string.
    + ICalPropertyMarshaller.DateParsertz(TimeZone timezone) + +
    +          Sets the timezone to parse the date as.
    + ICalPropertyMarshaller.DateParsertzid(String timezoneId) + +
    +          Sets the ID of the timezone to parse the date as (TZID parameter + value).
    + ICalPropertyMarshaller.DateParsertzid(String timezoneId, + List<String> warnings) + +
    +          Sets the ID of the timezone to parse the date as (TZID parameter + value).
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalPropertyMarshaller.DateParser

    +
    +public ICalPropertyMarshaller.DateParser(String value)
    +
    +
    Creates a new date writer object. +

    +

    +
    Parameters:
    value - the date string to parse
    +
    + + + + + + + + +
    +Method Detail
    + +

    +tzid

    +
    +public ICalPropertyMarshaller.DateParser tzid(String timezoneId)
    +
    +
    Sets the ID of the timezone to parse the date as (TZID parameter + value). If the ID does not contain a "/" character, it will be + ignored. +

    +

    +
    Parameters:
    timezoneId - the timezone ID +
    Returns:
    this
    +
    +
    +
    + +

    +tzid

    +
    +public ICalPropertyMarshaller.DateParser tzid(String timezoneId,
    +                                              List<String> warnings)
    +
    +
    Sets the ID of the timezone to parse the date as (TZID parameter + value). +

    +

    +
    Parameters:
    timezoneId - the timezone ID. If the ID is global (contains a + "/" character), it will attempt to look up the timezone in Java's + timezone registry and parse the date according to that timezone. If + the timezone is not found, the date will be parsed according to the + JVM's default timezone and a warning message will be added to the + provided warnings list. If the ID is not global, it will be parsed + according to the JVM's default timezone. Whichever timezone is chosen + here, it will be ignored if the date string is in UTC time or + contains an offset.
    warnings - if the ID is global and is not recognized, a warning + message will be added to this list +
    Returns:
    this
    +
    +
    +
    + +

    +tz

    +
    +public ICalPropertyMarshaller.DateParser tz(TimeZone timezone)
    +
    +
    Sets the timezone to parse the date as. +

    +

    +
    Parameters:
    timezone - the timezone +
    Returns:
    this
    +
    +
    +
    + +

    +parse

    +
    +public Date parse()
    +
    +
    Parses the date string. +

    +

    + +
    Returns:
    the parsed date +
    Throws: +
    IllegalArgumentException - if the date string is invalid
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.DateWriter.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.DateWriter.html new file mode 100644 index 000000000..e717f8921 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.DateWriter.html @@ -0,0 +1,415 @@ + + + + + + + +ICalPropertyMarshaller.DateWriter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ICalPropertyMarshaller.DateWriter

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller.DateWriter
    +
    +
    +
    Enclosing class:
    ICalPropertyMarshaller<T extends ICalProperty>
    +
    +
    +
    +
    protected static class ICalPropertyMarshaller.DateWriter
    extends Object
    + + +

    +Factory class for writing dates. +

    + +

    +


    + +

    + + + + + + + + + + + +
    +Constructor Summary
    ICalPropertyMarshaller.DateWriter(Date date) + +
    +          Creates a new date writer object.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + ICalPropertyMarshaller.DateWriterextended(boolean extended) + +
    +          Sets whether to use extended format or basic.
    + ICalPropertyMarshaller.DateWriterlocalTz(boolean localTz) + +
    +          Outputs the date in local time (without a timezone).
    + ICalPropertyMarshaller.DateWritertime(boolean hasTime) + +
    +          Sets whether to output the date's time component.
    + ICalPropertyMarshaller.DateWritertz(boolean localTz, + String timezoneId) + +
    +          Convenience method that combines localTz(boolean) and + tzid(String) into one method.
    + ICalPropertyMarshaller.DateWritertz(TimeZone timezone) + +
    +          Sets the timezone to format the date as.
    + ICalPropertyMarshaller.DateWritertzid(String timezoneId) + +
    +          Sets the ID of the timezone to format the date as (TZID parameter + value).
    + Stringwrite() + +
    +          Creates the date string.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalPropertyMarshaller.DateWriter

    +
    +public ICalPropertyMarshaller.DateWriter(Date date)
    +
    +
    Creates a new date writer object. +

    +

    +
    Parameters:
    date - the date to format
    +
    + + + + + + + + +
    +Method Detail
    + +

    +time

    +
    +public ICalPropertyMarshaller.DateWriter time(boolean hasTime)
    +
    +
    Sets whether to output the date's time component. +

    +

    +
    Parameters:
    hasTime - true include the time, false if it's strictly a date + (defaults to "true") +
    Returns:
    this
    +
    +
    +
    + +

    +tzid

    +
    +public ICalPropertyMarshaller.DateWriter tzid(String timezoneId)
    +
    +
    Sets the ID of the timezone to format the date as (TZID parameter + value). +

    +

    +
    Parameters:
    timezoneId - the timezone ID. If the ID is global (contains a + "/" character), it will attempt to look up the timezone in Java's + timezone registry and format the date according to that timezone. If + the timezone is not found, the date will be formatted in UTC. If the + ID is not global, it will be formatted according to the JVM's default + timezone. If no timezone preference is specified, the date will be + formatted as UTC. +
    Returns:
    this
    +
    +
    +
    + +

    +localTz

    +
    +public ICalPropertyMarshaller.DateWriter localTz(boolean localTz)
    +
    +
    Outputs the date in local time (without a timezone). If no timezone + preference is specified, the date will be formatted as UTC. +

    +

    +
    Parameters:
    localTz - true to use local time, false not to +
    Returns:
    this
    +
    +
    +
    + +

    +tz

    +
    +public ICalPropertyMarshaller.DateWriter tz(boolean localTz,
    +                                            String timezoneId)
    +
    +
    Convenience method that combines localTz(boolean) and + tzid(String) into one method. +

    +

    +
    Parameters:
    localTz - true to use local time, false not to
    timezoneId - the timezone ID +
    Returns:
    this
    +
    +
    +
    + +

    +tz

    +
    +public ICalPropertyMarshaller.DateWriter tz(TimeZone timezone)
    +
    +
    Sets the timezone to format the date as. If no timezone preference is + specified, the date will be formatted as UTC. +

    +

    +
    Parameters:
    timezone - the timezone +
    Returns:
    this
    +
    +
    +
    + +

    +extended

    +
    +public ICalPropertyMarshaller.DateWriter extended(boolean extended)
    +
    +
    Sets whether to use extended format or basic. +

    +

    +
    Parameters:
    extended - true to use extended format, false to use basic + (defaults to "false") +
    Returns:
    this
    +
    +
    +
    + +

    +write

    +
    +public String write()
    +
    +
    Creates the date string. +

    +

    + +
    Returns:
    the date string
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.ListCallback.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.ListCallback.html new file mode 100644 index 000000000..a6c39c266 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.ListCallback.html @@ -0,0 +1,221 @@ + + + + + + + +ICalPropertyMarshaller.ListCallback (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Interface ICalPropertyMarshaller.ListCallback<T>

    +
    +
    Type Parameters:
    T - the value class
    +
    +
    Enclosing class:
    ICalPropertyMarshaller<T extends ICalProperty>
    +
    +
    +
    +
    protected static interface ICalPropertyMarshaller.ListCallback<T>
    + + +

    +Callback function used in conjunction with the + list method +

    + +

    +


    + +

    + + + + + + + + + + + + +
    +Method Summary
    + StringasString(T value) + +
    +          Converts a value to a string.
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +asString

    +
    +String asString(T value)
    +
    +
    Converts a value to a string. +

    +

    +
    Parameters:
    value - the value (null values are not passed to this method, so + this parameter will never be null) +
    Returns:
    the string
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.Result.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.Result.html new file mode 100644 index 000000000..75134e127 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.Result.html @@ -0,0 +1,297 @@ + + + + + + + +ICalPropertyMarshaller.Result (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ICalPropertyMarshaller.Result<T extends ICalProperty>

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller.Result<T>
    +
    +
    +
    Type Parameters:
    T - the unmarshalled property class
    +
    +
    Enclosing class:
    ICalPropertyMarshaller<T extends ICalProperty>
    +
    +
    +
    +
    public static class ICalPropertyMarshaller.Result<T extends ICalProperty>
    extends Object
    + + +

    +Represents the result of an unmarshal operation. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + +
    +Constructor Summary
    ICalPropertyMarshaller.Result(T property, + List<String> warnings) + +
    +          Creates a new result.
    +  + + + + + + + + + + + + + + + +
    +Method Summary
    + TgetProperty() + +
    +          Gets the property object.
    + List<String>getWarnings() + +
    +          Gets the warnings.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalPropertyMarshaller.Result

    +
    +public ICalPropertyMarshaller.Result(T property,
    +                                     List<String> warnings)
    +
    +
    Creates a new result. +

    +

    +
    Parameters:
    property - the property object
    warnings - the warnings
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getWarnings

    +
    +public List<String> getWarnings()
    +
    +
    Gets the warnings. +

    +

    + +
    Returns:
    the warnings
    +
    +
    +
    + +

    +getProperty

    +
    +public T getProperty()
    +
    +
    Gets the property object. +

    +

    + +
    Returns:
    the property object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.SemiStructuredIterator.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.SemiStructuredIterator.html new file mode 100644 index 000000000..21ff0d35e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.SemiStructuredIterator.html @@ -0,0 +1,291 @@ + + + + + + + +ICalPropertyMarshaller.SemiStructuredIterator (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ICalPropertyMarshaller.SemiStructuredIterator

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller.SemiStructuredIterator
    +
    +
    +
    Enclosing class:
    ICalPropertyMarshaller<T extends ICalProperty>
    +
    +
    +
    +
    protected static class ICalPropertyMarshaller.SemiStructuredIterator
    extends Object
    + + +

    +Iterates over the fields in a semi-structured value (a structured value + whose components cannot be multi-valued). +

    + +

    +


    + +

    + + + + + + + + + + + +
    +Constructor Summary
    ICalPropertyMarshaller.SemiStructuredIterator(Iterator<String> it) + +
    +          Constructs a new structured iterator.
    +  + + + + + + + + + + + + + + + +
    +Method Summary
    + booleanhasNext() + +
    +          Determines if there are any elements left in the value.
    + Stringnext() + +
    +          Gets the next value.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalPropertyMarshaller.SemiStructuredIterator

    +
    +public ICalPropertyMarshaller.SemiStructuredIterator(Iterator<String> it)
    +
    +
    Constructs a new structured iterator. +

    +

    +
    Parameters:
    it - the iterator to wrap
    +
    + + + + + + + + +
    +Method Detail
    + +

    +next

    +
    +public String next()
    +
    +
    Gets the next value. +

    +

    + +
    Returns:
    the next value, null if the value is an empty string, or null + if there are no more values
    +
    +
    +
    + +

    +hasNext

    +
    +public boolean hasNext()
    +
    +
    Determines if there are any elements left in the value. +

    +

    + +
    Returns:
    true if there are elements left, false if not
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.Splitter.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.Splitter.html new file mode 100644 index 000000000..158b61618 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.Splitter.html @@ -0,0 +1,336 @@ + + + + + + + +ICalPropertyMarshaller.Splitter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ICalPropertyMarshaller.Splitter

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller.Splitter
    +
    +
    +
    Enclosing class:
    ICalPropertyMarshaller<T extends ICalProperty>
    +
    +
    +
    +
    protected static class ICalPropertyMarshaller.Splitter
    extends Object
    + + +

    +Factory class for splitting strings. +

    + +

    +


    + +

    + + + + + + + + + + + +
    +Constructor Summary
    ICalPropertyMarshaller.Splitter(String string, + String delimiter) + +
    +          Creates a new splitter object.
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + ICalPropertyMarshaller.Splitterlimit(int limit) + +
    +          Sets the max number of split strings it should parse.
    + ICalPropertyMarshaller.SplitterremoveEmpties(boolean removeEmpties) + +
    +          Sets whether to remove empty elements.
    + List<String>split() + +
    +          Performs the split operation.
    + ICalPropertyMarshaller.Splitterunescape(boolean unescape) + +
    +          Sets whether to unescape each split string.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalPropertyMarshaller.Splitter

    +
    +public ICalPropertyMarshaller.Splitter(String string,
    +                                       String delimiter)
    +
    +
    Creates a new splitter object. +

    +

    +
    Parameters:
    string - the string to split (e.g. "one,two,three")
    delimiter - the delimiter (e.g. ",")
    +
    + + + + + + + + +
    +Method Detail
    + +

    +removeEmpties

    +
    +public ICalPropertyMarshaller.Splitter removeEmpties(boolean removeEmpties)
    +
    +
    Sets whether to remove empty elements. +

    +

    +
    Parameters:
    removeEmpties - true to remove empty elements, false not to + (default is false) +
    Returns:
    this
    +
    +
    +
    + +

    +unescape

    +
    +public ICalPropertyMarshaller.Splitter unescape(boolean unescape)
    +
    +
    Sets whether to unescape each split string. +

    +

    +
    Parameters:
    unescape - true to unescape, false not to (default is false) +
    Returns:
    this
    +
    +
    +
    + +

    +limit

    +
    +public ICalPropertyMarshaller.Splitter limit(int limit)
    +
    +
    Sets the max number of split strings it should parse. +

    +

    +
    Parameters:
    limit - the max number of split strings +
    Returns:
    this
    +
    +
    +
    + +

    +split

    +
    +public List<String> split()
    +
    +
    Performs the split operation. +

    +

    + +
    Returns:
    the split string
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.StructuredIterator.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.StructuredIterator.html new file mode 100644 index 000000000..5a5103702 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.StructuredIterator.html @@ -0,0 +1,313 @@ + + + + + + + +ICalPropertyMarshaller.StructuredIterator (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ICalPropertyMarshaller.StructuredIterator

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller.StructuredIterator
    +
    +
    +
    Enclosing class:
    ICalPropertyMarshaller<T extends ICalProperty>
    +
    +
    +
    +
    protected static class ICalPropertyMarshaller.StructuredIterator
    extends Object
    + + +

    +Iterates over the fields in a structured value. +

    + +

    +


    + +

    + + + + + + + + + + + +
    +Constructor Summary
    ICalPropertyMarshaller.StructuredIterator(Iterator<List<String>> it) + +
    +          Constructs a new structured iterator.
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + booleanhasNext() + +
    +          Determines if there are any elements left in the value.
    + List<String>nextComponent() + +
    +          Gets the next component.
    + StringnextString() + +
    +          Gets the first value of the next component.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalPropertyMarshaller.StructuredIterator

    +
    +public ICalPropertyMarshaller.StructuredIterator(Iterator<List<String>> it)
    +
    +
    Constructs a new structured iterator. +

    +

    +
    Parameters:
    it - the iterator to wrap
    +
    + + + + + + + + +
    +Method Detail
    + +

    +nextString

    +
    +public String nextString()
    +
    +
    Gets the first value of the next component. +

    +

    + +
    Returns:
    the first value, null if the value is an empty string, or + null if there are no more components
    +
    +
    +
    + +

    +nextComponent

    +
    +public List<String> nextComponent()
    +
    +
    Gets the next component. +

    +

    + +
    Returns:
    the next component, an empty list if the component is empty, + or an empty list of there are no more components
    +
    +
    +
    + +

    +hasNext

    +
    +public boolean hasNext()
    +
    +
    Determines if there are any elements left in the value. +

    +

    + +
    Returns:
    true if there are elements left, false if not
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.html new file mode 100644 index 000000000..64e035203 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ICalPropertyMarshaller.html @@ -0,0 +1,1544 @@ + + + + + + + +ICalPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ICalPropertyMarshaller<T extends ICalProperty>

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +
    +
    +
    Type Parameters:
    T - the property class
    +
    +
    Direct Known Subclasses:
    AttachmentMarshaller, DateOrDateTimePropertyMarshaller, DateTimePropertyMarshaller, DurationPropertyMarshaller, FreeBusyMarshaller, GeoMarshaller, IntegerPropertyMarshaller, ListPropertyMarshaller, RawPropertyMarshaller, RecurrenceDatesMarshaller, RecurrencePropertyMarshaller, RequestStatusMarshaller, TextPropertyMarshaller, TriggerMarshaller, UtcOffsetPropertyMarshaller, VersionMarshaller, XmlMarshaller
    +
    +
    +
    +
    public abstract class ICalPropertyMarshaller<T extends ICalProperty>
    extends Object
    + + +

    +Base class for iCalendar property marshallers. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Nested Class Summary
    +protected static classICalPropertyMarshaller.DateParser + +
    +          Factory class for parsing dates.
    +protected static classICalPropertyMarshaller.DateWriter + +
    +          Factory class for writing dates.
    +protected static interfaceICalPropertyMarshaller.ListCallback<T> + +
    +          Callback function used in conjunction with the + list method
    +static classICalPropertyMarshaller.Result<T extends ICalProperty> + +
    +          Represents the result of an unmarshal operation.
    +protected static classICalPropertyMarshaller.SemiStructuredIterator + +
    +          Iterates over the fields in a semi-structured value (a structured value + whose components cannot be multi-valued).
    +protected static classICalPropertyMarshaller.Splitter + +
    +          Factory class for splitting strings.
    +protected static classICalPropertyMarshaller.StructuredIterator + +
    +          Iterates over the fields in a structured value.
    + + + + + + + + + + + + + + + + + + + + + + +
    +Field Summary
    +protected  Class<T>clazz + +
    +           
    +protected  ICalDataTypedefaultDataType + +
    +           
    +protected  StringpropertyName + +
    +           
    +protected  QNameqname + +
    +           
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    ICalPropertyMarshaller(Class<T> clazz, + String propertyName, + ICalDataType defaultDataType) + +
    +          Creates a new marshaller.
    ICalPropertyMarshaller(Class<T> clazz, + String propertyName, + ICalDataType defaultDataType, + QName qname) + +
    +          Creates a new marshaller.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  ICalDataType_dataType(T property) + +
    +           + Determines the data type of a property instance.
    +protected  T_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected abstract  T_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  T_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  void_prepareParameters(T property, + ICalParameters copy) + +
    +           + Sanitizes a property's parameters before the property is written.
    +protected  JCalValue_writeJson(T property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected abstract  String_writeText(T property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(T property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    + ICalDataTypedataType(T property) + +
    +          Determines the data type of a property instance.
    +protected static ICalPropertyMarshaller.DateWriterdate(Date date) + +
    +          Formats a Date object as a string.
    +protected static ICalPropertyMarshaller.DateParserdate(String value) + +
    +          Parses a date string.
    +protected static Stringescape(String text) + +
    +           + Escapes all special characters within a iCalendar value.
    + ICalDataTypegetDefaultDataType() + +
    +          Gets the property's default data type.
    + Class<T>getPropertyClass() + +
    +          Gets the property class.
    + StringgetPropertyName() + +
    +          Gets the property name.
    + QNamegetQName() + +
    +          Gets this property's local name and namespace for xCal documents.
    +protected static + + + + +
    +<T> String
    +
    list(Collection<T> values) + +
    +          Writes a comma-separated list of values.
    +protected static + + + + +
    +<T> String
    +
    list(Collection<T> values, + ICalPropertyMarshaller.ListCallback<T> callback) + +
    +          Writes a comma-separated list of values.
    +protected static Stringlist(Object... values) + +
    +          Writes a comma-separated list of values.
    +protected static List<String>list(String value) + +
    +          Parses a comma-separated list of values.
    +protected static CannotParseExceptionmissingXmlElements(ICalDataType... dataTypes) + +
    +          Creates a CannotParseException, indicating that the XML elements + that the parser expected to find are missing from the property's XML + element.
    +protected static CannotParseExceptionmissingXmlElements(String... elements) + +
    +          Creates a CannotParseException, indicating that the XML elements + that the parser expected to find are missing from property's XML element.
    +protected static + + + + +
    +<T> String
    +
    object(Map<String,List<T>> value) + +
    +          Writes an object property value to a string.
    +protected static ListMultimap<String,String>object(String value) + +
    +          Parses an object property value.
    + ICalPropertyMarshaller.Result<T>parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters) + +
    +          Unmarshals a property's value from a JSON data stream (jCal).
    + ICalPropertyMarshaller.Result<T>parseText(String value, + ICalDataType dataType, + ICalParameters parameters) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    + ICalPropertyMarshaller.Result<T>parseXml(Element element, + ICalParameters parameters) + +
    +          Unmarshals a property's value from an XML document (xCal).
    + ICalParametersprepareParameters(T property) + +
    +          Sanitizes a property's parameters (called before the property is + written).
    +protected static ICalPropertyMarshaller.SemiStructuredIteratorsemistructured(String value) + +
    +          Parses a list of values that are delimited by semicolons.
    +protected static ICalPropertyMarshaller.SemiStructuredIteratorsemistructured(String value, + int limit) + +
    +          Parses a list of values that are delimited by semicolons.
    +protected static ICalPropertyMarshaller.Splittersplit(String string, + String delimiter) + +
    +          Splits a string by a delimiter, taking escaped characters into account.
    +protected static ICalPropertyMarshaller.StructuredIteratorstructured(JCalValue value) + +
    +          Provides an iterator for a jCard structured value.
    +protected static Stringstructured(Object... values) + +
    +           + Writes a structured value.
    +protected static ICalPropertyMarshaller.StructuredIteratorstructured(String value) + +
    +          Parses a structured value.
    +protected static Stringunescape(String text) + +
    +          Unescapes all special characters that are escaped with a backslash, as + well as escaped newlines.
    + JCalValuewriteJson(T property) + +
    +          Marshals a property's value to a JSON data stream (jCal).
    + StringwriteText(T property) + +
    +          Marshals a property's value to a string.
    + voidwriteXml(T property, + Element element) + +
    +          Marshals a property's value to an XML element (xCal).
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +clazz

    +
    +protected final Class<T extends ICalProperty> clazz
    +
    +
    +
    +
    +
    + +

    +propertyName

    +
    +protected final String propertyName
    +
    +
    +
    +
    +
    + +

    +defaultDataType

    +
    +protected final ICalDataType defaultDataType
    +
    +
    +
    +
    +
    + +

    +qname

    +
    +protected final QName qname
    +
    +
    +
    +
    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalPropertyMarshaller

    +
    +public ICalPropertyMarshaller(Class<T> clazz,
    +                              String propertyName,
    +                              ICalDataType defaultDataType)
    +
    +
    Creates a new marshaller. +

    +

    +
    Parameters:
    clazz - the property class
    propertyName - the property name (e.g. "VERSION")
    defaultDataType - the property's default data type (e.g. "text") or + null if unknown
    +
    +
    + +

    +ICalPropertyMarshaller

    +
    +public ICalPropertyMarshaller(Class<T> clazz,
    +                              String propertyName,
    +                              ICalDataType defaultDataType,
    +                              QName qname)
    +
    +
    Creates a new marshaller. +

    +

    +
    Parameters:
    clazz - the property class
    propertyName - the property name (e.g. "VERSION")
    defaultDataType - the property's default data type (e.g. "text") or + null if unknown
    qname - the XML element name and namespace to use for xCal documents + (by default, the XML element name is set to the lower-cased property + name, and the element namespace is set to the xCal namespace)
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getPropertyClass

    +
    +public Class<T> getPropertyClass()
    +
    +
    Gets the property class. +

    +

    + +
    Returns:
    the property class
    +
    +
    +
    + +

    +getPropertyName

    +
    +public String getPropertyName()
    +
    +
    Gets the property name. +

    +

    + +
    Returns:
    the property name (e.g. "VERSION")
    +
    +
    +
    + +

    +getDefaultDataType

    +
    +public ICalDataType getDefaultDataType()
    +
    +
    Gets the property's default data type. +

    +

    + +
    Returns:
    the default data type (e.g. "text") or null if unknown
    +
    +
    +
    + +

    +getQName

    +
    +public QName getQName()
    +
    +
    Gets this property's local name and namespace for xCal documents. +

    +

    + +
    Returns:
    the XML local name and namespace
    +
    +
    +
    + +

    +prepareParameters

    +
    +public final ICalParameters prepareParameters(T property)
    +
    +
    Sanitizes a property's parameters (called before the property is + written). Note that a copy of the parameters is returned so that the + property object does not get modified. +

    +

    +
    Parameters:
    property - the property +
    Returns:
    the sanitized parameters
    +
    +
    +
    + +

    +dataType

    +
    +public final ICalDataType dataType(T property)
    +
    +
    Determines the data type of a property instance. +

    +

    +
    Parameters:
    property - the property +
    Returns:
    the data type or null if unknown
    +
    +
    +
    + +

    +writeText

    +
    +public final String writeText(T property)
    +
    +
    Marshals a property's value to a string. +

    +

    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value +
    Throws: +
    SkipMeException - if the property should not be written to the data + stream
    +
    +
    +
    + +

    +writeXml

    +
    +public final void writeXml(T property,
    +                           Element element)
    +
    +
    Marshals a property's value to an XML element (xCal). +

    +

    +
    Parameters:
    property - the property
    element - the property's XML element +
    Throws: +
    SkipMeException - if the property should not be written to the data + stream
    +
    +
    +
    + +

    +writeJson

    +
    +public final JCalValue writeJson(T property)
    +
    +
    Marshals a property's value to a JSON data stream (jCal). +

    +

    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value +
    Throws: +
    SkipMeException - if the property should not be written to the data + stream
    +
    +
    +
    + +

    +parseText

    +
    +public final ICalPropertyMarshaller.Result<T> parseText(String value,
    +                                                        ICalDataType dataType,
    +                                                        ICalParameters parameters)
    +
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters +
    Returns:
    the unmarshalled property and its warnings +
    Throws: +
    CannotParseException - if the marshaller could not parse the + property's value +
    SkipMeException - if the property should not be added to the final + ICalendar object
    +
    +
    +
    + +

    +parseXml

    +
    +public final ICalPropertyMarshaller.Result<T> parseXml(Element element,
    +                                                       ICalParameters parameters)
    +
    +
    Unmarshals a property's value from an XML document (xCal). +

    +

    +
    Parameters:
    element - the property's XML element
    parameters - the property's parameters +
    Returns:
    the unmarshalled property and its warnings +
    Throws: +
    CannotParseException - if the marshaller could not parse the + property's value +
    SkipMeException - if the property should not be added to the final + ICalendar object
    +
    +
    +
    + +

    +parseJson

    +
    +public final ICalPropertyMarshaller.Result<T> parseJson(JCalValue value,
    +                                                        ICalDataType dataType,
    +                                                        ICalParameters parameters)
    +
    +
    Unmarshals a property's value from a JSON data stream (jCal). +

    +

    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters +
    Returns:
    the unmarshalled property and its warnings +
    Throws: +
    CannotParseException - if the marshaller could not parse the + property's value +
    SkipMeException - if the property should not be added to the final + ICalendar object
    +
    +
    +
    + +

    +_prepareParameters

    +
    +protected void _prepareParameters(T property,
    +                                  ICalParameters copy)
    +
    +

    + Sanitizes a property's parameters before the property is written. +

    +

    + This method should be overridden by child classes that wish to tweak the + property's parameters before the property is written. The default + implementation of this method does nothing. +

    +

    +

    +
    Parameters:
    property - the property
    copy - the list of parameters to make modifications to (it is a copy + of the property's parameters)
    +
    +
    +
    + +

    +_dataType

    +
    +protected ICalDataType _dataType(T property)
    +
    +

    + Determines the data type of a property instance. +

    +

    + This method should be overridden by child classes if a property's data + type changes depending on its value. The default implementation of this + method returns the property's default data type. +

    +

    +

    +
    Parameters:
    property - the property +
    Returns:
    the data type or null if unknown
    +
    +
    +
    + +

    +_writeText

    +
    +protected abstract String _writeText(T property)
    +
    +
    Marshals a property's value to a string. +

    +

    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value +
    Throws: +
    SkipMeException - if the property should not be written to the data + stream
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(T property,
    +                         XCalElement element)
    +
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + writeText(T) method). +

    +

    +

    +
    Parameters:
    property - the property
    element - the property's XML element +
    Throws: +
    SkipMeException - if the property should not be written to the data + stream
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(T property)
    +
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + writeText(T) method). +

    +

    +

    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value +
    Throws: +
    SkipMeException - if the property should not be written to the data + stream
    +
    +
    +
    + +

    +_parseText

    +
    +protected abstract T _parseText(String value,
    +                                ICalDataType dataType,
    +                                ICalParameters parameters,
    +                                List<String> warnings)
    +
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object +
    Throws: +
    CannotParseException - if the marshaller could not parse the + property's value +
    SkipMeException - if the property should not be added to the final + ICalendar object
    +
    +
    +
    + +

    +_parseXml

    +
    +protected T _parseXml(XCalElement element,
    +                      ICalParameters parameters,
    +                      List<String> warnings)
    +
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + _parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into _parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object +
    Throws: +
    CannotParseException - if the marshaller could not parse the + property's value +
    SkipMeException - if the property should not be added to the final + ICalendar object
    +
    +
    +
    + +

    +_parseJson

    +
    +protected T _parseJson(JCalValue value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the _parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object +
    Throws: +
    CannotParseException - if the marshaller could not parse the + property's value +
    SkipMeException - if the property should not be added to the final + ICalendar object
    +
    +
    +
    + +

    +unescape

    +
    +protected static String unescape(String text)
    +
    +
    Unescapes all special characters that are escaped with a backslash, as + well as escaped newlines. +

    +

    +
    Parameters:
    text - the text to unescape +
    Returns:
    the unescaped text
    +
    +
    +
    + +

    +escape

    +
    +protected static String escape(String text)
    +
    +

    + Escapes all special characters within a iCalendar value. These characters + are: +

    +
      +
    • backslashes (\)
    • +
    • commas (,)
    • +
    • semi-colons (;)
    • +
    +

    + Newlines are not escaped by this method. They are escaped when the + iCalendar object is serialized (in the ICalRawWriter class). +

    +

    +

    +
    Parameters:
    text - the text to escape +
    Returns:
    the escaped text
    +
    +
    +
    + +

    +split

    +
    +protected static ICalPropertyMarshaller.Splitter split(String string,
    +                                                       String delimiter)
    +
    +
    Splits a string by a delimiter, taking escaped characters into account. +

    +

    +
    Parameters:
    string - the string to split (e.g. "one,two,three")
    delimiter - the delimiter (e.g. ",") +
    Returns:
    the factory object
    +
    +
    +
    + +

    +list

    +
    +protected static List<String> list(String value)
    +
    +
    Parses a comma-separated list of values. +

    +

    +
    Parameters:
    value - the string to parse (e.g. "one,two,th\,ree") +
    Returns:
    the parsed values
    +
    +
    +
    + +

    +list

    +
    +protected static String list(Object... values)
    +
    +
    Writes a comma-separated list of values. +

    +

    +
    Parameters:
    values - the values to write +
    Returns:
    the list
    +
    +
    +
    + +

    +list

    +
    +protected static <T> String list(Collection<T> values)
    +
    +
    Writes a comma-separated list of values. +

    +

    +
    Parameters:
    values - the values to write +
    Returns:
    the list
    +
    +
    +
    + +

    +list

    +
    +protected static <T> String list(Collection<T> values,
    +                                 ICalPropertyMarshaller.ListCallback<T> callback)
    +
    +
    Writes a comma-separated list of values. +

    +

    +
    Parameters:
    values - the values to write
    callback - callback function used for converting each value to a + string +
    Returns:
    the list
    +
    +
    +
    + +

    +semistructured

    +
    +protected static ICalPropertyMarshaller.SemiStructuredIterator semistructured(String value)
    +
    +
    Parses a list of values that are delimited by semicolons. Unlike + structured value components, semi-structured components cannot be + multi-valued. +

    +

    +
    Parameters:
    value - the string to parse (e.g. "one;two;three") +
    Returns:
    the parsed values
    +
    +
    +
    + +

    +semistructured

    +
    +protected static ICalPropertyMarshaller.SemiStructuredIterator semistructured(String value,
    +                                                                              int limit)
    +
    +
    Parses a list of values that are delimited by semicolons. Unlike + structured value components, semi-structured components cannot be + multi-valued. +

    +

    +
    Parameters:
    value - the string to parse (e.g. "one;two;three")
    limit - the max number of components to parse +
    Returns:
    the parsed values
    +
    +
    +
    + +

    +structured

    +
    +protected static ICalPropertyMarshaller.StructuredIterator structured(String value)
    +
    +
    Parses a structured value. +

    +

    +
    Parameters:
    value - the string to parse (e.g. "one;two,three;four") +
    Returns:
    the parsed values
    +
    +
    +
    + +

    +structured

    +
    +protected static ICalPropertyMarshaller.StructuredIterator structured(JCalValue value)
    +
    +
    Provides an iterator for a jCard structured value. +

    +

    +
    Parameters:
    value - the jCard value +
    Returns:
    the parsed values
    +
    +
    +
    + +

    +structured

    +
    +protected static String structured(Object... values)
    +
    +

    + Writes a structured value. +

    +

    + This method accepts a list of Object instances. + Collection objects will be treated as multi-valued components. + Null objects will be treated as empty components. All other objects will + have their toString() method invoked to generate the string + value. +

    +

    +

    +
    Parameters:
    values - the values to write +
    Returns:
    the structured value string
    +
    +
    +
    + +

    +object

    +
    +protected static <T> String object(Map<String,List<T>> value)
    +
    +
    Writes an object property value to a string. +

    +

    +
    Parameters:
    value - the value +
    Returns:
    the string
    +
    +
    +
    + +

    +object

    +
    +protected static ListMultimap<String,String> object(String value)
    +
    +
    Parses an object property value. +

    +

    +
    Parameters:
    value - the value to parse +
    Returns:
    the parsed value
    +
    +
    +
    + +

    +date

    +
    +protected static ICalPropertyMarshaller.DateParser date(String value)
    +
    +
    Parses a date string. +

    +

    +
    Parameters:
    value - the date string +
    Returns:
    the factory object
    +
    +
    +
    + +

    +date

    +
    +protected static ICalPropertyMarshaller.DateWriter date(Date date)
    +
    +
    Formats a Date object as a string. +

    +

    +
    Parameters:
    date - the date +
    Returns:
    the factory object
    +
    +
    +
    + +

    +missingXmlElements

    +
    +protected static CannotParseException missingXmlElements(ICalDataType... dataTypes)
    +
    +
    Creates a CannotParseException, indicating that the XML elements + that the parser expected to find are missing from the property's XML + element. +

    +

    +
    Parameters:
    dataTypes - the expected data types (null for "unknown")
    +
    +
    +
    + +

    +missingXmlElements

    +
    +protected static CannotParseException missingXmlElements(String... elements)
    +
    +
    Creates a CannotParseException, indicating that the XML elements + that the parser expected to find are missing from property's XML element. +

    +

    +
    Parameters:
    elements - the names of the expected XML elements.
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/IntegerPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/IntegerPropertyMarshaller.html new file mode 100644 index 000000000..e218d0762 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/IntegerPropertyMarshaller.html @@ -0,0 +1,594 @@ + + + + + + + +IntegerPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class IntegerPropertyMarshaller<T extends IntegerProperty>

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.IntegerPropertyMarshaller<T>
    +
    +
    +
    Type Parameters:
    T - the property class
    +
    +
    Direct Known Subclasses:
    PercentCompleteMarshaller, PriorityMarshaller, RepeatMarshaller, SequenceMarshaller
    +
    +
    +
    +
    public abstract class IntegerPropertyMarshaller<T extends IntegerProperty>
    extends ICalPropertyMarshaller<T>
    + + +

    +Marshals properties that have integer values. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    IntegerPropertyMarshaller(Class<T> clazz, + String propertyName) + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  T_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  T_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  T_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(T property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(T property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(T property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    +protected abstract  TnewInstance(Integer value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +IntegerPropertyMarshaller

    +
    +public IntegerPropertyMarshaller(Class<T> clazz,
    +                                 String propertyName)
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_writeText

    +
    +protected String _writeText(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<T extends IntegerProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected T _parseText(String value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<T extends IntegerProperty>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(T property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<T extends IntegerProperty>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected T _parseXml(XCalElement element,
    +                      ICalParameters parameters,
    +                      List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<T extends IntegerProperty>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<T extends IntegerProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected T _parseJson(JCalValue value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<T extends IntegerProperty>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +newInstance

    +
    +protected abstract T newInstance(Integer value)
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/LastModifiedMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/LastModifiedMarshaller.html new file mode 100644 index 000000000..2883b1830 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/LastModifiedMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +LastModifiedMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class LastModifiedMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.DateTimePropertyMarshaller<LastModified>
    +          extended by biweekly.property.marshaller.LastModifiedMarshaller
    +
    +
    +
    +
    public class LastModifiedMarshaller
    extends DateTimePropertyMarshaller<LastModified>
    + + +

    +Marshals LastModified properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    LastModifiedMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  LastModifiednewInstance(Date date) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.DateTimePropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +LastModifiedMarshaller

    +
    +public LastModifiedMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected LastModified newInstance(Date date)
    +
    +
    +
    Specified by:
    newInstance in class DateTimePropertyMarshaller<LastModified>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ListPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ListPropertyMarshaller.html new file mode 100644 index 000000000..43577041f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ListPropertyMarshaller.html @@ -0,0 +1,660 @@ + + + + + + + +ListPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ListPropertyMarshaller<T extends ListProperty<V>,V>

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.ListPropertyMarshaller<T,V>
    +
    +
    +
    Type Parameters:
    T - the property class
    V - the value class
    +
    +
    Direct Known Subclasses:
    ExceptionDatesMarshaller, TextListPropertyMarshaller
    +
    +
    +
    +
    public abstract class ListPropertyMarshaller<T extends ListProperty<V>,V>
    extends ICalPropertyMarshaller<T>
    + + +

    +Marshals properties that contain a list of values. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    ListPropertyMarshaller(Class<T> clazz, + String propertyName) + +
    +           
    ListPropertyMarshaller(Class<T> clazz, + String propertyName, + ICalDataType dataType) + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  T_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  T_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  T_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(T property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(T property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(T property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    +protected abstract  TnewInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    +protected abstract  VreadValue(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected abstract  StringwriteValue(T property, + V value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ListPropertyMarshaller

    +
    +public ListPropertyMarshaller(Class<T> clazz,
    +                              String propertyName)
    +
    +
    +
    + +

    +ListPropertyMarshaller

    +
    +public ListPropertyMarshaller(Class<T> clazz,
    +                              String propertyName,
    +                              ICalDataType dataType)
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_writeText

    +
    +protected String _writeText(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<T extends ListProperty<V>>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected T _parseText(String value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<T extends ListProperty<V>>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(T property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<T extends ListProperty<V>>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected T _parseXml(XCalElement element,
    +                      ICalParameters parameters,
    +                      List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<T extends ListProperty<V>>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<T extends ListProperty<V>>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected T _parseJson(JCalValue value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<T extends ListProperty<V>>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +newInstance

    +
    +protected abstract T newInstance(ICalDataType dataType,
    +                                 ICalParameters parameters)
    +
    +
    +
    +
    +
    +
    + +

    +writeValue

    +
    +protected abstract String writeValue(T property,
    +                                     V value)
    +
    +
    +
    +
    +
    +
    + +

    +readValue

    +
    +protected abstract V readValue(String value,
    +                               ICalDataType dataType,
    +                               ICalParameters parameters,
    +                               List<String> warnings)
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/LocationMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/LocationMarshaller.html new file mode 100644 index 000000000..090134791 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/LocationMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +LocationMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class LocationMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<Location>
    +          extended by biweekly.property.marshaller.LocationMarshaller
    +
    +
    +
    +
    public class LocationMarshaller
    extends TextPropertyMarshaller<Location>
    + + +

    +Marshals Location properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    LocationMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  LocationnewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +LocationMarshaller

    +
    +public LocationMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Location newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<Location>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/MethodMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/MethodMarshaller.html new file mode 100644 index 000000000..48dfbf032 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/MethodMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +MethodMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class MethodMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<Method>
    +          extended by biweekly.property.marshaller.MethodMarshaller
    +
    +
    +
    +
    public class MethodMarshaller
    extends TextPropertyMarshaller<Method>
    + + +

    +Marshals Method properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    MethodMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  MethodnewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +MethodMarshaller

    +
    +public MethodMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Method newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<Method>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/OrganizerMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/OrganizerMarshaller.html new file mode 100644 index 000000000..48b70d67b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/OrganizerMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +OrganizerMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class OrganizerMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<Organizer>
    +          extended by biweekly.property.marshaller.OrganizerMarshaller
    +
    +
    +
    +
    public class OrganizerMarshaller
    extends TextPropertyMarshaller<Organizer>
    + + +

    +Marshals Organizer properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    OrganizerMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  OrganizernewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +OrganizerMarshaller

    +
    +public OrganizerMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Organizer newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<Organizer>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/PercentCompleteMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/PercentCompleteMarshaller.html new file mode 100644 index 000000000..b841a45cc --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/PercentCompleteMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +PercentCompleteMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class PercentCompleteMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.IntegerPropertyMarshaller<PercentComplete>
    +          extended by biweekly.property.marshaller.PercentCompleteMarshaller
    +
    +
    +
    +
    public class PercentCompleteMarshaller
    extends IntegerPropertyMarshaller<PercentComplete>
    + + +

    +Marshals PercentComplete properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    PercentCompleteMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  PercentCompletenewInstance(Integer value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.IntegerPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +PercentCompleteMarshaller

    +
    +public PercentCompleteMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected PercentComplete newInstance(Integer value)
    +
    +
    +
    Specified by:
    newInstance in class IntegerPropertyMarshaller<PercentComplete>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/PriorityMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/PriorityMarshaller.html new file mode 100644 index 000000000..dcfae0fa7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/PriorityMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +PriorityMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class PriorityMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.IntegerPropertyMarshaller<Priority>
    +          extended by biweekly.property.marshaller.PriorityMarshaller
    +
    +
    +
    +
    public class PriorityMarshaller
    extends IntegerPropertyMarshaller<Priority>
    + + +

    +Marshals Priority properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    PriorityMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  PrioritynewInstance(Integer value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.IntegerPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +PriorityMarshaller

    +
    +public PriorityMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Priority newInstance(Integer value)
    +
    +
    +
    Specified by:
    newInstance in class IntegerPropertyMarshaller<Priority>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ProductIdMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ProductIdMarshaller.html new file mode 100644 index 000000000..e6640bce1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ProductIdMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +ProductIdMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ProductIdMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<ProductId>
    +          extended by biweekly.property.marshaller.ProductIdMarshaller
    +
    +
    +
    +
    public class ProductIdMarshaller
    extends TextPropertyMarshaller<ProductId>
    + + +

    +Marshals ProductId properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    ProductIdMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  ProductIdnewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ProductIdMarshaller

    +
    +public ProductIdMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected ProductId newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<ProductId>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RawPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RawPropertyMarshaller.html new file mode 100644 index 000000000..21d1a0b90 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RawPropertyMarshaller.html @@ -0,0 +1,437 @@ + + + + + + + +RawPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class RawPropertyMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<RawProperty>
    +      extended by biweekly.property.marshaller.RawPropertyMarshaller
    +
    +
    +
    +
    public class RawPropertyMarshaller
    extends ICalPropertyMarshaller<RawProperty>
    + + +

    +Marshals properties that do not have a marshaller associated with them. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    RawPropertyMarshaller(String propertyName) + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  ICalDataType_dataType(RawProperty property) + +
    +           + Determines the data type of a property instance.
    +protected  RawProperty_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  RawProperty_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  String_writeText(RawProperty property) + +
    +          Marshals a property's value to a string.
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _parseJson, _prepareParameters, _writeJson, _writeXml, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RawPropertyMarshaller

    +
    +public RawPropertyMarshaller(String propertyName)
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_dataType

    +
    +protected ICalDataType _dataType(RawProperty property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Determines the data type of a property instance. +

    +

    + This method should be overridden by child classes if a property's data + type changes depending on its value. The default implementation of this + method returns the property's default data type. +

    +

    +

    +
    Overrides:
    _dataType in class ICalPropertyMarshaller<RawProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the data type or null if unknown
    +
    +
    +
    + +

    +_writeText

    +
    +protected String _writeText(RawProperty property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<RawProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected RawProperty _parseText(String value,
    +                                 ICalDataType dataType,
    +                                 ICalParameters parameters,
    +                                 List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<RawProperty>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_parseXml

    +
    +protected RawProperty _parseXml(XCalElement element,
    +                                ICalParameters parameters,
    +                                List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<RawProperty>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrenceDatesMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrenceDatesMarshaller.html new file mode 100644 index 000000000..26c7f7032 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrenceDatesMarshaller.html @@ -0,0 +1,602 @@ + + + + + + + +RecurrenceDatesMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class RecurrenceDatesMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<RecurrenceDates>
    +      extended by biweekly.property.marshaller.RecurrenceDatesMarshaller
    +
    +
    +
    +
    public class RecurrenceDatesMarshaller
    extends ICalPropertyMarshaller<RecurrenceDates>
    + + +

    +Marshals RecurrenceDates properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    RecurrenceDatesMarshaller() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  ICalDataType_dataType(RecurrenceDates property) + +
    +           + Determines the data type of a property instance.
    +protected  RecurrenceDates_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  RecurrenceDates_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  RecurrenceDates_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(RecurrenceDates property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(RecurrenceDates property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(RecurrenceDates property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RecurrenceDatesMarshaller

    +
    +public RecurrenceDatesMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_dataType

    +
    +protected ICalDataType _dataType(RecurrenceDates property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Determines the data type of a property instance. +

    +

    + This method should be overridden by child classes if a property's data + type changes depending on its value. The default implementation of this + method returns the property's default data type. +

    +

    +

    +
    Overrides:
    _dataType in class ICalPropertyMarshaller<RecurrenceDates>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the data type or null if unknown
    +
    +
    +
    + +

    +_writeText

    +
    +protected String _writeText(RecurrenceDates property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<RecurrenceDates>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected RecurrenceDates _parseText(String value,
    +                                     ICalDataType dataType,
    +                                     ICalParameters parameters,
    +                                     List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<RecurrenceDates>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(RecurrenceDates property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<RecurrenceDates>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected RecurrenceDates _parseXml(XCalElement element,
    +                                    ICalParameters parameters,
    +                                    List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<RecurrenceDates>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(RecurrenceDates property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<RecurrenceDates>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected RecurrenceDates _parseJson(JCalValue value,
    +                                     ICalDataType dataType,
    +                                     ICalParameters parameters,
    +                                     List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<RecurrenceDates>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrenceIdMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrenceIdMarshaller.html new file mode 100644 index 000000000..8aca91aef --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrenceIdMarshaller.html @@ -0,0 +1,323 @@ + + + + + + + +RecurrenceIdMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class RecurrenceIdMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.DateOrDateTimePropertyMarshaller<RecurrenceId>
    +          extended by biweekly.property.marshaller.RecurrenceIdMarshaller
    +
    +
    +
    +
    public class RecurrenceIdMarshaller
    extends DateOrDateTimePropertyMarshaller<RecurrenceId>
    + + +

    +Marshals RecurrenceId properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    RecurrenceIdMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  RecurrenceIdnewInstance(Date date, + boolean hasTime) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.DateOrDateTimePropertyMarshaller
    _dataType, _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RecurrenceIdMarshaller

    +
    +public RecurrenceIdMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected RecurrenceId newInstance(Date date,
    +                                   boolean hasTime)
    +
    +
    +
    Specified by:
    newInstance in class DateOrDateTimePropertyMarshaller<RecurrenceId>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrencePropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrencePropertyMarshaller.html new file mode 100644 index 000000000..ce5a53313 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrencePropertyMarshaller.html @@ -0,0 +1,597 @@ + + + + + + + +RecurrencePropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class RecurrencePropertyMarshaller<T extends RecurrenceProperty>

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.RecurrencePropertyMarshaller<T>
    +
    +
    +
    Type Parameters:
    T - the property class
    +
    +
    Direct Known Subclasses:
    ExceptionRuleMarshaller, RecurrenceRuleMarshaller
    +
    +
    +
    +
    public abstract class RecurrencePropertyMarshaller<T extends RecurrenceProperty>
    extends ICalPropertyMarshaller<T>
    + + +

    +Marshals properties whose values are Recurrence. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    RecurrencePropertyMarshaller(Class<T> clazz, + String propertyName) + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  T_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  T_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  T_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(T property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(T property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(T property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    +protected abstract  TnewInstance(Recurrence recur) + +
    +          Creates a new instance of the recurrence property.
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RecurrencePropertyMarshaller

    +
    +public RecurrencePropertyMarshaller(Class<T> clazz,
    +                                    String propertyName)
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_writeText

    +
    +protected String _writeText(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<T extends RecurrenceProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected T _parseText(String value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<T extends RecurrenceProperty>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(T property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<T extends RecurrenceProperty>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected T _parseXml(XCalElement element,
    +                      ICalParameters parameters,
    +                      List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<T extends RecurrenceProperty>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<T extends RecurrenceProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected T _parseJson(JCalValue value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<T extends RecurrenceProperty>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +newInstance

    +
    +protected abstract T newInstance(Recurrence recur)
    +
    +
    Creates a new instance of the recurrence property. +

    +

    +
    Parameters:
    recur - the recurrence value +
    Returns:
    the new instance
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrenceRuleMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrenceRuleMarshaller.html new file mode 100644 index 000000000..2e629b1d4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RecurrenceRuleMarshaller.html @@ -0,0 +1,325 @@ + + + + + + + +RecurrenceRuleMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class RecurrenceRuleMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.RecurrencePropertyMarshaller<RecurrenceRule>
    +          extended by biweekly.property.marshaller.RecurrenceRuleMarshaller
    +
    +
    +
    +
    public class RecurrenceRuleMarshaller
    extends RecurrencePropertyMarshaller<RecurrenceRule>
    + + +

    +Marshals RecurrenceRule properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    RecurrenceRuleMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  RecurrenceRulenewInstance(Recurrence recur) + +
    +          Creates a new instance of the recurrence property.
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.RecurrencePropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RecurrenceRuleMarshaller

    +
    +public RecurrenceRuleMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected RecurrenceRule newInstance(Recurrence recur)
    +
    +
    Description copied from class: RecurrencePropertyMarshaller
    +
    Creates a new instance of the recurrence property. +

    +

    +
    Specified by:
    newInstance in class RecurrencePropertyMarshaller<RecurrenceRule>
    +
    +
    +
    Parameters:
    recur - the recurrence value +
    Returns:
    the new instance
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RelatedToMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RelatedToMarshaller.html new file mode 100644 index 000000000..8e8384161 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RelatedToMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +RelatedToMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class RelatedToMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<RelatedTo>
    +          extended by biweekly.property.marshaller.RelatedToMarshaller
    +
    +
    +
    +
    public class RelatedToMarshaller
    extends TextPropertyMarshaller<RelatedTo>
    + + +

    +Marshals RelatedTo properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    RelatedToMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  RelatedTonewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RelatedToMarshaller

    +
    +public RelatedToMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected RelatedTo newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<RelatedTo>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RepeatMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RepeatMarshaller.html new file mode 100644 index 000000000..96f3ceb98 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RepeatMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +RepeatMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class RepeatMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.IntegerPropertyMarshaller<Repeat>
    +          extended by biweekly.property.marshaller.RepeatMarshaller
    +
    +
    +
    +
    public class RepeatMarshaller
    extends IntegerPropertyMarshaller<Repeat>
    + + +

    +Marshals Repeat properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    RepeatMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  RepeatnewInstance(Integer value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.IntegerPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RepeatMarshaller

    +
    +public RepeatMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Repeat newInstance(Integer value)
    +
    +
    +
    Specified by:
    newInstance in class IntegerPropertyMarshaller<Repeat>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RequestStatusMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RequestStatusMarshaller.html new file mode 100644 index 000000000..7e6da385e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/RequestStatusMarshaller.html @@ -0,0 +1,568 @@ + + + + + + + +RequestStatusMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class RequestStatusMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<RequestStatus>
    +      extended by biweekly.property.marshaller.RequestStatusMarshaller
    +
    +
    +
    +
    public class RequestStatusMarshaller
    extends ICalPropertyMarshaller<RequestStatus>
    + + +

    +Marshals RequestStatus properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    RequestStatusMarshaller() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  RequestStatus_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  RequestStatus_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  RequestStatus_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(RequestStatus property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(RequestStatus property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(RequestStatus property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +RequestStatusMarshaller

    +
    +public RequestStatusMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_writeText

    +
    +protected String _writeText(RequestStatus property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<RequestStatus>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected RequestStatus _parseText(String value,
    +                                   ICalDataType dataType,
    +                                   ICalParameters parameters,
    +                                   List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<RequestStatus>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(RequestStatus property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<RequestStatus>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected RequestStatus _parseXml(XCalElement element,
    +                                  ICalParameters parameters,
    +                                  List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<RequestStatus>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(RequestStatus property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<RequestStatus>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected RequestStatus _parseJson(JCalValue value,
    +                                   ICalDataType dataType,
    +                                   ICalParameters parameters,
    +                                   List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<RequestStatus>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ResourcesMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ResourcesMarshaller.html new file mode 100644 index 000000000..b7ba3a69f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/ResourcesMarshaller.html @@ -0,0 +1,333 @@ + + + + + + + +ResourcesMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class ResourcesMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.ListPropertyMarshaller<T,String>
    +          extended by biweekly.property.marshaller.TextListPropertyMarshaller<Resources>
    +              extended by biweekly.property.marshaller.ResourcesMarshaller
    +
    +
    +
    +
    public class ResourcesMarshaller
    extends TextListPropertyMarshaller<Resources>
    + + +

    +Marshals Resources properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    ResourcesMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    + ResourcesnewInstance(ICalDataType dataType, + ICalParameters parameters) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextListPropertyMarshaller
    readValue, writeValue
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ListPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ResourcesMarshaller

    +
    +public ResourcesMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +public Resources newInstance(ICalDataType dataType,
    +                             ICalParameters parameters)
    +
    +
    +
    Specified by:
    newInstance in class ListPropertyMarshaller<Resources,String>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/SequenceMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/SequenceMarshaller.html new file mode 100644 index 000000000..d9178748c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/SequenceMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +SequenceMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class SequenceMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.IntegerPropertyMarshaller<Sequence>
    +          extended by biweekly.property.marshaller.SequenceMarshaller
    +
    +
    +
    +
    public class SequenceMarshaller
    extends IntegerPropertyMarshaller<Sequence>
    + + +

    +Marshals Sequence properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    SequenceMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  SequencenewInstance(Integer value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.IntegerPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +SequenceMarshaller

    +
    +public SequenceMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Sequence newInstance(Integer value)
    +
    +
    +
    Specified by:
    newInstance in class IntegerPropertyMarshaller<Sequence>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/StatusMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/StatusMarshaller.html new file mode 100644 index 000000000..a81970c29 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/StatusMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +StatusMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class StatusMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<Status>
    +          extended by biweekly.property.marshaller.StatusMarshaller
    +
    +
    +
    +
    public class StatusMarshaller
    extends TextPropertyMarshaller<Status>
    + + +

    +Marshals Status properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    StatusMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  StatusnewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +StatusMarshaller

    +
    +public StatusMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Status newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<Status>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/SummaryMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/SummaryMarshaller.html new file mode 100644 index 000000000..97afd4e81 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/SummaryMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +SummaryMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class SummaryMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<Summary>
    +          extended by biweekly.property.marshaller.SummaryMarshaller
    +
    +
    +
    +
    public class SummaryMarshaller
    extends TextPropertyMarshaller<Summary>
    + + +

    +Marshals Summary properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    SummaryMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  SummarynewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +SummaryMarshaller

    +
    +public SummaryMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Summary newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<Summary>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TextListPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TextListPropertyMarshaller.html new file mode 100644 index 000000000..fe6773375 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TextListPropertyMarshaller.html @@ -0,0 +1,358 @@ + + + + + + + +TextListPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class TextListPropertyMarshaller<T extends ListProperty<String>>

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.ListPropertyMarshaller<T,String>
    +          extended by biweekly.property.marshaller.TextListPropertyMarshaller<T>
    +
    +
    +
    Type Parameters:
    T - the property class
    +
    +
    Direct Known Subclasses:
    CategoriesMarshaller, ResourcesMarshaller
    +
    +
    +
    +
    public abstract class TextListPropertyMarshaller<T extends ListProperty<String>>
    extends ListPropertyMarshaller<T,String>
    + + +

    +Marshals properties that have a list of text values. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    TextListPropertyMarshaller(Class<T> clazz, + String propertyName) + +
    +           
    +  + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  StringreadValue(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +           
    +protected  StringwriteValue(T property, + String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ListPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml, newInstance
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TextListPropertyMarshaller

    +
    +public TextListPropertyMarshaller(Class<T> clazz,
    +                                  String propertyName)
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +writeValue

    +
    +protected String writeValue(T property,
    +                            String value)
    +
    +
    +
    Specified by:
    writeValue in class ListPropertyMarshaller<T extends ListProperty<String>,String>
    +
    +
    +
    +
    +
    +
    + +

    +readValue

    +
    +protected String readValue(String value,
    +                           ICalDataType dataType,
    +                           ICalParameters parameters,
    +                           List<String> warnings)
    +
    +
    +
    Specified by:
    readValue in class ListPropertyMarshaller<T extends ListProperty<String>,String>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TextPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TextPropertyMarshaller.html new file mode 100644 index 000000000..42d67882f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TextPropertyMarshaller.html @@ -0,0 +1,612 @@ + + + + + + + +TextPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class TextPropertyMarshaller<T extends TextProperty>

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<T>
    +
    +
    +
    Type Parameters:
    T - the property class
    +
    +
    Direct Known Subclasses:
    ActionMarshaller, AttendeeMarshaller, CalendarScaleMarshaller, ClassificationMarshaller, CommentMarshaller, ContactMarshaller, DescriptionMarshaller, LocationMarshaller, MethodMarshaller, OrganizerMarshaller, ProductIdMarshaller, RelatedToMarshaller, StatusMarshaller, SummaryMarshaller, TimezoneIdMarshaller, TimezoneNameMarshaller, TimezoneUrlMarshaller, TransparencyMarshaller, UidMarshaller, UrlMarshaller
    +
    +
    +
    +
    public abstract class TextPropertyMarshaller<T extends TextProperty>
    extends ICalPropertyMarshaller<T>
    + + +

    +Marshals properties that have text values. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    TextPropertyMarshaller(Class<T> clazz, + String propertyName) + +
    +           
    TextPropertyMarshaller(Class<T> clazz, + String propertyName, + ICalDataType dataType) + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  T_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  T_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  T_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(T property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(T property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(T property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    +protected abstract  TnewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TextPropertyMarshaller

    +
    +public TextPropertyMarshaller(Class<T> clazz,
    +                              String propertyName)
    +
    +
    +
    + +

    +TextPropertyMarshaller

    +
    +public TextPropertyMarshaller(Class<T> clazz,
    +                              String propertyName,
    +                              ICalDataType dataType)
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_writeText

    +
    +protected String _writeText(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<T extends TextProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected T _parseText(String value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<T extends TextProperty>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(T property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<T extends TextProperty>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected T _parseXml(XCalElement element,
    +                      ICalParameters parameters,
    +                      List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<T extends TextProperty>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<T extends TextProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected T _parseJson(JCalValue value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<T extends TextProperty>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +newInstance

    +
    +protected abstract T newInstance(String value)
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneIdMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneIdMarshaller.html new file mode 100644 index 000000000..d90bd44fb --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneIdMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +TimezoneIdMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class TimezoneIdMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<TimezoneId>
    +          extended by biweekly.property.marshaller.TimezoneIdMarshaller
    +
    +
    +
    +
    public class TimezoneIdMarshaller
    extends TextPropertyMarshaller<TimezoneId>
    + + +

    +Marshals TimezoneId properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    TimezoneIdMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  TimezoneIdnewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TimezoneIdMarshaller

    +
    +public TimezoneIdMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected TimezoneId newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<TimezoneId>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneNameMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneNameMarshaller.html new file mode 100644 index 000000000..2e1b2c61f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneNameMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +TimezoneNameMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class TimezoneNameMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<TimezoneName>
    +          extended by biweekly.property.marshaller.TimezoneNameMarshaller
    +
    +
    +
    +
    public class TimezoneNameMarshaller
    extends TextPropertyMarshaller<TimezoneName>
    + + +

    +Marshals TimezoneName properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    TimezoneNameMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  TimezoneNamenewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TimezoneNameMarshaller

    +
    +public TimezoneNameMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected TimezoneName newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<TimezoneName>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneOffsetFromMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneOffsetFromMarshaller.html new file mode 100644 index 000000000..1ec3b1aaf --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneOffsetFromMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +TimezoneOffsetFromMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class TimezoneOffsetFromMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.UtcOffsetPropertyMarshaller<TimezoneOffsetFrom>
    +          extended by biweekly.property.marshaller.TimezoneOffsetFromMarshaller
    +
    +
    +
    +
    public class TimezoneOffsetFromMarshaller
    extends UtcOffsetPropertyMarshaller<TimezoneOffsetFrom>
    + + +

    +Marshals TimezoneOffsetFrom properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    TimezoneOffsetFromMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  TimezoneOffsetFromnewInstance(UtcOffset offset) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.UtcOffsetPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TimezoneOffsetFromMarshaller

    +
    +public TimezoneOffsetFromMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected TimezoneOffsetFrom newInstance(UtcOffset offset)
    +
    +
    +
    Specified by:
    newInstance in class UtcOffsetPropertyMarshaller<TimezoneOffsetFrom>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneOffsetToMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneOffsetToMarshaller.html new file mode 100644 index 000000000..8d3f49aa2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneOffsetToMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +TimezoneOffsetToMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class TimezoneOffsetToMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.UtcOffsetPropertyMarshaller<TimezoneOffsetTo>
    +          extended by biweekly.property.marshaller.TimezoneOffsetToMarshaller
    +
    +
    +
    +
    public class TimezoneOffsetToMarshaller
    extends UtcOffsetPropertyMarshaller<TimezoneOffsetTo>
    + + +

    +Marshals TimezoneOffsetTo properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    TimezoneOffsetToMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  TimezoneOffsetTonewInstance(UtcOffset offset) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.UtcOffsetPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TimezoneOffsetToMarshaller

    +
    +public TimezoneOffsetToMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected TimezoneOffsetTo newInstance(UtcOffset offset)
    +
    +
    +
    Specified by:
    newInstance in class UtcOffsetPropertyMarshaller<TimezoneOffsetTo>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneUrlMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneUrlMarshaller.html new file mode 100644 index 000000000..1cebe61a5 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TimezoneUrlMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +TimezoneUrlMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class TimezoneUrlMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<TimezoneUrl>
    +          extended by biweekly.property.marshaller.TimezoneUrlMarshaller
    +
    +
    +
    +
    public class TimezoneUrlMarshaller
    extends TextPropertyMarshaller<TimezoneUrl>
    + + +

    +Marshals TimezoneUrl properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    TimezoneUrlMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  TimezoneUrlnewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TimezoneUrlMarshaller

    +
    +public TimezoneUrlMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected TimezoneUrl newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<TimezoneUrl>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TransparencyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TransparencyMarshaller.html new file mode 100644 index 000000000..170233a81 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TransparencyMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +TransparencyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class TransparencyMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<Transparency>
    +          extended by biweekly.property.marshaller.TransparencyMarshaller
    +
    +
    +
    +
    public class TransparencyMarshaller
    extends TextPropertyMarshaller<Transparency>
    + + +

    +Marshals Transparency properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    TransparencyMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  TransparencynewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TransparencyMarshaller

    +
    +public TransparencyMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Transparency newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<Transparency>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TriggerMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TriggerMarshaller.html new file mode 100644 index 000000000..497d36e80 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/TriggerMarshaller.html @@ -0,0 +1,602 @@ + + + + + + + +TriggerMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class TriggerMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<Trigger>
    +      extended by biweekly.property.marshaller.TriggerMarshaller
    +
    +
    +
    +
    public class TriggerMarshaller
    extends ICalPropertyMarshaller<Trigger>
    + + +

    +Marshals Trigger properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    TriggerMarshaller() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  ICalDataType_dataType(Trigger property) + +
    +           + Determines the data type of a property instance.
    +protected  Trigger_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  Trigger_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  Trigger_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(Trigger property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(Trigger property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(Trigger property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +TriggerMarshaller

    +
    +public TriggerMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_dataType

    +
    +protected ICalDataType _dataType(Trigger property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Determines the data type of a property instance. +

    +

    + This method should be overridden by child classes if a property's data + type changes depending on its value. The default implementation of this + method returns the property's default data type. +

    +

    +

    +
    Overrides:
    _dataType in class ICalPropertyMarshaller<Trigger>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the data type or null if unknown
    +
    +
    +
    + +

    +_writeText

    +
    +protected String _writeText(Trigger property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<Trigger>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected Trigger _parseText(String value,
    +                             ICalDataType dataType,
    +                             ICalParameters parameters,
    +                             List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<Trigger>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(Trigger property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<Trigger>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected Trigger _parseXml(XCalElement element,
    +                            ICalParameters parameters,
    +                            List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<Trigger>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(Trigger property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<Trigger>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected Trigger _parseJson(JCalValue value,
    +                             ICalDataType dataType,
    +                             ICalParameters parameters,
    +                             List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<Trigger>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/UidMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/UidMarshaller.html new file mode 100644 index 000000000..959126c03 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/UidMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +UidMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class UidMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<Uid>
    +          extended by biweekly.property.marshaller.UidMarshaller
    +
    +
    +
    +
    public class UidMarshaller
    extends TextPropertyMarshaller<Uid>
    + + +

    +Marshals Uid properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    UidMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  UidnewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +UidMarshaller

    +
    +public UidMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Uid newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<Uid>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/UrlMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/UrlMarshaller.html new file mode 100644 index 000000000..06b09a22b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/UrlMarshaller.html @@ -0,0 +1,321 @@ + + + + + + + +UrlMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class UrlMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.TextPropertyMarshaller<Url>
    +          extended by biweekly.property.marshaller.UrlMarshaller
    +
    +
    +
    +
    public class UrlMarshaller
    extends TextPropertyMarshaller<Url>
    + + +

    +Marshals Url properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    UrlMarshaller() + +
    +           
    +  + + + + + + + + + + + +
    +Method Summary
    +protected  UrlnewInstance(String value) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.TextPropertyMarshaller
    _parseJson, _parseText, _parseXml, _writeJson, _writeText, _writeXml
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +UrlMarshaller

    +
    +public UrlMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +newInstance

    +
    +protected Url newInstance(String value)
    +
    +
    +
    Specified by:
    newInstance in class TextPropertyMarshaller<Url>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/UtcOffsetPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/UtcOffsetPropertyMarshaller.html new file mode 100644 index 000000000..8d0f2a1a0 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/UtcOffsetPropertyMarshaller.html @@ -0,0 +1,594 @@ + + + + + + + +UtcOffsetPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class UtcOffsetPropertyMarshaller<T extends UtcOffsetProperty>

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<T>
    +      extended by biweekly.property.marshaller.UtcOffsetPropertyMarshaller<T>
    +
    +
    +
    Type Parameters:
    T - the property class
    +
    +
    Direct Known Subclasses:
    TimezoneOffsetFromMarshaller, TimezoneOffsetToMarshaller
    +
    +
    +
    +
    public abstract class UtcOffsetPropertyMarshaller<T extends UtcOffsetProperty>
    extends ICalPropertyMarshaller<T>
    + + +

    +Marshals properties that have UTC offset values. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    UtcOffsetPropertyMarshaller(Class<T> clazz, + String propertyName) + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  T_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  T_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  T_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(T property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(T property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(T property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    +protected abstract  TnewInstance(UtcOffset offset) + +
    +           
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +UtcOffsetPropertyMarshaller

    +
    +public UtcOffsetPropertyMarshaller(Class<T> clazz,
    +                                   String propertyName)
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_writeText

    +
    +protected String _writeText(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<T extends UtcOffsetProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected T _parseText(String value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<T extends UtcOffsetProperty>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(T property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<T extends UtcOffsetProperty>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected T _parseXml(XCalElement element,
    +                      ICalParameters parameters,
    +                      List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<T extends UtcOffsetProperty>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(T property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<T extends UtcOffsetProperty>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected T _parseJson(JCalValue value,
    +                       ICalDataType dataType,
    +                       ICalParameters parameters,
    +                       List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<T extends UtcOffsetProperty>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +newInstance

    +
    +protected abstract T newInstance(UtcOffset offset)
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/VersionMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/VersionMarshaller.html new file mode 100644 index 000000000..e18d3f9f0 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/VersionMarshaller.html @@ -0,0 +1,568 @@ + + + + + + + +VersionMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class VersionMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<Version>
    +      extended by biweekly.property.marshaller.VersionMarshaller
    +
    +
    +
    +
    public class VersionMarshaller
    extends ICalPropertyMarshaller<Version>
    + + +

    +Marshals Version properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    VersionMarshaller() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  Version_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  Version_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  Version_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(Version property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(Version property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(Version property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +VersionMarshaller

    +
    +public VersionMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_writeText

    +
    +protected String _writeText(Version property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<Version>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected Version _parseText(String value,
    +                             ICalDataType dataType,
    +                             ICalParameters parameters,
    +                             List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<Version>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(Version property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<Version>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected Version _parseXml(XCalElement element,
    +                            ICalParameters parameters,
    +                            List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<Version>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(Version property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<Version>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected Version _parseJson(JCalValue value,
    +                             ICalDataType dataType,
    +                             ICalParameters parameters,
    +                             List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<Version>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/XmlMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/XmlMarshaller.html new file mode 100644 index 000000000..d9f1752e6 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/XmlMarshaller.html @@ -0,0 +1,568 @@ + + + + + + + +XmlMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.property.marshaller +
    +Class XmlMarshaller

    +
    +java.lang.Object
    +  extended by biweekly.property.marshaller.ICalPropertyMarshaller<Xml>
    +      extended by biweekly.property.marshaller.XmlMarshaller
    +
    +
    +
    +
    public class XmlMarshaller
    extends ICalPropertyMarshaller<Xml>
    + + +

    +Marshals Xml properties. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    ICalPropertyMarshaller.DateParser, ICalPropertyMarshaller.DateWriter, ICalPropertyMarshaller.ListCallback<T>, ICalPropertyMarshaller.Result<T extends ICalProperty>, ICalPropertyMarshaller.SemiStructuredIterator, ICalPropertyMarshaller.Splitter, ICalPropertyMarshaller.StructuredIterator
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    clazz, defaultDataType, propertyName, qname
    +  + + + + + + + + + + +
    +Constructor Summary
    XmlMarshaller() + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +protected  Xml_parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          /**
    +protected  Xml_parseText(String value, + ICalDataType dataType, + ICalParameters parameters, + List<String> warnings) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    +protected  Xml_parseXml(XCalElement element, + ICalParameters parameters, + List<String> warnings) + +
    +           + Unmarshals a property from an XML document (xCal).
    +protected  JCalValue_writeJson(Xml property) + +
    +           + Marshals a property's value to a JSON data stream (jCal).
    +protected  String_writeText(Xml property) + +
    +          Marshals a property's value to a string.
    +protected  void_writeXml(Xml property, + XCalElement element) + +
    +           + Marshals a property's value to an XML element (xCal).
    + + + + + + + +
    Methods inherited from class biweekly.property.marshaller.ICalPropertyMarshaller
    _dataType, _prepareParameters, dataType, date, date, escape, getDefaultDataType, getPropertyClass, getPropertyName, getQName, list, list, list, list, missingXmlElements, missingXmlElements, object, object, parseJson, parseText, parseXml, prepareParameters, semistructured, semistructured, split, structured, structured, structured, unescape, writeJson, writeText, writeXml
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +XmlMarshaller

    +
    +public XmlMarshaller()
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +_writeText

    +
    +protected String _writeText(Xml property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Marshals a property's value to a string. +

    +

    +
    Specified by:
    _writeText in class ICalPropertyMarshaller<Xml>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseText

    +
    +protected Xml _parseText(String value,
    +                         ICalDataType dataType,
    +                         ICalParameters parameters,
    +                         List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    Unmarshals a property from a plain-text iCalendar data stream. +

    +

    +
    Specified by:
    _parseText in class ICalPropertyMarshaller<Xml>
    +
    +
    +
    Parameters:
    value - the value as read off the wire
    dataType - the data type of the property value. The property's VALUE + parameter is used to determine the data type. If the property has no + VALUE parameter, then this parameter will be set to the property's + default datatype. Note that the VALUE parameter is removed from the + property's parameter list after it has been read.
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeXml

    +
    +protected void _writeXml(Xml property,
    +                         XCalElement element)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to an XML element (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will append one child + element to the property's XML element. The child element's name will be + that of the property's data type (retrieved using the ICalPropertyMarshaller.dataType(T) + method), and the child element's text content will be set to the + property's marshalled plain-text value (retrieved using the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeXml in class ICalPropertyMarshaller<Xml>
    +
    +
    +
    Parameters:
    property - the property
    element - the property's XML element
    +
    +
    +
    + +

    +_parseXml

    +
    +protected Xml _parseXml(XCalElement element,
    +                        ICalParameters parameters,
    +                        List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Unmarshals a property from an XML document (xCal). +

    +

    + This method should be overridden by child classes that wish to support + xCal. The default implementation of this method will find the first child + element with the xCal namespace. The element's name will be used as the + property's data type and its text content will be passed into the + ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) method. If no such child element is found, then the + parent element's text content will be passed into ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) and + the data type will be null. +

    +

    +

    +
    Overrides:
    _parseXml in class ICalPropertyMarshaller<Xml>
    +
    +
    +
    Parameters:
    element - the property's XML element
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    +
    + +

    +_writeJson

    +
    +protected JCalValue _writeJson(Xml property)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +

    + Marshals a property's value to a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will create a jCard + property that has a single JSON string value (generated by the + ICalPropertyMarshaller.writeText(T) method). +

    +

    +

    +
    Overrides:
    _writeJson in class ICalPropertyMarshaller<Xml>
    +
    +
    +
    Parameters:
    property - the property +
    Returns:
    the marshalled value
    +
    +
    +
    + +

    +_parseJson

    +
    +protected Xml _parseJson(JCalValue value,
    +                         ICalDataType dataType,
    +                         ICalParameters parameters,
    +                         List<String> warnings)
    +
    +
    Description copied from class: ICalPropertyMarshaller
    +
    /** +

    + Unmarshals a property from a JSON data stream (jCal). +

    +

    + This method should be overridden by child classes that wish to support + jCal. The default implementation of this method will convert the jCal + property value to a string and pass it into the ICalPropertyMarshaller._parseText(java.lang.String, biweekly.ICalDataType, biweekly.parameter.ICalParameters, java.util.List) + method. +

    + +
    + +

    + The following paragraphs describe the way in which this method's default + implementation converts a jCal value to a string: +

    +

    + If the jCal value consists of a single, non-array, non-object value, then + the value is converted to a string. Special characters (backslashes, + commas, and semicolons) are escaped in order to simulate what the value + might look like in a plain-text iCalendar object.
    + ["x-foo", {}, "text", "the;value"] --> "the\;value"
    + ["x-foo", {}, "text", 2] --> "2" +

    +

    + If the jCal value consists of multiple, non-array, non-object values, + then all the values are appended together in a single string, separated + by commas. Special characters (backslashes, commas, and semicolons) are + escaped for each value in order to prevent commas from being treated as + delimiters, and to simulate what the value might look like in a + plain-text iCalendar object.
    + ["x-foo", {}, "text", "one", "two,three"] --> + "one,two\,three" +

    +

    + If the jCal value is a single array, then this array is treated as a + "structured value", and converted its plain-text representation. Special + characters (backslashes, commas, and semicolons) are escaped for each + value in order to prevent commas and semicolons from being treated as + delimiters.
    + ["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]] + --> "one;two,three;four\;five" +

    +

    + If the jCal value starts with a JSON object, then the object is converted + to a format identical to the one used in the RRULE and EXRULE properties. + Special characters (backslashes, commas, semicolons, and equal signs) are + escaped for each value in order to preserve the syntax of the string + value.
    + ["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --> "ONE=1;TWO=2,2.5" +

    +

    + For all other cases, behavior is undefined. +

    +

    +

    +
    Overrides:
    _parseJson in class ICalPropertyMarshaller<Xml>
    +
    +
    +
    Parameters:
    value - the property's JSON value
    dataType - the data type
    parameters - the parsed parameters. These parameters will be + assigned to the property object once this method returns. Therefore, do + not assign any parameters to the property object itself whilst inside of + this method, or else they will be overwritten.
    warnings - allows the programmer to alert the user to any + note-worthy (but non-critical) issues that occurred during the + unmarshalling process +
    Returns:
    the unmarshalled property object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ActionMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ActionMarshaller.html new file mode 100644 index 000000000..7b68f5e61 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ActionMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ActionMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ActionMarshaller

    +
    +No usage of biweekly.property.marshaller.ActionMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/AttachmentMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/AttachmentMarshaller.html new file mode 100644 index 000000000..51d3e436d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/AttachmentMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.AttachmentMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.AttachmentMarshaller

    +
    +No usage of biweekly.property.marshaller.AttachmentMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/AttendeeMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/AttendeeMarshaller.html new file mode 100644 index 000000000..ec22324ca --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/AttendeeMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.AttendeeMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.AttendeeMarshaller

    +
    +No usage of biweekly.property.marshaller.AttendeeMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CalendarScaleMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CalendarScaleMarshaller.html new file mode 100644 index 000000000..de85815c5 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CalendarScaleMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.CalendarScaleMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.CalendarScaleMarshaller

    +
    +No usage of biweekly.property.marshaller.CalendarScaleMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CategoriesMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CategoriesMarshaller.html new file mode 100644 index 000000000..fc3a5dee4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CategoriesMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.CategoriesMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.CategoriesMarshaller

    +
    +No usage of biweekly.property.marshaller.CategoriesMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ClassificationMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ClassificationMarshaller.html new file mode 100644 index 000000000..118c6ae53 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ClassificationMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ClassificationMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ClassificationMarshaller

    +
    +No usage of biweekly.property.marshaller.ClassificationMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CommentMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CommentMarshaller.html new file mode 100644 index 000000000..bb9faf044 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CommentMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.CommentMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.CommentMarshaller

    +
    +No usage of biweekly.property.marshaller.CommentMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CompletedMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CompletedMarshaller.html new file mode 100644 index 000000000..3cc4c464f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CompletedMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.CompletedMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.CompletedMarshaller

    +
    +No usage of biweekly.property.marshaller.CompletedMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ContactMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ContactMarshaller.html new file mode 100644 index 000000000..25983964d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ContactMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ContactMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ContactMarshaller

    +
    +No usage of biweekly.property.marshaller.ContactMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CreatedMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CreatedMarshaller.html new file mode 100644 index 000000000..896c77d1e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/CreatedMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.CreatedMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.CreatedMarshaller

    +
    +No usage of biweekly.property.marshaller.CreatedMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateDueMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateDueMarshaller.html new file mode 100644 index 000000000..dbb8431bc --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateDueMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.DateDueMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.DateDueMarshaller

    +
    +No usage of biweekly.property.marshaller.DateDueMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateEndMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateEndMarshaller.html new file mode 100644 index 000000000..1ade86fee --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateEndMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.DateEndMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.DateEndMarshaller

    +
    +No usage of biweekly.property.marshaller.DateEndMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateOrDateTimePropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateOrDateTimePropertyMarshaller.html new file mode 100644 index 000000000..554ad3341 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateOrDateTimePropertyMarshaller.html @@ -0,0 +1,205 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.DateOrDateTimePropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.DateOrDateTimePropertyMarshaller

    +
    + + + + + + + + + +
    +Packages that use DateOrDateTimePropertyMarshaller
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of DateOrDateTimePropertyMarshaller in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of DateOrDateTimePropertyMarshaller in biweekly.property.marshaller
    + classDateDueMarshaller + +
    +          Marshals DateDue properties.
    + classDateEndMarshaller + +
    +          Marshals DateEnd properties.
    + classDateStartMarshaller + +
    +          Marshals DateStart properties.
    + classRecurrenceIdMarshaller + +
    +          Marshals RecurrenceId properties.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateStartMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateStartMarshaller.html new file mode 100644 index 000000000..830ea6be7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateStartMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.DateStartMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.DateStartMarshaller

    +
    +No usage of biweekly.property.marshaller.DateStartMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateTimePropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateTimePropertyMarshaller.html new file mode 100644 index 000000000..d2f723b16 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateTimePropertyMarshaller.html @@ -0,0 +1,205 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.DateTimePropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.DateTimePropertyMarshaller

    +
    + + + + + + + + + +
    +Packages that use DateTimePropertyMarshaller
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of DateTimePropertyMarshaller in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of DateTimePropertyMarshaller in biweekly.property.marshaller
    + classCompletedMarshaller + +
    +          Marshals Completed properties.
    + classCreatedMarshaller + +
    +          Marshals Created properties.
    + classDateTimeStampMarshaller + +
    +          Marshals DateTimeStamp properties.
    + classLastModifiedMarshaller + +
    +          Marshals LastModified properties.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateTimeStampMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateTimeStampMarshaller.html new file mode 100644 index 000000000..f94f6740b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DateTimeStampMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.DateTimeStampMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.DateTimeStampMarshaller

    +
    +No usage of biweekly.property.marshaller.DateTimeStampMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DescriptionMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DescriptionMarshaller.html new file mode 100644 index 000000000..869a8cf8f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DescriptionMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.DescriptionMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.DescriptionMarshaller

    +
    +No usage of biweekly.property.marshaller.DescriptionMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DurationPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DurationPropertyMarshaller.html new file mode 100644 index 000000000..f465ad61c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/DurationPropertyMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.DurationPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.DurationPropertyMarshaller

    +
    +No usage of biweekly.property.marshaller.DurationPropertyMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ExceptionDatesMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ExceptionDatesMarshaller.html new file mode 100644 index 000000000..a3d388fd2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ExceptionDatesMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ExceptionDatesMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ExceptionDatesMarshaller

    +
    +No usage of biweekly.property.marshaller.ExceptionDatesMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ExceptionRuleMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ExceptionRuleMarshaller.html new file mode 100644 index 000000000..1a7b8573e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ExceptionRuleMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ExceptionRuleMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ExceptionRuleMarshaller

    +
    +No usage of biweekly.property.marshaller.ExceptionRuleMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/FreeBusyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/FreeBusyMarshaller.html new file mode 100644 index 000000000..dcf997343 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/FreeBusyMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.FreeBusyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.FreeBusyMarshaller

    +
    +No usage of biweekly.property.marshaller.FreeBusyMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/GeoMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/GeoMarshaller.html new file mode 100644 index 000000000..34a204bd8 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/GeoMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.GeoMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.GeoMarshaller

    +
    +No usage of biweekly.property.marshaller.GeoMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.DateParser.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.DateParser.html new file mode 100644 index 000000000..b2b88ea2a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.DateParser.html @@ -0,0 +1,208 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ICalPropertyMarshaller.DateParser (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ICalPropertyMarshaller.DateParser

    +
    + + + + + + + + + +
    +Packages that use ICalPropertyMarshaller.DateParser
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ICalPropertyMarshaller.DateParser in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return ICalPropertyMarshaller.DateParser
    +protected static ICalPropertyMarshaller.DateParserICalPropertyMarshaller.date(String value) + +
    +          Parses a date string.
    + ICalPropertyMarshaller.DateParserICalPropertyMarshaller.DateParser.tz(TimeZone timezone) + +
    +          Sets the timezone to parse the date as.
    + ICalPropertyMarshaller.DateParserICalPropertyMarshaller.DateParser.tzid(String timezoneId) + +
    +          Sets the ID of the timezone to parse the date as (TZID parameter + value).
    + ICalPropertyMarshaller.DateParserICalPropertyMarshaller.DateParser.tzid(String timezoneId, + List<String> warnings) + +
    +          Sets the ID of the timezone to parse the date as (TZID parameter + value).
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.DateWriter.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.DateWriter.html new file mode 100644 index 000000000..27e393165 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.DateWriter.html @@ -0,0 +1,232 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ICalPropertyMarshaller.DateWriter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ICalPropertyMarshaller.DateWriter

    +
    + + + + + + + + + +
    +Packages that use ICalPropertyMarshaller.DateWriter
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ICalPropertyMarshaller.DateWriter in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return ICalPropertyMarshaller.DateWriter
    +protected static ICalPropertyMarshaller.DateWriterICalPropertyMarshaller.date(Date date) + +
    +          Formats a Date object as a string.
    + ICalPropertyMarshaller.DateWriterICalPropertyMarshaller.DateWriter.extended(boolean extended) + +
    +          Sets whether to use extended format or basic.
    + ICalPropertyMarshaller.DateWriterICalPropertyMarshaller.DateWriter.localTz(boolean localTz) + +
    +          Outputs the date in local time (without a timezone).
    + ICalPropertyMarshaller.DateWriterICalPropertyMarshaller.DateWriter.time(boolean hasTime) + +
    +          Sets whether to output the date's time component.
    + ICalPropertyMarshaller.DateWriterICalPropertyMarshaller.DateWriter.tz(boolean localTz, + String timezoneId) + +
    +          Convenience method that combines localTz(boolean) and + tzid(String) into one method.
    + ICalPropertyMarshaller.DateWriterICalPropertyMarshaller.DateWriter.tz(TimeZone timezone) + +
    +          Sets the timezone to format the date as.
    + ICalPropertyMarshaller.DateWriterICalPropertyMarshaller.DateWriter.tzid(String timezoneId) + +
    +          Sets the ID of the timezone to format the date as (TZID parameter + value).
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.ListCallback.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.ListCallback.html new file mode 100644 index 000000000..a53e1d3bc --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.ListCallback.html @@ -0,0 +1,189 @@ + + + + + + + +Uses of Interface biweekly.property.marshaller.ICalPropertyMarshaller.ListCallback (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Interface
    biweekly.property.marshaller.ICalPropertyMarshaller.ListCallback

    +
    + + + + + + + + + +
    +Packages that use ICalPropertyMarshaller.ListCallback
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ICalPropertyMarshaller.ListCallback in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type ICalPropertyMarshaller.ListCallback
    +protected static + + + + +
    +<T> String
    +
    ICalPropertyMarshaller.list(Collection<T> values, + ICalPropertyMarshaller.ListCallback<T> callback) + +
    +          Writes a comma-separated list of values.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.Result.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.Result.html new file mode 100644 index 000000000..4d93aba92 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.Result.html @@ -0,0 +1,202 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ICalPropertyMarshaller.Result (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ICalPropertyMarshaller.Result

    +
    + + + + + + + + + +
    +Packages that use ICalPropertyMarshaller.Result
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ICalPropertyMarshaller.Result in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return ICalPropertyMarshaller.Result
    + ICalPropertyMarshaller.Result<T>ICalPropertyMarshaller.parseJson(JCalValue value, + ICalDataType dataType, + ICalParameters parameters) + +
    +          Unmarshals a property's value from a JSON data stream (jCal).
    + ICalPropertyMarshaller.Result<T>ICalPropertyMarshaller.parseText(String value, + ICalDataType dataType, + ICalParameters parameters) + +
    +          Unmarshals a property from a plain-text iCalendar data stream.
    + ICalPropertyMarshaller.Result<T>ICalPropertyMarshaller.parseXml(Element element, + ICalParameters parameters) + +
    +          Unmarshals a property's value from an XML document (xCal).
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.SemiStructuredIterator.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.SemiStructuredIterator.html new file mode 100644 index 000000000..b7fb4fefd --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.SemiStructuredIterator.html @@ -0,0 +1,190 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ICalPropertyMarshaller.SemiStructuredIterator (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ICalPropertyMarshaller.SemiStructuredIterator

    +
    + + + + + + + + + +
    +Packages that use ICalPropertyMarshaller.SemiStructuredIterator
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ICalPropertyMarshaller.SemiStructuredIterator in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return ICalPropertyMarshaller.SemiStructuredIterator
    +protected static ICalPropertyMarshaller.SemiStructuredIteratorICalPropertyMarshaller.semistructured(String value) + +
    +          Parses a list of values that are delimited by semicolons.
    +protected static ICalPropertyMarshaller.SemiStructuredIteratorICalPropertyMarshaller.semistructured(String value, + int limit) + +
    +          Parses a list of values that are delimited by semicolons.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.Splitter.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.Splitter.html new file mode 100644 index 000000000..b4e7ccdbe --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.Splitter.html @@ -0,0 +1,206 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ICalPropertyMarshaller.Splitter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ICalPropertyMarshaller.Splitter

    +
    + + + + + + + + + +
    +Packages that use ICalPropertyMarshaller.Splitter
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ICalPropertyMarshaller.Splitter in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return ICalPropertyMarshaller.Splitter
    + ICalPropertyMarshaller.SplitterICalPropertyMarshaller.Splitter.limit(int limit) + +
    +          Sets the max number of split strings it should parse.
    + ICalPropertyMarshaller.SplitterICalPropertyMarshaller.Splitter.removeEmpties(boolean removeEmpties) + +
    +          Sets whether to remove empty elements.
    +protected static ICalPropertyMarshaller.SplitterICalPropertyMarshaller.split(String string, + String delimiter) + +
    +          Splits a string by a delimiter, taking escaped characters into account.
    + ICalPropertyMarshaller.SplitterICalPropertyMarshaller.Splitter.unescape(boolean unescape) + +
    +          Sets whether to unescape each split string.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.StructuredIterator.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.StructuredIterator.html new file mode 100644 index 000000000..13f9c2e2e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.StructuredIterator.html @@ -0,0 +1,189 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ICalPropertyMarshaller.StructuredIterator (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ICalPropertyMarshaller.StructuredIterator

    +
    + + + + + + + + + +
    +Packages that use ICalPropertyMarshaller.StructuredIterator
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ICalPropertyMarshaller.StructuredIterator in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller that return ICalPropertyMarshaller.StructuredIterator
    +protected static ICalPropertyMarshaller.StructuredIteratorICalPropertyMarshaller.structured(JCalValue value) + +
    +          Provides an iterator for a jCard structured value.
    +protected static ICalPropertyMarshaller.StructuredIteratorICalPropertyMarshaller.structured(String value) + +
    +          Parses a structured value.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.html new file mode 100644 index 000000000..dfdb3787c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ICalPropertyMarshaller.html @@ -0,0 +1,899 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ICalPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ICalPropertyMarshaller

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use ICalPropertyMarshaller
    biweekly  
    biweekly.io  
    biweekly.io.json  
    biweekly.io.text  
    biweekly.io.xml  
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ICalPropertyMarshaller in biweekly
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly with parameters of type ICalPropertyMarshaller
    + Biweekly.ParserChainTextReaderBiweekly.ParserChainTextReader.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainTextStringBiweekly.ParserChainTextString.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainXmlStringBiweekly.ParserChainXmlString.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainXmlReaderBiweekly.ParserChainXmlReader.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainXmlDocumentBiweekly.ParserChainXmlDocument.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainJsonReaderBiweekly.ParserChainJsonReader.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.ParserChainJsonStringBiweekly.ParserChainJsonString.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    + Biweekly.WriterChainXmlBiweekly.WriterChainXml.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           
    +  +

    + + + + + +
    +Uses of ICalPropertyMarshaller in biweekly.io
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.io that return ICalPropertyMarshaller
    + ICalPropertyMarshaller<? extends ICalProperty>ICalMarshallerRegistrar.getPropertyMarshaller(Class<? extends ICalProperty> clazz) + +
    +          Gets a property marshaller by class.
    + ICalPropertyMarshaller<? extends ICalProperty>ICalMarshallerRegistrar.getPropertyMarshaller(ICalProperty property) + +
    +          Gets the appropriate property marshaller for a given property instance.
    + ICalPropertyMarshaller<? extends ICalProperty>ICalMarshallerRegistrar.getPropertyMarshaller(QName qname) + +
    +          Gets a property marshaller by XML local name and namespace.
    + ICalPropertyMarshaller<? extends ICalProperty>ICalMarshallerRegistrar.getPropertyMarshaller(String propertyName) + +
    +          Gets a property marshaller by name.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.io with parameters of type ICalPropertyMarshaller
    + voidICalMarshallerRegistrar.register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Registers a property marshaller.
    + voidICalMarshallerRegistrar.unregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +          Unregisters a property marshaller
    +  +

    + + + + + +
    +Uses of ICalPropertyMarshaller in biweekly.io.json
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.io.json with parameters of type ICalPropertyMarshaller
    + voidJCalWriter.registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    + voidJCalReader.registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    +  +

    + + + + + +
    +Uses of ICalPropertyMarshaller in biweekly.io.text
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.io.text with parameters of type ICalPropertyMarshaller
    + voidICalWriter.registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    + voidICalReader.registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    +  +

    + + + + + +
    +Uses of ICalPropertyMarshaller in biweekly.io.xml
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.xml with parameters of type ICalPropertyMarshaller
    + voidXCalDocument.registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) + +
    +           + Registers an experimental property marshaller.
    +  +

    + + + + + +
    +Uses of ICalPropertyMarshaller in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of ICalPropertyMarshaller in biweekly.property.marshaller
    + classActionMarshaller + +
    +          Marshals Action properties.
    + classAttachmentMarshaller + +
    +          Marshals Attachment properties.
    + classAttendeeMarshaller + +
    +          Marshals Attendee properties.
    + classCalendarScaleMarshaller + +
    +          Marshals CalendarScale properties.
    + classCategoriesMarshaller + +
    +          Marshals Categories properties.
    + classClassificationMarshaller + +
    +          Marshals Classification properties.
    + classCommentMarshaller + +
    +          Marshals Comment properties.
    + classCompletedMarshaller + +
    +          Marshals Completed properties.
    + classContactMarshaller + +
    +          Marshals Contact properties.
    + classCreatedMarshaller + +
    +          Marshals Created properties.
    + classDateDueMarshaller + +
    +          Marshals DateDue properties.
    + classDateEndMarshaller + +
    +          Marshals DateEnd properties.
    + classDateOrDateTimePropertyMarshaller<T extends DateOrDateTimeProperty> + +
    +          Marshals properties that have either "date" or "date-time" values.
    + classDateStartMarshaller + +
    +          Marshals DateStart properties.
    + classDateTimePropertyMarshaller<T extends DateTimeProperty> + +
    +          Marshals properties that have "date-time" values.
    + classDateTimeStampMarshaller + +
    +          Marshals DateTimeStamp properties.
    + classDescriptionMarshaller + +
    +          Marshals Description properties.
    + classDurationPropertyMarshaller + +
    +          Marshals DurationProperty properties.
    + classExceptionDatesMarshaller + +
    +          Marshals ExceptionDates properties.
    + classExceptionRuleMarshaller + +
    +          Marshals ExceptionRule properties.
    + classFreeBusyMarshaller + +
    +          Marshals FreeBusy properties.
    + classGeoMarshaller + +
    +          Marshals Geo properties.
    + classIntegerPropertyMarshaller<T extends IntegerProperty> + +
    +          Marshals properties that have integer values.
    + classLastModifiedMarshaller + +
    +          Marshals LastModified properties.
    + classListPropertyMarshaller<T extends ListProperty<V>,V> + +
    +          Marshals properties that contain a list of values.
    + classLocationMarshaller + +
    +          Marshals Location properties.
    + classMethodMarshaller + +
    +          Marshals Method properties.
    + classOrganizerMarshaller + +
    +          Marshals Organizer properties.
    + classPercentCompleteMarshaller + +
    +          Marshals PercentComplete properties.
    + classPriorityMarshaller + +
    +          Marshals Priority properties.
    + classProductIdMarshaller + +
    +          Marshals ProductId properties.
    + classRawPropertyMarshaller + +
    +          Marshals properties that do not have a marshaller associated with them.
    + classRecurrenceDatesMarshaller + +
    +          Marshals RecurrenceDates properties.
    + classRecurrenceIdMarshaller + +
    +          Marshals RecurrenceId properties.
    + classRecurrencePropertyMarshaller<T extends RecurrenceProperty> + +
    +          Marshals properties whose values are Recurrence.
    + classRecurrenceRuleMarshaller + +
    +          Marshals RecurrenceRule properties.
    + classRelatedToMarshaller + +
    +          Marshals RelatedTo properties.
    + classRepeatMarshaller + +
    +          Marshals Repeat properties.
    + classRequestStatusMarshaller + +
    +          Marshals RequestStatus properties.
    + classResourcesMarshaller + +
    +          Marshals Resources properties.
    + classSequenceMarshaller + +
    +          Marshals Sequence properties.
    + classStatusMarshaller + +
    +          Marshals Status properties.
    + classSummaryMarshaller + +
    +          Marshals Summary properties.
    + classTextListPropertyMarshaller<T extends ListProperty<String>> + +
    +          Marshals properties that have a list of text values.
    + classTextPropertyMarshaller<T extends TextProperty> + +
    +          Marshals properties that have text values.
    + classTimezoneIdMarshaller + +
    +          Marshals TimezoneId properties.
    + classTimezoneNameMarshaller + +
    +          Marshals TimezoneName properties.
    + classTimezoneOffsetFromMarshaller + +
    +          Marshals TimezoneOffsetFrom properties.
    + classTimezoneOffsetToMarshaller + +
    +          Marshals TimezoneOffsetTo properties.
    + classTimezoneUrlMarshaller + +
    +          Marshals TimezoneUrl properties.
    + classTransparencyMarshaller + +
    +          Marshals Transparency properties.
    + classTriggerMarshaller + +
    +          Marshals Trigger properties.
    + classUidMarshaller + +
    +          Marshals Uid properties.
    + classUrlMarshaller + +
    +          Marshals Url properties.
    + classUtcOffsetPropertyMarshaller<T extends UtcOffsetProperty> + +
    +          Marshals properties that have UTC offset values.
    + classVersionMarshaller + +
    +          Marshals Version properties.
    + classXmlMarshaller + +
    +          Marshals Xml properties.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/IntegerPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/IntegerPropertyMarshaller.html new file mode 100644 index 000000000..69f18e542 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/IntegerPropertyMarshaller.html @@ -0,0 +1,205 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.IntegerPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.IntegerPropertyMarshaller

    +
    + + + + + + + + + +
    +Packages that use IntegerPropertyMarshaller
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of IntegerPropertyMarshaller in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of IntegerPropertyMarshaller in biweekly.property.marshaller
    + classPercentCompleteMarshaller + +
    +          Marshals PercentComplete properties.
    + classPriorityMarshaller + +
    +          Marshals Priority properties.
    + classRepeatMarshaller + +
    +          Marshals Repeat properties.
    + classSequenceMarshaller + +
    +          Marshals Sequence properties.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/LastModifiedMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/LastModifiedMarshaller.html new file mode 100644 index 000000000..ac11c8e14 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/LastModifiedMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.LastModifiedMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.LastModifiedMarshaller

    +
    +No usage of biweekly.property.marshaller.LastModifiedMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ListPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ListPropertyMarshaller.html new file mode 100644 index 000000000..ece311a90 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ListPropertyMarshaller.html @@ -0,0 +1,205 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ListPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ListPropertyMarshaller

    +
    + + + + + + + + + +
    +Packages that use ListPropertyMarshaller
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of ListPropertyMarshaller in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of ListPropertyMarshaller in biweekly.property.marshaller
    + classCategoriesMarshaller + +
    +          Marshals Categories properties.
    + classExceptionDatesMarshaller + +
    +          Marshals ExceptionDates properties.
    + classResourcesMarshaller + +
    +          Marshals Resources properties.
    + classTextListPropertyMarshaller<T extends ListProperty<String>> + +
    +          Marshals properties that have a list of text values.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/LocationMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/LocationMarshaller.html new file mode 100644 index 000000000..d778b8754 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/LocationMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.LocationMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.LocationMarshaller

    +
    +No usage of biweekly.property.marshaller.LocationMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/MethodMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/MethodMarshaller.html new file mode 100644 index 000000000..4257621af --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/MethodMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.MethodMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.MethodMarshaller

    +
    +No usage of biweekly.property.marshaller.MethodMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/OrganizerMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/OrganizerMarshaller.html new file mode 100644 index 000000000..8bb677e0f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/OrganizerMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.OrganizerMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.OrganizerMarshaller

    +
    +No usage of biweekly.property.marshaller.OrganizerMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/PercentCompleteMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/PercentCompleteMarshaller.html new file mode 100644 index 000000000..4ea1d6da7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/PercentCompleteMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.PercentCompleteMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.PercentCompleteMarshaller

    +
    +No usage of biweekly.property.marshaller.PercentCompleteMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/PriorityMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/PriorityMarshaller.html new file mode 100644 index 000000000..ee60cd110 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/PriorityMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.PriorityMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.PriorityMarshaller

    +
    +No usage of biweekly.property.marshaller.PriorityMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ProductIdMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ProductIdMarshaller.html new file mode 100644 index 000000000..ceea05617 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ProductIdMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ProductIdMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ProductIdMarshaller

    +
    +No usage of biweekly.property.marshaller.ProductIdMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RawPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RawPropertyMarshaller.html new file mode 100644 index 000000000..f02f267ef --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RawPropertyMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.RawPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.RawPropertyMarshaller

    +
    +No usage of biweekly.property.marshaller.RawPropertyMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrenceDatesMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrenceDatesMarshaller.html new file mode 100644 index 000000000..d1dcff096 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrenceDatesMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.RecurrenceDatesMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.RecurrenceDatesMarshaller

    +
    +No usage of biweekly.property.marshaller.RecurrenceDatesMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrenceIdMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrenceIdMarshaller.html new file mode 100644 index 000000000..c7739935d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrenceIdMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.RecurrenceIdMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.RecurrenceIdMarshaller

    +
    +No usage of biweekly.property.marshaller.RecurrenceIdMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrencePropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrencePropertyMarshaller.html new file mode 100644 index 000000000..85808a1fd --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrencePropertyMarshaller.html @@ -0,0 +1,189 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.RecurrencePropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.RecurrencePropertyMarshaller

    +
    + + + + + + + + + +
    +Packages that use RecurrencePropertyMarshaller
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of RecurrencePropertyMarshaller in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + +
    Subclasses of RecurrencePropertyMarshaller in biweekly.property.marshaller
    + classExceptionRuleMarshaller + +
    +          Marshals ExceptionRule properties.
    + classRecurrenceRuleMarshaller + +
    +          Marshals RecurrenceRule properties.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrenceRuleMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrenceRuleMarshaller.html new file mode 100644 index 000000000..5a73ea87d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RecurrenceRuleMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.RecurrenceRuleMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.RecurrenceRuleMarshaller

    +
    +No usage of biweekly.property.marshaller.RecurrenceRuleMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RelatedToMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RelatedToMarshaller.html new file mode 100644 index 000000000..d7d191c4d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RelatedToMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.RelatedToMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.RelatedToMarshaller

    +
    +No usage of biweekly.property.marshaller.RelatedToMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RepeatMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RepeatMarshaller.html new file mode 100644 index 000000000..b98fc9303 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RepeatMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.RepeatMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.RepeatMarshaller

    +
    +No usage of biweekly.property.marshaller.RepeatMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RequestStatusMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RequestStatusMarshaller.html new file mode 100644 index 000000000..896067bde --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/RequestStatusMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.RequestStatusMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.RequestStatusMarshaller

    +
    +No usage of biweekly.property.marshaller.RequestStatusMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ResourcesMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ResourcesMarshaller.html new file mode 100644 index 000000000..7594aa578 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/ResourcesMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.ResourcesMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.ResourcesMarshaller

    +
    +No usage of biweekly.property.marshaller.ResourcesMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/SequenceMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/SequenceMarshaller.html new file mode 100644 index 000000000..40edfe353 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/SequenceMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.SequenceMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.SequenceMarshaller

    +
    +No usage of biweekly.property.marshaller.SequenceMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/StatusMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/StatusMarshaller.html new file mode 100644 index 000000000..df00130d5 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/StatusMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.StatusMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.StatusMarshaller

    +
    +No usage of biweekly.property.marshaller.StatusMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/SummaryMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/SummaryMarshaller.html new file mode 100644 index 000000000..a8278131b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/SummaryMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.SummaryMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.SummaryMarshaller

    +
    +No usage of biweekly.property.marshaller.SummaryMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TextListPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TextListPropertyMarshaller.html new file mode 100644 index 000000000..b3ee93205 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TextListPropertyMarshaller.html @@ -0,0 +1,189 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.TextListPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.TextListPropertyMarshaller

    +
    + + + + + + + + + +
    +Packages that use TextListPropertyMarshaller
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of TextListPropertyMarshaller in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + +
    Subclasses of TextListPropertyMarshaller in biweekly.property.marshaller
    + classCategoriesMarshaller + +
    +          Marshals Categories properties.
    + classResourcesMarshaller + +
    +          Marshals Resources properties.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TextPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TextPropertyMarshaller.html new file mode 100644 index 000000000..116f1eca5 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TextPropertyMarshaller.html @@ -0,0 +1,333 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.TextPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.TextPropertyMarshaller

    +
    + + + + + + + + + +
    +Packages that use TextPropertyMarshaller
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of TextPropertyMarshaller in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Subclasses of TextPropertyMarshaller in biweekly.property.marshaller
    + classActionMarshaller + +
    +          Marshals Action properties.
    + classAttendeeMarshaller + +
    +          Marshals Attendee properties.
    + classCalendarScaleMarshaller + +
    +          Marshals CalendarScale properties.
    + classClassificationMarshaller + +
    +          Marshals Classification properties.
    + classCommentMarshaller + +
    +          Marshals Comment properties.
    + classContactMarshaller + +
    +          Marshals Contact properties.
    + classDescriptionMarshaller + +
    +          Marshals Description properties.
    + classLocationMarshaller + +
    +          Marshals Location properties.
    + classMethodMarshaller + +
    +          Marshals Method properties.
    + classOrganizerMarshaller + +
    +          Marshals Organizer properties.
    + classProductIdMarshaller + +
    +          Marshals ProductId properties.
    + classRelatedToMarshaller + +
    +          Marshals RelatedTo properties.
    + classStatusMarshaller + +
    +          Marshals Status properties.
    + classSummaryMarshaller + +
    +          Marshals Summary properties.
    + classTimezoneIdMarshaller + +
    +          Marshals TimezoneId properties.
    + classTimezoneNameMarshaller + +
    +          Marshals TimezoneName properties.
    + classTimezoneUrlMarshaller + +
    +          Marshals TimezoneUrl properties.
    + classTransparencyMarshaller + +
    +          Marshals Transparency properties.
    + classUidMarshaller + +
    +          Marshals Uid properties.
    + classUrlMarshaller + +
    +          Marshals Url properties.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneIdMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneIdMarshaller.html new file mode 100644 index 000000000..3fac1f0da --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneIdMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.TimezoneIdMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.TimezoneIdMarshaller

    +
    +No usage of biweekly.property.marshaller.TimezoneIdMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneNameMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneNameMarshaller.html new file mode 100644 index 000000000..99d5c065e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneNameMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.TimezoneNameMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.TimezoneNameMarshaller

    +
    +No usage of biweekly.property.marshaller.TimezoneNameMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneOffsetFromMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneOffsetFromMarshaller.html new file mode 100644 index 000000000..b46229f5b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneOffsetFromMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.TimezoneOffsetFromMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.TimezoneOffsetFromMarshaller

    +
    +No usage of biweekly.property.marshaller.TimezoneOffsetFromMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneOffsetToMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneOffsetToMarshaller.html new file mode 100644 index 000000000..7824948bf --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneOffsetToMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.TimezoneOffsetToMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.TimezoneOffsetToMarshaller

    +
    +No usage of biweekly.property.marshaller.TimezoneOffsetToMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneUrlMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneUrlMarshaller.html new file mode 100644 index 000000000..4fc7cb46d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TimezoneUrlMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.TimezoneUrlMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.TimezoneUrlMarshaller

    +
    +No usage of biweekly.property.marshaller.TimezoneUrlMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TransparencyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TransparencyMarshaller.html new file mode 100644 index 000000000..b26ba9d47 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TransparencyMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.TransparencyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.TransparencyMarshaller

    +
    +No usage of biweekly.property.marshaller.TransparencyMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TriggerMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TriggerMarshaller.html new file mode 100644 index 000000000..b6735eb5a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/TriggerMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.TriggerMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.TriggerMarshaller

    +
    +No usage of biweekly.property.marshaller.TriggerMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/UidMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/UidMarshaller.html new file mode 100644 index 000000000..1c1250e3a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/UidMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.UidMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.UidMarshaller

    +
    +No usage of biweekly.property.marshaller.UidMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/UrlMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/UrlMarshaller.html new file mode 100644 index 000000000..7d7a67ab1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/UrlMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.UrlMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.UrlMarshaller

    +
    +No usage of biweekly.property.marshaller.UrlMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/UtcOffsetPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/UtcOffsetPropertyMarshaller.html new file mode 100644 index 000000000..8ecadbe2e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/UtcOffsetPropertyMarshaller.html @@ -0,0 +1,189 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.UtcOffsetPropertyMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.UtcOffsetPropertyMarshaller

    +
    + + + + + + + + + +
    +Packages that use UtcOffsetPropertyMarshaller
    biweekly.property.marshaller  
    +  +

    + + + + + +
    +Uses of UtcOffsetPropertyMarshaller in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + +
    Subclasses of UtcOffsetPropertyMarshaller in biweekly.property.marshaller
    + classTimezoneOffsetFromMarshaller + +
    +          Marshals TimezoneOffsetFrom properties.
    + classTimezoneOffsetToMarshaller + +
    +          Marshals TimezoneOffsetTo properties.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/VersionMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/VersionMarshaller.html new file mode 100644 index 000000000..10ea9c12e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/VersionMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.VersionMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.VersionMarshaller

    +
    +No usage of biweekly.property.marshaller.VersionMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/XmlMarshaller.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/XmlMarshaller.html new file mode 100644 index 000000000..45391bb40 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/class-use/XmlMarshaller.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.property.marshaller.XmlMarshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.property.marshaller.XmlMarshaller

    +
    +No usage of biweekly.property.marshaller.XmlMarshaller +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/doc-files/shBrushJava.js b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/doc-files/shBrushJava.js new file mode 100644 index 000000000..d692fd638 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/doc-files/shBrushJava.js @@ -0,0 +1,57 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'abstract assert boolean break byte case catch char class const ' + + 'continue default do double else enum extends ' + + 'false final finally float for goto if implements import ' + + 'instanceof int interface long native new null ' + + 'package private protected public return ' + + 'short static strictfp super switch synchronized this throw throws true ' + + 'transient try void volatile while'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: /\/\*([^\*][\s\S]*)?\*\//gm, css: 'comments' }, // multiline comments + { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, css: 'preprocessor' }, // documentation comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers + { regex: /(?!\@interface\b)\@[\$\w]+\b/g, css: 'color1' }, // annotation @anno + { regex: /\@interface\b/g, css: 'color2' }, // @interface keyword + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // java keyword + ]; + + this.forHtmlScript({ + left : /(<|<)%[@!=]?/g, + right : /%(>|>)/g + }); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['java']; + + SyntaxHighlighter.brushes.Java = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/doc-files/shCore.js b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/doc-files/shCore.js new file mode 100644 index 000000000..b47b64547 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/doc-files/shCore.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a-1},3d:6(g){e+=g}};c1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;be.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;dd.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a\'+c+""});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.Pb.P)H 1;Y I(a.Lb.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'\'+c+""+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v<3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;">1v3v 3.0.76 (72 73 3x)1Z://3u.2w/1v70 17 6U 71.6T 6X-3x 6Y 6D.6t 61 60 J 1k, 5Z 5R 5V <2R/>5U 5T 5S!\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'\',d=e.16.2x,h=d.2X,g=0;g";H c},2o:6(a,b,c){H\'<2W>\'+c+""},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;md)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P\'+c+""},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i\'+j+"":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"":"")+\'<2d 1g="17">\'+b+""},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{})) diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-frame.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-frame.html new file mode 100644 index 000000000..f4f0f1dde --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-frame.html @@ -0,0 +1,170 @@ + + + + + + + +biweekly.property.marshaller (biweekly 0.3.1 API) + + + + + + + + + + + +biweekly.property.marshaller + + + + +
    +Interfaces  + +
    +ICalPropertyMarshaller.ListCallback
    + + + + + + +
    +Classes  + +
    +ActionMarshaller +
    +AttachmentMarshaller +
    +AttendeeMarshaller +
    +CalendarScaleMarshaller +
    +CategoriesMarshaller +
    +ClassificationMarshaller +
    +CommentMarshaller +
    +CompletedMarshaller +
    +ContactMarshaller +
    +CreatedMarshaller +
    +DateDueMarshaller +
    +DateEndMarshaller +
    +DateOrDateTimePropertyMarshaller +
    +DateStartMarshaller +
    +DateTimePropertyMarshaller +
    +DateTimeStampMarshaller +
    +DescriptionMarshaller +
    +DurationPropertyMarshaller +
    +ExceptionDatesMarshaller +
    +ExceptionRuleMarshaller +
    +FreeBusyMarshaller +
    +GeoMarshaller +
    +ICalPropertyMarshaller +
    +ICalPropertyMarshaller.DateParser +
    +ICalPropertyMarshaller.DateWriter +
    +ICalPropertyMarshaller.Result +
    +ICalPropertyMarshaller.SemiStructuredIterator +
    +ICalPropertyMarshaller.Splitter +
    +ICalPropertyMarshaller.StructuredIterator +
    +IntegerPropertyMarshaller +
    +LastModifiedMarshaller +
    +ListPropertyMarshaller +
    +LocationMarshaller +
    +MethodMarshaller +
    +OrganizerMarshaller +
    +PercentCompleteMarshaller +
    +PriorityMarshaller +
    +ProductIdMarshaller +
    +RawPropertyMarshaller +
    +RecurrenceDatesMarshaller +
    +RecurrenceIdMarshaller +
    +RecurrencePropertyMarshaller +
    +RecurrenceRuleMarshaller +
    +RelatedToMarshaller +
    +RepeatMarshaller +
    +RequestStatusMarshaller +
    +ResourcesMarshaller +
    +SequenceMarshaller +
    +StatusMarshaller +
    +SummaryMarshaller +
    +TextListPropertyMarshaller +
    +TextPropertyMarshaller +
    +TimezoneIdMarshaller +
    +TimezoneNameMarshaller +
    +TimezoneOffsetFromMarshaller +
    +TimezoneOffsetToMarshaller +
    +TimezoneUrlMarshaller +
    +TransparencyMarshaller +
    +TriggerMarshaller +
    +UidMarshaller +
    +UrlMarshaller +
    +UtcOffsetPropertyMarshaller +
    +VersionMarshaller +
    +XmlMarshaller
    + + + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-summary.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-summary.html new file mode 100644 index 000000000..a1567667a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-summary.html @@ -0,0 +1,426 @@ + + + + + + + +biweekly.property.marshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +

    +Package biweekly.property.marshaller +

    + + + + + + + + + +
    +Interface Summary
    ICalPropertyMarshaller.ListCallback<T>Callback function used in conjunction with the + list method
    +  + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class Summary
    ActionMarshallerMarshals Action properties.
    AttachmentMarshallerMarshals Attachment properties.
    AttendeeMarshallerMarshals Attendee properties.
    CalendarScaleMarshallerMarshals CalendarScale properties.
    CategoriesMarshallerMarshals Categories properties.
    ClassificationMarshallerMarshals Classification properties.
    CommentMarshallerMarshals Comment properties.
    CompletedMarshallerMarshals Completed properties.
    ContactMarshallerMarshals Contact properties.
    CreatedMarshallerMarshals Created properties.
    DateDueMarshallerMarshals DateDue properties.
    DateEndMarshallerMarshals DateEnd properties.
    DateOrDateTimePropertyMarshaller<T extends DateOrDateTimeProperty>Marshals properties that have either "date" or "date-time" values.
    DateStartMarshallerMarshals DateStart properties.
    DateTimePropertyMarshaller<T extends DateTimeProperty>Marshals properties that have "date-time" values.
    DateTimeStampMarshallerMarshals DateTimeStamp properties.
    DescriptionMarshallerMarshals Description properties.
    DurationPropertyMarshallerMarshals DurationProperty properties.
    ExceptionDatesMarshallerMarshals ExceptionDates properties.
    ExceptionRuleMarshallerMarshals ExceptionRule properties.
    FreeBusyMarshallerMarshals FreeBusy properties.
    GeoMarshallerMarshals Geo properties.
    ICalPropertyMarshaller<T extends ICalProperty>Base class for iCalendar property marshallers.
    ICalPropertyMarshaller.DateParserFactory class for parsing dates.
    ICalPropertyMarshaller.DateWriterFactory class for writing dates.
    ICalPropertyMarshaller.Result<T extends ICalProperty>Represents the result of an unmarshal operation.
    ICalPropertyMarshaller.SemiStructuredIteratorIterates over the fields in a semi-structured value (a structured value + whose components cannot be multi-valued).
    ICalPropertyMarshaller.SplitterFactory class for splitting strings.
    ICalPropertyMarshaller.StructuredIteratorIterates over the fields in a structured value.
    IntegerPropertyMarshaller<T extends IntegerProperty>Marshals properties that have integer values.
    LastModifiedMarshallerMarshals LastModified properties.
    ListPropertyMarshaller<T extends ListProperty<V>,V>Marshals properties that contain a list of values.
    LocationMarshallerMarshals Location properties.
    MethodMarshallerMarshals Method properties.
    OrganizerMarshallerMarshals Organizer properties.
    PercentCompleteMarshallerMarshals PercentComplete properties.
    PriorityMarshallerMarshals Priority properties.
    ProductIdMarshallerMarshals ProductId properties.
    RawPropertyMarshallerMarshals properties that do not have a marshaller associated with them.
    RecurrenceDatesMarshallerMarshals RecurrenceDates properties.
    RecurrenceIdMarshallerMarshals RecurrenceId properties.
    RecurrencePropertyMarshaller<T extends RecurrenceProperty>Marshals properties whose values are Recurrence.
    RecurrenceRuleMarshallerMarshals RecurrenceRule properties.
    RelatedToMarshallerMarshals RelatedTo properties.
    RepeatMarshallerMarshals Repeat properties.
    RequestStatusMarshallerMarshals RequestStatus properties.
    ResourcesMarshallerMarshals Resources properties.
    SequenceMarshallerMarshals Sequence properties.
    StatusMarshallerMarshals Status properties.
    SummaryMarshallerMarshals Summary properties.
    TextListPropertyMarshaller<T extends ListProperty<String>>Marshals properties that have a list of text values.
    TextPropertyMarshaller<T extends TextProperty>Marshals properties that have text values.
    TimezoneIdMarshallerMarshals TimezoneId properties.
    TimezoneNameMarshallerMarshals TimezoneName properties.
    TimezoneOffsetFromMarshallerMarshals TimezoneOffsetFrom properties.
    TimezoneOffsetToMarshallerMarshals TimezoneOffsetTo properties.
    TimezoneUrlMarshallerMarshals TimezoneUrl properties.
    TransparencyMarshallerMarshals Transparency properties.
    TriggerMarshallerMarshals Trigger properties.
    UidMarshallerMarshals Uid properties.
    UrlMarshallerMarshals Url properties.
    UtcOffsetPropertyMarshaller<T extends UtcOffsetProperty>Marshals properties that have UTC offset values.
    VersionMarshallerMarshals Version properties.
    XmlMarshallerMarshals Xml properties.
    +  + +

    +

    +
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-tree.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-tree.html new file mode 100644 index 000000000..839b05389 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-tree.html @@ -0,0 +1,177 @@ + + + + + + + +biweekly.property.marshaller Class Hierarchy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Hierarchy For Package biweekly.property.marshaller +

    +
    +
    +
    Package Hierarchies:
    All Packages
    +
    +

    +Class Hierarchy +

    + +

    +Interface Hierarchy +

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-use.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-use.html new file mode 100644 index 000000000..1436ae9ef --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/marshaller/package-use.html @@ -0,0 +1,358 @@ + + + + + + + +Uses of Package biweekly.property.marshaller (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Package
    biweekly.property.marshaller

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use biweekly.property.marshaller
    biweekly  
    biweekly.io  
    biweekly.io.json  
    biweekly.io.text  
    biweekly.io.xml  
    biweekly.property.marshaller  
    +  +

    + + + + + + + + +
    +Classes in biweekly.property.marshaller used by biweekly
    ICalPropertyMarshaller + +
    +          Base class for iCalendar property marshallers.
    +  +

    + + + + + + + + +
    +Classes in biweekly.property.marshaller used by biweekly.io
    ICalPropertyMarshaller + +
    +          Base class for iCalendar property marshallers.
    +  +

    + + + + + + + + +
    +Classes in biweekly.property.marshaller used by biweekly.io.json
    ICalPropertyMarshaller + +
    +          Base class for iCalendar property marshallers.
    +  +

    + + + + + + + + +
    +Classes in biweekly.property.marshaller used by biweekly.io.text
    ICalPropertyMarshaller + +
    +          Base class for iCalendar property marshallers.
    +  +

    + + + + + + + + +
    +Classes in biweekly.property.marshaller used by biweekly.io.xml
    ICalPropertyMarshaller + +
    +          Base class for iCalendar property marshallers.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Classes in biweekly.property.marshaller used by biweekly.property.marshaller
    DateOrDateTimePropertyMarshaller + +
    +          Marshals properties that have either "date" or "date-time" values.
    DateTimePropertyMarshaller + +
    +          Marshals properties that have "date-time" values.
    ICalPropertyMarshaller + +
    +          Base class for iCalendar property marshallers.
    ICalPropertyMarshaller.DateParser + +
    +          Factory class for parsing dates.
    ICalPropertyMarshaller.DateWriter + +
    +          Factory class for writing dates.
    ICalPropertyMarshaller.ListCallback + +
    +          Callback function used in conjunction with the + list method
    ICalPropertyMarshaller.Result + +
    +          Represents the result of an unmarshal operation.
    ICalPropertyMarshaller.SemiStructuredIterator + +
    +          Iterates over the fields in a semi-structured value (a structured value + whose components cannot be multi-valued).
    ICalPropertyMarshaller.Splitter + +
    +          Factory class for splitting strings.
    ICalPropertyMarshaller.StructuredIterator + +
    +          Iterates over the fields in a structured value.
    IntegerPropertyMarshaller + +
    +          Marshals properties that have integer values.
    ListPropertyMarshaller + +
    +          Marshals properties that contain a list of values.
    RecurrencePropertyMarshaller + +
    +          Marshals properties whose values are Recurrence.
    TextListPropertyMarshaller + +
    +          Marshals properties that have a list of text values.
    TextPropertyMarshaller + +
    +          Marshals properties that have text values.
    UtcOffsetPropertyMarshaller + +
    +          Marshals properties that have UTC offset values.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/package-frame.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/package-frame.html new file mode 100644 index 000000000..56350d7aa --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/package-frame.html @@ -0,0 +1,149 @@ + + + + + + + +biweekly.property (biweekly 0.3.1 API) + + + + + + + + + + + +biweekly.property + + + + +
    +Classes  + +
    +Action +
    +Attachment +
    +Attendee +
    +CalendarScale +
    +Categories +
    +Classification +
    +Comment +
    +Completed +
    +Contact +
    +Created +
    +DateDue +
    +DateEnd +
    +DateOrDateTimeProperty +
    +DateStart +
    +DateTimeProperty +
    +DateTimeStamp +
    +Description +
    +DurationProperty +
    +EnumProperty +
    +ExceptionDates +
    +ExceptionRule +
    +FreeBusy +
    +Geo +
    +ICalProperty +
    +IntegerProperty +
    +LastModified +
    +ListProperty +
    +Location +
    +Method +
    +Organizer +
    +PercentComplete +
    +Priority +
    +ProductId +
    +RawProperty +
    +RecurrenceDates +
    +RecurrenceId +
    +RecurrenceProperty +
    +RecurrenceRule +
    +RelatedTo +
    +Repeat +
    +RequestStatus +
    +Resources +
    +Sequence +
    +Status +
    +Summary +
    +TextProperty +
    +TimezoneId +
    +TimezoneName +
    +TimezoneOffsetFrom +
    +TimezoneOffsetTo +
    +TimezoneUrl +
    +Transparency +
    +Trigger +
    +Uid +
    +Url +
    +UtcOffsetProperty +
    +ValuedProperty +
    +Version +
    +Xml
    + + + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/package-summary.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/package-summary.html new file mode 100644 index 000000000..e1feb1efc --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/package-summary.html @@ -0,0 +1,462 @@ + + + + + + + +biweekly.property (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +

    +Package biweekly.property +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class Summary
    Action + Defines the type of action to invoke when an alarm is triggered.
    Attachment + Represents a binary resource that is associated with an event, to-do, journal + entry, or alarm.
    Attendee + Defines an attendee (such as a person attending an event).
    CalendarScale + Specifies the calendar system that this iCalendar object uses.
    Categories + Defines a list of "tags" or "keywords" that describe the component.
    Classification + Defines the level of sensitivity of the iCalendar data.
    Comment + Defines a free-text comment to be read by the user.
    Completed + Defines the date and time that a to-do task was completed.
    Contact + Defines contact information for a person or other entity (for example, the + name of a business and its phone number).
    Created + Defines the date-time that the calendar information was initially created.
    DateDue + Defines the date that a to-do task is due by.
    DateEnd + Defines the date that an event or free/busy component ends.
    DateOrDateTimePropertyRepresents a property whose value is a date or a date-time.
    DateStart + Defines the date that an event, free/busy component, or timezone component + starts.
    DateTimePropertyRepresents a property whose value is a date-time.
    DateTimeStamp + The meaning of this property varies depending on the state of the iCalendar + object: + + If a Method property exists: Defines the creation date of + the iCalendar object (not the creation date of the actual calendar data).
    Description + A detailed description of the component that this property belongs to.
    DurationProperty + Defines a duration of time (for example, "2 hours and 30 minutes").
    EnumPropertyParent class for properties that have a defined set of acceptable values (for + example, Action).
    ExceptionDates + Defines a list of exceptions to the recurrence rule defined in a component.
    ExceptionRule + Defines an exception to a RecurrenceRule.
    FreeBusy + Defines a person's availability over certain time periods (for example, + "busy" between 1pm-3pm and 4pm-5pm).
    Geo + Defines a set of geographical coordinates.
    ICalPropertyBase class for all iCalendar properties.
    IntegerPropertyRepresents a property whose value is an integer.
    LastModified + Defines the date and time that the calendar data in a component was last + changed.
    ListProperty<T>Represents a property whose value is a list of values.
    Location + Defines the physical location of an event.
    Method + Specifies the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity.
    Organizer + Defines an organizer.
    PercentComplete + Defines a to-do task's level of completion.
    Priority + Defines the priority of an event or to-do task.
    ProductId + Identifies the application that created the iCalendar object.
    RawPropertyA property that does not have a marshaller associated with it.
    RecurrenceDates + Defines a list of dates or periods that help define a recurrence rule.
    RecurrenceId + Records the original value of the DateStart property if a recurrence + instance has been modified.
    RecurrencePropertyDefines a property whose value is a recurrence rule.
    RecurrenceRule + Defines how often a component repeats.
    RelatedTo + Defines a relationship between the component that this property belongs to + and another component.
    Repeat + Defines the number of times an alarm should be repeated after its initial + trigger.
    RequestStatus + Represents a response to a scheduling request, describing whether the request + was successfully processed or not.
    Resources + Defines a list of resources that are needed for an event or to-do task (for + example a projector or DVD player).
    Sequence + Defines a revision number for an event, to-do task, or journal entry.
    Status + Defines the status of the component that this property belongs to, such as a + to-do task being in a "completed" state.
    Summary + Defines a short, one line summary of the component that this property belongs + to.
    TextPropertyRepresents a property whose value is a plain-text string.
    TimezoneId + Defines a unique identifier for a VTimezone component.
    TimezoneName + Defines a traditional, non-standard name for a timezone observance (for + example, "Eastern Standard Time" for standard time on the US east coast).
    TimezoneOffsetFrom + Defines the timezone offset that was in use before a timezone observance.
    TimezoneOffsetTo + Defines the timezone offset that is currently in use in a timezone + observance.
    TimezoneUrl + Defines a URL that points to an iCalendar object that contains further + information on a timezone.
    Transparency + Defines whether an event is visible to free/busy time searches.
    Trigger + Defines when an alarm will be triggered.
    Uid + Defines a unique identifier for a component.
    Url + Points to a resource that contains additional information about a component.
    UtcOffsetPropertyRepresents a property whose value is a timezone offset.
    ValuedProperty<T>Represents a property whose data model consists of a single object (such as a + String).
    Version + Specifies the min/max versions a consumer must support in order to + successfully parse the iCalendar object.
    Xml + Used for storing properties parsed from xCal documents whose XML namespaces + are not part of the xCal XML namespace.
    +  + +

    +

    +
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/package-tree.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/package-tree.html new file mode 100644 index 000000000..d7df76fd3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/package-tree.html @@ -0,0 +1,174 @@ + + + + + + + +biweekly.property Class Hierarchy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Hierarchy For Package biweekly.property +

    +
    +
    +
    Package Hierarchies:
    All Packages
    +
    +

    +Class Hierarchy +

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/property/package-use.html b/libs/biweekly-0.3.1-javadoc/biweekly/property/package-use.html new file mode 100644 index 000000000..8a086106f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/property/package-use.html @@ -0,0 +1,1213 @@ + + + + + + + +Uses of Package biweekly.property (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Package
    biweekly.property

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use biweekly.property
    biweekly  
    biweekly.component  
    biweekly.component.marshaller  
    biweekly.io  
    biweekly.io.json  
    biweekly.io.text  
    biweekly.io.xml  
    biweekly.property  
    biweekly.property.marshaller  
    +  +

    + + + + + + + + + + + + + + + + + + + + +
    +Classes in biweekly.property used by biweekly
    CalendarScale + +
    +           + Specifies the calendar system that this iCalendar object uses.
    ICalProperty + +
    +          Base class for all iCalendar properties.
    Method + +
    +           + Specifies the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity.
    ProductId + +
    +           + Identifies the application that created the iCalendar object.
    Version + +
    +           + Specifies the min/max versions a consumer must support in order to + successfully parse the iCalendar object.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Classes in biweekly.property used by biweekly.component
    Action + +
    +           + Defines the type of action to invoke when an alarm is triggered.
    Attachment + +
    +           + Represents a binary resource that is associated with an event, to-do, journal + entry, or alarm.
    Attendee + +
    +           + Defines an attendee (such as a person attending an event).
    Categories + +
    +           + Defines a list of "tags" or "keywords" that describe the component.
    Classification + +
    +           + Defines the level of sensitivity of the iCalendar data.
    Comment + +
    +           + Defines a free-text comment to be read by the user.
    Completed + +
    +           + Defines the date and time that a to-do task was completed.
    Contact + +
    +           + Defines contact information for a person or other entity (for example, the + name of a business and its phone number).
    Created + +
    +           + Defines the date-time that the calendar information was initially created.
    DateDue + +
    +           + Defines the date that a to-do task is due by.
    DateEnd + +
    +           + Defines the date that an event or free/busy component ends.
    DateStart + +
    +           + Defines the date that an event, free/busy component, or timezone component + starts.
    DateTimeStamp + +
    +           + The meaning of this property varies depending on the state of the iCalendar + object: + + If a Method property exists: Defines the creation date of + the iCalendar object (not the creation date of the actual calendar data).
    Description + +
    +           + A detailed description of the component that this property belongs to.
    DurationProperty + +
    +           + Defines a duration of time (for example, "2 hours and 30 minutes").
    ExceptionDates + +
    +           + Defines a list of exceptions to the recurrence rule defined in a component.
    ExceptionRule + +
    +           + Defines an exception to a RecurrenceRule.
    FreeBusy + +
    +           + Defines a person's availability over certain time periods (for example, + "busy" between 1pm-3pm and 4pm-5pm).
    Geo + +
    +           + Defines a set of geographical coordinates.
    ICalProperty + +
    +          Base class for all iCalendar properties.
    LastModified + +
    +           + Defines the date and time that the calendar data in a component was last + changed.
    Location + +
    +           + Defines the physical location of an event.
    Organizer + +
    +           + Defines an organizer.
    PercentComplete + +
    +           + Defines a to-do task's level of completion.
    Priority + +
    +           + Defines the priority of an event or to-do task.
    RawProperty + +
    +          A property that does not have a marshaller associated with it.
    RecurrenceDates + +
    +           + Defines a list of dates or periods that help define a recurrence rule.
    RecurrenceId + +
    +           + Records the original value of the DateStart property if a recurrence + instance has been modified.
    RecurrenceRule + +
    +           + Defines how often a component repeats.
    RelatedTo + +
    +           + Defines a relationship between the component that this property belongs to + and another component.
    Repeat + +
    +           + Defines the number of times an alarm should be repeated after its initial + trigger.
    RequestStatus + +
    +           + Represents a response to a scheduling request, describing whether the request + was successfully processed or not.
    Resources + +
    +           + Defines a list of resources that are needed for an event or to-do task (for + example a projector or DVD player).
    Sequence + +
    +           + Defines a revision number for an event, to-do task, or journal entry.
    Status + +
    +           + Defines the status of the component that this property belongs to, such as a + to-do task being in a "completed" state.
    Summary + +
    +           + Defines a short, one line summary of the component that this property belongs + to.
    TimezoneId + +
    +           + Defines a unique identifier for a VTimezone component.
    TimezoneName + +
    +           + Defines a traditional, non-standard name for a timezone observance (for + example, "Eastern Standard Time" for standard time on the US east coast).
    TimezoneOffsetFrom + +
    +           + Defines the timezone offset that was in use before a timezone observance.
    TimezoneOffsetTo + +
    +           + Defines the timezone offset that is currently in use in a timezone + observance.
    TimezoneUrl + +
    +           + Defines a URL that points to an iCalendar object that contains further + information on a timezone.
    Transparency + +
    +           + Defines whether an event is visible to free/busy time searches.
    Trigger + +
    +           + Defines when an alarm will be triggered.
    Uid + +
    +           + Defines a unique identifier for a component.
    Url + +
    +           + Points to a resource that contains additional information about a component.
    +  +

    + + + + + + + + +
    +Classes in biweekly.property used by biweekly.component.marshaller
    ICalProperty + +
    +          Base class for all iCalendar properties.
    +  +

    + + + + + + + + +
    +Classes in biweekly.property used by biweekly.io
    ICalProperty + +
    +          Base class for all iCalendar properties.
    +  +

    + + + + + + + + +
    +Classes in biweekly.property used by biweekly.io.json
    ICalProperty + +
    +          Base class for all iCalendar properties.
    +  +

    + + + + + + + + +
    +Classes in biweekly.property used by biweekly.io.text
    ICalProperty + +
    +          Base class for all iCalendar properties.
    +  +

    + + + + + + + + +
    +Classes in biweekly.property used by biweekly.io.xml
    ICalProperty + +
    +          Base class for all iCalendar properties.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Classes in biweekly.property used by biweekly.property
    Action + +
    +           + Defines the type of action to invoke when an alarm is triggered.
    Attendee + +
    +           + Defines an attendee (such as a person attending an event).
    CalendarScale + +
    +           + Specifies the calendar system that this iCalendar object uses.
    Classification + +
    +           + Defines the level of sensitivity of the iCalendar data.
    DateOrDateTimeProperty + +
    +          Represents a property whose value is a date or a date-time.
    DateTimeProperty + +
    +          Represents a property whose value is a date-time.
    EnumProperty + +
    +          Parent class for properties that have a defined set of acceptable values (for + example, Action).
    ICalProperty + +
    +          Base class for all iCalendar properties.
    IntegerProperty + +
    +          Represents a property whose value is an integer.
    ListProperty + +
    +          Represents a property whose value is a list of values.
    Organizer + +
    +           + Defines an organizer.
    ProductId + +
    +           + Identifies the application that created the iCalendar object.
    RecurrenceProperty + +
    +          Defines a property whose value is a recurrence rule.
    Status + +
    +           + Defines the status of the component that this property belongs to, such as a + to-do task being in a "completed" state.
    TextProperty + +
    +          Represents a property whose value is a plain-text string.
    Transparency + +
    +           + Defines whether an event is visible to free/busy time searches.
    Uid + +
    +           + Defines a unique identifier for a component.
    UtcOffsetProperty + +
    +          Represents a property whose value is a timezone offset.
    ValuedProperty + +
    +          Represents a property whose data model consists of a single object (such as a + String).
    Version + +
    +           + Specifies the min/max versions a consumer must support in order to + successfully parse the iCalendar object.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Classes in biweekly.property used by biweekly.property.marshaller
    Action + +
    +           + Defines the type of action to invoke when an alarm is triggered.
    Attachment + +
    +           + Represents a binary resource that is associated with an event, to-do, journal + entry, or alarm.
    Attendee + +
    +           + Defines an attendee (such as a person attending an event).
    CalendarScale + +
    +           + Specifies the calendar system that this iCalendar object uses.
    Categories + +
    +           + Defines a list of "tags" or "keywords" that describe the component.
    Classification + +
    +           + Defines the level of sensitivity of the iCalendar data.
    Comment + +
    +           + Defines a free-text comment to be read by the user.
    Completed + +
    +           + Defines the date and time that a to-do task was completed.
    Contact + +
    +           + Defines contact information for a person or other entity (for example, the + name of a business and its phone number).
    Created + +
    +           + Defines the date-time that the calendar information was initially created.
    DateDue + +
    +           + Defines the date that a to-do task is due by.
    DateEnd + +
    +           + Defines the date that an event or free/busy component ends.
    DateOrDateTimeProperty + +
    +          Represents a property whose value is a date or a date-time.
    DateStart + +
    +           + Defines the date that an event, free/busy component, or timezone component + starts.
    DateTimeProperty + +
    +          Represents a property whose value is a date-time.
    DateTimeStamp + +
    +           + The meaning of this property varies depending on the state of the iCalendar + object: + + If a Method property exists: Defines the creation date of + the iCalendar object (not the creation date of the actual calendar data).
    Description + +
    +           + A detailed description of the component that this property belongs to.
    DurationProperty + +
    +           + Defines a duration of time (for example, "2 hours and 30 minutes").
    ExceptionDates + +
    +           + Defines a list of exceptions to the recurrence rule defined in a component.
    ExceptionRule + +
    +           + Defines an exception to a RecurrenceRule.
    FreeBusy + +
    +           + Defines a person's availability over certain time periods (for example, + "busy" between 1pm-3pm and 4pm-5pm).
    Geo + +
    +           + Defines a set of geographical coordinates.
    ICalProperty + +
    +          Base class for all iCalendar properties.
    IntegerProperty + +
    +          Represents a property whose value is an integer.
    LastModified + +
    +           + Defines the date and time that the calendar data in a component was last + changed.
    ListProperty + +
    +          Represents a property whose value is a list of values.
    Location + +
    +           + Defines the physical location of an event.
    Method + +
    +           + Specifies the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity.
    Organizer + +
    +           + Defines an organizer.
    PercentComplete + +
    +           + Defines a to-do task's level of completion.
    Priority + +
    +           + Defines the priority of an event or to-do task.
    ProductId + +
    +           + Identifies the application that created the iCalendar object.
    RawProperty + +
    +          A property that does not have a marshaller associated with it.
    RecurrenceDates + +
    +           + Defines a list of dates or periods that help define a recurrence rule.
    RecurrenceId + +
    +           + Records the original value of the DateStart property if a recurrence + instance has been modified.
    RecurrenceProperty + +
    +          Defines a property whose value is a recurrence rule.
    RecurrenceRule + +
    +           + Defines how often a component repeats.
    RelatedTo + +
    +           + Defines a relationship between the component that this property belongs to + and another component.
    Repeat + +
    +           + Defines the number of times an alarm should be repeated after its initial + trigger.
    RequestStatus + +
    +           + Represents a response to a scheduling request, describing whether the request + was successfully processed or not.
    Resources + +
    +           + Defines a list of resources that are needed for an event or to-do task (for + example a projector or DVD player).
    Sequence + +
    +           + Defines a revision number for an event, to-do task, or journal entry.
    Status + +
    +           + Defines the status of the component that this property belongs to, such as a + to-do task being in a "completed" state.
    Summary + +
    +           + Defines a short, one line summary of the component that this property belongs + to.
    TextProperty + +
    +          Represents a property whose value is a plain-text string.
    TimezoneId + +
    +           + Defines a unique identifier for a VTimezone component.
    TimezoneName + +
    +           + Defines a traditional, non-standard name for a timezone observance (for + example, "Eastern Standard Time" for standard time on the US east coast).
    TimezoneOffsetFrom + +
    +           + Defines the timezone offset that was in use before a timezone observance.
    TimezoneOffsetTo + +
    +           + Defines the timezone offset that is currently in use in a timezone + observance.
    TimezoneUrl + +
    +           + Defines a URL that points to an iCalendar object that contains further + information on a timezone.
    Transparency + +
    +           + Defines whether an event is visible to free/busy time searches.
    Trigger + +
    +           + Defines when an alarm will be triggered.
    Uid + +
    +           + Defines a unique identifier for a component.
    Url + +
    +           + Points to a resource that contains additional information about a component.
    UtcOffsetProperty + +
    +          Represents a property whose value is a timezone offset.
    Version + +
    +           + Specifies the min/max versions a consumer must support in order to + successfully parse the iCalendar object.
    Xml + +
    +           + Used for storing properties parsed from xCal documents whose XML namespaces + are not part of the xCal XML namespace.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/Base64.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/Base64.html new file mode 100644 index 000000000..c4d2ea7f2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/Base64.html @@ -0,0 +1,254 @@ + + + + + + + +Base64 (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class Base64

    +
    +java.lang.Object
    +  extended by biweekly.util.Base64
    +
    +
    +
    +
    public class Base64
    extends Object
    + + +

    +Encodes and decodes data into base64. +

    + +

    +

    +
    Author:
    +
    GeorgeK
    +
    See Also:
    http://stackoverflow.com/a/4265472/13379
    +
    + +

    + + + + + + + + + + + + + + + + +
    +Method Summary
    +static byte[]decode(String s) + +
    +          Translates the specified Base64 string into a byte array.
    +static Stringencode(byte[] buf) + +
    +          Translates the specified byte array into Base64 string.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +encode

    +
    +public static String encode(byte[] buf)
    +
    +
    Translates the specified byte array into Base64 string. +

    +

    +
    Parameters:
    buf - the byte array +
    Returns:
    the translated Base64 string
    +
    +
    +
    + +

    +decode

    +
    +public static byte[] decode(String s)
    +
    +
    Translates the specified Base64 string into a byte array. +

    +

    +
    Parameters:
    s - the Base64 string +
    Returns:
    the byte array
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/CaseClasses.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/CaseClasses.html new file mode 100644 index 000000000..69066aead --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/CaseClasses.html @@ -0,0 +1,443 @@ + + + + + + + +CaseClasses (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class CaseClasses<T,V>

    +
    +java.lang.Object
    +  extended by biweekly.util.CaseClasses<T,V>
    +
    +
    +
    Type Parameters:
    T - the class
    V - the value that the class holds (e.g. String)
    +
    +
    Direct Known Subclasses:
    ICalParameterCaseClasses
    +
    +
    +
    +
    public abstract class CaseClasses<T,V>
    extends Object
    + + +

    +Manages objects that are like enums in that they are constant, but unlike + enums in that new instances can be created during runtime. This class ensures + that all instances of a class are unique, so they can be safely compared + using "==" (provided their constructors are private). It mimics the + "case class" feature in Scala. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + +
    +Field Summary
    +protected  Class<T>clazz + +
    +           
    +protected  Collection<T>preDefined + +
    +           
    +protected  Collection<T>runtimeDefined + +
    +           
    +  + + + + + + + + + + +
    +Constructor Summary
    CaseClasses(Class<T> clazz) + +
    +          Creates a new case class collection.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + Collection<T>all() + +
    +          Gets all the static constants of the case class.
    +protected abstract  Tcreate(V value) + +
    +          Creates a new instance of the case class.
    + Tfind(V value) + +
    +          Searches for a case object by value, only looking at the case class' + static constants (does not include runtime-defined objects).
    + Tget(V value) + +
    +          Searches for a case object by value, creating a new object if one cannot + be found.
    +protected abstract  booleanmatches(T object, + V value) + +
    +          Determines if a value is associated with a case object.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +clazz

    +
    +protected final Class<T> clazz
    +
    +
    +
    +
    +
    + +

    +preDefined

    +
    +protected volatile Collection<T> preDefined
    +
    +
    +
    +
    +
    + +

    +runtimeDefined

    +
    +protected Collection<T> runtimeDefined
    +
    +
    +
    +
    + + + + + + + + +
    +Constructor Detail
    + +

    +CaseClasses

    +
    +public CaseClasses(Class<T> clazz)
    +
    +
    Creates a new case class collection. +

    +

    +
    Parameters:
    clazz - the case class
    +
    + + + + + + + + +
    +Method Detail
    + +

    +create

    +
    +protected abstract T create(V value)
    +
    +
    Creates a new instance of the case class. +

    +

    +
    Parameters:
    value - the value to give the instance +
    Returns:
    the new instance
    +
    +
    +
    + +

    +matches

    +
    +protected abstract boolean matches(T object,
    +                                   V value)
    +
    +
    Determines if a value is associated with a case object. +

    +

    +
    Parameters:
    object - the object
    value - the value +
    Returns:
    true if it matches, false if not
    +
    +
    +
    + +

    +find

    +
    +public T find(V value)
    +
    +
    Searches for a case object by value, only looking at the case class' + static constants (does not include runtime-defined objects). +

    +

    +
    Parameters:
    value - the value +
    Returns:
    the object or null if one wasn't found
    +
    +
    +
    + +

    +get

    +
    +public T get(V value)
    +
    +
    Searches for a case object by value, creating a new object if one cannot + be found. +

    +

    +
    Parameters:
    value - the value +
    Returns:
    the object
    +
    +
    +
    + +

    +all

    +
    +public Collection<T> all()
    +
    +
    Gets all the static constants of the case class. +

    +

    + +
    Returns:
    all static constants
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/DateTimeComponents.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/DateTimeComponents.html new file mode 100644 index 000000000..132802810 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/DateTimeComponents.html @@ -0,0 +1,606 @@ + + + + + + + +DateTimeComponents (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class DateTimeComponents

    +
    +java.lang.Object
    +  extended by biweekly.util.DateTimeComponents
    +
    +
    +
    +
    public final class DateTimeComponents
    extends Object
    + + +

    +

    + Contains the raw components of a date-time value. +

    +

    + Examples: + +

    + //July 22, 2013 at 17:25
    + DateTimeComponents components = new DateTimeComponents(2013, 07, 22, 17, 25, 0, false);
    + 
    + //parsing a date string (accepts basic and extended formats)
    + DateTimeComponents components = DateTimeComponents.parse("20130722T172500");
    + 
    + //converting to date string
    + DateTimeComponents components = new DateTimeComponents(2013, 07, 22, 17, 25, 0, false);
    + String str = components.toString(true); //"2013-07-22T17:25:00"
    + 
    + //converting to a Date object
    + DateTimeComponents components = new DateTimeComponents(2013, 07, 22, 17, 25, 0, false);
    + Date date = components.toDate();
    + 
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + +
    +Constructor Summary
    DateTimeComponents(DateTimeComponents original, + Integer year, + Integer month, + Integer date, + Integer hour, + Integer minute, + Integer second, + Boolean utc) + +
    +          Copies an existing DateTimeComponents object.
    DateTimeComponents(int year, + int month, + int date, + int hour, + int minute, + int second, + boolean utc) + +
    +          Creates a new set of date-time components.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + booleanequals(Object obj) + +
    +           
    + intgetDate() + +
    +          Gets the date component
    + intgetHour() + +
    +          Gets the hour component
    + intgetMinute() + +
    +          Gets the minute component.
    + intgetMonth() + +
    +          Gets the month component.
    + intgetSecond() + +
    +          Gets the second component.
    + intgetYear() + +
    +          Gets the year component.
    + inthashCode() + +
    +           
    + booleanisUtc() + +
    +          Gets whether the time is in UTC or not
    +static DateTimeComponentsparse(String dateString) + +
    +          Parses the components out of a date-time string.
    + DatetoDate() + +
    +          Converts the date-time components to a Date object.
    + StringtoString() + +
    +          Converts the date-time components to a string using "basic" format.
    + StringtoString(boolean extended) + +
    +          Converts the date-time components to a string.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +DateTimeComponents

    +
    +public DateTimeComponents(DateTimeComponents original,
    +                          Integer year,
    +                          Integer month,
    +                          Integer date,
    +                          Integer hour,
    +                          Integer minute,
    +                          Integer second,
    +                          Boolean utc)
    +
    +
    Copies an existing DateTimeComponents object. +

    +

    +
    Parameters:
    original - the object to copy from
    year - the new year value or null not to change
    month - the new month value or null not to change
    date - the new date value or null not to change
    hour - the new hour value or null not to change
    minute - the new minute value or null not to change
    second - the new second value or null not to change
    utc - true if the time is in UTC, false if not, or null not to + change
    +
    +
    + +

    +DateTimeComponents

    +
    +public DateTimeComponents(int year,
    +                          int month,
    +                          int date,
    +                          int hour,
    +                          int minute,
    +                          int second,
    +                          boolean utc)
    +
    +
    Creates a new set of date-time components. +

    +

    +
    Parameters:
    year - the year (e.g. "2013")
    month - the month (e.g. "1" for January)
    date - the date of the month (e.g. "15")
    hour - the hour (e.g. "13")
    minute - the minute
    second - the second
    utc - true if the time is in UTC, false if not
    +
    + + + + + + + + +
    +Method Detail
    + +

    +parse

    +
    +public static DateTimeComponents parse(String dateString)
    +
    +
    Parses the components out of a date-time string. +

    +

    +
    Parameters:
    dateString - the date-time string (basic and extended formats + supported, e.g. "20130331T020000" or "2013-03-31T02:00:00") +
    Returns:
    the parsed components +
    Throws: +
    IllegalArgumentException - if the date string cannot be parsed
    +
    +
    +
    + +

    +getYear

    +
    +public int getYear()
    +
    +
    Gets the year component. +

    +

    + +
    Returns:
    the year
    +
    +
    +
    + +

    +getMonth

    +
    +public int getMonth()
    +
    +
    Gets the month component. +

    +

    + +
    Returns:
    the month (e.g. "1" for January)
    +
    +
    +
    + +

    +getDate

    +
    +public int getDate()
    +
    +
    Gets the date component +

    +

    + +
    Returns:
    the date
    +
    +
    +
    + +

    +getHour

    +
    +public int getHour()
    +
    +
    Gets the hour component +

    +

    + +
    Returns:
    the hour
    +
    +
    +
    + +

    +getMinute

    +
    +public int getMinute()
    +
    +
    Gets the minute component. +

    +

    + +
    Returns:
    the minute
    +
    +
    +
    + +

    +getSecond

    +
    +public int getSecond()
    +
    +
    Gets the second component. +

    +

    + +
    Returns:
    the second
    +
    +
    +
    + +

    +isUtc

    +
    +public boolean isUtc()
    +
    +
    Gets whether the time is in UTC or not +

    +

    + +
    Returns:
    true if the time is in UTC, false if not
    +
    +
    +
    + +

    +toString

    +
    +public String toString()
    +
    +
    Converts the date-time components to a string using "basic" format. +

    +

    +
    Overrides:
    toString in class Object
    +
    +
    + +
    Returns:
    the date string
    +
    +
    +
    + +

    +toString

    +
    +public String toString(boolean extended)
    +
    +
    Converts the date-time components to a string. +

    +

    +
    Parameters:
    extended - true to use extended format, false to use basic +
    Returns:
    the date string
    +
    +
    +
    + +

    +toDate

    +
    +public Date toDate()
    +
    +
    Converts the date-time components to a Date object. +

    +

    + +
    Returns:
    the date object
    +
    +
    +
    + +

    +hashCode

    +
    +public int hashCode()
    +
    +
    +
    Overrides:
    hashCode in class Object
    +
    +
    +
    +
    +
    +
    + +

    +equals

    +
    +public boolean equals(Object obj)
    +
    +
    +
    Overrides:
    equals in class Object
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/Duration.Builder.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/Duration.Builder.html new file mode 100644 index 000000000..48be39b83 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/Duration.Builder.html @@ -0,0 +1,415 @@ + + + + + + + +Duration.Builder (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class Duration.Builder

    +
    +java.lang.Object
    +  extended by biweekly.util.Duration.Builder
    +
    +
    +
    Enclosing class:
    Duration
    +
    +
    +
    +
    public static class Duration.Builder
    extends Object
    + + +

    +Builds Duration objects. +

    + +

    +


    + +

    + + + + + + + + + + + + + + +
    +Constructor Summary
    Duration.Builder() + +
    +          Creates a new Duration builder.
    Duration.Builder(Duration source) + +
    +          Creates a new Duration builder.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + Durationbuild() + +
    +          Builds the final Duration object.
    + Duration.Builderdays(Integer days) + +
    +          Sets the number of days
    + Duration.Builderhours(Integer hours) + +
    +          Sets the number of hours
    + Duration.Builderminutes(Integer minutes) + +
    +          Sets the number of minutes
    + Duration.Builderprior(boolean prior) + +
    +          Sets whether the duration should be negative.
    + Duration.Builderseconds(Integer seconds) + +
    +          Sets the number of seconds.
    + Duration.Builderweeks(Integer weeks) + +
    +          Sets the number of weeks.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Duration.Builder

    +
    +public Duration.Builder()
    +
    +
    Creates a new Duration builder. +

    +

    +
    + +

    +Duration.Builder

    +
    +public Duration.Builder(Duration source)
    +
    +
    Creates a new Duration builder. +

    +

    +
    Parameters:
    source - the object to copy from
    +
    + + + + + + + + +
    +Method Detail
    + +

    +weeks

    +
    +public Duration.Builder weeks(Integer weeks)
    +
    +
    Sets the number of weeks. +

    +

    +
    Parameters:
    weeks - the number of weeks +
    Returns:
    this
    +
    +
    +
    + +

    +days

    +
    +public Duration.Builder days(Integer days)
    +
    +
    Sets the number of days +

    +

    +
    Parameters:
    days - the number of days +
    Returns:
    this
    +
    +
    +
    + +

    +hours

    +
    +public Duration.Builder hours(Integer hours)
    +
    +
    Sets the number of hours +

    +

    +
    Parameters:
    hours - the number of hours +
    Returns:
    this
    +
    +
    +
    + +

    +minutes

    +
    +public Duration.Builder minutes(Integer minutes)
    +
    +
    Sets the number of minutes +

    +

    +
    Parameters:
    minutes - the number of minutes +
    Returns:
    this
    +
    +
    +
    + +

    +seconds

    +
    +public Duration.Builder seconds(Integer seconds)
    +
    +
    Sets the number of seconds. +

    +

    +
    Parameters:
    seconds - the number of seconds +
    Returns:
    this
    +
    +
    +
    + +

    +prior

    +
    +public Duration.Builder prior(boolean prior)
    +
    +
    Sets whether the duration should be negative. +

    +

    +
    Parameters:
    prior - true to be negative, false not to be +
    Returns:
    this
    +
    +
    +
    + +

    +build

    +
    +public Duration build()
    +
    +
    Builds the final Duration object. +

    +

    + +
    Returns:
    the object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/Duration.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/Duration.html new file mode 100644 index 000000000..300192da6 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/Duration.html @@ -0,0 +1,607 @@ + + + + + + + +Duration (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class Duration

    +
    +java.lang.Object
    +  extended by biweekly.util.Duration
    +
    +
    +
    +
    public final class Duration
    extends Object
    + + +

    +

    + Represents a period of time (for example, "2 hours and 30 minutes"). +

    +

    + This class is immutable. Use the builder() method to construct a new + instance, or the parse(java.lang.String) method to parse a duration string. +

    + +

    + Examples: + +

    + Duration duration = Duration.builder().hours(2).minutes(30).build();
    + Duration duration = Duration.parse("PT2H30M");
    + 
    + //add a duration value to a Date
    + Date start = ...
    + Date end = duration.add(start);
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + +
    +Nested Class Summary
    +static classDuration.Builder + +
    +          Builds Duration objects.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + Dateadd(Date date) + +
    +          Adds this duration value to a Date object.
    +static Duration.Builderbuilder() + +
    +          Creates a builder object for constructing new instances of this class.
    +static Durationdiff(Date start, + Date end) + +
    +          Builds a duration based on the difference between two dates.
    + booleanequals(Object obj) + +
    +           
    +static DurationfromMillis(long milliseconds) + +
    +          Builds a duration from a number of milliseconds.
    + IntegergetDays() + +
    +          Gets the number of days.
    + IntegergetHours() + +
    +          Gets the number of hours.
    + IntegergetMinutes() + +
    +          Gets the number of minutes.
    + IntegergetSeconds() + +
    +          Gets the number of seconds.
    + IntegergetWeeks() + +
    +          Gets the number of weeks.
    + inthashCode() + +
    +           
    + booleanhasTime() + +
    +          Determines if any time components are present.
    + booleanisPrior() + +
    +          Gets whether the duration is negative.
    +static Durationparse(String value) + +
    +          Parses a duration string.
    + longtoMillis() + +
    +          Converts the duration value to milliseconds.
    + StringtoString() + +
    +          Converts the duration to its string representation.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +parse

    +
    +public static Duration parse(String value)
    +
    +
    Parses a duration string. +

    +

    +
    Parameters:
    value - the duration string (e.g. "P30DT10H") +
    Returns:
    the parsed duration +
    Throws: +
    IllegalArgumentException - if the duration string is invalid
    +
    +
    +
    + +

    +diff

    +
    +public static Duration diff(Date start,
    +                            Date end)
    +
    +
    Builds a duration based on the difference between two dates. +

    +

    +
    Parameters:
    start - the start date
    end - the end date +
    Returns:
    the duration
    +
    +
    +
    + +

    +fromMillis

    +
    +public static Duration fromMillis(long milliseconds)
    +
    +
    Builds a duration from a number of milliseconds. +

    +

    +
    Parameters:
    milliseconds - the number of milliseconds +
    Returns:
    the duration
    +
    +
    +
    + +

    +builder

    +
    +public static Duration.Builder builder()
    +
    +
    Creates a builder object for constructing new instances of this class. +

    +

    + +
    Returns:
    the builder object
    +
    +
    +
    + +

    +isPrior

    +
    +public boolean isPrior()
    +
    +
    Gets whether the duration is negative. +

    +

    + +
    Returns:
    true if it's negative, false if not
    +
    +
    +
    + +

    +getWeeks

    +
    +public Integer getWeeks()
    +
    +
    Gets the number of weeks. +

    +

    + +
    Returns:
    the number of weeks or null if not set
    +
    +
    +
    + +

    +getDays

    +
    +public Integer getDays()
    +
    +
    Gets the number of days. +

    +

    + +
    Returns:
    the number of days or null if not set
    +
    +
    +
    + +

    +getHours

    +
    +public Integer getHours()
    +
    +
    Gets the number of hours. +

    +

    + +
    Returns:
    the number of hours or null if not set
    +
    +
    +
    + +

    +getMinutes

    +
    +public Integer getMinutes()
    +
    +
    Gets the number of minutes. +

    +

    + +
    Returns:
    the number of minutes or null if not set
    +
    +
    +
    + +

    +getSeconds

    +
    +public Integer getSeconds()
    +
    +
    Gets the number of seconds. +

    +

    + +
    Returns:
    the number of seconds or null if not set
    +
    +
    +
    + +

    +add

    +
    +public Date add(Date date)
    +
    +
    Adds this duration value to a Date object. +

    +

    +
    Parameters:
    date - the date to add to +
    Returns:
    the new date value
    +
    +
    +
    + +

    +toMillis

    +
    +public long toMillis()
    +
    +
    Converts the duration value to milliseconds. +

    +

    + +
    Returns:
    the duration value in milliseconds (will be negative if + isPrior() is true)
    +
    +
    +
    + +

    +hasTime

    +
    +public boolean hasTime()
    +
    +
    Determines if any time components are present. +

    +

    + +
    Returns:
    true if the duration has at least one time component, false if + not
    +
    +
    +
    + +

    +hashCode

    +
    +public int hashCode()
    +
    +
    +
    Overrides:
    hashCode in class Object
    +
    +
    +
    +
    +
    +
    + +

    +equals

    +
    +public boolean equals(Object obj)
    +
    +
    +
    Overrides:
    equals in class Object
    +
    +
    +
    +
    +
    +
    + +

    +toString

    +
    +public String toString()
    +
    +
    Converts the duration to its string representation. +

    +

    +
    Overrides:
    toString in class Object
    +
    +
    + +
    Returns:
    the string representation (e.g. "P4DT1H" for "4 days and 1 hour")
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/ICalDateFormatter.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/ICalDateFormatter.html new file mode 100644 index 000000000..57a6f1d5c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/ICalDateFormatter.html @@ -0,0 +1,382 @@ + + + + + + + +ICalDateFormatter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class ICalDateFormatter

    +
    +java.lang.Object
    +  extended by biweekly.util.ICalDateFormatter
    +
    +
    +
    +
    public class ICalDateFormatter
    extends Object
    + + +

    +Helper class that formats and parses iCalendar dates. iCalendar dates adhere + to the ISO8601 date format standard. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static booleandateHasTime(String dateStr) + +
    +          Determines whether a date string has a time component.
    +static booleandateHasTimezone(String dateStr) + +
    +          Determines whether a date string is in UTC time or has a timezone offset.
    +static Stringformat(Date date, + ISOFormat format) + +
    +          Formats a date for inclusion in an iCalendar object.
    +static Stringformat(Date date, + ISOFormat format, + TimeZone timeZone) + +
    +          Formats a date for inclusion in an iCalendar object.
    +static Dateparse(String dateStr) + +
    +          Parses an iCalendar date.
    +static Dateparse(String dateStr, + TimeZone timezone) + +
    +          Parses an iCalendar date.
    +static TimeZoneparseTimeZoneId(String timezoneId) + +
    +          Gets the TimeZone object that corresponds to the given ID.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +format

    +
    +public static String format(Date date,
    +                            ISOFormat format)
    +
    +
    Formats a date for inclusion in an iCalendar object. +

    +

    +
    Parameters:
    date - the date to format
    format - the format to use +
    Returns:
    the formatted date
    +
    +
    +
    + +

    +format

    +
    +public static String format(Date date,
    +                            ISOFormat format,
    +                            TimeZone timeZone)
    +
    +
    Formats a date for inclusion in an iCalendar object. +

    +

    +
    Parameters:
    date - the date to format
    format - the format to use
    timeZone - the timezone to format the date in or null to use the + JVM's default timezone (ignored with "UTC" formats) +
    Returns:
    the formatted date
    +
    +
    +
    + +

    +parse

    +
    +public static Date parse(String dateStr)
    +
    +
    Parses an iCalendar date. +

    +

    +
    Parameters:
    dateStr - the date string to parse (e.g. "20130609T181023Z") +
    Returns:
    the parsed date +
    Throws: +
    IllegalArgumentException - if the date string isn't in one of the + accepted ISO8601 formats
    +
    +
    +
    + +

    +parse

    +
    +public static Date parse(String dateStr,
    +                         TimeZone timezone)
    +
    +
    Parses an iCalendar date. +

    +

    +
    Parameters:
    dateStr - the date string to parse (e.g. "20130609T181023Z")
    timezone - the timezone to parse the date as or null to use the + JVM's default timezone (if the date string contains its own timezone, + then that timezone will be used instead) +
    Returns:
    the parsed date +
    Throws: +
    IllegalArgumentException - if the date string isn't in one of the + accepted ISO8601 formats
    +
    +
    +
    + +

    +dateHasTime

    +
    +public static boolean dateHasTime(String dateStr)
    +
    +
    Determines whether a date string has a time component. +

    +

    +
    Parameters:
    dateStr - the date string (e.g. "20130601T120000") +
    Returns:
    true if it has a time component, false if not
    +
    +
    +
    + +

    +dateHasTimezone

    +
    +public static boolean dateHasTimezone(String dateStr)
    +
    +
    Determines whether a date string is in UTC time or has a timezone offset. +

    +

    +
    Parameters:
    dateStr - the date string (e.g. "20130601T120000Z", + "20130601T120000-0400") +
    Returns:
    true if it has a timezone, false if not
    +
    +
    +
    + +

    +parseTimeZoneId

    +
    +public static TimeZone parseTimeZoneId(String timezoneId)
    +
    +
    Gets the TimeZone object that corresponds to the given ID. +

    +

    +
    Parameters:
    timezoneId - the timezone ID (e.g. "America/New_York") +
    Returns:
    the timezone object or null if not found
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/ICalFloatFormatter.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/ICalFloatFormatter.html new file mode 100644 index 000000000..92dc0168b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/ICalFloatFormatter.html @@ -0,0 +1,324 @@ + + + + + + + +ICalFloatFormatter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class ICalFloatFormatter

    +
    +java.lang.Object
    +  extended by java.text.Format
    +      extended by java.text.NumberFormat
    +          extended by java.text.DecimalFormat
    +              extended by biweekly.util.ICalFloatFormatter
    +
    +
    +
    All Implemented Interfaces:
    Serializable, Cloneable
    +
    +
    +
    +
    public class ICalFloatFormatter
    extends DecimalFormat
    + + +

    +Formats floating-point values for iCalendar objects. Notably, this ensures + that a "." is used as decimal separater, no matter the locale. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    See Also:
    Serialized Form
    +
    + +

    + + + + + + + +
    +Nested Class Summary
    + + + + + + + +
    Nested classes/interfaces inherited from class java.text.NumberFormat
    NumberFormat.Field
    +  + + + + + + + +
    +Field Summary
    + + + + + + + +
    Fields inherited from class java.text.NumberFormat
    FRACTION_FIELD, INTEGER_FIELD
    +  + + + + + + + + + + + + + +
    +Constructor Summary
    ICalFloatFormatter() + +
    +          Creates a new formatter with a max of 6 decimals.
    ICalFloatFormatter(int decimals) + +
    +          Creates a new formatter.
    +  + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from class java.text.DecimalFormat
    applyLocalizedPattern, applyPattern, clone, equals, format, format, format, formatToCharacterIterator, getCurrency, getDecimalFormatSymbols, getGroupingSize, getMaximumFractionDigits, getMaximumIntegerDigits, getMinimumFractionDigits, getMinimumIntegerDigits, getMultiplier, getNegativePrefix, getNegativeSuffix, getPositivePrefix, getPositiveSuffix, getRoundingMode, hashCode, isDecimalSeparatorAlwaysShown, isParseBigDecimal, parse, setCurrency, setDecimalFormatSymbols, setDecimalSeparatorAlwaysShown, setGroupingSize, setMaximumFractionDigits, setMaximumIntegerDigits, setMinimumFractionDigits, setMinimumIntegerDigits, setMultiplier, setNegativePrefix, setNegativeSuffix, setParseBigDecimal, setPositivePrefix, setPositiveSuffix, setRoundingMode, toLocalizedPattern, toPattern
    + + + + + + + +
    Methods inherited from class java.text.NumberFormat
    format, format, getAvailableLocales, getCurrencyInstance, getCurrencyInstance, getInstance, getInstance, getIntegerInstance, getIntegerInstance, getNumberInstance, getNumberInstance, getPercentInstance, getPercentInstance, isGroupingUsed, isParseIntegerOnly, parse, parseObject, setGroupingUsed, setParseIntegerOnly
    + + + + + + + +
    Methods inherited from class java.text.Format
    format, parseObject
    + + + + + + + +
    Methods inherited from class java.lang.Object
    finalize, getClass, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ICalFloatFormatter

    +
    +public ICalFloatFormatter()
    +
    +
    Creates a new formatter with a max of 6 decimals. +

    +

    +
    + +

    +ICalFloatFormatter

    +
    +public ICalFloatFormatter(int decimals)
    +
    +
    Creates a new formatter. +

    +

    +
    Parameters:
    decimals - the max number of decimal places
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/IOUtils.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/IOUtils.html new file mode 100644 index 000000000..2a9c0c907 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/IOUtils.html @@ -0,0 +1,456 @@ + + + + + + + +IOUtils (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class IOUtils

    +
    +java.lang.Object
    +  extended by biweekly.util.IOUtils
    +
    +
    +
    +
    public class IOUtils
    extends Object
    + + +

    +I/O helper classes. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static voidcloseQuietly(Closeable closeable) + +
    +          Closes a closeable resource, catching its IOException.
    +static StringgetFileContents(File file) + +
    +          Reads the contents of a text file.
    +static StringgetFileContents(File file, + String charset) + +
    +          Reads the contents of a text file.
    +static byte[]toByteArray(InputStream in) + +
    +          Reads all the bytes from an input stream.
    +static byte[]toByteArray(InputStream in, + boolean close) + +
    +          Reads all the bytes from an input stream.
    +static Readerutf8Reader(File file) + +
    +          Creates a reader whose character encoding is set to "UTF-8".
    +static Readerutf8Reader(InputStream in) + +
    +          Creates a reader whose character encoding is set to "UTF-8".
    +static Writerutf8Writer(File file) + +
    +          Creates a writer whose character encoding is set to "UTF-8".
    +static Writerutf8Writer(File file, + boolean append) + +
    +          Creates a writer whose character encoding is set to "UTF-8".
    +static Writerutf8Writer(OutputStream out) + +
    +          Creates a writer whose character encoding is set to "UTF-8".
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +toByteArray

    +
    +public static byte[] toByteArray(InputStream in)
    +                          throws IOException
    +
    +
    Reads all the bytes from an input stream. +

    +

    +
    Parameters:
    in - the input stream +
    Returns:
    the bytes +
    Throws: +
    IOException - if there's a problem reading from the input stream
    +
    +
    +
    + +

    +toByteArray

    +
    +public static byte[] toByteArray(InputStream in,
    +                                 boolean close)
    +                          throws IOException
    +
    +
    Reads all the bytes from an input stream. +

    +

    +
    Parameters:
    in - the input stream
    close - true to close the input stream when done, false not to +
    Returns:
    the bytes +
    Throws: +
    IOException - if there's a problem reading from the input stream
    +
    +
    +
    + +

    +getFileContents

    +
    +public static String getFileContents(File file)
    +                              throws IOException
    +
    +
    Reads the contents of a text file. +

    +

    +
    Parameters:
    file - the file to read +
    Returns:
    the file contents +
    Throws: +
    IOException - if there's a problem reading the file
    +
    +
    +
    + +

    +getFileContents

    +
    +public static String getFileContents(File file,
    +                                     String charset)
    +                              throws IOException
    +
    +
    Reads the contents of a text file. +

    +

    +
    Parameters:
    file - the file to read
    charset - the character encoding of the file +
    Returns:
    the file contents +
    Throws: +
    IOException - if there's a problem reading the file
    +
    +
    +
    + +

    +closeQuietly

    +
    +public static void closeQuietly(Closeable closeable)
    +
    +
    Closes a closeable resource, catching its IOException. +

    +

    +
    Parameters:
    closeable - the resource to close (can be null)
    +
    +
    +
    + +

    +utf8Writer

    +
    +public static Writer utf8Writer(OutputStream out)
    +
    +
    Creates a writer whose character encoding is set to "UTF-8". +

    +

    +
    Parameters:
    out - the output stream to write to +
    Returns:
    the writer
    +
    +
    +
    + +

    +utf8Writer

    +
    +public static Writer utf8Writer(File file)
    +                         throws FileNotFoundException
    +
    +
    Creates a writer whose character encoding is set to "UTF-8". +

    +

    +
    Parameters:
    file - the file to write to +
    Returns:
    the writer +
    Throws: +
    FileNotFoundException - if the file cannot be written to
    +
    +
    +
    + +

    +utf8Writer

    +
    +public static Writer utf8Writer(File file,
    +                                boolean append)
    +                         throws FileNotFoundException
    +
    +
    Creates a writer whose character encoding is set to "UTF-8". +

    +

    +
    Parameters:
    file - the file to write to
    append - true to append to the end of the file, false to overwrite + it +
    Returns:
    the writer +
    Throws: +
    FileNotFoundException - if the file cannot be written to
    +
    +
    +
    + +

    +utf8Reader

    +
    +public static Reader utf8Reader(InputStream in)
    +
    +
    Creates a reader whose character encoding is set to "UTF-8". +

    +

    +
    Parameters:
    in - the input stream to read from +
    Returns:
    the reader
    +
    +
    +
    + +

    +utf8Reader

    +
    +public static Reader utf8Reader(File file)
    +                         throws FileNotFoundException
    +
    +
    Creates a reader whose character encoding is set to "UTF-8". +

    +

    +
    Parameters:
    file - the file to read from +
    Returns:
    the reader +
    Throws: +
    FileNotFoundException - if the file can't be read
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/ISOFormat.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/ISOFormat.html new file mode 100644 index 000000000..287b03f93 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/ISOFormat.html @@ -0,0 +1,530 @@ + + + + + + + +ISOFormat (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Enum ISOFormat

    +
    +java.lang.Object
    +  extended by java.lang.Enum<ISOFormat>
    +      extended by biweekly.util.ISOFormat
    +
    +
    +
    All Implemented Interfaces:
    Serializable, Comparable<ISOFormat>
    +
    +
    +
    +
    public enum ISOFormat
    extends Enum<ISOFormat>
    + + +

    +Represents the various ISO8601 date-time formats that iCalendar dates can be + represented as. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Enum Constant Summary
    DATE_BASIC + +
    +          Example: 20120701
    DATE_EXTENDED + +
    +          Example: 2012-07-01
    HCARD_TIME_TAG + +
    +          Example: 2012-07-01T14:21:10-0500
    TIME_BASIC + +
    +          Example: 20120701T142110-0500
    TIME_BASIC_WITHOUT_TZ + +
    +          Example: 20120701T142110
    TIME_EXTENDED + +
    +          Example: 2012-07-01T14:21:10-05:00
    TIME_EXTENDED_WITHOUT_TZ + +
    +          Example: 2012-07-01T14:21:10
    UTC_TIME_BASIC + +
    +          Example: 20120701T192110Z
    UTC_TIME_EXTENDED + +
    +          Example: 2012-07-01T19:21:10Z
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + DateFormatgetFormatDateFormat() + +
    +          Builds a DateFormat object for formatting dates in this ISO + format.
    + DateFormatgetParseDateFormat() + +
    +          Builds a DateFormat object for parsing dates in this ISO format.
    + booleanmatches(String dateStr) + +
    +          Determines whether a date string is in this ISO format.
    +static ISOFormatvalueOf(String name) + +
    +          Returns the enum constant of this type with the specified name.
    +static ISOFormat[]values() + +
    +          Returns an array containing the constants of this enum type, in +the order they are declared.
    + + + + + + + +
    Methods inherited from class java.lang.Enum
    clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
    + + + + + + + +
    Methods inherited from class java.lang.Object
    getClass, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Enum Constant Detail
    + +

    +DATE_BASIC

    +
    +public static final ISOFormat DATE_BASIC
    +
    +
    Example: 20120701 +

    +

    +
    +
    +
    + +

    +DATE_EXTENDED

    +
    +public static final ISOFormat DATE_EXTENDED
    +
    +
    Example: 2012-07-01 +

    +

    +
    +
    +
    + +

    +TIME_BASIC

    +
    +public static final ISOFormat TIME_BASIC
    +
    +
    Example: 20120701T142110-0500 +

    +

    +
    +
    +
    + +

    +TIME_BASIC_WITHOUT_TZ

    +
    +public static final ISOFormat TIME_BASIC_WITHOUT_TZ
    +
    +
    Example: 20120701T142110 +

    +

    +
    +
    +
    + +

    +TIME_EXTENDED

    +
    +public static final ISOFormat TIME_EXTENDED
    +
    +
    Example: 2012-07-01T14:21:10-05:00 +

    +

    +
    +
    +
    + +

    +TIME_EXTENDED_WITHOUT_TZ

    +
    +public static final ISOFormat TIME_EXTENDED_WITHOUT_TZ
    +
    +
    Example: 2012-07-01T14:21:10 +

    +

    +
    +
    +
    + +

    +UTC_TIME_BASIC

    +
    +public static final ISOFormat UTC_TIME_BASIC
    +
    +
    Example: 20120701T192110Z +

    +

    +
    +
    +
    + +

    +UTC_TIME_EXTENDED

    +
    +public static final ISOFormat UTC_TIME_EXTENDED
    +
    +
    Example: 2012-07-01T19:21:10Z +

    +

    +
    +
    +
    + +

    +HCARD_TIME_TAG

    +
    +public static final ISOFormat HCARD_TIME_TAG
    +
    +
    Example: 2012-07-01T14:21:10-0500 +

    +

    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +values

    +
    +public static ISOFormat[] values()
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
    +for (ISOFormat c : ISOFormat.values())
    +    System.out.println(c);
    +
    +

    +

    + +
    Returns:
    an array containing the constants of this enum type, in +the order they are declared
    +
    +
    +
    + +

    +valueOf

    +
    +public static ISOFormat valueOf(String name)
    +
    +
    Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.) +

    +

    +
    Parameters:
    name - the name of the enum constant to be returned. +
    Returns:
    the enum constant with the specified name +
    Throws: +
    IllegalArgumentException - if this enum type has no constant +with the specified name +
    NullPointerException - if the argument is null
    +
    +
    +
    + +

    +matches

    +
    +public boolean matches(String dateStr)
    +
    +
    Determines whether a date string is in this ISO format. +

    +

    +
    Parameters:
    dateStr - the date string +
    Returns:
    true if it matches the date format, false if not
    +
    +
    +
    + +

    +getParseDateFormat

    +
    +public DateFormat getParseDateFormat()
    +
    +
    Builds a DateFormat object for parsing dates in this ISO format. +

    +

    + +
    Returns:
    the DateFormat object
    +
    +
    +
    + +

    +getFormatDateFormat

    +
    +public DateFormat getFormatDateFormat()
    +
    +
    Builds a DateFormat object for formatting dates in this ISO + format. +

    +

    + +
    Returns:
    the DateFormat object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/ListMultimap.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/ListMultimap.html new file mode 100644 index 000000000..014f15c42 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/ListMultimap.html @@ -0,0 +1,805 @@ + + + + + + + +ListMultimap (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class ListMultimap<K,V>

    +
    +java.lang.Object
    +  extended by biweekly.util.ListMultimap<K,V>
    +
    +
    +
    Type Parameters:
    K - the key
    V - the value
    +
    +
    All Implemented Interfaces:
    Iterable<Map.Entry<K,List<V>>>
    +
    +
    +
    Direct Known Subclasses:
    ICalParameters
    +
    +
    +
    +
    public class ListMultimap<K,V>
    extends Object
    implements Iterable<Map.Entry<K,List<V>>>
    + + +

    +A multimap that uses List objects to store its values. The internal + Map implementation is a LinkedHashMap that uses + ArrayList for its values. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + +
    +Constructor Summary
    ListMultimap() + +
    +          Creates an empty multimap.
    ListMultimap(int initialCapacity) + +
    +          Creates an empty multimap.
    ListMultimap(ListMultimap<K,V> orig) + +
    +          Creates a copy of an existing multimap.
    ListMultimap(Map<K,List<V>> orig) + +
    +          Creates a copy of an existing map.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidclear() + +
    +          Clears all entries from the multimap.
    + booleancontainsKey(K key) + +
    +          Determines whether the given key exists.
    + booleanequals(Object obj) + +
    +           
    + Vfirst(K key) + +
    +          Gets the first value that's associated with a key.
    + List<V>get(K key) + +
    +          Gets the values associated with the key.
    + Map<K,List<V>>getMap() + +
    +          Gets the underlying Map object.
    + inthashCode() + +
    +           
    + booleanisEmpty() + +
    +          Determines if the multimap is empty or not.
    + Iterator<Map.Entry<K,List<V>>>iterator() + +
    +           
    + Set<K>keySet() + +
    +          Returns all the keys.
    + voidput(K key, + V value) + +
    +          Adds a value to the multimap.
    + voidputAll(K key, + Collection<V> values) + +
    +          Adds multiple values to the multimap.
    + booleanremove(K key, + V value) + +
    +          Removes a particular value.
    + List<V>removeAll(K key) + +
    +          Removes all the values associated with a key
    + List<V>replace(K key, + Collection<V> values) + +
    +          Replaces all values with the given values.
    + List<V>replace(K key, + V value) + +
    +          Replaces all values with the given value.
    +protected  KsanitizeKey(K key) + +
    +          Modifies a given key before it is used to interact with the internal map.
    + intsize() + +
    +          Returns the number of values in the map.
    + StringtoString() + +
    +           
    + List<V>values() + +
    +          Returns all the values.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +ListMultimap

    +
    +public ListMultimap()
    +
    +
    Creates an empty multimap. +

    +

    +
    + +

    +ListMultimap

    +
    +public ListMultimap(int initialCapacity)
    +
    +
    Creates an empty multimap. +

    +

    +
    Parameters:
    initialCapacity - the initial capacity of the underlying map.
    +
    +
    + +

    +ListMultimap

    +
    +public ListMultimap(ListMultimap<K,V> orig)
    +
    +
    Creates a copy of an existing multimap. +

    +

    +
    Parameters:
    orig - the multimap to copy from
    +
    +
    + +

    +ListMultimap

    +
    +public ListMultimap(Map<K,List<V>> orig)
    +
    +
    Creates a copy of an existing map. +

    +

    +
    Parameters:
    orig - the map to copy from
    +
    + + + + + + + + +
    +Method Detail
    + +

    +put

    +
    +public void put(K key,
    +                V value)
    +
    +
    Adds a value to the multimap. +

    +

    +
    +
    +
    +
    Parameters:
    key - the key
    value - the value to add
    +
    +
    +
    + +

    +putAll

    +
    +public void putAll(K key,
    +                   Collection<V> values)
    +
    +
    Adds multiple values to the multimap. +

    +

    +
    +
    +
    +
    Parameters:
    key - the key
    values - the values to add
    +
    +
    +
    + +

    +get

    +
    +public List<V> get(K key)
    +
    +
    Gets the values associated with the key. +

    +

    +
    +
    +
    +
    Parameters:
    key - the key +
    Returns:
    the list of values or empty list if the key doesn't exist
    +
    +
    +
    + +

    +first

    +
    +public V first(K key)
    +
    +
    Gets the first value that's associated with a key. +

    +

    +
    +
    +
    +
    Parameters:
    key - the key +
    Returns:
    the first value or null if the key doesn't exist
    +
    +
    +
    + +

    +containsKey

    +
    +public boolean containsKey(K key)
    +
    +
    Determines whether the given key exists. +

    +

    +
    +
    +
    +
    Parameters:
    key - the key +
    Returns:
    true if the key exists, false if not
    +
    +
    +
    + +

    +remove

    +
    +public boolean remove(K key,
    +                      V value)
    +
    +
    Removes a particular value. +

    +

    +
    +
    +
    +
    Parameters:
    key - the key
    value - the value to remove +
    Returns:
    true if the multimap contained the value, false if not
    +
    +
    +
    + +

    +removeAll

    +
    +public List<V> removeAll(K key)
    +
    +
    Removes all the values associated with a key +

    +

    +
    +
    +
    +
    Parameters:
    key - the key to remove +
    Returns:
    the removed values or empty list if the key doesn't exist
    +
    +
    +
    + +

    +replace

    +
    +public List<V> replace(K key,
    +                       V value)
    +
    +
    Replaces all values with the given value. +

    +

    +
    +
    +
    +
    Parameters:
    key - the key
    value - the value with which to replace all existing values, or null + to remove all values +
    Returns:
    the values that were replaced
    +
    +
    +
    + +

    +replace

    +
    +public List<V> replace(K key,
    +                       Collection<V> values)
    +
    +
    Replaces all values with the given values. +

    +

    +
    +
    +
    +
    Parameters:
    key - the key
    values - the values with which to replace all existing values +
    Returns:
    the values that were replaced
    +
    +
    +
    + +

    +clear

    +
    +public void clear()
    +
    +
    Clears all entries from the multimap. +

    +

    +
    +
    +
    +
    +
    +
    +
    + +

    +keySet

    +
    +public Set<K> keySet()
    +
    +
    Returns all the keys. +

    +

    +
    +
    +
    + +
    Returns:
    all the keys
    +
    +
    +
    + +

    +values

    +
    +public List<V> values()
    +
    +
    Returns all the values. +

    +

    +
    +
    +
    + +
    Returns:
    all the values
    +
    +
    +
    + +

    +isEmpty

    +
    +public boolean isEmpty()
    +
    +
    Determines if the multimap is empty or not. +

    +

    +
    +
    +
    + +
    Returns:
    true if it's empty, false if not
    +
    +
    +
    + +

    +size

    +
    +public int size()
    +
    +
    Returns the number of values in the map. +

    +

    +
    +
    +
    + +
    Returns:
    the number of values
    +
    +
    +
    + +

    +getMap

    +
    +public Map<K,List<V>> getMap()
    +
    +
    Gets the underlying Map object. +

    +

    +
    +
    +
    + +
    Returns:
    the underlying Map object
    +
    +
    +
    + +

    +sanitizeKey

    +
    +protected K sanitizeKey(K key)
    +
    +
    Modifies a given key before it is used to interact with the internal map. + This method is meant to be overridden by child classes if necessary. +

    +

    +
    +
    +
    +
    Parameters:
    key - the key +
    Returns:
    the modified key (by default, the key is returned as-is)
    +
    +
    +
    + +

    +iterator

    +
    +public Iterator<Map.Entry<K,List<V>>> iterator()
    +
    +
    +
    Specified by:
    iterator in interface Iterable<Map.Entry<K,List<V>>>
    +
    +
    +
    +
    +
    +
    + +

    +toString

    +
    +public String toString()
    +
    +
    +
    Overrides:
    toString in class Object
    +
    +
    +
    +
    +
    +
    + +

    +hashCode

    +
    +public int hashCode()
    +
    +
    +
    Overrides:
    hashCode in class Object
    +
    +
    +
    +
    +
    +
    + +

    +equals

    +
    +public boolean equals(Object obj)
    +
    +
    +
    Overrides:
    equals in class Object
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/Period.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/Period.html new file mode 100644 index 000000000..681bd1210 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/Period.html @@ -0,0 +1,397 @@ + + + + + + + +Period (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class Period

    +
    +java.lang.Object
    +  extended by biweekly.util.Period
    +
    +
    +
    +
    public final class Period
    extends Object
    + + +

    +A period of time. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + +
    +Constructor Summary
    Period(Date startDate, + Date endDate) + +
    +          Creates a new time period.
    Period(Date startDate, + Duration duration) + +
    +          Creates a new time period.
    Period(Period period) + +
    +          Copies an existing time period.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + booleanequals(Object obj) + +
    +           
    + DurationgetDuration() + +
    +          Gets the length of time after the start date.
    + DategetEndDate() + +
    +          Gets the end date.
    + DategetStartDate() + +
    +          Gets the start date.
    + inthashCode() + +
    +           
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Period

    +
    +public Period(Date startDate,
    +              Date endDate)
    +
    +
    Creates a new time period. +

    +

    +
    Parameters:
    startDate - the start date
    endDate - the end date
    +
    +
    + +

    +Period

    +
    +public Period(Date startDate,
    +              Duration duration)
    +
    +
    Creates a new time period. +

    +

    +
    Parameters:
    startDate - the start date
    duration - the length of time after the start date
    +
    +
    + +

    +Period

    +
    +public Period(Period period)
    +
    +
    Copies an existing time period. +

    +

    +
    Parameters:
    period - the period to copy
    +
    + + + + + + + + +
    +Method Detail
    + +

    +getStartDate

    +
    +public Date getStartDate()
    +
    +
    Gets the start date. +

    +

    + +
    Returns:
    the start date
    +
    +
    +
    + +

    +getEndDate

    +
    +public Date getEndDate()
    +
    +
    Gets the end date. This will be null if a duration was defined. +

    +

    + +
    Returns:
    the end date or null if not set
    +
    +
    +
    + +

    +getDuration

    +
    +public Duration getDuration()
    +
    +
    Gets the length of time after the start date. This will be null if an end + date was defined. +

    +

    + +
    Returns:
    the duration or null if not set
    +
    +
    +
    + +

    +hashCode

    +
    +public int hashCode()
    +
    +
    +
    Overrides:
    hashCode in class Object
    +
    +
    +
    +
    +
    +
    + +

    +equals

    +
    +public boolean equals(Object obj)
    +
    +
    +
    Overrides:
    equals in class Object
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.Builder.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.Builder.html new file mode 100644 index 000000000..c10de8dc1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.Builder.html @@ -0,0 +1,673 @@ + + + + + + + +Recurrence.Builder (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class Recurrence.Builder

    +
    +java.lang.Object
    +  extended by biweekly.util.Recurrence.Builder
    +
    +
    +
    Enclosing class:
    Recurrence
    +
    +
    +
    +
    public static class Recurrence.Builder
    extends Object
    + + +

    +Constructs Recurrence objects. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + +
    +Constructor Summary
    Recurrence.Builder(Recurrence.Frequency frequency) + +
    +          Constructs a new builder.
    Recurrence.Builder(Recurrence recur) + +
    +          Constructs a new builder
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + Recurrencebuild() + +
    +          Builds the final Recurrence object.
    + Recurrence.BuilderbyDay(Integer prefix, + Recurrence.DayOfWeek byDay) + +
    +          Adds a BYDAY rule part.
    + Recurrence.BuilderbyDay(Recurrence.DayOfWeek byDay) + +
    +          Adds a BYDAY rule part.
    + Recurrence.BuilderbyHour(Integer byHour) + +
    +          Adds a BYHOUR rule part.
    + Recurrence.BuilderbyMinute(Integer byMinute) + +
    +          Adds a BYMINUTE rule part.
    + Recurrence.BuilderbyMonth(Integer byMonth) + +
    +          Adds a BYMONTH rule part.
    + Recurrence.BuilderbyMonthDay(Integer byMonthDay) + +
    +          Adds a BYMONTHDAY rule part.
    + Recurrence.BuilderbySecond(Integer bySecond) + +
    +          Adds a BYSECOND rule part.
    + Recurrence.BuilderbySetPos(Integer bySetPos) + +
    +          Adds a BYSETPOS rule part.
    + Recurrence.BuilderbyWeekNo(Integer byWeekNo) + +
    +          Adds a BYWEEKNO rule part.
    + Recurrence.BuilderbyYearDay(Integer byYearDay) + +
    +          Adds a BYYEARDAY rule part.
    + Recurrence.Buildercount(Integer count) + +
    +          Gets the number of times the rule will be repeated.
    + Recurrence.Builderfrequency(Recurrence.Frequency frequency) + +
    +          Sets the frequency
    + Recurrence.Builderinterval(Integer interval) + +
    +          Gets how often the rule repeats, in relation to the frequency.
    + Recurrence.Builderuntil(Date until) + +
    +          Sets the date that the recurrence stops.
    + Recurrence.Builderuntil(Date until, + boolean hasTime) + +
    +          Sets the date that the recurrence stops.
    + Recurrence.BuilderworkweekStarts(Recurrence.DayOfWeek workweekStarts) + +
    +          Sets the day that the work week starts.
    + Recurrence.Builderxrule(String name, + String value) + +
    +          Adds a non-standard rule part.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +Recurrence.Builder

    +
    +public Recurrence.Builder(Recurrence.Frequency frequency)
    +
    +
    Constructs a new builder. +

    +

    +
    Parameters:
    frequency - the recurrence frequency
    +
    +
    + +

    +Recurrence.Builder

    +
    +public Recurrence.Builder(Recurrence recur)
    +
    +
    Constructs a new builder +

    +

    +
    Parameters:
    recur - the recurrence object to copy from
    +
    + + + + + + + + +
    +Method Detail
    + +

    +frequency

    +
    +public Recurrence.Builder frequency(Recurrence.Frequency frequency)
    +
    +
    Sets the frequency +

    +

    +
    Parameters:
    frequency - the frequency +
    Returns:
    this
    +
    +
    +
    + +

    +until

    +
    +public Recurrence.Builder until(Date until)
    +
    +
    Sets the date that the recurrence stops. Note that the UNTIL and + COUNT fields cannot both be defined within the same rule. +

    +

    +
    Parameters:
    until - the date (time component is included) +
    Returns:
    this
    +
    +
    +
    + +

    +until

    +
    +public Recurrence.Builder until(Date until,
    +                                boolean hasTime)
    +
    +
    Sets the date that the recurrence stops. Note that the UNTIL and + COUNT fields cannot both be defined within the same rule. +

    +

    +
    Parameters:
    until - the date
    hasTime - true if the date has a time component, false if it's + strictly a date +
    Returns:
    this
    +
    +
    +
    + +

    +count

    +
    +public Recurrence.Builder count(Integer count)
    +
    +
    Gets the number of times the rule will be repeated. Note that the + UNTIL and COUNT fields cannot both be defined within the same rule. +

    +

    +
    Parameters:
    count - the number of times to repeat the rule +
    Returns:
    this
    +
    +
    +
    + +

    +interval

    +
    +public Recurrence.Builder interval(Integer interval)
    +
    +
    Gets how often the rule repeats, in relation to the frequency. +

    +

    +
    Parameters:
    interval - the repetition interval +
    Returns:
    this
    +
    +
    +
    + +

    +bySecond

    +
    +public Recurrence.Builder bySecond(Integer bySecond)
    +
    +
    Adds a BYSECOND rule part. +

    +

    +
    Parameters:
    bySecond - the value to add +
    Returns:
    this
    +
    +
    +
    + +

    +byMinute

    +
    +public Recurrence.Builder byMinute(Integer byMinute)
    +
    +
    Adds a BYMINUTE rule part. +

    +

    +
    Parameters:
    byMinute - the value to add +
    Returns:
    this
    +
    +
    +
    + +

    +byHour

    +
    +public Recurrence.Builder byHour(Integer byHour)
    +
    +
    Adds a BYHOUR rule part. +

    +

    +
    Parameters:
    byHour - the value to add +
    Returns:
    this
    +
    +
    +
    + +

    +byMonthDay

    +
    +public Recurrence.Builder byMonthDay(Integer byMonthDay)
    +
    +
    Adds a BYMONTHDAY rule part. +

    +

    +
    Parameters:
    byMonthDay - the value to add +
    Returns:
    this
    +
    +
    +
    + +

    +byYearDay

    +
    +public Recurrence.Builder byYearDay(Integer byYearDay)
    +
    +
    Adds a BYYEARDAY rule part. +

    +

    +
    Parameters:
    byYearDay - the value to add +
    Returns:
    this
    +
    +
    +
    + +

    +byWeekNo

    +
    +public Recurrence.Builder byWeekNo(Integer byWeekNo)
    +
    +
    Adds a BYWEEKNO rule part. +

    +

    +
    Parameters:
    byWeekNo - the value to add +
    Returns:
    this
    +
    +
    +
    + +

    +byMonth

    +
    +public Recurrence.Builder byMonth(Integer byMonth)
    +
    +
    Adds a BYMONTH rule part. +

    +

    +
    Parameters:
    byMonth - the value to add +
    Returns:
    this
    +
    +
    +
    + +

    +bySetPos

    +
    +public Recurrence.Builder bySetPos(Integer bySetPos)
    +
    +
    Adds a BYSETPOS rule part. +

    +

    +
    Parameters:
    bySetPos - the value to add +
    Returns:
    this
    +
    +
    +
    + +

    +byDay

    +
    +public Recurrence.Builder byDay(Recurrence.DayOfWeek byDay)
    +
    +
    Adds a BYDAY rule part. +

    +

    +
    Parameters:
    byDay - the value to add +
    Returns:
    this
    +
    +
    +
    + +

    +byDay

    +
    +public Recurrence.Builder byDay(Integer prefix,
    +                                Recurrence.DayOfWeek byDay)
    +
    +
    Adds a BYDAY rule part. +

    +

    +
    Parameters:
    prefix - the numeric prefix
    byDay - the value to add +
    Returns:
    this
    +
    +
    +
    + +

    +workweekStarts

    +
    +public Recurrence.Builder workweekStarts(Recurrence.DayOfWeek workweekStarts)
    +
    +
    Sets the day that the work week starts. +

    +

    +
    Parameters:
    workweekStarts - the day +
    Returns:
    this
    +
    +
    +
    + +

    +xrule

    +
    +public Recurrence.Builder xrule(String name,
    +                                String value)
    +
    +
    Adds a non-standard rule part. +

    +

    +
    Parameters:
    name - the name
    value - the value or null to remove the rule part +
    Returns:
    this
    +
    +
    +
    + +

    +build

    +
    +public Recurrence build()
    +
    +
    Builds the final Recurrence object. +

    +

    + +
    Returns:
    the object
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.DayOfWeek.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.DayOfWeek.html new file mode 100644 index 000000000..eb7450919 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.DayOfWeek.html @@ -0,0 +1,458 @@ + + + + + + + +Recurrence.DayOfWeek (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Enum Recurrence.DayOfWeek

    +
    +java.lang.Object
    +  extended by java.lang.Enum<Recurrence.DayOfWeek>
    +      extended by biweekly.util.Recurrence.DayOfWeek
    +
    +
    +
    All Implemented Interfaces:
    Serializable, Comparable<Recurrence.DayOfWeek>
    +
    +
    +
    Enclosing class:
    Recurrence
    +
    +
    +
    +
    public static enum Recurrence.DayOfWeek
    extends Enum<Recurrence.DayOfWeek>
    + + +

    +Represents each of the seven days of the week. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Enum Constant Summary
    FRIDAY + +
    +           
    MONDAY + +
    +           
    SATURDAY + +
    +           
    SUNDAY + +
    +           
    THURSDAY + +
    +           
    TUESDAY + +
    +           
    WEDNESDAY + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + StringgetAbbr() + +
    +          Gets the day's abbreviation.
    +static Recurrence.DayOfWeekvalueOf(String name) + +
    +          Returns the enum constant of this type with the specified name.
    +static Recurrence.DayOfWeekvalueOfAbbr(String abbr) + +
    +          Gets a day by its abbreviation.
    +static Recurrence.DayOfWeek[]values() + +
    +          Returns an array containing the constants of this enum type, in +the order they are declared.
    + + + + + + + +
    Methods inherited from class java.lang.Enum
    clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
    + + + + + + + +
    Methods inherited from class java.lang.Object
    getClass, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Enum Constant Detail
    + +

    +MONDAY

    +
    +public static final Recurrence.DayOfWeek MONDAY
    +
    +
    +
    +
    +
    + +

    +TUESDAY

    +
    +public static final Recurrence.DayOfWeek TUESDAY
    +
    +
    +
    +
    +
    + +

    +WEDNESDAY

    +
    +public static final Recurrence.DayOfWeek WEDNESDAY
    +
    +
    +
    +
    +
    + +

    +THURSDAY

    +
    +public static final Recurrence.DayOfWeek THURSDAY
    +
    +
    +
    +
    +
    + +

    +FRIDAY

    +
    +public static final Recurrence.DayOfWeek FRIDAY
    +
    +
    +
    +
    +
    + +

    +SATURDAY

    +
    +public static final Recurrence.DayOfWeek SATURDAY
    +
    +
    +
    +
    +
    + +

    +SUNDAY

    +
    +public static final Recurrence.DayOfWeek SUNDAY
    +
    +
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +values

    +
    +public static Recurrence.DayOfWeek[] values()
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
    +for (Recurrence.DayOfWeek c : Recurrence.DayOfWeek.values())
    +    System.out.println(c);
    +
    +

    +

    + +
    Returns:
    an array containing the constants of this enum type, in +the order they are declared
    +
    +
    +
    + +

    +valueOf

    +
    +public static Recurrence.DayOfWeek valueOf(String name)
    +
    +
    Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.) +

    +

    +
    Parameters:
    name - the name of the enum constant to be returned. +
    Returns:
    the enum constant with the specified name +
    Throws: +
    IllegalArgumentException - if this enum type has no constant +with the specified name +
    NullPointerException - if the argument is null
    +
    +
    +
    + +

    +getAbbr

    +
    +public String getAbbr()
    +
    +
    Gets the day's abbreviation. +

    +

    + +
    Returns:
    the abbreviation (e.g. "MO" for Monday)
    +
    +
    +
    + +

    +valueOfAbbr

    +
    +public static Recurrence.DayOfWeek valueOfAbbr(String abbr)
    +
    +
    Gets a day by its abbreviation. +

    +

    +
    Parameters:
    abbr - the abbreviation (case-insensitive, e.g. "MO" for Monday) +
    Returns:
    the day or null if not found
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.Frequency.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.Frequency.html new file mode 100644 index 000000000..f42f5bf94 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.Frequency.html @@ -0,0 +1,414 @@ + + + + + + + +Recurrence.Frequency (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Enum Recurrence.Frequency

    +
    +java.lang.Object
    +  extended by java.lang.Enum<Recurrence.Frequency>
    +      extended by biweekly.util.Recurrence.Frequency
    +
    +
    +
    All Implemented Interfaces:
    Serializable, Comparable<Recurrence.Frequency>
    +
    +
    +
    Enclosing class:
    Recurrence
    +
    +
    +
    +
    public static enum Recurrence.Frequency
    extends Enum<Recurrence.Frequency>
    + + +

    +Represents the frequency at which a recurrence rule repeats itself. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Enum Constant Summary
    DAILY + +
    +           
    HOURLY + +
    +           
    MINUTELY + +
    +           
    MONTHLY + +
    +           
    SECONDLY + +
    +           
    WEEKLY + +
    +           
    YEARLY + +
    +           
    +  + + + + + + + + + + + + + + + +
    +Method Summary
    +static Recurrence.FrequencyvalueOf(String name) + +
    +          Returns the enum constant of this type with the specified name.
    +static Recurrence.Frequency[]values() + +
    +          Returns an array containing the constants of this enum type, in +the order they are declared.
    + + + + + + + +
    Methods inherited from class java.lang.Enum
    clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
    + + + + + + + +
    Methods inherited from class java.lang.Object
    getClass, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Enum Constant Detail
    + +

    +SECONDLY

    +
    +public static final Recurrence.Frequency SECONDLY
    +
    +
    +
    +
    +
    + +

    +MINUTELY

    +
    +public static final Recurrence.Frequency MINUTELY
    +
    +
    +
    +
    +
    + +

    +HOURLY

    +
    +public static final Recurrence.Frequency HOURLY
    +
    +
    +
    +
    +
    + +

    +DAILY

    +
    +public static final Recurrence.Frequency DAILY
    +
    +
    +
    +
    +
    + +

    +WEEKLY

    +
    +public static final Recurrence.Frequency WEEKLY
    +
    +
    +
    +
    +
    + +

    +MONTHLY

    +
    +public static final Recurrence.Frequency MONTHLY
    +
    +
    +
    +
    +
    + +

    +YEARLY

    +
    +public static final Recurrence.Frequency YEARLY
    +
    +
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +values

    +
    +public static Recurrence.Frequency[] values()
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
    +for (Recurrence.Frequency c : Recurrence.Frequency.values())
    +    System.out.println(c);
    +
    +

    +

    + +
    Returns:
    an array containing the constants of this enum type, in +the order they are declared
    +
    +
    +
    + +

    +valueOf

    +
    +public static Recurrence.Frequency valueOf(String name)
    +
    +
    Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.) +

    +

    +
    Parameters:
    name - the name of the enum constant to be returned. +
    Returns:
    the enum constant with the specified name +
    Throws: +
    IllegalArgumentException - if this enum type has no constant +with the specified name +
    NullPointerException - if the argument is null
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.html new file mode 100644 index 000000000..919b6feb5 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/Recurrence.html @@ -0,0 +1,679 @@ + + + + + + + +Recurrence (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class Recurrence

    +
    +java.lang.Object
    +  extended by biweekly.util.Recurrence
    +
    +
    +
    +
    public final class Recurrence
    extends Object
    + + +

    +

    + Represents a recurrence rule value. +

    +

    + This class is immutable. Use the Recurrence.Builder object to construct a new + instance. +

    +

    + Examples: + +

    + //"bi-weekly"
    + Recurrence rrule = new Recurrence.Builder(Frequency.WEEKLY).interval(2).build();
    + Recurrence copy = new Recurrence.Builder(rrule).interval(3).build();
    + 
    + +

    +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    Specification Reference:
    RFC 5545 p.38-45
    +
    + +

    + + + + + + + + + + + + + + + + + + + +
    +Nested Class Summary
    +static classRecurrence.Builder + +
    +          Constructs Recurrence objects.
    +static classRecurrence.DayOfWeek + +
    +          Represents each of the seven days of the week.
    +static classRecurrence.Frequency + +
    +          Represents the frequency at which a recurrence rule repeats itself.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + booleanequals(Object obj) + +
    +           
    + List<Recurrence.DayOfWeek>getByDay() + +
    +          Gets the day components of the BYDAY rule part.
    + List<Integer>getByDayPrefixes() + +
    +          Gets the numeric components of the BYDAY rule part.
    + List<Integer>getByHour() + +
    +          Gets the BYHOUR rule part.
    + List<Integer>getByMinute() + +
    +          Gets the BYMINUTE rule part.
    + List<Integer>getByMonth() + +
    +          Gets the BYMONTH rule part.
    + List<Integer>getByMonthDay() + +
    +          Gets the BYMONTHDAY rule part.
    + List<Integer>getBySecond() + +
    +          Gets the BYSECOND rule part.
    + List<Integer>getBySetPos() + +
    +          Gets the BYSETPOS rule part.
    + List<Integer>getByWeekNo() + +
    +          Gets the BYWEEKNO rule part.
    + List<Integer>getByYearDay() + +
    +          Gets the BYYEARDAY rule part.
    + IntegergetCount() + +
    +          Gets the number of times the rule will be repeated.
    + Recurrence.FrequencygetFrequency() + +
    +          Gets the frequency.
    + IntegergetInterval() + +
    +          Gets how often the rule repeats, in relation to the frequency.
    + DategetUntil() + +
    +          Gets the date that the recurrence stops.
    + Recurrence.DayOfWeekgetWorkweekStarts() + +
    +          Gets the day that the work week starts.
    + Map<String,List<String>>getXRules() + +
    +          Gets the non-standard rule parts.
    + inthashCode() + +
    +           
    + booleanhasTimeUntilDate() + +
    +          Determines whether the UNTIL date has a time component.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +getFrequency

    +
    +public Recurrence.Frequency getFrequency()
    +
    +
    Gets the frequency. +

    +

    + +
    Returns:
    the frequency or null if not set
    +
    +
    +
    + +

    +getUntil

    +
    +public Date getUntil()
    +
    +
    Gets the date that the recurrence stops. +

    +

    + +
    Returns:
    the date or null if not set
    +
    +
    +
    + +

    +hasTimeUntilDate

    +
    +public boolean hasTimeUntilDate()
    +
    +
    Determines whether the UNTIL date has a time component. +

    +

    + +
    Returns:
    true if it has a time component, false if it is strictly a date
    +
    +
    +
    + +

    +getCount

    +
    +public Integer getCount()
    +
    +
    Gets the number of times the rule will be repeated. +

    +

    + +
    Returns:
    the number of times to repeat the rule or null if not set
    +
    +
    +
    + +

    +getInterval

    +
    +public Integer getInterval()
    +
    +
    Gets how often the rule repeats, in relation to the frequency. +

    +

    + +
    Returns:
    the repetition interval or null if not set
    +
    +
    +
    + +

    +getBySecond

    +
    +public List<Integer> getBySecond()
    +
    +
    Gets the BYSECOND rule part. +

    +

    + +
    Returns:
    the BYSECOND rule part or empty list if not set
    +
    +
    +
    + +

    +getByMinute

    +
    +public List<Integer> getByMinute()
    +
    +
    Gets the BYMINUTE rule part. +

    +

    + +
    Returns:
    the BYMINUTE rule part or empty list if not set
    +
    +
    +
    + +

    +getByHour

    +
    +public List<Integer> getByHour()
    +
    +
    Gets the BYHOUR rule part. +

    +

    + +
    Returns:
    the BYHOUR rule part or empty list if not set
    +
    +
    +
    + +

    +getByDay

    +
    +public List<Recurrence.DayOfWeek> getByDay()
    +
    +
    Gets the day components of the BYDAY rule part. +

    +

    + +
    Returns:
    the day components of the BYDAY rule part or empty list if not + set
    +
    +
    +
    + +

    +getByDayPrefixes

    +
    +public List<Integer> getByDayPrefixes()
    +
    +
    Gets the numeric components of the BYDAY rule part. +

    +

    + +
    Returns:
    the numeric components of the BYDAY rule part or empty list if + not set (BYDAY values without numeric components will have a "null" + number)
    +
    +
    +
    + +

    +getByMonthDay

    +
    +public List<Integer> getByMonthDay()
    +
    +
    Gets the BYMONTHDAY rule part. +

    +

    + +
    Returns:
    the BYMONTHDAY rule part or empty list if not set
    +
    +
    +
    + +

    +getByYearDay

    +
    +public List<Integer> getByYearDay()
    +
    +
    Gets the BYYEARDAY rule part. +

    +

    + +
    Returns:
    the BYYEARDAY rule part or empty list if not set
    +
    +
    +
    + +

    +getByWeekNo

    +
    +public List<Integer> getByWeekNo()
    +
    +
    Gets the BYWEEKNO rule part. +

    +

    + +
    Returns:
    the BYWEEKNO rule part or empty list if not set
    +
    +
    +
    + +

    +getByMonth

    +
    +public List<Integer> getByMonth()
    +
    +
    Gets the BYMONTH rule part. +

    +

    + +
    Returns:
    the BYMONTH rule part or empty list if not set
    +
    +
    +
    + +

    +getBySetPos

    +
    +public List<Integer> getBySetPos()
    +
    +
    Gets the BYSETPOS rule part. +

    +

    + +
    Returns:
    the BYSETPOS rule part or empty list if not set
    +
    +
    +
    + +

    +getWorkweekStarts

    +
    +public Recurrence.DayOfWeek getWorkweekStarts()
    +
    +
    Gets the day that the work week starts. +

    +

    + +
    Returns:
    the day that the work week starts or null if not set
    +
    +
    +
    + +

    +getXRules

    +
    +public Map<String,List<String>> getXRules()
    +
    +
    Gets the non-standard rule parts. +

    +

    + +
    Returns:
    the non-standard rule parts
    +
    +
    +
    + +

    +hashCode

    +
    +public int hashCode()
    +
    +
    +
    Overrides:
    hashCode in class Object
    +
    +
    +
    +
    +
    +
    + +

    +equals

    +
    +public boolean equals(Object obj)
    +
    +
    +
    Overrides:
    equals in class Object
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/StringUtils.JoinCallback.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/StringUtils.JoinCallback.html new file mode 100644 index 000000000..298d5bf50 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/StringUtils.JoinCallback.html @@ -0,0 +1,223 @@ + + + + + + + +StringUtils.JoinCallback (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Interface StringUtils.JoinCallback<T>

    +
    +
    Type Parameters:
    T - the value type
    +
    +
    Enclosing class:
    StringUtils
    +
    +
    +
    +
    public static interface StringUtils.JoinCallback<T>
    + + +

    +Callback interface used with the + StringUtils.join(Collection, String, JoinCallback) method. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + +
    +Method Summary
    + voidhandle(StringBuilder sb, + T value) + +
    +           
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +handle

    +
    +void handle(StringBuilder sb,
    +            T value)
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/StringUtils.JoinMapCallback.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/StringUtils.JoinMapCallback.html new file mode 100644 index 000000000..f1dc2e328 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/StringUtils.JoinMapCallback.html @@ -0,0 +1,225 @@ + + + + + + + +StringUtils.JoinMapCallback (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Interface StringUtils.JoinMapCallback<K,V>

    +
    +
    Type Parameters:
    K - the key class
    V - the value class
    +
    +
    Enclosing class:
    StringUtils
    +
    +
    +
    +
    public static interface StringUtils.JoinMapCallback<K,V>
    + + +

    +Callback interface used with the + StringUtils.join(Map, String, JoinMapCallback) method. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + +
    +Method Summary
    + voidhandle(StringBuilder sb, + K key, + V value) + +
    +           
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +handle

    +
    +void handle(StringBuilder sb,
    +            K key,
    +            V value)
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/StringUtils.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/StringUtils.html new file mode 100644 index 000000000..75e127ccb --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/StringUtils.html @@ -0,0 +1,437 @@ + + + + + + + +StringUtils (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class StringUtils

    +
    +java.lang.Object
    +  extended by biweekly.util.StringUtils
    +
    +
    +
    +
    public class StringUtils
    extends Object
    + + +

    +Contains miscellaneous string utilities. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + +
    +Nested Class Summary
    +static interfaceStringUtils.JoinCallback<T> + +
    +          Callback interface used with the + join(Collection, String, JoinCallback) method.
    +static interfaceStringUtils.JoinMapCallback<K,V> + +
    +          Callback interface used with the + join(Map, String, JoinMapCallback) method.
    + + + + + + + + + + +
    +Field Summary
    +static StringNEWLINE + +
    +          The local computer's newline character sequence.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static + + + + +
    +<T> String
    +
    join(Collection<T> collection, + String delimiter) + +
    +          Joins a collection of values into a delimited list.
    +static + + + + +
    +<T> void
    +
    join(Collection<T> collection, + String delimiter, + StringBuilder sb) + +
    +          Joins a collection of values into a delimited list.
    +static + + + + +
    +<T> void
    +
    join(Collection<T> collection, + String delimiter, + StringBuilder sb, + StringUtils.JoinCallback<T> join) + +
    +          Joins a collection of values into a delimited list.
    +static + + + + +
    +<T> String
    +
    join(Collection<T> collection, + String delimiter, + StringUtils.JoinCallback<T> join) + +
    +          Joins a collection of values into a delimited list.
    +static + + + + +
    +<K,V> String
    +
    join(Map<K,V> map, + String delimiter, + StringUtils.JoinMapCallback<K,V> join) + +
    +          Joins a map into a delimited list.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +NEWLINE

    +
    +public static final String NEWLINE
    +
    +
    The local computer's newline character sequence. +

    +

    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +join

    +
    +public static <T> String join(Collection<T> collection,
    +                              String delimiter)
    +
    +
    Joins a collection of values into a delimited list. +

    +

    +
    Parameters:
    collection - the collection of values
    delimiter - the delimiter (e.g. ",") +
    Returns:
    the final string
    +
    +
    +
    + +

    +join

    +
    +public static <T> void join(Collection<T> collection,
    +                            String delimiter,
    +                            StringBuilder sb)
    +
    +
    Joins a collection of values into a delimited list. +

    +

    +
    Parameters:
    collection - the collection of values
    delimiter - the delimiter (e.g. ",")
    sb - the string builder to append onto
    +
    +
    +
    + +

    +join

    +
    +public static <T> String join(Collection<T> collection,
    +                              String delimiter,
    +                              StringUtils.JoinCallback<T> join)
    +
    +
    Joins a collection of values into a delimited list. +

    +

    +
    Parameters:
    collection - the collection of values
    delimiter - the delimiter (e.g. ",")
    join - callback function to call on every element in the collection +
    Returns:
    the final string
    +
    +
    +
    + +

    +join

    +
    +public static <T> void join(Collection<T> collection,
    +                            String delimiter,
    +                            StringBuilder sb,
    +                            StringUtils.JoinCallback<T> join)
    +
    +
    Joins a collection of values into a delimited list. +

    +

    +
    Parameters:
    collection - the collection of values
    delimiter - the delimiter (e.g. ",")
    sb - the string builder to append onto
    join - callback function to call on every element in the collection
    +
    +
    +
    + +

    +join

    +
    +public static <K,V> String join(Map<K,V> map,
    +                                String delimiter,
    +                                StringUtils.JoinMapCallback<K,V> join)
    +
    +
    Joins a map into a delimited list. +

    +

    +
    Parameters:
    map - the map
    delimiter - the delimiter (e.g. ",")
    join - callback function to call on every element in the collection +
    Returns:
    the final string
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/UtcOffset.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/UtcOffset.html new file mode 100644 index 000000000..f94c85150 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/UtcOffset.html @@ -0,0 +1,410 @@ + + + + + + + +UtcOffset (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class UtcOffset

    +
    +java.lang.Object
    +  extended by biweekly.util.UtcOffset
    +
    +
    +
    +
    public final class UtcOffset
    extends Object
    + + +

    +Represents a UTC offset. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + +
    +Constructor Summary
    UtcOffset(int hour, + int minute) + +
    +          Creates a new UTC offset.
    +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + booleanequals(Object obj) + +
    +           
    + intgetHour() + +
    +          Gets the hour component.
    + intgetMinute() + +
    +          Gets the minute component.
    + inthashCode() + +
    +           
    +static UtcOffsetparse(String text) + +
    +          Parses a UTC offset from a string.
    + StringtoString() + +
    +          Converts this offset to its ISO string representation using "basic" + format.
    + StringtoString(boolean extended) + +
    +          Converts this offset to its ISO string representation.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Constructor Detail
    + +

    +UtcOffset

    +
    +public UtcOffset(int hour,
    +                 int minute)
    +
    +
    Creates a new UTC offset. +

    +

    +
    Parameters:
    hour - the hour component (may be negative)
    minute - the minute component (must be between 0 and 59)
    +
    + + + + + + + + +
    +Method Detail
    + +

    +parse

    +
    +public static UtcOffset parse(String text)
    +
    +
    Parses a UTC offset from a string. +

    +

    +
    Parameters:
    text - the text to parse (e.g. "-0500") +
    Returns:
    the parsed UTC offset +
    Throws: +
    IllegalArgumentException - if the text cannot be parsed
    +
    +
    +
    + +

    +getHour

    +
    +public int getHour()
    +
    +
    Gets the hour component. +

    +

    + +
    Returns:
    the hour component
    +
    +
    +
    + +

    +getMinute

    +
    +public int getMinute()
    +
    +
    Gets the minute component. +

    +

    + +
    Returns:
    the minute component
    +
    +
    +
    + +

    +toString

    +
    +public String toString()
    +
    +
    Converts this offset to its ISO string representation using "basic" + format. +

    +

    +
    Overrides:
    toString in class Object
    +
    +
    + +
    Returns:
    the ISO string representation (e.g. "-0500")
    +
    +
    +
    + +

    +toString

    +
    +public String toString(boolean extended)
    +
    +
    Converts this offset to its ISO string representation. +

    +

    +
    Parameters:
    extended - true to use extended format (e.g. "-05:00"), false to use + basic format (e.g. "-0500") +
    Returns:
    the ISO string representation
    +
    +
    +
    + +

    +hashCode

    +
    +public int hashCode()
    +
    +
    +
    Overrides:
    hashCode in class Object
    +
    +
    +
    +
    +
    +
    + +

    +equals

    +
    +public boolean equals(Object obj)
    +
    +
    +
    Overrides:
    equals in class Object
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/XmlUtils.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/XmlUtils.html new file mode 100644 index 000000000..1d056d345 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/XmlUtils.html @@ -0,0 +1,488 @@ + + + + + + + +XmlUtils (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +biweekly.util +
    +Class XmlUtils

    +
    +java.lang.Object
    +  extended by biweekly.util.XmlUtils
    +
    +
    +
    +
    public class XmlUtils
    extends Object
    + + +

    +Generic XML utility methods. +

    + +

    +

    +
    Author:
    +
    Michael Angstadt
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    +static DocumentcreateDocument() + +
    +          Creates a new XML document.
    +static ElementgetFirstChildElement(Element parent) + +
    +          Gets the first child element of an element.
    +static ElementgetRootElement(Document parent) + +
    +          Gets the root element of a document.
    +static DocumenttoDocument(InputStream in) + +
    +          Parses an XML document from an input stream.
    +static DocumenttoDocument(Reader reader) + +
    +           + Parses an XML document from a reader.
    +static DocumenttoDocument(String xml) + +
    +          Parses an XML string into a DOM.
    +static List<Element>toElementList(NodeList nodeList) + +
    +          Gets all the elements out of a NodeList.
    +static StringtoString(Node node) + +
    +          Converts an XML node to a string.
    +static StringtoString(Node node, + Map<String,String> outputProperties) + +
    +          Converts an XML node to a string.
    +static voidtoWriter(Node node, + Writer writer) + +
    +          Writes an XML node to a writer.
    +static voidtoWriter(Node node, + Writer writer, + Map<String,String> outputProperties) + +
    +          Writes an XML node to a writer.
    + + + + + + + +
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +createDocument

    +
    +public static Document createDocument()
    +
    +
    Creates a new XML document. +

    +

    + +
    Returns:
    the XML document
    +
    +
    +
    + +

    +toDocument

    +
    +public static Document toDocument(String xml)
    +                           throws SAXException
    +
    +
    Parses an XML string into a DOM. +

    +

    +
    Parameters:
    xml - the XML string +
    Returns:
    the parsed DOM +
    Throws: +
    SAXException - if the string is not valid XML
    +
    +
    +
    + +

    +toDocument

    +
    +public static Document toDocument(InputStream in)
    +                           throws SAXException,
    +                                  IOException
    +
    +
    Parses an XML document from an input stream. +

    +

    +
    Parameters:
    in - the input stream +
    Returns:
    the parsed DOM +
    Throws: +
    SAXException - if the XML is not valid +
    IOException - if there is a problem reading from the input stream
    +
    +
    +
    + +

    +toDocument

    +
    +public static Document toDocument(Reader reader)
    +                           throws SAXException,
    +                                  IOException
    +
    +

    + Parses an XML document from a reader. +

    +

    + Note that use of this method is discouraged. It ignores the character + encoding that is defined within the XML document itself, and should only + be used if the encoding is undefined or if the encoding needs to be + ignored for whatever reason. The toDocument(InputStream) method + should be used instead, since it takes the XML document's character + encoding into account when parsing. +

    +

    +

    +
    Parameters:
    reader - the reader +
    Returns:
    the parsed DOM +
    Throws: +
    SAXException - if the XML is not valid +
    IOException - if there is a problem reading from the reader
    See Also:
    http://stackoverflow.com/q/3482494/13379
    +
    +
    +
    + +

    +toString

    +
    +public static String toString(Node node)
    +
    +
    Converts an XML node to a string. +

    +

    +
    Parameters:
    node - the XML node +
    Returns:
    the string
    +
    +
    +
    + +

    +toString

    +
    +public static String toString(Node node,
    +                              Map<String,String> outputProperties)
    +
    +
    Converts an XML node to a string. +

    +

    +
    Parameters:
    node - the XML node
    outputProperties - the output properties +
    Returns:
    the string
    +
    +
    +
    + +

    +toWriter

    +
    +public static void toWriter(Node node,
    +                            Writer writer)
    +                     throws TransformerException
    +
    +
    Writes an XML node to a writer. +

    +

    +
    Parameters:
    node - the XML node
    writer - the writer +
    Throws: +
    TransformerException - if there's a problem writing to the writer
    +
    +
    +
    + +

    +toWriter

    +
    +public static void toWriter(Node node,
    +                            Writer writer,
    +                            Map<String,String> outputProperties)
    +                     throws TransformerException
    +
    +
    Writes an XML node to a writer. +

    +

    +
    Parameters:
    node - the XML node
    writer - the writer
    outputProperties - the output properties +
    Throws: +
    TransformerException - if there's a problem writing to the writer
    +
    +
    +
    + +

    +toElementList

    +
    +public static List<Element> toElementList(NodeList nodeList)
    +
    +
    Gets all the elements out of a NodeList. +

    +

    +
    Parameters:
    nodeList - the node list +
    Returns:
    the elements
    +
    +
    +
    + +

    +getRootElement

    +
    +public static Element getRootElement(Document parent)
    +
    +
    Gets the root element of a document. +

    +

    +
    Parameters:
    parent - the document +
    Returns:
    the root element
    +
    +
    +
    + +

    +getFirstChildElement

    +
    +public static Element getFirstChildElement(Element parent)
    +
    +
    Gets the first child element of an element. +

    +

    +
    Parameters:
    parent - the parent element +
    Returns:
    the first child element or null if there are no child elements
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Base64.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Base64.html new file mode 100644 index 000000000..816cf7c48 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Base64.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.util.Base64 (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.Base64

    +
    +No usage of biweekly.util.Base64 +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/CaseClasses.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/CaseClasses.html new file mode 100644 index 000000000..2837e31d6 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/CaseClasses.html @@ -0,0 +1,182 @@ + + + + + + + +Uses of Class biweekly.util.CaseClasses (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.CaseClasses

    +
    + + + + + + + + + +
    +Packages that use CaseClasses
    biweekly.parameter  
    +  +

    + + + + + +
    +Uses of CaseClasses in biweekly.parameter
    +  +

    + + + + + + + + + +
    Subclasses of CaseClasses in biweekly.parameter
    + classICalParameterCaseClasses<T extends EnumParameterValue> + +
    +          Manages the list of pre-defined values for a parameter (such as VALUE or + ENCODING).
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/DateTimeComponents.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/DateTimeComponents.html new file mode 100644 index 000000000..37c520e72 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/DateTimeComponents.html @@ -0,0 +1,312 @@ + + + + + + + +Uses of Class biweekly.util.DateTimeComponents (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.DateTimeComponents

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use DateTimeComponents
    biweekly.component  
    biweekly.property  
    biweekly.util  
    +  +

    + + + + + +
    +Uses of DateTimeComponents in biweekly.component
    +  +

    + + + + + + + + + +
    Methods in biweekly.component with parameters of type DateTimeComponents
    + DateStartObservance.setDateStart(DateTimeComponents components) + +
    +          Sets the date that the timezone observance starts.
    +  +

    + + + + + +
    +Uses of DateTimeComponents in biweekly.property
    +  +

    + + + + + + + + + +
    Fields in biweekly.property declared as DateTimeComponents
    +protected  DateTimeComponentsDateOrDateTimeProperty.rawComponents + +
    +           
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return DateTimeComponents
    + DateTimeComponentsDateOrDateTimeProperty.getRawComponents() + +
    +          Gets the raw components of the date-time value.
    +  +

    + + + + + + + + + +
    Methods in biweekly.property with parameters of type DateTimeComponents
    + voidDateOrDateTimeProperty.setRawComponents(DateTimeComponents rawComponents) + +
    +          Sets the raw components of the date-time value.
    +  +

    + + + + + + + + + + + +
    Constructors in biweekly.property with parameters of type DateTimeComponents
    DateOrDateTimeProperty(DateTimeComponents rawComponents) + +
    +          Creates a new property.
    DateStart(DateTimeComponents components) + +
    +          Creates a start date property.
    +  +

    + + + + + +
    +Uses of DateTimeComponents in biweekly.util
    +  +

    + + + + + + + + + +
    Methods in biweekly.util that return DateTimeComponents
    +static DateTimeComponentsDateTimeComponents.parse(String dateString) + +
    +          Parses the components out of a date-time string.
    +  +

    + + + + + + + + +
    Constructors in biweekly.util with parameters of type DateTimeComponents
    DateTimeComponents(DateTimeComponents original, + Integer year, + Integer month, + Integer date, + Integer hour, + Integer minute, + Integer second, + Boolean utc) + +
    +          Copies an existing DateTimeComponents object.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Duration.Builder.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Duration.Builder.html new file mode 100644 index 000000000..6560f7676 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Duration.Builder.html @@ -0,0 +1,229 @@ + + + + + + + +Uses of Class biweekly.util.Duration.Builder (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.Duration.Builder

    +
    + + + + + + + + + +
    +Packages that use Duration.Builder
    biweekly.util  
    +  +

    + + + + + +
    +Uses of Duration.Builder in biweekly.util
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.util that return Duration.Builder
    +static Duration.BuilderDuration.builder() + +
    +          Creates a builder object for constructing new instances of this class.
    + Duration.BuilderDuration.Builder.days(Integer days) + +
    +          Sets the number of days
    + Duration.BuilderDuration.Builder.hours(Integer hours) + +
    +          Sets the number of hours
    + Duration.BuilderDuration.Builder.minutes(Integer minutes) + +
    +          Sets the number of minutes
    + Duration.BuilderDuration.Builder.prior(boolean prior) + +
    +          Sets whether the duration should be negative.
    + Duration.BuilderDuration.Builder.seconds(Integer seconds) + +
    +          Sets the number of seconds.
    + Duration.BuilderDuration.Builder.weeks(Integer weeks) + +
    +          Sets the number of weeks.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Duration.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Duration.html new file mode 100644 index 000000000..9dfaad0e7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Duration.html @@ -0,0 +1,376 @@ + + + + + + + +Uses of Class biweekly.util.Duration (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.Duration

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use Duration
    biweekly.component  
    biweekly.property  
    biweekly.util  
    +  +

    + + + + + +
    +Uses of Duration in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Duration
    + FreeBusyVFreeBusy.addFreeBusy(FreeBusyType type, + Date start, + Duration duration) + +
    +          Adds a single time period for which the person is free or busy (for + example, "free" for 2 hours after 1pm).
    + DurationPropertyVTodo.setDuration(Duration duration) + +
    +          Sets the duration of the to-do.
    + DurationPropertyVEvent.setDuration(Duration duration) + +
    +          Sets the duration of the event.
    + DurationPropertyVAlarm.setDuration(Duration duration) + +
    +          Sets the length of the pause between alarm repetitions.
    + voidVAlarm.setRepeat(int count, + Duration pauseDuration) + +
    +          Sets the repetition information for the alarm.
    +  +

    + + + + + +
    +Uses of Duration in biweekly.property
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return Duration
    + DurationTrigger.getDuration() + +
    +          Gets the relative time at which the alarm will trigger.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.property with parameters of type Duration
    + voidFreeBusy.addValue(Date start, + Duration duration) + +
    +          Adds a time period.
    + voidTrigger.setDuration(Duration duration, + Related related) + +
    +          Sets a relative time at which the alarm will trigger.
    +  +

    + + + + + + + + + + + +
    Constructors in biweekly.property with parameters of type Duration
    DurationProperty(Duration duration) + +
    +          Creates a duration property.
    Trigger(Duration duration, + Related related) + +
    +          Creates a trigger property.
    +  +

    + + + + + +
    +Uses of Duration in biweekly.util
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.util that return Duration
    + DurationDuration.Builder.build() + +
    +          Builds the final Duration object.
    +static DurationDuration.diff(Date start, + Date end) + +
    +          Builds a duration based on the difference between two dates.
    +static DurationDuration.fromMillis(long milliseconds) + +
    +          Builds a duration from a number of milliseconds.
    + DurationPeriod.getDuration() + +
    +          Gets the length of time after the start date.
    +static DurationDuration.parse(String value) + +
    +          Parses a duration string.
    +  +

    + + + + + + + + + + + +
    Constructors in biweekly.util with parameters of type Duration
    Duration.Builder(Duration source) + +
    +          Creates a new Duration builder.
    Period(Date startDate, + Duration duration) + +
    +          Creates a new time period.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ICalDateFormatter.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ICalDateFormatter.html new file mode 100644 index 000000000..3d49e6c32 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ICalDateFormatter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.util.ICalDateFormatter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.ICalDateFormatter

    +
    +No usage of biweekly.util.ICalDateFormatter +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ICalFloatFormatter.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ICalFloatFormatter.html new file mode 100644 index 000000000..65e0437a2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ICalFloatFormatter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.util.ICalFloatFormatter (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.ICalFloatFormatter

    +
    +No usage of biweekly.util.ICalFloatFormatter +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/IOUtils.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/IOUtils.html new file mode 100644 index 000000000..6eb5a3db9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/IOUtils.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.util.IOUtils (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.IOUtils

    +
    +No usage of biweekly.util.IOUtils +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ISOFormat.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ISOFormat.html new file mode 100644 index 000000000..24fcebbcf --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ISOFormat.html @@ -0,0 +1,217 @@ + + + + + + + +Uses of Class biweekly.util.ISOFormat (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.ISOFormat

    +
    + + + + + + + + + +
    +Packages that use ISOFormat
    biweekly.util  
    +  +

    + + + + + +
    +Uses of ISOFormat in biweekly.util
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.util that return ISOFormat
    +static ISOFormatISOFormat.valueOf(String name) + +
    +          Returns the enum constant of this type with the specified name.
    +static ISOFormat[]ISOFormat.values() + +
    +          Returns an array containing the constants of this enum type, in +the order they are declared.
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.util with parameters of type ISOFormat
    +static StringICalDateFormatter.format(Date date, + ISOFormat format) + +
    +          Formats a date for inclusion in an iCalendar object.
    +static StringICalDateFormatter.format(Date date, + ISOFormat format, + TimeZone timeZone) + +
    +          Formats a date for inclusion in an iCalendar object.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ListMultimap.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ListMultimap.html new file mode 100644 index 000000000..1a734b1c0 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/ListMultimap.html @@ -0,0 +1,343 @@ + + + + + + + +Uses of Class biweekly.util.ListMultimap (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.ListMultimap

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use ListMultimap
    biweekly.component  
    biweekly.io.json  
    biweekly.parameter  
    biweekly.property.marshaller  
    biweekly.util  
    +  +

    + + + + + +
    +Uses of ListMultimap in biweekly.component
    +  +

    + + + + + + + + + + + + + +
    Fields in biweekly.component declared as ListMultimap
    +protected  ListMultimap<Class<? extends ICalComponent>,ICalComponent>ICalComponent.components + +
    +           
    +protected  ListMultimap<Class<? extends ICalProperty>,ICalProperty>ICalComponent.properties + +
    +           
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.component that return ListMultimap
    + ListMultimap<Class<? extends ICalComponent>,ICalComponent>ICalComponent.getComponents() + +
    +          Gets all the sub-components associated with this component.
    + ListMultimap<Class<? extends ICalProperty>,ICalProperty>ICalComponent.getProperties() + +
    +          Gets all the properties associated with this component.
    +  +

    + + + + + +
    +Uses of ListMultimap in biweekly.io.json
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.json that return ListMultimap
    + ListMultimap<String,String>JCalValue.asObject() + +
    +          Parses this jCal value as an object property value.
    +  +

    + + + + + + + + + +
    Methods in biweekly.io.json with parameters of type ListMultimap
    +static JCalValueJCalValue.object(ListMultimap<String,Object> value) + +
    +          Creates an object value.
    +  +

    + + + + + +
    +Uses of ListMultimap in biweekly.parameter
    +  +

    + + + + + + + + + +
    Subclasses of ListMultimap in biweekly.parameter
    + classICalParameters + +
    +          Contains the list of parameters that belong to a property.
    +  +

    + + + + + +
    +Uses of ListMultimap in biweekly.property.marshaller
    +  +

    + + + + + + + + + +
    Methods in biweekly.property.marshaller that return ListMultimap
    +protected static ListMultimap<String,String>ICalPropertyMarshaller.object(String value) + +
    +          Parses an object property value.
    +  +

    + + + + + +
    +Uses of ListMultimap in biweekly.util
    +  +

    + + + + + + + + +
    Constructors in biweekly.util with parameters of type ListMultimap
    ListMultimap(ListMultimap<K,V> orig) + +
    +          Creates a copy of an existing multimap.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Period.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Period.html new file mode 100644 index 000000000..d7fca2525 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Period.html @@ -0,0 +1,230 @@ + + + + + + + +Uses of Class biweekly.util.Period (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.Period

    +
    + + + + + + + + + + + + + +
    +Packages that use Period
    biweekly.property  
    biweekly.util  
    +  +

    + + + + + +
    +Uses of Period in biweekly.property
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.property that return types with arguments of type Period
    + List<Period>RecurrenceDates.getPeriods() + +
    +          Gets the time periods.
    + List<Period>FreeBusy.getValues() + +
    +          Gets all time periods.
    +  +

    + + + + + + + + +
    Constructor parameters in biweekly.property with type arguments of type Period
    RecurrenceDates(List<Period> periods) + +
    +          Creates a recurrence dates property.
    +  +

    + + + + + +
    +Uses of Period in biweekly.util
    +  +

    + + + + + + + + +
    Constructors in biweekly.util with parameters of type Period
    Period(Period period) + +
    +          Copies an existing time period.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.Builder.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.Builder.html new file mode 100644 index 000000000..751f558f3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.Builder.html @@ -0,0 +1,312 @@ + + + + + + + +Uses of Class biweekly.util.Recurrence.Builder (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.Recurrence.Builder

    +
    + + + + + + + + + +
    +Packages that use Recurrence.Builder
    biweekly.util  
    +  +

    + + + + + +
    +Uses of Recurrence.Builder in biweekly.util
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.util that return Recurrence.Builder
    + Recurrence.BuilderRecurrence.Builder.byDay(Integer prefix, + Recurrence.DayOfWeek byDay) + +
    +          Adds a BYDAY rule part.
    + Recurrence.BuilderRecurrence.Builder.byDay(Recurrence.DayOfWeek byDay) + +
    +          Adds a BYDAY rule part.
    + Recurrence.BuilderRecurrence.Builder.byHour(Integer byHour) + +
    +          Adds a BYHOUR rule part.
    + Recurrence.BuilderRecurrence.Builder.byMinute(Integer byMinute) + +
    +          Adds a BYMINUTE rule part.
    + Recurrence.BuilderRecurrence.Builder.byMonth(Integer byMonth) + +
    +          Adds a BYMONTH rule part.
    + Recurrence.BuilderRecurrence.Builder.byMonthDay(Integer byMonthDay) + +
    +          Adds a BYMONTHDAY rule part.
    + Recurrence.BuilderRecurrence.Builder.bySecond(Integer bySecond) + +
    +          Adds a BYSECOND rule part.
    + Recurrence.BuilderRecurrence.Builder.bySetPos(Integer bySetPos) + +
    +          Adds a BYSETPOS rule part.
    + Recurrence.BuilderRecurrence.Builder.byWeekNo(Integer byWeekNo) + +
    +          Adds a BYWEEKNO rule part.
    + Recurrence.BuilderRecurrence.Builder.byYearDay(Integer byYearDay) + +
    +          Adds a BYYEARDAY rule part.
    + Recurrence.BuilderRecurrence.Builder.count(Integer count) + +
    +          Gets the number of times the rule will be repeated.
    + Recurrence.BuilderRecurrence.Builder.frequency(Recurrence.Frequency frequency) + +
    +          Sets the frequency
    + Recurrence.BuilderRecurrence.Builder.interval(Integer interval) + +
    +          Gets how often the rule repeats, in relation to the frequency.
    + Recurrence.BuilderRecurrence.Builder.until(Date until) + +
    +          Sets the date that the recurrence stops.
    + Recurrence.BuilderRecurrence.Builder.until(Date until, + boolean hasTime) + +
    +          Sets the date that the recurrence stops.
    + Recurrence.BuilderRecurrence.Builder.workweekStarts(Recurrence.DayOfWeek workweekStarts) + +
    +          Sets the day that the work week starts.
    + Recurrence.BuilderRecurrence.Builder.xrule(String name, + String value) + +
    +          Adds a non-standard rule part.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.DayOfWeek.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.DayOfWeek.html new file mode 100644 index 000000000..46cee4e59 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.DayOfWeek.html @@ -0,0 +1,255 @@ + + + + + + + +Uses of Class biweekly.util.Recurrence.DayOfWeek (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.Recurrence.DayOfWeek

    +
    + + + + + + + + + +
    +Packages that use Recurrence.DayOfWeek
    biweekly.util  
    +  +

    + + + + + +
    +Uses of Recurrence.DayOfWeek in biweekly.util
    +  +

    + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.util that return Recurrence.DayOfWeek
    + Recurrence.DayOfWeekRecurrence.getWorkweekStarts() + +
    +          Gets the day that the work week starts.
    +static Recurrence.DayOfWeekRecurrence.DayOfWeek.valueOf(String name) + +
    +          Returns the enum constant of this type with the specified name.
    +static Recurrence.DayOfWeekRecurrence.DayOfWeek.valueOfAbbr(String abbr) + +
    +          Gets a day by its abbreviation.
    +static Recurrence.DayOfWeek[]Recurrence.DayOfWeek.values() + +
    +          Returns an array containing the constants of this enum type, in +the order they are declared.
    +  +

    + + + + + + + + + +
    Methods in biweekly.util that return types with arguments of type Recurrence.DayOfWeek
    + List<Recurrence.DayOfWeek>Recurrence.getByDay() + +
    +          Gets the day components of the BYDAY rule part.
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.util with parameters of type Recurrence.DayOfWeek
    + Recurrence.BuilderRecurrence.Builder.byDay(Integer prefix, + Recurrence.DayOfWeek byDay) + +
    +          Adds a BYDAY rule part.
    + Recurrence.BuilderRecurrence.Builder.byDay(Recurrence.DayOfWeek byDay) + +
    +          Adds a BYDAY rule part.
    + Recurrence.BuilderRecurrence.Builder.workweekStarts(Recurrence.DayOfWeek workweekStarts) + +
    +          Sets the day that the work week starts.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.Frequency.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.Frequency.html new file mode 100644 index 000000000..554317685 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.Frequency.html @@ -0,0 +1,228 @@ + + + + + + + +Uses of Class biweekly.util.Recurrence.Frequency (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.Recurrence.Frequency

    +
    + + + + + + + + + +
    +Packages that use Recurrence.Frequency
    biweekly.util  
    +  +

    + + + + + +
    +Uses of Recurrence.Frequency in biweekly.util
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.util that return Recurrence.Frequency
    + Recurrence.FrequencyRecurrence.getFrequency() + +
    +          Gets the frequency.
    +static Recurrence.FrequencyRecurrence.Frequency.valueOf(String name) + +
    +          Returns the enum constant of this type with the specified name.
    +static Recurrence.Frequency[]Recurrence.Frequency.values() + +
    +          Returns an array containing the constants of this enum type, in +the order they are declared.
    +  +

    + + + + + + + + + +
    Methods in biweekly.util with parameters of type Recurrence.Frequency
    + Recurrence.BuilderRecurrence.Builder.frequency(Recurrence.Frequency frequency) + +
    +          Sets the frequency
    +  +

    + + + + + + + + +
    Constructors in biweekly.util with parameters of type Recurrence.Frequency
    Recurrence.Builder(Recurrence.Frequency frequency) + +
    +          Constructs a new builder.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.html new file mode 100644 index 000000000..9c1e7b195 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/Recurrence.html @@ -0,0 +1,359 @@ + + + + + + + +Uses of Class biweekly.util.Recurrence (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.Recurrence

    +
    + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use Recurrence
    biweekly.component  
    biweekly.property  
    biweekly.property.marshaller  
    biweekly.util  
    +  +

    + + + + + +
    +Uses of Recurrence in biweekly.component
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Methods in biweekly.component with parameters of type Recurrence
    + ExceptionRuleVTodo.addExceptionRule(Recurrence recur) + +
    +           + Adds an exception for the RecurrenceRule property.
    + ExceptionRuleVJournal.addExceptionRule(Recurrence recur) + +
    +           + Adds an exception for the RecurrenceRule property.
    + ExceptionRuleVEvent.addExceptionRule(Recurrence recur) + +
    +           + Adds an exception for the RecurrenceRule property.
    + RecurrenceRuleVTodo.setRecurrenceRule(Recurrence recur) + +
    +          Sets how often the to-do repeats.
    + RecurrenceRuleVJournal.setRecurrenceRule(Recurrence recur) + +
    +          Sets how often the journal entry repeats.
    + RecurrenceRuleVEvent.setRecurrenceRule(Recurrence recur) + +
    +          Sets how often the event repeats.
    + RecurrenceRuleObservance.setRecurrenceRule(Recurrence recur) + +
    +          Sets how often the timezone observance repeats.
    +  +

    + + + + + +
    +Uses of Recurrence in biweekly.property
    +  +

    + + + + + + + + + + + + + + +
    Constructors in biweekly.property with parameters of type Recurrence
    ExceptionRule(Recurrence recur) + +
    +          Creates a new exception rule property.
    RecurrenceProperty(Recurrence recur) + +
    +          Creates a new recurrence property.
    RecurrenceRule(Recurrence recur) + +
    +          Creates a new recurrence rule property.
    +  +

    + + + + + +
    +Uses of Recurrence in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type Recurrence
    +protected  RecurrenceRuleRecurrenceRuleMarshaller.newInstance(Recurrence recur) + +
    +           
    +protected abstract  TRecurrencePropertyMarshaller.newInstance(Recurrence recur) + +
    +          Creates a new instance of the recurrence property.
    +protected  ExceptionRuleExceptionRuleMarshaller.newInstance(Recurrence recur) + +
    +           
    +  +

    + + + + + +
    +Uses of Recurrence in biweekly.util
    +  +

    + + + + + + + + + +
    Methods in biweekly.util that return Recurrence
    + RecurrenceRecurrence.Builder.build() + +
    +          Builds the final Recurrence object.
    +  +

    + + + + + + + + +
    Constructors in biweekly.util with parameters of type Recurrence
    Recurrence.Builder(Recurrence recur) + +
    +          Constructs a new builder
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/StringUtils.JoinCallback.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/StringUtils.JoinCallback.html new file mode 100644 index 000000000..a6631278b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/StringUtils.JoinCallback.html @@ -0,0 +1,208 @@ + + + + + + + +Uses of Interface biweekly.util.StringUtils.JoinCallback (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Interface
    biweekly.util.StringUtils.JoinCallback

    +
    + + + + + + + + + +
    +Packages that use StringUtils.JoinCallback
    biweekly.util  
    +  +

    + + + + + +
    +Uses of StringUtils.JoinCallback in biweekly.util
    +  +

    + + + + + + + + + + + + + +
    Methods in biweekly.util with parameters of type StringUtils.JoinCallback
    +static + + + + +
    +<T> void
    +
    StringUtils.join(Collection<T> collection, + String delimiter, + StringBuilder sb, + StringUtils.JoinCallback<T> join) + +
    +          Joins a collection of values into a delimited list.
    +static + + + + +
    +<T> String
    +
    StringUtils.join(Collection<T> collection, + String delimiter, + StringUtils.JoinCallback<T> join) + +
    +          Joins a collection of values into a delimited list.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/StringUtils.JoinMapCallback.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/StringUtils.JoinMapCallback.html new file mode 100644 index 000000000..8e0a4b2b2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/StringUtils.JoinMapCallback.html @@ -0,0 +1,190 @@ + + + + + + + +Uses of Interface biweekly.util.StringUtils.JoinMapCallback (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Interface
    biweekly.util.StringUtils.JoinMapCallback

    +
    + + + + + + + + + +
    +Packages that use StringUtils.JoinMapCallback
    biweekly.util  
    +  +

    + + + + + +
    +Uses of StringUtils.JoinMapCallback in biweekly.util
    +  +

    + + + + + + + + + +
    Methods in biweekly.util with parameters of type StringUtils.JoinMapCallback
    +static + + + + +
    +<K,V> String
    +
    StringUtils.join(Map<K,V> map, + String delimiter, + StringUtils.JoinMapCallback<K,V> join) + +
    +          Joins a map into a delimited list.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/StringUtils.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/StringUtils.html new file mode 100644 index 000000000..61846872e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/StringUtils.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.util.StringUtils (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.StringUtils

    +
    +No usage of biweekly.util.StringUtils +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/UtcOffset.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/UtcOffset.html new file mode 100644 index 000000000..0c8319f13 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/UtcOffset.html @@ -0,0 +1,313 @@ + + + + + + + +Uses of Class biweekly.util.UtcOffset (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.UtcOffset

    +
    + + + + + + + + + + + + + + + + + +
    +Packages that use UtcOffset
    biweekly.property  
    biweekly.property.marshaller  
    biweekly.util  
    +  +

    + + + + + +
    +Uses of UtcOffset in biweekly.property
    +  +

    + + + + + + + + + +
    Fields in biweekly.property declared as UtcOffset
    +protected  UtcOffsetUtcOffsetProperty.offset + +
    +           
    +  +

    + + + + + + + + + +
    Methods in biweekly.property that return UtcOffset
    + UtcOffsetUtcOffsetProperty.getOffset() + +
    +           
    +  +

    + + + + + + + + + +
    Methods in biweekly.property with parameters of type UtcOffset
    + voidUtcOffsetProperty.setOffset(UtcOffset offset) + +
    +           
    +  +

    + + + + + + + + + + + + + + +
    Constructors in biweekly.property with parameters of type UtcOffset
    TimezoneOffsetFrom(UtcOffset offset) + +
    +          Creates a new timezone offset from property.
    TimezoneOffsetTo(UtcOffset offset) + +
    +          Creates a new timezone offset to property.
    UtcOffsetProperty(UtcOffset offset) + +
    +           
    +  +

    + + + + + +
    +Uses of UtcOffset in biweekly.property.marshaller
    +  +

    + + + + + + + + + + + + + + + + + +
    Methods in biweekly.property.marshaller with parameters of type UtcOffset
    +protected abstract  TUtcOffsetPropertyMarshaller.newInstance(UtcOffset offset) + +
    +           
    +protected  TimezoneOffsetToTimezoneOffsetToMarshaller.newInstance(UtcOffset offset) + +
    +           
    +protected  TimezoneOffsetFromTimezoneOffsetFromMarshaller.newInstance(UtcOffset offset) + +
    +           
    +  +

    + + + + + +
    +Uses of UtcOffset in biweekly.util
    +  +

    + + + + + + + + + +
    Methods in biweekly.util that return UtcOffset
    +static UtcOffsetUtcOffset.parse(String text) + +
    +          Parses a UTC offset from a string.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/XmlUtils.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/XmlUtils.html new file mode 100644 index 000000000..f29683bbf --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/class-use/XmlUtils.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class biweekly.util.XmlUtils (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Class
    biweekly.util.XmlUtils

    +
    +No usage of biweekly.util.XmlUtils +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/doc-files/shBrushJava.js b/libs/biweekly-0.3.1-javadoc/biweekly/util/doc-files/shBrushJava.js new file mode 100644 index 000000000..d692fd638 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/doc-files/shBrushJava.js @@ -0,0 +1,57 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'abstract assert boolean break byte case catch char class const ' + + 'continue default do double else enum extends ' + + 'false final finally float for goto if implements import ' + + 'instanceof int interface long native new null ' + + 'package private protected public return ' + + 'short static strictfp super switch synchronized this throw throws true ' + + 'transient try void volatile while'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: /\/\*([^\*][\s\S]*)?\*\//gm, css: 'comments' }, // multiline comments + { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, css: 'preprocessor' }, // documentation comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers + { regex: /(?!\@interface\b)\@[\$\w]+\b/g, css: 'color1' }, // annotation @anno + { regex: /\@interface\b/g, css: 'color2' }, // @interface keyword + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // java keyword + ]; + + this.forHtmlScript({ + left : /(<|<)%[@!=]?/g, + right : /%(>|>)/g + }); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['java']; + + SyntaxHighlighter.brushes.Java = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/doc-files/shCore.js b/libs/biweekly-0.3.1-javadoc/biweekly/util/doc-files/shCore.js new file mode 100644 index 000000000..b47b64547 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/doc-files/shCore.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a-1},3d:6(g){e+=g}};c1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;be.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;dd.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a\'+c+""});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.Pb.P)H 1;Y I(a.Lb.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'\'+c+""+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v<3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;">1v3v 3.0.76 (72 73 3x)1Z://3u.2w/1v70 17 6U 71.6T 6X-3x 6Y 6D.6t 61 60 J 1k, 5Z 5R 5V <2R/>5U 5T 5S!\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'\',d=e.16.2x,h=d.2X,g=0;g";H c},2o:6(a,b,c){H\'<2W>\'+c+""},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;md)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P\'+c+""},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i\'+j+"":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"":"")+\'<2d 1g="17">\'+b+""},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{})) diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/package-frame.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/package-frame.html new file mode 100644 index 000000000..d03944baf --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/package-frame.html @@ -0,0 +1,89 @@ + + + + + + + +biweekly.util (biweekly 0.3.1 API) + + + + + + + + + + + +biweekly.util + + + + +
    +Interfaces  + +
    +StringUtils.JoinCallback +
    +StringUtils.JoinMapCallback
    + + + + + + +
    +Classes  + +
    +Base64 +
    +CaseClasses +
    +DateTimeComponents +
    +Duration +
    +Duration.Builder +
    +ICalDateFormatter +
    +ICalFloatFormatter +
    +IOUtils +
    +ListMultimap +
    +Period +
    +Recurrence +
    +Recurrence.Builder +
    +StringUtils +
    +UtcOffset +
    +XmlUtils
    + + + + + + +
    +Enums  + +
    +ISOFormat +
    +Recurrence.DayOfWeek +
    +Recurrence.Frequency
    + + + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/package-summary.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/package-summary.html new file mode 100644 index 000000000..2cd3ea677 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/package-summary.html @@ -0,0 +1,261 @@ + + + + + + + +biweekly.util (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +

    +Package biweekly.util +

    + + + + + + + + + + + + + +
    +Interface Summary
    StringUtils.JoinCallback<T>Callback interface used with the + StringUtils.join(Collection, String, JoinCallback) method.
    StringUtils.JoinMapCallback<K,V>Callback interface used with the + StringUtils.join(Map, String, JoinMapCallback) method.
    +  + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class Summary
    Base64Encodes and decodes data into base64.
    CaseClasses<T,V>Manages objects that are like enums in that they are constant, but unlike + enums in that new instances can be created during runtime.
    DateTimeComponents + Contains the raw components of a date-time value.
    Duration + Represents a period of time (for example, "2 hours and 30 minutes").
    Duration.BuilderBuilds Duration objects.
    ICalDateFormatterHelper class that formats and parses iCalendar dates.
    ICalFloatFormatterFormats floating-point values for iCalendar objects.
    IOUtilsI/O helper classes.
    ListMultimap<K,V>A multimap that uses List objects to store its values.
    PeriodA period of time.
    Recurrence + Represents a recurrence rule value.
    Recurrence.BuilderConstructs Recurrence objects.
    StringUtilsContains miscellaneous string utilities.
    UtcOffsetRepresents a UTC offset.
    XmlUtilsGeneric XML utility methods.
    +  + +

    + + + + + + + + + + + + + + + + + +
    +Enum Summary
    ISOFormatRepresents the various ISO8601 date-time formats that iCalendar dates can be + represented as.
    Recurrence.DayOfWeekRepresents each of the seven days of the week.
    Recurrence.FrequencyRepresents the frequency at which a recurrence rule repeats itself.
    +  + +

    +

    +
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/package-tree.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/package-tree.html new file mode 100644 index 000000000..58e6beee9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/package-tree.html @@ -0,0 +1,177 @@ + + + + + + + +biweekly.util Class Hierarchy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Hierarchy For Package biweekly.util +

    +
    +
    +
    Package Hierarchies:
    All Packages
    +
    +

    +Class Hierarchy +

    + +

    +Interface Hierarchy +

    + +

    +Enum Hierarchy +

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/biweekly/util/package-use.html b/libs/biweekly-0.3.1-javadoc/biweekly/util/package-use.html new file mode 100644 index 000000000..88bbdb6d0 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/biweekly/util/package-use.html @@ -0,0 +1,412 @@ + + + + + + + +Uses of Package biweekly.util (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Uses of Package
    biweekly.util

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages that use biweekly.util
    biweekly.component  
    biweekly.io.json  
    biweekly.parameter  
    biweekly.property  
    biweekly.property.marshaller  
    biweekly.util  
    +  +

    + + + + + + + + + + + + + + + + + +
    +Classes in biweekly.util used by biweekly.component
    DateTimeComponents + +
    +           + Contains the raw components of a date-time value.
    Duration + +
    +           + Represents a period of time (for example, "2 hours and 30 minutes").
    ListMultimap + +
    +          A multimap that uses List objects to store its values.
    Recurrence + +
    +           + Represents a recurrence rule value.
    +  +

    + + + + + + + + +
    +Classes in biweekly.util used by biweekly.io.json
    ListMultimap + +
    +          A multimap that uses List objects to store its values.
    +  +

    + + + + + + + + + + + +
    +Classes in biweekly.util used by biweekly.parameter
    CaseClasses + +
    +          Manages objects that are like enums in that they are constant, but unlike + enums in that new instances can be created during runtime.
    ListMultimap + +
    +          A multimap that uses List objects to store its values.
    +  +

    + + + + + + + + + + + + + + + + + + + + +
    +Classes in biweekly.util used by biweekly.property
    DateTimeComponents + +
    +           + Contains the raw components of a date-time value.
    Duration + +
    +           + Represents a period of time (for example, "2 hours and 30 minutes").
    Period + +
    +          A period of time.
    Recurrence + +
    +           + Represents a recurrence rule value.
    UtcOffset + +
    +          Represents a UTC offset.
    +  +

    + + + + + + + + + + + + + + +
    +Classes in biweekly.util used by biweekly.property.marshaller
    ListMultimap + +
    +          A multimap that uses List objects to store its values.
    Recurrence + +
    +           + Represents a recurrence rule value.
    UtcOffset + +
    +          Represents a UTC offset.
    +  +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Classes in biweekly.util used by biweekly.util
    DateTimeComponents + +
    +           + Contains the raw components of a date-time value.
    Duration + +
    +           + Represents a period of time (for example, "2 hours and 30 minutes").
    Duration.Builder + +
    +          Builds Duration objects.
    ISOFormat + +
    +          Represents the various ISO8601 date-time formats that iCalendar dates can be + represented as.
    ListMultimap + +
    +          A multimap that uses List objects to store its values.
    Period + +
    +          A period of time.
    Recurrence + +
    +           + Represents a recurrence rule value.
    Recurrence.Builder + +
    +          Constructs Recurrence objects.
    Recurrence.DayOfWeek + +
    +          Represents each of the seven days of the week.
    Recurrence.Frequency + +
    +          Represents the frequency at which a recurrence rule repeats itself.
    StringUtils.JoinCallback + +
    +          Callback interface used with the + StringUtils.join(Collection, String, JoinCallback) method.
    StringUtils.JoinMapCallback + +
    +          Callback interface used with the + StringUtils.join(Map, String, JoinMapCallback) method.
    UtcOffset + +
    +          Represents a UTC offset.
    +  +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/constant-values.html b/libs/biweekly-0.3.1-javadoc/constant-values.html new file mode 100644 index 000000000..068e1d373 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/constant-values.html @@ -0,0 +1,317 @@ + + + + + + + +Constant Field Values (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Constant Field Values

    +
    +
    +Contents + + + + + + +
    +biweekly.io.*
    + +

    + + + + + + + + + + + + +
    biweekly.io.xml.XCalNamespaceContext
    +public static final StringXCAL_NS"urn:ietf:params:xml:ns:icalendar-2.0"
    + +

    + +

    + + + + + +
    +biweekly.parameter.*
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    biweekly.parameter.ICalParameters
    +public static final StringALTREP"ALTREP"
    +public static final StringCN"CN"
    +public static final StringCUTYPE"CUTYPE"
    +public static final StringDELEGATED_FROM"DELEGATED-FROM"
    +public static final StringDELEGATED_TO"DELEGATED-TO"
    +public static final StringDIR"DIR"
    +public static final StringENCODING"ENCODING"
    +public static final StringFBTYPE"FBTYPE"
    +public static final StringFMTTYPE"FMTTYPE"
    +public static final StringLANGUAGE"LANGUAGE"
    +public static final StringMEMBER"MEMBER"
    +public static final StringPARTSTAT"PARTSTAT"
    +public static final StringRANGE"RANGE"
    +public static final StringRELATED"RELATED"
    +public static final StringRELTYPE"RELTYPE"
    +public static final StringROLE"ROLE"
    +public static final StringRSVP"RSVP"
    +public static final StringSENT_BY"SENT-BY"
    +public static final StringTZID"TZID"
    +public static final StringVALUE"VALUE"
    + +

    + +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/deprecated-list.html b/libs/biweekly-0.3.1-javadoc/deprecated-list.html new file mode 100644 index 000000000..62631fc81 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/deprecated-list.html @@ -0,0 +1,147 @@ + + + + + + + +Deprecated List (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Deprecated API

    +
    +
    +Contents
      +
    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/help-doc.html b/libs/biweekly-0.3.1-javadoc/help-doc.html new file mode 100644 index 000000000..e7f5c1d0b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/help-doc.html @@ -0,0 +1,224 @@ + + + + + + + +API Help (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +How This API Document Is Organized

    +
    +This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

    +Overview

    +
    + +

    +The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

    +

    +Package

    +
    + +

    +Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

      +
    • Interfaces (italic)
    • Classes
    • Enums
    • Exceptions
    • Errors
    • Annotation Types
    +
    +

    +Class/Interface

    +
    + +

    +Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

      +
    • Class inheritance diagram
    • Direct Subclasses
    • All Known Subinterfaces
    • All Known Implementing Classes
    • Class/interface declaration
    • Class/interface description +

      +

    • Nested Class Summary
    • Field Summary
    • Constructor Summary
    • Method Summary +

      +

    • Field Detail
    • Constructor Detail
    • Method Detail
    +Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
    + +

    +Annotation Type

    +
    + +

    +Each annotation type has its own separate page with the following sections:

      +
    • Annotation Type declaration
    • Annotation Type description
    • Required Element Summary
    • Optional Element Summary
    • Element Detail
    +
    + +

    +Enum

    +
    + +

    +Each enum has its own separate page with the following sections:

      +
    • Enum declaration
    • Enum description
    • Enum Constant Summary
    • Enum Constant Detail
    +
    +

    +Use

    +
    +Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
    +

    +Tree (Class Hierarchy)

    +
    +There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    +
    +

    +Deprecated API

    +
    +The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
    +

    +Index

    +
    +The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
    +

    +Prev/Next

    +These links take you to the next or previous class, interface, package, or related page.

    +Frames/No Frames

    +These links show and hide the HTML frames. All pages are available with or without frames. +

    +

    +Serialized Form

    +Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. +

    +

    +Constant Field Values

    +The Constant Field Values page lists the static final fields and their values. +

    + + +This help file applies to API documentation generated using the standard doclet. + +
    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/index-all.html b/libs/biweekly-0.3.1-javadoc/index-all.html new file mode 100644 index 000000000..cd761462f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/index-all.html @@ -0,0 +1,5696 @@ + + + + + + + +Index (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +A B C D E F G H I J K L M N O P Q R S T U V W X _
    +

    +A

    +
    +
    ACCEPTED - +Static variable in class biweekly.parameter.ParticipationStatus +
      +
    Action - Class in biweekly.property
    + Defines the type of action to invoke when an alarm is triggered.
    Action(String) - +Constructor for class biweekly.property.Action +
    Creates an action property. +
    ActionMarshaller - Class in biweekly.property.marshaller
    Marshals Action properties.
    ActionMarshaller() - +Constructor for class biweekly.property.marshaller.ActionMarshaller +
      +
    add(ICalendar) - +Method in class biweekly.io.xml.XCalDocument +
    Adds an iCalendar object to the xCal document. +
    add(Date) - +Method in class biweekly.util.Duration +
    Adds this duration value to a Date object. +
    addAlarm(VAlarm) - +Method in class biweekly.component.VEvent +
    Adds an alarm to this event. +
    addAlarm(VAlarm) - +Method in class biweekly.component.VTodo +
    Adds an alarm to this to-do. +
    addAttachment(Attachment) - +Method in class biweekly.component.VAlarm +
    Adds an attachment to the alarm. +
    addAttachment(Attachment) - +Method in class biweekly.component.VEvent +
    Adds an attachment to the event. +
    addAttachment(Attachment) - +Method in class biweekly.component.VJournal +
    Adds an attachment to the journal entry. +
    addAttachment(Attachment) - +Method in class biweekly.component.VTodo +
    Adds an attachment to the to-do. +
    addAttendee(Attendee) - +Method in class biweekly.component.VAlarm +
    Adds a person who will be emailed when the alarm fires (only applicable + for EMAIL alarms). +
    addAttendee(Attendee) - +Method in class biweekly.component.VEvent +
    Adds a person who is attending the event. +
    addAttendee(String) - +Method in class biweekly.component.VEvent +
    Adds a person who is attending the event. +
    addAttendee(Attendee) - +Method in class biweekly.component.VFreeBusy +
    Adds a person who is involved in the free/busy entry. +
    addAttendee(Attendee) - +Method in class biweekly.component.VJournal +
    Adds a person who is involved in the journal entry. +
    addAttendee(String) - +Method in class biweekly.component.VJournal +
    Adds a person who is involved in the journal entry. +
    addAttendee(Attendee) - +Method in class biweekly.component.VTodo +
    Adds a person who is involved in the to-do. +
    addAttendee(String) - +Method in class biweekly.component.VTodo +
    Adds a person who is involved in the to-do. +
    addCategories(Categories) - +Method in class biweekly.component.VEvent +
    Adds a list of "tags" or "keywords" that describe the event. +
    addCategories(String...) - +Method in class biweekly.component.VEvent +
    Adds a list of "tags" or "keywords" that describe the event. +
    addCategories(List<String>) - +Method in class biweekly.component.VEvent +
    Adds a list of "tags" or "keywords" that describe the event. +
    addCategories(Categories) - +Method in class biweekly.component.VJournal +
    Adds a list of "tags" or "keywords" that describe the journal entry. +
    addCategories(String...) - +Method in class biweekly.component.VJournal +
    Adds a list of "tags" or "keywords" that describe the journal entry. +
    addCategories(List<String>) - +Method in class biweekly.component.VJournal +
    Adds a list of "tags" or "keywords" that describe the journal entry. +
    addCategories(Categories) - +Method in class biweekly.component.VTodo +
    Adds a list of "tags" or "keywords" that describe the to-do. +
    addCategories(String...) - +Method in class biweekly.component.VTodo +
    Adds a list of "tags" or "keywords" that describe the to-do. +
    addCategories(List<String>) - +Method in class biweekly.component.VTodo +
    Adds a list of "tags" or "keywords" that describe the to-do. +
    addComment(Comment) - +Method in class biweekly.component.Observance +
    Adds a comment to the timezone observance. +
    addComment(String) - +Method in class biweekly.component.Observance +
    Adds a comment to the timezone observance. +
    addComment(Comment) - +Method in class biweekly.component.VEvent +
    Adds a comment to the event. +
    addComment(String) - +Method in class biweekly.component.VEvent +
    Adds a comment to the event. +
    addComment(Comment) - +Method in class biweekly.component.VFreeBusy +
    Adds a comment to the free/busy entry. +
    addComment(String) - +Method in class biweekly.component.VFreeBusy +
    Adds a comment to the free/busy entry. +
    addComment(Comment) - +Method in class biweekly.component.VJournal +
    Adds a comment to the journal entry. +
    addComment(String) - +Method in class biweekly.component.VJournal +
    Adds a comment to the journal entry. +
    addComment(Comment) - +Method in class biweekly.component.VTodo +
    Adds a comment to the to-do. +
    addComment(String) - +Method in class biweekly.component.VTodo +
    Adds a comment to the to-do. +
    addComponent(ICalComponent) - +Method in class biweekly.component.ICalComponent +
    Adds a sub-component to this component. +
    addContact(Contact) - +Method in class biweekly.component.VEvent +
    Adds a contact to the event. +
    addContact(String) - +Method in class biweekly.component.VEvent +
    Adds a contact to the event. +
    addContact(String) - +Method in class biweekly.component.VFreeBusy +
    Sets the contact for the free/busy entry. +
    addContact(Contact) - +Method in class biweekly.component.VJournal +
    Adds a contact to the journal entry. +
    addContact(String) - +Method in class biweekly.component.VJournal +
    Adds a contact to the journal entry. +
    addContact(Contact) - +Method in class biweekly.component.VTodo +
    Adds a contact to the to-do. +
    addContact(String) - +Method in class biweekly.component.VTodo +
    Adds a contact to the to-do. +
    addDaylightSavingsTime(DaylightSavingsTime) - +Method in class biweekly.component.VTimezone +
    Adds a "daylight savings" observance time range. +
    addDelegatedFrom(String) - +Method in class biweekly.parameter.ICalParameters +
    Adds a person who has delegated his or her responsibility to an attendee. +
    addDelegatedFrom(String) - +Method in class biweekly.property.Attendee +
    Adds a person who has delegated his or her responsibility to the + attendee. +
    addDelegatedTo(String) - +Method in class biweekly.parameter.ICalParameters +
    Adds a person to which an attendee has delegated his or her + responsibility. +
    addDelegatedTo(String) - +Method in class biweekly.property.Attendee +
    Adds a person to which the attendee has delegated his or her + responsibility. +
    addDescription(Description) - +Method in class biweekly.component.VJournal +
    Adds a detailed description to the journal entry. +
    addDescription(String) - +Method in class biweekly.component.VJournal +
    Adds a detailed description to the journal entry. +
    addEvent(VEvent) - +Method in class biweekly.ICalendar +
    Adds an event. +
    addExceptionDates(ExceptionDates) - +Method in class biweekly.component.Observance +
    Adds a list of exceptions to the timezone observance. +
    addExceptionDates(ExceptionDates) - +Method in class biweekly.component.VEvent +
    Adds a list of exceptions to the recurrence rule defined in the event (if + one is defined). +
    addExceptionDates(ExceptionDates) - +Method in class biweekly.component.VJournal +
    Adds a list of exceptions to the recurrence rule defined in the journal + entry (if one is defined). +
    addExceptionDates(ExceptionDates) - +Method in class biweekly.component.VTodo +
    Adds a list of exceptions to the recurrence rule defined in the to-do (if + one is defined). +
    addExceptionRule(Recurrence) - +Method in class biweekly.component.VEvent +
    + Adds an exception for the RecurrenceRule property. +
    addExceptionRule(ExceptionRule) - +Method in class biweekly.component.VEvent +
    + Adds an exception for the RecurrenceRule property. +
    addExceptionRule(Recurrence) - +Method in class biweekly.component.VJournal +
    + Adds an exception for the RecurrenceRule property. +
    addExceptionRule(ExceptionRule) - +Method in class biweekly.component.VJournal +
    + Adds an exception for the RecurrenceRule property. +
    addExceptionRule(Recurrence) - +Method in class biweekly.component.VTodo +
    + Adds an exception for the RecurrenceRule property. +
    addExceptionRule(ExceptionRule) - +Method in class biweekly.component.VTodo +
    + Adds an exception for the RecurrenceRule property. +
    addExperimentalComponent(String) - +Method in class biweekly.component.ICalComponent +
    Adds an experimental sub-component to this component. +
    addExperimentalProperty(String, String) - +Method in class biweekly.component.ICalComponent +
    Adds an experimental property to this component. +
    addExperimentalProperty(String, ICalDataType, String) - +Method in class biweekly.component.ICalComponent +
    Adds an experimental property to this component. +
    addFreeBusy(FreeBusy) - +Method in class biweekly.component.VFreeBusy +
    Adds a list of time periods for which the person is free or busy (for + example, "free" between 1pm-3pm and 4pm-5pm). +
    addFreeBusy(FreeBusyType, Date, Date) - +Method in class biweekly.component.VFreeBusy +
    Adds a single time period for which the person is free or busy (for + example, "free" between 1pm-3pm). +
    addFreeBusy(FreeBusyType, Date, Duration) - +Method in class biweekly.component.VFreeBusy +
    Adds a single time period for which the person is free or busy (for + example, "free" for 2 hours after 1pm). +
    addFreeBusy(VFreeBusy) - +Method in class biweekly.ICalendar +
    Adds a free/busy entry. +
    addJournal(VJournal) - +Method in class biweekly.ICalendar +
    Adds a journal entry. +
    addMember(String) - +Method in class biweekly.parameter.ICalParameters +
    Adds a group that an attendee is a member of. +
    addMember(String) - +Method in class biweekly.property.Attendee +
    Adds a group that the attendee is a member of. +
    addParameter(String, String) - +Method in class biweekly.property.ICalProperty +
    Adds a value to a parameter. +
    addProperty(ICalProperty) - +Method in class biweekly.component.ICalComponent +
    Adds a property to this component. +
    addRecurrenceDates(RecurrenceDates) - +Method in class biweekly.component.Observance +
    Adds a list of dates/periods that help define the recurrence rule of this + timezone observance (if one is defined). +
    addRecurrenceDates(RecurrenceDates) - +Method in class biweekly.component.VEvent +
    Adds a list of dates/periods that help define the recurrence rule of this + event (if one is defined). +
    addRecurrenceDates(RecurrenceDates) - +Method in class biweekly.component.VJournal +
    Adds a list of dates/periods that help define the recurrence rule of this + journal entry (if one is defined). +
    addRecurrenceDates(RecurrenceDates) - +Method in class biweekly.component.VTodo +
    Adds a list of dates/periods that help define the recurrence rule of this + to-do (if one is defined). +
    addRelatedTo(RelatedTo) - +Method in class biweekly.component.VEvent +
    Adds a component that the event is related to. +
    addRelatedTo(String) - +Method in class biweekly.component.VEvent +
    Adds a component that the event is related to. +
    addRelatedTo(RelatedTo) - +Method in class biweekly.component.VJournal +
    Adds a component that the journal entry is related to. +
    addRelatedTo(String) - +Method in class biweekly.component.VJournal +
    Adds a component that the journal entry is related to. +
    addRelatedTo(RelatedTo) - +Method in class biweekly.component.VTodo +
    Adds a component that the to-do is related to. +
    addRelatedTo(String) - +Method in class biweekly.component.VTodo +
    Adds a component that the to-do is related to. +
    addResources(Resources) - +Method in class biweekly.component.VEvent +
    Adds a list of resources that are needed for the event. +
    addResources(String...) - +Method in class biweekly.component.VEvent +
    Adds a list of resources that are needed for the event. +
    addResources(List<String>) - +Method in class biweekly.component.VEvent +
    Adds a list of resources that are needed for the event. +
    addResources(Resources) - +Method in class biweekly.component.VTodo +
    Adds a list of resources that are needed for the to-do. +
    addResources(String...) - +Method in class biweekly.component.VTodo +
    Adds a list of resources that are needed for the to-do. +
    addResources(List<String>) - +Method in class biweekly.component.VTodo +
    Adds a list of resources that are needed for the to-do. +
    addStandardTime(StandardTime) - +Method in class biweekly.component.VTimezone +
    Adds a "standard" observance time range. +
    addTimezone(VTimezone) - +Method in class biweekly.ICalendar +
    Adds a timezone. +
    addTimezoneName(TimezoneName) - +Method in class biweekly.component.Observance +
    Adds a traditional, non-standard name for the timezone observance. +
    addTimezoneName(String) - +Method in class biweekly.component.Observance +
    Adds a traditional, non-standard name for the timezone observance. +
    addTodo(VTodo) - +Method in class biweekly.ICalendar +
    Adds a to-do. +
    addValue(Date, Date) - +Method in class biweekly.property.FreeBusy +
    Adds a time period. +
    addValue(Date, Duration) - +Method in class biweekly.property.FreeBusy +
    Adds a time period. +
    addValue(T) - +Method in class biweekly.property.ListProperty +
    Adds a value to this property. +
    all() - +Method in class biweekly.Biweekly.ParserChainJsonString +
      +
    all() - +Method in class biweekly.Biweekly.ParserChainTextString +
      +
    all() - +Method in class biweekly.Biweekly.ParserChainXmlDocument +
      +
    all() - +Method in class biweekly.Biweekly.ParserChainXmlString +
      +
    all() - +Static method in class biweekly.ICalDataType +
    Gets all of the parameter values that are defined as static constants in + this class. +
    all(ICalDataType) - +Method in class biweekly.io.xml.XCalElement +
    Gets all the values of a given data type. +
    all(String) - +Method in class biweekly.io.xml.XCalElement +
    Gets the values of all child elements that have the given name. +
    all() - +Static method in class biweekly.parameter.CalendarUserType +
    Gets all of the parameter values that are defined as static constants in + this class. +
    all() - +Static method in class biweekly.parameter.Encoding +
    Gets all of the parameter values that are defined as static constants in + this class. +
    all() - +Static method in class biweekly.parameter.FreeBusyType +
    Gets all of the parameter values that are defined as static constants in + this class. +
    all() - +Static method in class biweekly.parameter.ParticipationStatus +
    Gets all of the parameter values that are defined as static constants in + this class. +
    all() - +Static method in class biweekly.parameter.Range +
    Gets all of the parameter values that are defined as static constants in + this class. +
    all() - +Static method in class biweekly.parameter.Related +
    Gets all of the parameter values that are defined as static constants in + this class. +
    all() - +Static method in class biweekly.parameter.RelationshipType +
    Gets all of the parameter values that are defined as static constants in + this class. +
    all() - +Static method in class biweekly.parameter.Role +
    Gets all of the parameter values that are defined as static constants in + this class. +
    all() - +Method in class biweekly.util.CaseClasses +
    Gets all the static constants of the case class. +
    ALTREP - +Static variable in class biweekly.parameter.ICalParameters +
      +
    append(ICalDataType, String) - +Method in class biweekly.io.xml.XCalElement +
    Adds a value. +
    append(String, String) - +Method in class biweekly.io.xml.XCalElement +
    Adds a child element. +
    append(String) - +Method in class biweekly.io.xml.XCalElement +
    Adds a child element. +
    append(ICalDataType) - +Method in class biweekly.io.xml.XCalElement +
    Adds an empty value. +
    append(String, Collection<String>) - +Method in class biweekly.io.xml.XCalElement +
    Adds multiple child elements, each with the same name. +
    asMulti() - +Method in class biweekly.io.json.JCalValue +
    Parses this jCal value as a multi-valued property value. +
    asObject() - +Method in class biweekly.io.json.JCalValue +
    Parses this jCal value as an object property value. +
    asSingle() - +Method in class biweekly.io.json.JCalValue +
    Parses this jCal value as a single-valued property value. +
    asString(T) - +Method in interface biweekly.property.marshaller.ICalPropertyMarshaller.ListCallback +
    Converts a value to a string. +
    asStructured() - +Method in class biweekly.io.json.JCalValue +
    Parses this jCal value as a structured property value. +
    Attachment - Class in biweekly.property
    + Represents a binary resource that is associated with an event, to-do, journal + entry, or alarm.
    Attachment(String, File) - +Constructor for class biweekly.property.Attachment +
    Creates a new attachment. +
    Attachment(String, byte[]) - +Constructor for class biweekly.property.Attachment +
    Creates a new attachment. +
    Attachment(String, String) - +Constructor for class biweekly.property.Attachment +
    Creates a new attachment. +
    AttachmentMarshaller - Class in biweekly.property.marshaller
    Marshals Attachment properties.
    AttachmentMarshaller() - +Constructor for class biweekly.property.marshaller.AttachmentMarshaller +
      +
    Attendee - Class in biweekly.property
    + Defines an attendee (such as a person attending an event).
    Attendee(String) - +Constructor for class biweekly.property.Attendee +
    Creates an attendee property. +
    AttendeeMarshaller - Class in biweekly.property.marshaller
    Marshals Attendee properties.
    AttendeeMarshaller() - +Constructor for class biweekly.property.marshaller.AttendeeMarshaller +
      +
    audio(Trigger) - +Static method in class biweekly.component.VAlarm +
    Creates an audio alarm. +
    audio(Trigger, Attachment) - +Static method in class biweekly.component.VAlarm +
    Creates an audio alarm. +
    audio() - +Static method in class biweekly.property.Action +
    Creates an "audio" action property. +
    +
    +

    +B

    +
    +
    BASE64 - +Static variable in class biweekly.parameter.Encoding +
      +
    Base64 - Class in biweekly.util
    Encodes and decodes data into base64.
    beginComponent(String) - +Method in interface biweekly.io.text.ICalRawReader.ICalDataStreamListener +
    Called when a component begins (when a "BEGIN:NAME" property is + reached). +
    BINARY - +Static variable in class biweekly.ICalDataType +
      +
    biweekly - package biweekly
     
    Biweekly - Class in biweekly
    + Contains static chaining factory methods for reading/writing iCalendar + objects.
    biweekly() - +Static method in class biweekly.property.ProductId +
    Creates a new product identifier property that represents this library. +
    biweekly.component - package biweekly.component
     
    biweekly.component.marshaller - package biweekly.component.marshaller
     
    biweekly.io - package biweekly.io
     
    biweekly.io.json - package biweekly.io.json
     
    biweekly.io.text - package biweekly.io.text
     
    biweekly.io.xml - package biweekly.io.xml
     
    biweekly.parameter - package biweekly.parameter
     
    Biweekly.ParserChainJsonReader - Class in biweekly
    Chainer class for parsing JSON-encoded iCalendar data streams (jCal).
    Biweekly.ParserChainJsonString - Class in biweekly
    Chainer class for parsing JSON-encoded iCalendar strings (jCal).
    Biweekly.ParserChainTextReader - Class in biweekly
    Chainer class for parsing plain text iCalendar data streams.
    Biweekly.ParserChainTextString - Class in biweekly
    Chainer class for parsing plain text iCalendar strings.
    Biweekly.ParserChainXmlDocument - Class in biweekly
    Chainer class for parsing XML-encoded iCalendar objects (xCal).
    Biweekly.ParserChainXmlReader - Class in biweekly
    Chainer class for parsing XML-encoded iCalendar objects (xCal).
    Biweekly.ParserChainXmlString - Class in biweekly
    Chainer class for parsing XML-encoded iCalendar objects (xCal).
    biweekly.property - package biweekly.property
     
    biweekly.property.marshaller - package biweekly.property.marshaller
     
    biweekly.util - package biweekly.util
     
    Biweekly.WriterChainJson - Class in biweekly
    Chainer class for writing to JSON-encoded iCalendar data streams (jCal).
    Biweekly.WriterChainText - Class in biweekly
    Chainer class for writing to plain text iCalendar data streams.
    Biweekly.WriterChainXml - Class in biweekly
    Chainer class for writing xCal documents (XML-encoded iCalendar objects).
    BOOLEAN - +Static variable in class biweekly.ICalDataType +
      +
    build() - +Method in class biweekly.util.Duration.Builder +
    Builds the final Duration object. +
    build() - +Method in class biweekly.util.Recurrence.Builder +
    Builds the final Recurrence object. +
    builder() - +Static method in class biweekly.util.Duration +
    Creates a builder object for constructing new instances of this class. +
    BUSY - +Static variable in class biweekly.parameter.FreeBusyType +
      +
    BUSY_TENTATIVE - +Static variable in class biweekly.parameter.FreeBusyType +
      +
    BUSY_UNAVAILABLE - +Static variable in class biweekly.parameter.FreeBusyType +
      +
    byDay(Recurrence.DayOfWeek) - +Method in class biweekly.util.Recurrence.Builder +
    Adds a BYDAY rule part. +
    byDay(Integer, Recurrence.DayOfWeek) - +Method in class biweekly.util.Recurrence.Builder +
    Adds a BYDAY rule part. +
    byHour(Integer) - +Method in class biweekly.util.Recurrence.Builder +
    Adds a BYHOUR rule part. +
    byMinute(Integer) - +Method in class biweekly.util.Recurrence.Builder +
    Adds a BYMINUTE rule part. +
    byMonth(Integer) - +Method in class biweekly.util.Recurrence.Builder +
    Adds a BYMONTH rule part. +
    byMonthDay(Integer) - +Method in class biweekly.util.Recurrence.Builder +
    Adds a BYMONTHDAY rule part. +
    bySecond(Integer) - +Method in class biweekly.util.Recurrence.Builder +
    Adds a BYSECOND rule part. +
    bySetPos(Integer) - +Method in class biweekly.util.Recurrence.Builder +
    Adds a BYSETPOS rule part. +
    byWeekNo(Integer) - +Method in class biweekly.util.Recurrence.Builder +
    Adds a BYWEEKNO rule part. +
    byYearDay(Integer) - +Method in class biweekly.util.Recurrence.Builder +
    Adds a BYYEARDAY rule part. +
    +
    +

    +C

    +
    +
    CAL_ADDRESS - +Static variable in class biweekly.ICalDataType +
      +
    CalendarScale - Class in biweekly.property
    + Specifies the calendar system that this iCalendar object uses.
    CalendarScale(String) - +Constructor for class biweekly.property.CalendarScale +
    Creates a new calendar scale property. +
    CalendarScaleMarshaller - Class in biweekly.property.marshaller
    Marshals CalendarScale properties.
    CalendarScaleMarshaller() - +Constructor for class biweekly.property.marshaller.CalendarScaleMarshaller +
      +
    CalendarUserType - Class in biweekly.parameter
    Defines the type of user an entity is.
    cancelled() - +Static method in class biweekly.property.Status +
    Creates a "cancelled" status property (only valid for event, to-do, and + journal components). +
    CannotParseException - Exception in biweekly.io
    Thrown during the unmarshalling of an iCalendar property to signal that the + property's value could not be parsed (for example, being unable to parse a + date string).
    CannotParseException() - +Constructor for exception biweekly.io.CannotParseException +
    Creates a new "cannot parse" exception. +
    CannotParseException(String) - +Constructor for exception biweekly.io.CannotParseException +
    Creates a new "cannot parse" exception. +
    caretDecoding(boolean) - +Method in class biweekly.Biweekly.ParserChainTextReader +
      +
    caretDecoding(boolean) - +Method in class biweekly.Biweekly.ParserChainTextString +
      +
    caretEncoding(boolean) - +Method in class biweekly.Biweekly.WriterChainText +
    + Sets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default). +
    CaseClasses<T,V> - Class in biweekly.util
    Manages objects that are like enums in that they are constant, but unlike + enums in that new instances can be created during runtime.
    CaseClasses(Class<T>) - +Constructor for class biweekly.util.CaseClasses +
    Creates a new case class collection. +
    Categories - Class in biweekly.property
    + Defines a list of "tags" or "keywords" that describe the component.
    Categories() - +Constructor for class biweekly.property.Categories +
    Creates a new categories property. +
    Categories(String...) - +Constructor for class biweekly.property.Categories +
    Creates a new categories property. +
    Categories(List<String>) - +Constructor for class biweekly.property.Categories +
    Creates a new categories property. +
    CategoriesMarshaller - Class in biweekly.property.marshaller
    Marshals Categories properties.
    CategoriesMarshaller() - +Constructor for class biweekly.property.marshaller.CategoriesMarshaller +
      +
    CHAIR - +Static variable in class biweekly.parameter.Role +
      +
    checkOptionalCardinality(List<String>, Class<? extends ICalProperty>...) - +Method in class biweekly.component.ICalComponent +
    Utility method for validating that there is no more than one instance of + each of the given properties. +
    checkRequiredCardinality(List<String>, Class<? extends ICalProperty>...) - +Method in class biweekly.component.ICalComponent +
    Utility method for validating that there is exactly one instance of each + of the given properties. +
    child(ICalDataType) - +Method in class biweekly.io.xml.XCalElement +
    Gets the first child element with the given data type. +
    CHILD - +Static variable in class biweekly.parameter.RelationshipType +
      +
    children(ICalDataType) - +Method in class biweekly.io.xml.XCalElement +
    Gets all child elements with the given data type. +
    Classification - Class in biweekly.property
    + Defines the level of sensitivity of the iCalendar data.
    Classification(String) - +Constructor for class biweekly.property.Classification +
    Creates a new classification property. +
    ClassificationMarshaller - Class in biweekly.property.marshaller
    Marshals Classification properties.
    ClassificationMarshaller() - +Constructor for class biweekly.property.marshaller.ClassificationMarshaller +
      +
    clazz - +Variable in class biweekly.component.marshaller.ICalComponentMarshaller +
      +
    clazz - +Variable in class biweekly.property.marshaller.ICalPropertyMarshaller +
      +
    clazz - +Variable in class biweekly.util.CaseClasses +
      +
    clear() - +Method in class biweekly.util.ListMultimap +
    Clears all entries from the multimap. +
    close() - +Method in class biweekly.io.json.JCalRawReader +
    Closes the underlying Reader object. +
    close() - +Method in class biweekly.io.json.JCalRawWriter +
    Finishes writing the JSON document and closes the underlying + Writer. +
    close() - +Method in class biweekly.io.json.JCalReader +
      +
    close() - +Method in class biweekly.io.json.JCalWriter +
    Finishes writing the JSON document and closes the underlying + Writer. +
    close() - +Method in class biweekly.io.text.FoldedLineWriter +
      +
    close() - +Method in class biweekly.io.text.ICalRawReader +
    Closes the underlying Reader object. +
    close() - +Method in class biweekly.io.text.ICalRawWriter +
    Closes the underlying Writer object. +
    close() - +Method in class biweekly.io.text.ICalReader +
    Closes the underlying Reader object. +
    close() - +Method in class biweekly.io.text.ICalWriter +
    Closes the underlying Writer object. +
    closeJsonStream() - +Method in class biweekly.io.json.JCalRawWriter +
    Finishes writing the JSON document so that it is syntactically correct. +
    closeJsonStream() - +Method in class biweekly.io.json.JCalWriter +
    Finishes writing the JSON document so that it is syntactically correct. +
    closeQuietly(Closeable) - +Static method in class biweekly.util.IOUtils +
    Closes a closeable resource, catching its IOException. +
    CN - +Static variable in class biweekly.parameter.ICalParameters +
      +
    Comment - Class in biweekly.property
    + Defines a free-text comment to be read by the user.
    Comment(String) - +Constructor for class biweekly.property.Comment +
    Creates a comment property. +
    CommentMarshaller - Class in biweekly.property.marshaller
    Marshals Comment properties.
    CommentMarshaller() - +Constructor for class biweekly.property.marshaller.CommentMarshaller +
      +
    COMPLETED - +Static variable in class biweekly.parameter.ParticipationStatus +
      +
    Completed - Class in biweekly.property
    + Defines the date and time that a to-do task was completed.
    Completed(Date) - +Constructor for class biweekly.property.Completed +
    Creates a completed property. +
    completed() - +Static method in class biweekly.property.Status +
    Creates a "completed" status property (only valid for to-do components). +
    CompletedMarshaller - Class in biweekly.property.marshaller
    Marshals Completed properties.
    CompletedMarshaller() - +Constructor for class biweekly.property.marshaller.CompletedMarshaller +
      +
    componentName - +Variable in class biweekly.component.marshaller.ICalComponentMarshaller +
      +
    components - +Variable in class biweekly.component.ICalComponent +
      +
    confidential() - +Static method in class biweekly.property.Classification +
    Creates a "confidential" classification property. +
    confirmed() - +Static method in class biweekly.property.Status +
    Creates a "confirmed" status property (only valid for event components). +
    Contact - Class in biweekly.property
    + Defines contact information for a person or other entity (for example, the + name of a business and its phone number).
    Contact(String) - +Constructor for class biweekly.property.Contact +
    Creates a contact property. +
    ContactMarshaller - Class in biweekly.property.marshaller
    Marshals Contact properties.
    ContactMarshaller() - +Constructor for class biweekly.property.marshaller.ContactMarshaller +
      +
    containsKey(K) - +Method in class biweekly.util.ListMultimap +
    Determines whether the given key exists. +
    count(Integer) - +Method in class biweekly.util.Recurrence.Builder +
    Gets the number of times the rule will be repeated. +
    create(String) - +Method in class biweekly.parameter.ICalParameterCaseClasses +
      +
    create(V) - +Method in class biweekly.util.CaseClasses +
    Creates a new instance of the case class. +
    Created - Class in biweekly.property
    + Defines the date-time that the calendar information was initially created.
    Created(Date) - +Constructor for class biweekly.property.Created +
    Creates a created property. +
    CreatedMarshaller - Class in biweekly.property.marshaller
    Marshals Created properties.
    CreatedMarshaller() - +Constructor for class biweekly.property.marshaller.CreatedMarshaller +
      +
    createDocument() - +Static method in class biweekly.util.XmlUtils +
    Creates a new XML document. +
    CUTYPE - +Static variable in class biweekly.parameter.ICalParameters +
      +
    +
    +

    +D

    +
    +
    dataType(T) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Determines the data type of a property instance. +
    DATE - +Static variable in class biweekly.ICalDataType +
      +
    date(String) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Parses a date string. +
    date(Date) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Formats a Date object as a string. +
    DATE_TIME - +Static variable in class biweekly.ICalDataType +
      +
    DateDue - Class in biweekly.property
    + Defines the date that a to-do task is due by.
    DateDue(Date) - +Constructor for class biweekly.property.DateDue +
    Creates a due date property. +
    DateDue(Date, boolean) - +Constructor for class biweekly.property.DateDue +
    Creates a due date property. +
    DateDueMarshaller - Class in biweekly.property.marshaller
    Marshals DateDue properties.
    DateDueMarshaller() - +Constructor for class biweekly.property.marshaller.DateDueMarshaller +
      +
    DateEnd - Class in biweekly.property
    + Defines the date that an event or free/busy component ends.
    DateEnd(Date) - +Constructor for class biweekly.property.DateEnd +
    Creates a date end property. +
    DateEnd(Date, boolean) - +Constructor for class biweekly.property.DateEnd +
    Creates a date end property. +
    DateEndMarshaller - Class in biweekly.property.marshaller
    Marshals DateEnd properties.
    DateEndMarshaller() - +Constructor for class biweekly.property.marshaller.DateEndMarshaller +
      +
    dateHasTime(String) - +Static method in class biweekly.util.ICalDateFormatter +
    Determines whether a date string has a time component. +
    dateHasTimezone(String) - +Static method in class biweekly.util.ICalDateFormatter +
    Determines whether a date string is in UTC time or has a timezone offset. +
    DateOrDateTimeProperty - Class in biweekly.property
    Represents a property whose value is a date or a date-time.
    DateOrDateTimeProperty(DateTimeComponents) - +Constructor for class biweekly.property.DateOrDateTimeProperty +
    Creates a new property. +
    DateOrDateTimeProperty(Date, boolean) - +Constructor for class biweekly.property.DateOrDateTimeProperty +
    Creates a new property. +
    DateOrDateTimePropertyMarshaller<T extends DateOrDateTimeProperty> - Class in biweekly.property.marshaller
    Marshals properties that have either "date" or "date-time" values.
    DateOrDateTimePropertyMarshaller(Class<T>, String) - +Constructor for class biweekly.property.marshaller.DateOrDateTimePropertyMarshaller +
      +
    DateStart - Class in biweekly.property
    + Defines the date that an event, free/busy component, or timezone component + starts.
    DateStart(Date) - +Constructor for class biweekly.property.DateStart +
    Creates a start date property. +
    DateStart(Date, boolean) - +Constructor for class biweekly.property.DateStart +
    Creates a start date property. +
    DateStart(DateTimeComponents) - +Constructor for class biweekly.property.DateStart +
    Creates a start date property. +
    DateStartMarshaller - Class in biweekly.property.marshaller
    Marshals DateStart properties.
    DateStartMarshaller() - +Constructor for class biweekly.property.marshaller.DateStartMarshaller +
      +
    DateTimeComponents - Class in biweekly.util
    + Contains the raw components of a date-time value.
    DateTimeComponents(DateTimeComponents, Integer, Integer, Integer, Integer, Integer, Integer, Boolean) - +Constructor for class biweekly.util.DateTimeComponents +
    Copies an existing DateTimeComponents object. +
    DateTimeComponents(int, int, int, int, int, int, boolean) - +Constructor for class biweekly.util.DateTimeComponents +
    Creates a new set of date-time components. +
    DateTimeProperty - Class in biweekly.property
    Represents a property whose value is a date-time.
    DateTimeProperty(Date) - +Constructor for class biweekly.property.DateTimeProperty +
    Creates a new property. +
    DateTimePropertyMarshaller<T extends DateTimeProperty> - Class in biweekly.property.marshaller
    Marshals properties that have "date-time" values.
    DateTimePropertyMarshaller(Class<T>, String) - +Constructor for class biweekly.property.marshaller.DateTimePropertyMarshaller +
      +
    DateTimeStamp - Class in biweekly.property
    + The meaning of this property varies depending on the state of the iCalendar + object: + + If a Method property exists: Defines the creation date of + the iCalendar object (not the creation date of the actual calendar data).
    DateTimeStamp(Date) - +Constructor for class biweekly.property.DateTimeStamp +
    Creates a date time stamp property. +
    DateTimeStampMarshaller - Class in biweekly.property.marshaller
    Marshals DateTimeStamp properties.
    DateTimeStampMarshaller() - +Constructor for class biweekly.property.marshaller.DateTimeStampMarshaller +
      +
    DaylightSavingsTime - Class in biweekly.component
    + Defines a daylight savings time range within a VTimezone.
    DaylightSavingsTime() - +Constructor for class biweekly.component.DaylightSavingsTime +
      +
    DaylightSavingsTimeMarshaller - Class in biweekly.component.marshaller
     
    DaylightSavingsTimeMarshaller() - +Constructor for class biweekly.component.marshaller.DaylightSavingsTimeMarshaller +
      +
    days(Integer) - +Method in class biweekly.util.Duration.Builder +
    Sets the number of days +
    DECLINED - +Static variable in class biweekly.parameter.ParticipationStatus +
      +
    decode(String) - +Static method in class biweekly.util.Base64 +
    Translates the specified Base64 string into a byte array. +
    DEFAULT - +Static variable in class biweekly.io.text.FoldingScheme +
    Folds lines according to RFC specification (75 characters not including + CRLF, with 1 space as indentation). +
    defaultDataType - +Variable in class biweekly.property.marshaller.ICalPropertyMarshaller +
      +
    DELEGATED - +Static variable in class biweekly.parameter.ParticipationStatus +
      +
    DELEGATED_FROM - +Static variable in class biweekly.parameter.ICalParameters +
      +
    DELEGATED_TO - +Static variable in class biweekly.parameter.ICalParameters +
      +
    Description - Class in biweekly.property
    + A detailed description of the component that this property belongs to.
    Description(String) - +Constructor for class biweekly.property.Description +
    Creates a description property. +
    DescriptionMarshaller - Class in biweekly.property.marshaller
    Marshals Description properties.
    DescriptionMarshaller() - +Constructor for class biweekly.property.marshaller.DescriptionMarshaller +
      +
    diff(Date, Date) - +Static method in class biweekly.util.Duration +
    Builds a duration based on the difference between two dates. +
    DIR - +Static variable in class biweekly.parameter.ICalParameters +
      +
    display(Trigger, String) - +Static method in class biweekly.component.VAlarm +
    Creates a display alarm. +
    display() - +Static method in class biweekly.property.Action +
    Creates an "display" action property. +
    document() - +Method in class biweekly.io.xml.XCalElement +
    Gets the owner document. +
    dom() - +Method in class biweekly.Biweekly.WriterChainXml +
    Writes the xCal document to an XML DOM. +
    draft() - +Static method in class biweekly.property.Status +
    Creates a "draft" status property (only valid for journal components). +
    DURATION - +Static variable in class biweekly.ICalDataType +
      +
    Duration - Class in biweekly.util
    + Represents a period of time (for example, "2 hours and 30 minutes").
    Duration.Builder - Class in biweekly.util
    Builds Duration objects.
    Duration.Builder() - +Constructor for class biweekly.util.Duration.Builder +
    Creates a new Duration builder. +
    Duration.Builder(Duration) - +Constructor for class biweekly.util.Duration.Builder +
    Creates a new Duration builder. +
    DurationProperty - Class in biweekly.property
    + Defines a duration of time (for example, "2 hours and 30 minutes").
    DurationProperty(Duration) - +Constructor for class biweekly.property.DurationProperty +
    Creates a duration property. +
    DurationPropertyMarshaller - Class in biweekly.property.marshaller
    Marshals DurationProperty properties.
    DurationPropertyMarshaller() - +Constructor for class biweekly.property.marshaller.DurationPropertyMarshaller +
      +
    +
    +

    +E

    +
    +
    email(Trigger, String, String, String...) - +Static method in class biweekly.component.VAlarm +
    Creates an email alarm. +
    email(Trigger, String, String, List<String>) - +Static method in class biweekly.component.VAlarm +
    Creates an email alarm. +
    email() - +Static method in class biweekly.property.Action +
    Creates an "email" action property. +
    email(String) - +Static method in class biweekly.property.Attendee +
    Creates an attendee property using an email address as its value. +
    email(String) - +Static method in class biweekly.property.Organizer +
    Creates an organizer property using an email address as its value. +
    emptyInstance() - +Method in class biweekly.component.marshaller.ICalComponentMarshaller +
    Creates a new instance of the component class that doesn't have any + properties or sub-components. +
    encode(byte[]) - +Static method in class biweekly.util.Base64 +
    Translates the specified byte array into Base64 string. +
    Encoding - Class in biweekly.parameter
    Defines how a property value is encoded.
    ENCODING - +Static variable in class biweekly.parameter.ICalParameters +
      +
    END - +Static variable in class biweekly.parameter.Related +
      +
    endComponent(String) - +Method in interface biweekly.io.text.ICalRawReader.ICalDataStreamListener +
    Called when a component ends (when a "END:NAME" property is reached). +
    EnumParameterValue - Class in biweekly.parameter
    Represents a value from a parameter that has a list of pre-defined values + (for example, the VALUE or ACTION parameters).
    EnumParameterValue(String) - +Constructor for class biweekly.parameter.EnumParameterValue +
      +
    EnumProperty - Class in biweekly.property
    Parent class for properties that have a defined set of acceptable values (for + example, Action).
    EnumProperty(String) - +Constructor for class biweekly.property.EnumProperty +
    Creates an enum property. +
    eof() - +Method in class biweekly.io.json.JCalRawReader +
    Determines whether the end of the data stream has been reached. +
    eof() - +Method in class biweekly.io.text.ICalRawReader +
    Determines whether the end of the data stream has been reached. +
    equals(Object) - +Method in class biweekly.io.json.JsonValue +
      +
    equals(Object) - +Method in class biweekly.util.DateTimeComponents +
      +
    equals(Object) - +Method in class biweekly.util.Duration +
      +
    equals(Object) - +Method in class biweekly.util.ListMultimap +
      +
    equals(Object) - +Method in class biweekly.util.Period +
      +
    equals(Object) - +Method in class biweekly.util.Recurrence +
      +
    equals(Object) - +Method in class biweekly.util.UtcOffset +
      +
    escape(String) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    + Escapes all special characters within a iCalendar value. +
    ExceptionDates - Class in biweekly.property
    + Defines a list of exceptions to the recurrence rule defined in a component.
    ExceptionDates(boolean) - +Constructor for class biweekly.property.ExceptionDates +
    Creates an exception dates property. +
    ExceptionDatesMarshaller - Class in biweekly.property.marshaller
    Marshals ExceptionDates properties.
    ExceptionDatesMarshaller() - +Constructor for class biweekly.property.marshaller.ExceptionDatesMarshaller +
      +
    ExceptionRule - Class in biweekly.property
    + Defines an exception to a RecurrenceRule.
    ExceptionRule(Recurrence) - +Constructor for class biweekly.property.ExceptionRule +
    Creates a new exception rule property. +
    ExceptionRuleMarshaller - Class in biweekly.property.marshaller
    Marshals ExceptionRule properties.
    ExceptionRuleMarshaller() - +Constructor for class biweekly.property.marshaller.ExceptionRuleMarshaller +
      +
    extended(boolean) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.DateWriter +
    Sets whether to use extended format or basic. +
    +
    +

    +F

    +
    +
    FBTYPE - +Static variable in class biweekly.parameter.ICalParameters +
      +
    final_() - +Static method in class biweekly.property.Status +
    Creates a "final" status property (only valid for journal components). +
    find(String) - +Static method in class biweekly.ICalDataType +
    Searches for a parameter value that is defined as a static constant in + this class. +
    find(String) - +Static method in class biweekly.parameter.CalendarUserType +
    Searches for a parameter value that is defined as a static constant in + this class. +
    find(String) - +Static method in class biweekly.parameter.Encoding +
    Searches for a parameter value that is defined as a static constant in + this class. +
    find(String) - +Static method in class biweekly.parameter.FreeBusyType +
    Searches for a parameter value that is defined as a static constant in + this class. +
    find(String) - +Static method in class biweekly.parameter.ParticipationStatus +
    Searches for a parameter value that is defined as a static constant in + this class. +
    find(String) - +Static method in class biweekly.parameter.Range +
    Searches for a parameter value that is defined as a static constant in + this class. +
    find(String) - +Static method in class biweekly.parameter.Related +
    Searches for a parameter value that is defined as a static constant in + this class. +
    find(String) - +Static method in class biweekly.parameter.RelationshipType +
    Searches for a parameter value that is defined as a static constant in + this class. +
    find(String) - +Static method in class biweekly.parameter.Role +
    Searches for a parameter value that is defined as a static constant in + this class. +
    find(V) - +Method in class biweekly.util.CaseClasses +
    Searches for a case object by value, only looking at the case class' + static constants (does not include runtime-defined objects). +
    first() - +Method in class biweekly.Biweekly.ParserChainJsonString +
      +
    first() - +Method in class biweekly.Biweekly.ParserChainTextString +
      +
    first() - +Method in class biweekly.Biweekly.ParserChainXmlDocument +
      +
    first() - +Method in class biweekly.Biweekly.ParserChainXmlString +
      +
    first(ICalDataType) - +Method in class biweekly.io.xml.XCalElement +
    Gets the first value of the given data type. +
    first(String) - +Method in class biweekly.io.xml.XCalElement +
    Gets the value of the first child element with the given name. +
    first(K) - +Method in class biweekly.util.ListMultimap +
    Gets the first value that's associated with a key. +
    FLOAT - +Static variable in class biweekly.ICalDataType +
      +
    flush() - +Method in class biweekly.io.text.FoldedLineWriter +
      +
    FMTTYPE - +Static variable in class biweekly.parameter.ICalParameters +
      +
    FoldedLineReader - Class in biweekly.io.text
    Automatically unfolds lines of text as they are read.
    FoldedLineReader(Reader) - +Constructor for class biweekly.io.text.FoldedLineReader +
    Creates a new folded line reader. +
    FoldedLineReader(String) - +Constructor for class biweekly.io.text.FoldedLineReader +
    Creates a new folded line reader. +
    FoldedLineWriter - Class in biweekly.io.text
    Automatically folds lines as they are written.
    FoldedLineWriter(Writer, int, String, String) - +Constructor for class biweekly.io.text.FoldedLineWriter +
      +
    FoldingScheme - Class in biweekly.io.text
    Specifies how an iCalendar object should be folded when written to a string.
    FoldingScheme(int, String) - +Constructor for class biweekly.io.text.FoldingScheme +
      +
    format(Date, ISOFormat) - +Static method in class biweekly.util.ICalDateFormatter +
    Formats a date for inclusion in an iCalendar object. +
    format(Date, ISOFormat, TimeZone) - +Static method in class biweekly.util.ICalDateFormatter +
    Formats a date for inclusion in an iCalendar object. +
    FREE - +Static variable in class biweekly.parameter.FreeBusyType +
      +
    FreeBusy - Class in biweekly.property
    + Defines a person's availability over certain time periods (for example, + "busy" between 1pm-3pm and 4pm-5pm).
    FreeBusy() - +Constructor for class biweekly.property.FreeBusy +
      +
    FreeBusyMarshaller - Class in biweekly.property.marshaller
    Marshals FreeBusy properties.
    FreeBusyMarshaller() - +Constructor for class biweekly.property.marshaller.FreeBusyMarshaller +
      +
    FreeBusyType - Class in biweekly.parameter
    Defines whether a calendar user is free or busy over a time period.
    frequency(Recurrence.Frequency) - +Method in class biweekly.util.Recurrence.Builder +
    Sets the frequency +
    fromMillis(long) - +Static method in class biweekly.util.Duration +
    Builds a duration from a number of milliseconds. +
    +
    +

    +G

    +
    +
    Geo - Class in biweekly.property
    + Defines a set of geographical coordinates.
    Geo(Double, Double) - +Constructor for class biweekly.property.Geo +
    Creates a new geo property. +
    GeoMarshaller - Class in biweekly.property.marshaller
    Marshals Geo properties.
    GeoMarshaller() - +Constructor for class biweekly.property.marshaller.GeoMarshaller +
      +
    get(String) - +Static method in class biweekly.ICalDataType +
    Searches for a parameter value and creates one if it cannot be found. +
    get(String) - +Static method in class biweekly.parameter.CalendarUserType +
    Searches for a parameter value and creates one if it cannot be found. +
    get(String) - +Static method in class biweekly.parameter.Encoding +
    Searches for a parameter value and creates one if it cannot be found. +
    get(String) - +Static method in class biweekly.parameter.FreeBusyType +
    Searches for a parameter value and creates one if it cannot be found. +
    get(String) - +Static method in class biweekly.parameter.ParticipationStatus +
    Searches for a parameter value and creates one if it cannot be found. +
    get(String) - +Static method in class biweekly.parameter.Range +
    Searches for a parameter value and creates one if it cannot be found. +
    get(String) - +Static method in class biweekly.parameter.Related +
    Searches for a parameter value and creates one if it cannot be found. +
    get(String) - +Static method in class biweekly.parameter.RelationshipType +
    Searches for a parameter value and creates one if it cannot be found. +
    get(String) - +Static method in class biweekly.parameter.Role +
    Searches for a parameter value and creates one if it cannot be found. +
    get(V) - +Method in class biweekly.util.CaseClasses +
    Searches for a case object by value, creating a new object if one cannot + be found. +
    get(K) - +Method in class biweekly.util.ListMultimap +
    Gets the values associated with the key. +
    getAbbr() - +Method in enum biweekly.util.Recurrence.DayOfWeek +
    Gets the day's abbreviation. +
    getAction() - +Method in class biweekly.component.VAlarm +
    Gets the type of action to invoke when the alarm is triggered. +
    getActualToken() - +Method in exception biweekly.io.json.JCalParseException +
    Gets the JSON token that was read. +
    getAlarms() - +Method in class biweekly.component.VEvent +
    Gets the alarms that are assigned to this event. +
    getAlarms() - +Method in class biweekly.component.VTodo +
    Gets the alarms that are assigned to this to-do. +
    getAltRepresentation() - +Method in class biweekly.parameter.ICalParameters +
    Gets a URI pointing to additional information about the entity + represented by the property. +
    getAltRepresentation() - +Method in class biweekly.property.Comment +
      +
    getAltRepresentation() - +Method in class biweekly.property.Contact +
      +
    getAltRepresentation() - +Method in class biweekly.property.Description +
      +
    getAltRepresentation() - +Method in class biweekly.property.Location +
      +
    getAltRepresentation() - +Method in class biweekly.property.Resources +
      +
    getAltRepresentation() - +Method in class biweekly.property.Summary +
      +
    getArray() - +Method in class biweekly.io.json.JsonValue +
    Gets the JSON array elements. +
    getAttachments() - +Method in class biweekly.component.VAlarm +
    Gets any attachments that are associated with the alarm. +
    getAttachments() - +Method in class biweekly.component.VEvent +
    Gets any attachments that are associated with the event. +
    getAttachments() - +Method in class biweekly.component.VJournal +
    Gets any attachments that are associated with the journal entry. +
    getAttachments() - +Method in class biweekly.component.VTodo +
    Gets any attachments that are associated with the to-do. +
    getAttendees() - +Method in class biweekly.component.VAlarm +
    Gets the people who will be emailed when the alarm fires (only applicable + for EMAIL alarms). +
    getAttendees() - +Method in class biweekly.component.VEvent +
    Gets the people who are attending the event. +
    getAttendees() - +Method in class biweekly.component.VFreeBusy +
    Gets the people who are involved in the free/busy entry. +
    getAttendees() - +Method in class biweekly.component.VJournal +
    Gets the people who are involved in the journal entry. +
    getAttendees() - +Method in class biweekly.component.VTodo +
    Gets the people who are involved in the to-do. +
    getByComponent(Class<? extends ICalComponent>) - +Method in class biweekly.ValidationWarnings +
    Gets all validation warnings of a given component. +
    getByDay() - +Method in class biweekly.util.Recurrence +
    Gets the day components of the BYDAY rule part. +
    getByDayPrefixes() - +Method in class biweekly.util.Recurrence +
    Gets the numeric components of the BYDAY rule part. +
    getByHour() - +Method in class biweekly.util.Recurrence +
    Gets the BYHOUR rule part. +
    getByMinute() - +Method in class biweekly.util.Recurrence +
    Gets the BYMINUTE rule part. +
    getByMonth() - +Method in class biweekly.util.Recurrence +
    Gets the BYMONTH rule part. +
    getByMonthDay() - +Method in class biweekly.util.Recurrence +
    Gets the BYMONTHDAY rule part. +
    getByProperty(Class<? extends ICalProperty>) - +Method in class biweekly.ValidationWarnings +
    Gets all validation warnings of a given property. +
    getBySecond() - +Method in class biweekly.util.Recurrence +
    Gets the BYSECOND rule part. +
    getBySetPos() - +Method in class biweekly.util.Recurrence +
    Gets the BYSETPOS rule part. +
    getByWeekNo() - +Method in class biweekly.util.Recurrence +
    Gets the BYWEEKNO rule part. +
    getByYearDay() - +Method in class biweekly.util.Recurrence +
    Gets the BYYEARDAY rule part. +
    getCalendarScale() - +Method in class biweekly.ICalendar +
    Gets the calendar system that this iCalendar object uses. +
    getCalendarUserType() - +Method in class biweekly.parameter.ICalParameters +
    Gets the type of user an attendee is (for example, an "individual" or a + "room"). +
    getCalendarUserType() - +Method in class biweekly.property.Attendee +
    Gets the type of user the attendee is (for example, an "individual" or a + "room"). +
    getCategories() - +Method in class biweekly.component.VEvent +
    Gets a list of "tags" or "keywords" that describe the event. +
    getCategories() - +Method in class biweekly.component.VJournal +
    Gets a list of "tags" or "keywords" that describe the journal entry. +
    getCategories() - +Method in class biweekly.component.VTodo +
    Gets a list of "tags" or "keywords" that describe the to-do. +
    getClassification() - +Method in class biweekly.component.VEvent +
    Gets the level of sensitivity of the event data. +
    getClassification() - +Method in class biweekly.component.VJournal +
    Gets the level of sensitivity of the journal entry. +
    getClassification() - +Method in class biweekly.component.VTodo +
    Gets the level of sensitivity of the to-do data. +
    getComments() - +Method in class biweekly.component.Observance +
    Gets the comments attached to the timezone observance. +
    getComments() - +Method in class biweekly.component.VEvent +
    Gets the comments attached to the event. +
    getComments() - +Method in class biweekly.component.VFreeBusy +
    Gets the comments attached to the free/busy entry. +
    getComments() - +Method in class biweekly.component.VJournal +
    Gets the comments attached to the journal entry. +
    getComments() - +Method in class biweekly.component.VTodo +
    Gets the comments attached to the to-do. +
    getCommonName() - +Method in class biweekly.parameter.ICalParameters +
    Gets the display name of a person. +
    getCommonName() - +Method in class biweekly.property.Attendee +
      +
    getCommonName() - +Method in class biweekly.property.Organizer +
      +
    getCompleted() - +Method in class biweekly.component.VTodo +
    Gets the date and time that the to-do was completed. +
    getComponent(Class<T>) - +Method in class biweekly.component.ICalComponent +
    Gets the first component of a given class. +
    getComponent() - +Method in class biweekly.ValidationWarnings.WarningsGroup +
    Gets the component object that caused the validation warnings. +
    getComponentClass() - +Method in class biweekly.component.marshaller.ICalComponentMarshaller +
    Gets the component class. +
    getComponentHierarchy() - +Method in class biweekly.ValidationWarnings.WarningsGroup +
    Gets the hierarchy of components that the property or component + belongs to. +
    getComponentMarshaller(String) - +Method in class biweekly.io.ICalMarshallerRegistrar +
    Gets a component marshaller by name. +
    getComponentMarshaller(Class<? extends ICalComponent>) - +Method in class biweekly.io.ICalMarshallerRegistrar +
    Gets a component marshaller by class. +
    getComponentMarshaller(ICalComponent) - +Method in class biweekly.io.ICalMarshallerRegistrar +
    Gets the appropriate component marshaller for a given component instance. +
    getComponentName() - +Method in class biweekly.component.marshaller.ICalComponentMarshaller +
    Gets the component's name. +
    getComponents(Class<T>) - +Method in class biweekly.component.ICalComponent +
    Gets all components of a given class. +
    getComponents() - +Method in class biweekly.component.ICalComponent +
    Gets all the sub-components associated with this component. +
    getComponents(T) - +Method in class biweekly.component.marshaller.ICalComponentMarshaller +
    Gets the sub-components to marshal. +
    getContact() - +Method in class biweekly.component.VFreeBusy +
    Gets the contact associated with the free/busy entry. +
    getContacts() - +Method in class biweekly.component.VEvent +
    Gets the contacts associated with the event. +
    getContacts() - +Method in class biweekly.component.VJournal +
    Gets the contacts associated with the journal entry. +
    getContacts() - +Method in class biweekly.component.VTodo +
    Gets the contacts associated with the to-do. +
    getCount() - +Method in class biweekly.util.Recurrence +
    Gets the number of times the rule will be repeated. +
    getCreated() - +Method in class biweekly.component.VEvent +
    Gets the date-time that the event was initially created. +
    getCreated() - +Method in class biweekly.component.VJournal +
    Gets the date-time that the journal entry was initially created. +
    getCreated() - +Method in class biweekly.component.VTodo +
    Gets the date-time that the to-do was initially created. +
    getData() - +Method in class biweekly.property.Attachment +
    Gets the attachment's binary data. +
    getDataType() - +Method in class biweekly.property.RawProperty +
      +
    getDate() - +Method in class biweekly.property.Trigger +
    Gets the date-time that the alarm will trigger. +
    getDate() - +Method in class biweekly.util.DateTimeComponents +
    Gets the date component +
    getDateDue() - +Method in class biweekly.component.VTodo +
    Gets the date that a to-do is due by. +
    getDateEnd() - +Method in class biweekly.component.VEvent +
    Gets the date that the event ends. +
    getDateEnd() - +Method in class biweekly.component.VFreeBusy +
    Gets the date that the free/busy entry ends. +
    getDates() - +Method in class biweekly.property.RecurrenceDates +
    Gets the recurrence dates. +
    getDateStart() - +Method in class biweekly.component.Observance +
    Gets the date that the timezone observance starts. +
    getDateStart() - +Method in class biweekly.component.VEvent +
    Gets the date that the event starts. +
    getDateStart() - +Method in class biweekly.component.VFreeBusy +
    Gets the date that the free/busy entry starts. +
    getDateStart() - +Method in class biweekly.component.VJournal +
    Gets the date that the journal entry starts. +
    getDateStart() - +Method in class biweekly.component.VTodo +
    Gets the date that the to-do starts. +
    getDateTimeStamp() - +Method in class biweekly.component.VEvent +
    Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the event was + last modified (the LastModified property also holds this + information). +
    getDateTimeStamp() - +Method in class biweekly.component.VFreeBusy +
    Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the free/busy + entry was last modified (the LastModified property also holds + this information). +
    getDateTimeStamp() - +Method in class biweekly.component.VJournal +
    Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the journal + entry was last modified (the LastModified property also holds + this information). +
    getDateTimeStamp() - +Method in class biweekly.component.VTodo +
    Gets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the to-do was + last modified (the LastModified property also holds this + information). +
    getDaylightSavingsTime() - +Method in class biweekly.component.VTimezone +
    Gets the timezone's "daylight savings" observance time ranges. +
    getDays() - +Method in class biweekly.util.Duration +
    Gets the number of days. +
    getDefaultDataType() - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Gets the property's default data type. +
    getDelegatedFrom() - +Method in class biweekly.parameter.ICalParameters +
    Gets the people who have delegated their responsibility to an attendee. +
    getDelegatedFrom() - +Method in class biweekly.property.Attendee +
    Gets the people who have delegated their responsibility to the attendee. +
    getDelegatedTo() - +Method in class biweekly.parameter.ICalParameters +
    Gets the people to which an attendee has delegated his or her + responsibility. +
    getDelegatedTo() - +Method in class biweekly.property.Attendee +
    Gets the people to which the attendee has delegated his or her + responsibility. +
    getDescription() - +Method in class biweekly.component.VAlarm +
    + Gets a detailed description of the alarm. +
    getDescription() - +Method in class biweekly.component.VEvent +
    Gets a detailed description of the event. +
    getDescription() - +Method in class biweekly.component.VTodo +
    Gets a detailed description of the to-do. +
    getDescription() - +Method in class biweekly.property.RequestStatus +
    Gets the human-readable description of the status. +
    getDescriptions() - +Method in class biweekly.component.VJournal +
    Gets the detailed descriptions to the journal entry. +
    getDirectoryEntry() - +Method in class biweekly.parameter.ICalParameters +
    Gets a URI that contains additional information about the person. +
    getDirectoryEntry() - +Method in class biweekly.property.Attendee +
      +
    getDirectoryEntry() - +Method in class biweekly.property.Organizer +
      +
    getDocument() - +Method in class biweekly.io.xml.XCalDocument +
    Gets the raw XML DOM object. +
    getDuration() - +Method in class biweekly.component.VAlarm +
    Gets the length of the pause between alarm repetitions. +
    getDuration() - +Method in class biweekly.component.VEvent +
    Gets the duration of the event. +
    getDuration() - +Method in class biweekly.component.VTodo +
    Gets the duration of the to-do. +
    getDuration() - +Method in class biweekly.property.Trigger +
    Gets the relative time at which the alarm will trigger. +
    getDuration() - +Method in class biweekly.util.Period +
    Gets the length of time after the start date. +
    getElement() - +Method in class biweekly.io.xml.XCalElement +
    Gets the wrapped XML element. +
    getEncoding() - +Method in class biweekly.parameter.ICalParameters +
    Gets the encoding of the property value (for example, "base64"). +
    getEndDate() - +Method in class biweekly.util.Period +
    Gets the end date. +
    getEvents() - +Method in class biweekly.ICalendar +
    Gets the events. +
    getExceptionDates() - +Method in class biweekly.component.Observance +
    Gets the list of exceptions to the timezone observance. +
    getExceptionDates() - +Method in class biweekly.component.VEvent +
    Gets the list of exceptions to the recurrence rule defined in the event + (if one is defined). +
    getExceptionDates() - +Method in class biweekly.component.VJournal +
    Gets the list of exceptions to the recurrence rule defined in the journal + entry (if one is defined). +
    getExceptionDates() - +Method in class biweekly.component.VTodo +
    Gets the list of exceptions to the recurrence rule defined in the to-do + (if one is defined). +
    getExceptionRules() - +Method in class biweekly.component.VEvent +
    + Gets the exceptions for the RecurrenceRule property. +
    getExceptionRules() - +Method in class biweekly.component.VJournal +
    + Gets the exceptions for the RecurrenceRule property. +
    getExceptionRules() - +Method in class biweekly.component.VTodo +
    + Gets the exceptions for the RecurrenceRule property. +
    getExceptionText() - +Method in class biweekly.property.RequestStatus +
    Gets any additional data related to the response. +
    getExpectedToken() - +Method in exception biweekly.io.json.JCalParseException +
    Gets the JSON token that the parser was expected. +
    getExperimentalComponent(String) - +Method in class biweekly.component.ICalComponent +
    Gets the first experimental sub-component with a given name. +
    getExperimentalComponents(String) - +Method in class biweekly.component.ICalComponent +
    Gets all experimental sub-component with a given name. +
    getExperimentalComponents() - +Method in class biweekly.component.ICalComponent +
    Gets all experimental sub-components associated with this component. +
    getExperimentalProperties(String) - +Method in class biweekly.component.ICalComponent +
    Gets all experimental properties with a given name. +
    getExperimentalProperties() - +Method in class biweekly.component.ICalComponent +
    Gets all experimental properties associated with this component. +
    getExperimentalProperty(String) - +Method in class biweekly.component.ICalComponent +
    Gets the first experimental property with a given name. +
    getFileContents(File) - +Static method in class biweekly.util.IOUtils +
    Reads the contents of a text file. +
    getFileContents(File, String) - +Static method in class biweekly.util.IOUtils +
    Reads the contents of a text file. +
    getFirstChildElement(Element) - +Static method in class biweekly.util.XmlUtils +
    Gets the first child element of an element. +
    getFoldingScheme() - +Method in class biweekly.io.text.ICalRawWriter +
    Gets the rules for how each line is folded. +
    getFoldingScheme() - +Method in class biweekly.io.text.ICalWriter +
    Gets the rules for how each line is folded. +
    getFormatDateFormat() - +Method in enum biweekly.util.ISOFormat +
    Builds a DateFormat object for formatting dates in this ISO + format. +
    getFormatType() - +Method in class biweekly.parameter.ICalParameters +
    Gets the content-type of the property's value. +
    getFormatType() - +Method in class biweekly.property.Attachment +
      +
    getFreeBusies() - +Method in class biweekly.ICalendar +
    Gets the free/busy entries. +
    getFreeBusy() - +Method in class biweekly.component.VFreeBusy +
    Gets the person's availabilities over certain time periods (for example, + "free" between 1pm-3pm, but "busy" between 3pm-4pm). +
    getFreeBusyType() - +Method in class biweekly.parameter.ICalParameters +
    Gets the person's status over the time periods that are specified in a + FreeBusy property (for example, "free" or "busy"). +
    getFrequency() - +Method in class biweekly.util.Recurrence +
    Gets the frequency. +
    getGeo() - +Method in class biweekly.component.VEvent +
    Gets a set of geographical coordinates. +
    getGeo() - +Method in class biweekly.component.VTodo +
    Gets a set of geographical coordinates. +
    getHour() - +Method in class biweekly.util.DateTimeComponents +
    Gets the hour component +
    getHour() - +Method in class biweekly.util.UtcOffset +
    Gets the hour component. +
    getHourOffset() - +Method in class biweekly.property.UtcOffsetProperty +
      +
    getHours() - +Method in class biweekly.util.Duration +
    Gets the number of hours. +
    getICalendarMarshaller() - +Static method in class biweekly.io.ICalMarshallerRegistrar +
    Convenience method for getting the marshaller of the root iCalendar + component ("VCALENDAR"). +
    getIndent() - +Method in class biweekly.io.text.FoldedLineWriter +
    Gets the string that is prepended to each folded line. +
    getIndent() - +Method in class biweekly.io.text.FoldingScheme +
    Gets the string that is used to indent the folded line. +
    getInterval() - +Method in class biweekly.util.Recurrence +
    Gets how often the rule repeats, in relation to the frequency. +
    getJournals() - +Method in class biweekly.ICalendar +
    Gets the journal entries. +
    getLanguage() - +Method in class biweekly.parameter.ICalParameters +
    Gets the language that the property value is written in. +
    getLanguage() - +Method in class biweekly.property.Attendee +
    Gets the language that the common name parameter is written in. +
    getLanguage() - +Method in class biweekly.property.Categories +
      +
    getLanguage() - +Method in class biweekly.property.Comment +
      +
    getLanguage() - +Method in class biweekly.property.Contact +
      +
    getLanguage() - +Method in class biweekly.property.Description +
      +
    getLanguage() - +Method in class biweekly.property.Location +
      +
    getLanguage() - +Method in class biweekly.property.Organizer +
    Gets the language that the common name parameter is written in. +
    getLanguage() - +Method in class biweekly.property.RequestStatus +
      +
    getLanguage() - +Method in class biweekly.property.Resources +
      +
    getLanguage() - +Method in class biweekly.property.Summary +
      +
    getLanguage() - +Method in class biweekly.property.TimezoneName +
      +
    getLastModified() - +Method in class biweekly.component.VEvent +
    Gets the date-time that the event was last changed. +
    getLastModified() - +Method in class biweekly.component.VJournal +
    Gets the date-time that the journal entry was last changed. +
    getLastModified() - +Method in class biweekly.component.VTimezone +
    Gets the date-time that the timezone data was last changed. +
    getLastModified() - +Method in class biweekly.component.VTodo +
    Gets the date-time that the to-do was last changed. +
    getLatitude() - +Method in class biweekly.property.Geo +
    Gets the latitude. +
    getLineLength() - +Method in class biweekly.io.text.FoldedLineWriter +
    Gets the maximum length a line can be before it is folded (excluding the + newline). +
    getLineLength() - +Method in class biweekly.io.text.FoldingScheme +
    Gets the maximum number of characters that can exist on a line before + needing to be folded (not including the newline). +
    getLineNum() - +Method in class biweekly.io.json.JCalRawReader +
    Gets the current line number. +
    getLineNum() - +Method in class biweekly.io.text.FoldedLineReader +
    Gets the starting line number of the last unfolded line that was read. +
    getLineNum() - +Method in class biweekly.io.text.ICalRawReader +
    Gets the line number of the last line that was read. +
    getLocation() - +Method in class biweekly.component.VEvent +
    Gets the physical location of the event. +
    getLocation() - +Method in class biweekly.component.VTodo +
    Gets the physical location of the to-do. +
    getLongitude() - +Method in class biweekly.property.Geo +
    Gets the longitude. +
    getMap() - +Method in class biweekly.util.ListMultimap +
    Gets the underlying Map object. +
    getMaxVersion() - +Method in class biweekly.property.Version +
    Gets the maximum version that a consumer must support in order to + successfully parse the iCalendar object. +
    getMembers() - +Method in class biweekly.parameter.ICalParameters +
    Gets the groups that an attendee is a member of. +
    getMembers() - +Method in class biweekly.property.Attendee +
    Gets the groups that the attendee is a member of. +
    getMessages() - +Method in class biweekly.ValidationWarnings.WarningsGroup +
    Gets the warning messages. +
    getMethod() - +Method in class biweekly.ICalendar +
    Gets the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity. +
    getMinute() - +Method in class biweekly.util.DateTimeComponents +
    Gets the minute component. +
    getMinute() - +Method in class biweekly.util.UtcOffset +
    Gets the minute component. +
    getMinuteOffset() - +Method in class biweekly.property.UtcOffsetProperty +
      +
    getMinutes() - +Method in class biweekly.util.Duration +
    Gets the number of minutes. +
    getMinVersion() - +Method in class biweekly.property.Version +
    Gets the minimum version that a consumer must support in order to + successfully parse the iCalendar object. +
    getMonth() - +Method in class biweekly.util.DateTimeComponents +
    Gets the month component. +
    getName() - +Method in class biweekly.component.RawComponent +
      +
    getName() - +Method in class biweekly.ICalDataType +
    Gets the name of the data type. +
    getName() - +Method in class biweekly.property.RawProperty +
      +
    getNamespaceURI(String) - +Method in class biweekly.io.xml.XCalNamespaceContext +
      +
    getNewline() - +Method in class biweekly.io.text.FoldedLineWriter +
    Gets the newline sequence that is used to separate lines. +
    getNewline() - +Method in class biweekly.io.text.ICalRawWriter +
    Gets the newline sequence that is used to separate lines. +
    getNewline() - +Method in class biweekly.io.text.ICalWriter +
    Gets the newline sequence that is used to separate lines. +
    getObject() - +Method in class biweekly.io.json.JsonValue +
    Gets the JSON object. +
    getOffset() - +Method in class biweekly.property.UtcOffsetProperty +
      +
    getOrganizer() - +Method in class biweekly.component.VEvent +
    Gets the organizer of the event. +
    getOrganizer() - +Method in class biweekly.component.VFreeBusy +
    Gets the person requesting the free/busy time. +
    getOrganizer() - +Method in class biweekly.component.VJournal +
    Gets the organizer of the journal entry. +
    getOrganizer() - +Method in class biweekly.component.VTodo +
    Gets the organizer of the to-do. +
    getParameter(String) - +Method in class biweekly.property.ICalProperty +
    Gets the first value of a parameter with the given name. +
    getParameters() - +Method in class biweekly.property.ICalProperty +
    Gets the property's parameters. +
    getParameters(String) - +Method in class biweekly.property.ICalProperty +
    Gets all values of a parameter with the given name. +
    getParameterValueChangedListener() - +Method in class biweekly.io.text.ICalRawWriter +
    Gets the listener which will be invoked when a parameter's value is + changed due to containing invalid characters. +
    getParseDateFormat() - +Method in enum biweekly.util.ISOFormat +
    Builds a DateFormat object for parsing dates in this ISO format. +
    getParseWarnings() - +Method in class biweekly.io.xml.XCalDocument +
    Gets the warnings from the last parse operation. +
    getParticipationStatus() - +Method in class biweekly.parameter.ICalParameters +
    Gets an attendee's level of participation. +
    getParticipationStatus() - +Method in class biweekly.property.Attendee +
    Gets the attendee's level of participation. +
    getPercentComplete() - +Method in class biweekly.component.VTodo +
    Gets the amount that the to-do task has been completed. +
    getPeriods() - +Method in class biweekly.property.RecurrenceDates +
    Gets the time periods. +
    getPrefix() - +Method in class biweekly.io.xml.XCalNamespaceContext +
    Gets the prefix to use in xpath expressions. +
    getPrefix(String) - +Method in class biweekly.io.xml.XCalNamespaceContext +
      +
    getPrefixes(String) - +Method in class biweekly.io.xml.XCalNamespaceContext +
      +
    getPriority() - +Method in class biweekly.component.VEvent +
    Gets the priority of the event. +
    getPriority() - +Method in class biweekly.component.VTodo +
    Gets the priority of the to-do. +
    getProductId() - +Method in class biweekly.ICalendar +
    Gets the name of the application that created the iCalendar object. +
    getProperties(Class<T>) - +Method in class biweekly.component.ICalComponent +
    Gets all properties of a given class. +
    getProperties() - +Method in class biweekly.component.ICalComponent +
    Gets all the properties associated with this component. +
    getProperties(T) - +Method in class biweekly.component.marshaller.ICalComponentMarshaller +
    Gets the properties to marshal. +
    getProperties(VFreeBusy) - +Method in class biweekly.component.marshaller.VFreeBusyMarshaller +
      +
    getProperty(Class<T>) - +Method in class biweekly.component.ICalComponent +
    Gets the first property of a given class. +
    getProperty() - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.Result +
    Gets the property object. +
    getProperty() - +Method in class biweekly.ValidationWarnings.WarningsGroup +
    Gets the property object that caused the validation warnings. +
    getPropertyClass() - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Gets the property class. +
    getPropertyMarshaller(String) - +Method in class biweekly.io.ICalMarshallerRegistrar +
    Gets a property marshaller by name. +
    getPropertyMarshaller(Class<? extends ICalProperty>) - +Method in class biweekly.io.ICalMarshallerRegistrar +
    Gets a property marshaller by class. +
    getPropertyMarshaller(ICalProperty) - +Method in class biweekly.io.ICalMarshallerRegistrar +
    Gets the appropriate property marshaller for a given property instance. +
    getPropertyMarshaller(QName) - +Method in class biweekly.io.ICalMarshallerRegistrar +
    Gets a property marshaller by XML local name and namespace. +
    getPropertyName() - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Gets the property name. +
    getQName() - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Gets this property's local name and namespace for xCal documents. +
    getRange() - +Method in class biweekly.parameter.ICalParameters +
    Gets the effective range of recurrence instances from the instance + specified by a RecurrenceId property. +
    getRange() - +Method in class biweekly.property.RecurrenceId +
    Gets the effective range of recurrence instances from the instance + specified by this property. +
    getRawComponents() - +Method in class biweekly.property.DateOrDateTimeProperty +
    Gets the raw components of the date-time value. +
    getRecurrenceDates() - +Method in class biweekly.component.Observance +
    Gets the list of dates/periods that help define the recurrence rule of + this timezone observance (if one is defined). +
    getRecurrenceDates() - +Method in class biweekly.component.VEvent +
    Gets the list of dates/periods that help define the recurrence rule of + this event (if one is defined). +
    getRecurrenceDates() - +Method in class biweekly.component.VJournal +
    Gets the list of dates/periods that help define the recurrence rule of + this journal entry (if one is defined). +
    getRecurrenceDates() - +Method in class biweekly.component.VTodo +
    Gets the list of dates/periods that help define the recurrence rule of + this to-do (if one is defined). +
    getRecurrenceId() - +Method in class biweekly.component.VEvent +
    Gets the original value of the DateStart property if the event is + recurring and has been modified. +
    getRecurrenceId() - +Method in class biweekly.component.VJournal +
    Gets the original value of the DateStart property if the event is + recurring and has been modified. +
    getRecurrenceId() - +Method in class biweekly.component.VTodo +
    Gets the original value of the DateStart property if the to-do is + recurring and has been modified. +
    getRecurrenceRule() - +Method in class biweekly.component.Observance +
    Gets how often the timezone observance repeats. +
    getRecurrenceRule() - +Method in class biweekly.component.VEvent +
    Gets how often the event repeats. +
    getRecurrenceRule() - +Method in class biweekly.component.VJournal +
    Gets how often the journal entry repeats. +
    getRecurrenceRule() - +Method in class biweekly.component.VTodo +
    Gets how often the to-do repeats. +
    getRegistrar() - +Method in class biweekly.io.json.JCalReader +
    Gets the object that manages the component/property marshaller objects. +
    getRegistrar() - +Method in class biweekly.io.json.JCalWriter +
    Gets the object that manages the component/property marshaller objects. +
    getRegistrar() - +Method in class biweekly.io.text.ICalReader +
    Gets the object that manages the component/property marshaller objects. +
    getRegistrar() - +Method in class biweekly.io.text.ICalWriter +
    Gets the object that manages the component/property marshaller objects. +
    getRegistrar() - +Method in class biweekly.io.xml.XCalDocument +
    Gets the object that manages the component/property marshaller objects. +
    getRelated() - +Method in class biweekly.parameter.ICalParameters +
    Gets the date-time field that the duration in a Trigger property + is relative to. +
    getRelated() - +Method in class biweekly.property.Trigger +
    Gets the date-time field that the duration is relative to. +
    getRelatedTo() - +Method in class biweekly.component.VEvent +
    Gets the components that the event is related to. +
    getRelatedTo() - +Method in class biweekly.component.VJournal +
    Gets the components that the journal entry is related to. +
    getRelatedTo() - +Method in class biweekly.component.VTodo +
    Gets the components that the to-do is related to. +
    getRelationshipType() - +Method in class biweekly.parameter.ICalParameters +
    Gets the relationship type of a RelatedTo property. +
    getRelationshipType() - +Method in class biweekly.property.RelatedTo +
    Gets the relationship type. +
    getRepeat() - +Method in class biweekly.component.VAlarm +
    Gets the number of times an alarm should be repeated after its initial + trigger. +
    getRequestStatus() - +Method in class biweekly.component.VEvent +
    Gets the response to a scheduling request. +
    getRequestStatus() - +Method in class biweekly.component.VFreeBusy +
    Gets the response to a scheduling request. +
    getRequestStatus() - +Method in class biweekly.component.VJournal +
    Gets the response to a scheduling request. +
    getRequestStatus() - +Method in class biweekly.component.VTodo +
    Gets the response to a scheduling request. +
    getResources() - +Method in class biweekly.component.VEvent +
    Gets the resources that are needed for the event. +
    getResources() - +Method in class biweekly.component.VTodo +
    Gets the resources that are needed for the to-do. +
    getRole() - +Method in class biweekly.parameter.ICalParameters +
    Gets an attendee's role (for example, "chair" or "required participant"). +
    getRole() - +Method in class biweekly.property.Attendee +
    Gets the attendee's role (for example, "chair" or + "required participant"). +
    getRootElement(Document) - +Static method in class biweekly.util.XmlUtils +
    Gets the root element of a document. +
    getRsvp() - +Method in class biweekly.parameter.ICalParameters +
    Gets whether the organizer requests a response from an attendee. +
    getRsvp() - +Method in class biweekly.property.Attendee +
    Gets whether the organizer requests a response from the attendee. +
    getSecond() - +Method in class biweekly.util.DateTimeComponents +
    Gets the second component. +
    getSeconds() - +Method in class biweekly.util.Duration +
    Gets the number of seconds. +
    getSentBy() - +Method in class biweekly.parameter.ICalParameters +
    Gets a person that is acting on behalf of the person defined in the + property. +
    getSentBy() - +Method in class biweekly.property.Attendee +
      +
    getSentBy() - +Method in class biweekly.property.Organizer +
      +
    getSequence() - +Method in class biweekly.component.VEvent +
    Gets the revision number of the event. +
    getSequence() - +Method in class biweekly.component.VJournal +
    Gets the revision number of the journal entry. +
    getSequence() - +Method in class biweekly.component.VTodo +
    Gets the revision number of the to-do. +
    getStandardTimes() - +Method in class biweekly.component.VTimezone +
    Gets the timezone's "standard" observance time ranges. +
    getStandardValues() - +Method in class biweekly.property.Action +
      +
    getStandardValues() - +Method in class biweekly.property.CalendarScale +
      +
    getStandardValues() - +Method in class biweekly.property.Classification +
      +
    getStandardValues() - +Method in class biweekly.property.EnumProperty +
    Gets the list of acceptable values for this property. +
    getStandardValues() - +Method in class biweekly.property.Status +
      +
    getStandardValues() - +Method in class biweekly.property.Transparency +
      +
    getStartDate() - +Method in class biweekly.util.Period +
    Gets the start date. +
    getStatus() - +Method in class biweekly.component.VEvent +
    Gets the status of the event. +
    getStatus() - +Method in class biweekly.component.VJournal +
    Gets the status of the journal entry. +
    getStatus() - +Method in class biweekly.component.VTodo +
    Gets the status of the to-do. +
    getStatusCode() - +Method in class biweekly.property.RequestStatus +
    Gets the status code. +
    getSummary() - +Method in class biweekly.component.VAlarm +
    + Gets the summary of the alarm. +
    getSummary() - +Method in class biweekly.component.VEvent +
    Gets the summary of the event. +
    getSummary() - +Method in class biweekly.component.VJournal +
    Gets the summary of the journal entry. +
    getSummary() - +Method in class biweekly.component.VTodo +
    Gets the summary of the to-do. +
    getTimezoneId() - +Method in class biweekly.component.VTimezone +
    Gets the ID for this timezone. +
    getTimezoneId() - +Method in class biweekly.parameter.ICalParameters +
    Gets the timezone identifier. +
    getTimezoneId() - +Method in class biweekly.property.DateOrDateTimeProperty +
      +
    getTimezoneId() - +Method in class biweekly.property.ExceptionDates +
      +
    getTimezoneId() - +Method in class biweekly.property.RecurrenceDates +
      +
    getTimezoneNames() - +Method in class biweekly.component.Observance +
    Gets the traditional, non-standard names for the timezone observance. +
    getTimezoneOffsetFrom() - +Method in class biweekly.component.Observance +
    Gets the UTC offset that the timezone observance transitions from. +
    getTimezoneOffsetTo() - +Method in class biweekly.component.Observance +
    Gets the UTC offset that the timezone observance transitions to. +
    getTimezones() - +Method in class biweekly.ICalendar +
    Gets the timezones. +
    getTimezoneUrl() - +Method in class biweekly.component.VTimezone +
    Gets the timezone URL, which points to an iCalendar object that contains + further information on the timezone. +
    getTodos() - +Method in class biweekly.ICalendar +
    Gets the to-dos. +
    getTransparency() - +Method in class biweekly.component.VEvent +
    Gets whether an event is visible to free/busy time searches. +
    getTrigger() - +Method in class biweekly.component.VAlarm +
    Gets when the alarm will be triggered. +
    getType() - +Method in class biweekly.property.FreeBusy +
    Gets the person's status over the time periods that are specified in this + property (for example, "free" or "busy"). +
    getUid() - +Method in class biweekly.component.VEvent +
    Gets the unique identifier for this event. +
    getUid() - +Method in class biweekly.component.VFreeBusy +
    Gets the unique identifier for this free/busy entry. +
    getUid() - +Method in class biweekly.component.VJournal +
    Gets the unique identifier for this journal entry. +
    getUid() - +Method in class biweekly.component.VTodo +
    Gets the unique identifier for this to-do. +
    getUntil() - +Method in class biweekly.util.Recurrence +
    Gets the date that the recurrence stops. +
    getUri() - +Method in class biweekly.property.Attachment +
    Gets the attachment's URI. +
    getUrl() - +Method in class biweekly.component.VEvent +
    Gets a URL to a resource that contains additional information about the + event. +
    getUrl() - +Method in class biweekly.component.VFreeBusy +
    Gets a URL to a resource that contains additional information about the + free/busy entry. +
    getUrl() - +Method in class biweekly.component.VJournal +
    Gets a URL to a resource that contains additional information about the + journal entry. +
    getUrl() - +Method in class biweekly.component.VTodo +
    Gets a URL to a resource that contains additional information about the + to-do. +
    getValue() - +Method in class biweekly.io.json.JsonValue +
    Gets the JSON value. +
    getValue() - +Method in class biweekly.parameter.EnumParameterValue +
    Gets the value of the parameter. +
    getValue() - +Method in class biweekly.parameter.ICalParameters +
    Gets the data type of the property's value (for example, "text" or + "datetime"). +
    getValue() - +Method in class biweekly.property.DateOrDateTimeProperty +
    Gets the date-time value. +
    getValue() - +Method in class biweekly.property.RawProperty +
      +
    getValue() - +Method in class biweekly.property.ValuedProperty +
    Gets the value of this property. +
    getValues() - +Method in class biweekly.io.json.JCalValue +
    Gets the raw JSON values. +
    getValues() - +Method in class biweekly.property.FreeBusy +
    Gets all time periods. +
    getValues() - +Method in class biweekly.property.ListProperty +
    Gets the values of this property. +
    getVersion() - +Method in class biweekly.ICalendar +
    Gets the min/max versions a consumer must support in order to + successfully parse the iCalendar object. +
    getWarnings() - +Method in class biweekly.io.json.JCalReader +
    Gets the warnings from the last iCalendar object that was unmarshalled. +
    getWarnings() - +Method in class biweekly.io.text.ICalReader +
    Gets the warnings from the last iCalendar object that was unmarshalled. +
    getWarnings() - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.Result +
    Gets the warnings. +
    getWarnings() - +Method in class biweekly.ValidationWarnings +
    Gets all the validation warnings. +
    getWeeks() - +Method in class biweekly.util.Duration +
    Gets the number of weeks. +
    getWorkweekStarts() - +Method in class biweekly.util.Recurrence +
    Gets the day that the work week starts. +
    getXRules() - +Method in class biweekly.util.Recurrence +
    Gets the non-standard rule parts. +
    getYear() - +Method in class biweekly.util.DateTimeComponents +
    Gets the year component. +
    go() - +Method in class biweekly.Biweekly.WriterChainJson +
    Writes the iCalendar objects to a string. +
    go(OutputStream) - +Method in class biweekly.Biweekly.WriterChainJson +
    Writes the iCalendar objects to a data stream. +
    go(File) - +Method in class biweekly.Biweekly.WriterChainJson +
    Writes the iCalendar objects to a file. +
    go(Writer) - +Method in class biweekly.Biweekly.WriterChainJson +
    Writes the iCalendar objects to a data stream. +
    go() - +Method in class biweekly.Biweekly.WriterChainText +
    Writes the iCalendar objects to a string. +
    go(OutputStream) - +Method in class biweekly.Biweekly.WriterChainText +
    Writes the iCalendar objects to a data stream. +
    go(File) - +Method in class biweekly.Biweekly.WriterChainText +
    Writes the iCalendar objects to a file. +
    go(File, boolean) - +Method in class biweekly.Biweekly.WriterChainText +
    Writes the iCalendar objects to a file. +
    go(Writer) - +Method in class biweekly.Biweekly.WriterChainText +
    Writes the iCalendar objects to a data stream. +
    go() - +Method in class biweekly.Biweekly.WriterChainXml +
    Writes the xCal document to a string. +
    go(OutputStream) - +Method in class biweekly.Biweekly.WriterChainXml +
    Writes the xCal document to an output stream. +
    go(File) - +Method in class biweekly.Biweekly.WriterChainXml +
    Writes the xCal document to a file. +
    go(Writer) - +Method in class biweekly.Biweekly.WriterChainXml +
    Writes the xCal document to a writer. +
    gregorian() - +Static method in class biweekly.property.CalendarScale +
    Creates a new property whose value is set to "gregorian". +
    GROUP - +Static variable in class biweekly.parameter.CalendarUserType +
      +
    +
    +

    +H

    +
    +
    handle(StringBuilder, T) - +Method in interface biweekly.util.StringUtils.JoinCallback +
      +
    handle(StringBuilder, K, V) - +Method in interface biweekly.util.StringUtils.JoinMapCallback +
      +
    hashCode() - +Method in class biweekly.io.json.JsonValue +
      +
    hashCode() - +Method in class biweekly.util.DateTimeComponents +
      +
    hashCode() - +Method in class biweekly.util.Duration +
      +
    hashCode() - +Method in class biweekly.util.ListMultimap +
      +
    hashCode() - +Method in class biweekly.util.Period +
      +
    hashCode() - +Method in class biweekly.util.Recurrence +
      +
    hashCode() - +Method in class biweekly.util.UtcOffset +
      +
    hasNext() - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.SemiStructuredIterator +
    Determines if there are any elements left in the value. +
    hasNext() - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.StructuredIterator +
    Determines if there are any elements left in the value. +
    hasTime - +Variable in class biweekly.property.DateOrDateTimeProperty +
      +
    hasTime() - +Method in class biweekly.property.DateOrDateTimeProperty +
    Determines whether the date-time value has a time component. +
    hasTime() - +Method in class biweekly.property.ExceptionDates +
    Gets whether the dates have time components. +
    hasTime() - +Method in class biweekly.property.RecurrenceDates +
    Gets whether the recurrence dates have time components. +
    hasTime() - +Method in class biweekly.util.Duration +
    Determines if any time components are present. +
    hasTimeUntilDate() - +Method in class biweekly.util.Recurrence +
    Determines whether the UNTIL date has a time component. +
    hours(Integer) - +Method in class biweekly.util.Duration.Builder +
    Sets the number of hours +
    +
    +

    +I

    +
    +
    ICalComponent - Class in biweekly.component
    The base class for iCalendar components.
    ICalComponent() - +Constructor for class biweekly.component.ICalComponent +
      +
    ICalComponentMarshaller<T extends ICalComponent> - Class in biweekly.component.marshaller
    Base class for iCalendar component marshallers.
    ICalComponentMarshaller(Class<T>, String) - +Constructor for class biweekly.component.marshaller.ICalComponentMarshaller +
    Creates a new component marshaller. +
    ICalDataType - Class in biweekly
    Defines the data type of a property's value.
    ICalDateFormatter - Class in biweekly.util
    Helper class that formats and parses iCalendar dates.
    ICalendar - Class in biweekly
    + Represents an iCalendar object.
    ICalendar() - +Constructor for class biweekly.ICalendar +
    + Creates a new iCalendar object. +
    ICalendarMarshaller - Class in biweekly.component.marshaller
     
    ICalendarMarshaller() - +Constructor for class biweekly.component.marshaller.ICalendarMarshaller +
      +
    ICalException - Exception in biweekly
    The common base exception that all exceptions inherit from.
    ICalException() - +Constructor for exception biweekly.ICalException +
      +
    ICalException(String) - +Constructor for exception biweekly.ICalException +
      +
    ICalFloatFormatter - Class in biweekly.util
    Formats floating-point values for iCalendar objects.
    ICalFloatFormatter() - +Constructor for class biweekly.util.ICalFloatFormatter +
    Creates a new formatter with a max of 6 decimals. +
    ICalFloatFormatter(int) - +Constructor for class biweekly.util.ICalFloatFormatter +
    Creates a new formatter. +
    ICalMarshallerRegistrar - Class in biweekly.io
    + Manages a listing of component and property marshallers.
    ICalMarshallerRegistrar() - +Constructor for class biweekly.io.ICalMarshallerRegistrar +
      +
    ICalParameterCaseClasses<T extends EnumParameterValue> - Class in biweekly.parameter
    Manages the list of pre-defined values for a parameter (such as VALUE or + ENCODING).
    ICalParameterCaseClasses(Class<T>) - +Constructor for class biweekly.parameter.ICalParameterCaseClasses +
      +
    ICalParameters - Class in biweekly.parameter
    Contains the list of parameters that belong to a property.
    ICalParameters() - +Constructor for class biweekly.parameter.ICalParameters +
    Creates a parameters list. +
    ICalParameters(ICalParameters) - +Constructor for class biweekly.parameter.ICalParameters +
    Copies an existing parameters list. +
    ICalProperty - Class in biweekly.property
    Base class for all iCalendar properties.
    ICalProperty() - +Constructor for class biweekly.property.ICalProperty +
      +
    ICalPropertyMarshaller<T extends ICalProperty> - Class in biweekly.property.marshaller
    Base class for iCalendar property marshallers.
    ICalPropertyMarshaller(Class<T>, String, ICalDataType) - +Constructor for class biweekly.property.marshaller.ICalPropertyMarshaller +
    Creates a new marshaller. +
    ICalPropertyMarshaller(Class<T>, String, ICalDataType, QName) - +Constructor for class biweekly.property.marshaller.ICalPropertyMarshaller +
    Creates a new marshaller. +
    ICalPropertyMarshaller.DateParser - Class in biweekly.property.marshaller
    Factory class for parsing dates.
    ICalPropertyMarshaller.DateParser(String) - +Constructor for class biweekly.property.marshaller.ICalPropertyMarshaller.DateParser +
    Creates a new date writer object. +
    ICalPropertyMarshaller.DateWriter - Class in biweekly.property.marshaller
    Factory class for writing dates.
    ICalPropertyMarshaller.DateWriter(Date) - +Constructor for class biweekly.property.marshaller.ICalPropertyMarshaller.DateWriter +
    Creates a new date writer object. +
    ICalPropertyMarshaller.ListCallback<T> - Interface in biweekly.property.marshaller
    Callback function used in conjunction with the + list method
    ICalPropertyMarshaller.Result<T extends ICalProperty> - Class in biweekly.property.marshaller
    Represents the result of an unmarshal operation.
    ICalPropertyMarshaller.Result(T, List<String>) - +Constructor for class biweekly.property.marshaller.ICalPropertyMarshaller.Result +
    Creates a new result. +
    ICalPropertyMarshaller.SemiStructuredIterator - Class in biweekly.property.marshaller
    Iterates over the fields in a semi-structured value (a structured value + whose components cannot be multi-valued).
    ICalPropertyMarshaller.SemiStructuredIterator(Iterator<String>) - +Constructor for class biweekly.property.marshaller.ICalPropertyMarshaller.SemiStructuredIterator +
    Constructs a new structured iterator. +
    ICalPropertyMarshaller.Splitter - Class in biweekly.property.marshaller
    Factory class for splitting strings.
    ICalPropertyMarshaller.Splitter(String, String) - +Constructor for class biweekly.property.marshaller.ICalPropertyMarshaller.Splitter +
    Creates a new splitter object. +
    ICalPropertyMarshaller.StructuredIterator - Class in biweekly.property.marshaller
    Iterates over the fields in a structured value.
    ICalPropertyMarshaller.StructuredIterator(Iterator<List<String>>) - +Constructor for class biweekly.property.marshaller.ICalPropertyMarshaller.StructuredIterator +
    Constructs a new structured iterator. +
    ICalRawReader - Class in biweekly.io.text
    Parses an iCalendar data stream.
    ICalRawReader(Reader) - +Constructor for class biweekly.io.text.ICalRawReader +
    Creates a new reader. +
    ICalRawReader.ICalDataStreamListener - Interface in biweekly.io.text
    Handles the iCalendar data as it is read off the data stream.
    ICalRawReader.StopReadingException - Exception in biweekly.io.text
    Instructs an ICalRawReader to stop reading from the data stream + when thrown from an ICalRawReader.ICalDataStreamListener implementation.
    ICalRawReader.StopReadingException() - +Constructor for exception biweekly.io.text.ICalRawReader.StopReadingException +
      +
    ICalRawWriter - Class in biweekly.io.text
    Writes data to an iCalendar data stream.
    ICalRawWriter(Writer) - +Constructor for class biweekly.io.text.ICalRawWriter +
    Creates an iCalendar raw writer using the standard folding scheme and + newline sequence. +
    ICalRawWriter(Writer, FoldingScheme) - +Constructor for class biweekly.io.text.ICalRawWriter +
    Creates an iCalendar raw writer using the standard newline sequence. +
    ICalRawWriter(Writer, FoldingScheme, String) - +Constructor for class biweekly.io.text.ICalRawWriter +
    Creates an iCalendar raw writer. +
    ICalRawWriter.ParameterValueChangedListener - Interface in biweekly.io.text
    Allows you to respond to when a parameter's value is changed due to it + containing invalid characters.
    ICalReader - Class in biweekly.io.text
    + Parses ICalendar objects from an iCalendar data stream.
    ICalReader(String) - +Constructor for class biweekly.io.text.ICalReader +
    Creates a reader that parses iCalendar objects from a string. +
    ICalReader(InputStream) - +Constructor for class biweekly.io.text.ICalReader +
    Creates a reader that parses iCalendar objects from an input stream. +
    ICalReader(File) - +Constructor for class biweekly.io.text.ICalReader +
    Creates a reader that parses iCalendar objects from a file. +
    ICalReader(Reader) - +Constructor for class biweekly.io.text.ICalReader +
    Creates a reader that parses iCalendar objects from a reader. +
    ICalWriter - Class in biweekly.io.text
    + Writes ICalendar objects to an iCalendar data stream.
    ICalWriter(OutputStream) - +Constructor for class biweekly.io.text.ICalWriter +
    Creates an iCalendar writer that writes to an output stream. +
    ICalWriter(OutputStream, FoldingScheme) - +Constructor for class biweekly.io.text.ICalWriter +
    Creates an iCalendar writer that writes to an output stream. +
    ICalWriter(OutputStream, FoldingScheme, String) - +Constructor for class biweekly.io.text.ICalWriter +
    Creates an iCalendar writer that writes to an output stream. +
    ICalWriter(File) - +Constructor for class biweekly.io.text.ICalWriter +
    Creates an iCalendar writer that writes to a file. +
    ICalWriter(File, boolean) - +Constructor for class biweekly.io.text.ICalWriter +
    Creates an iCalendar writer that writes to a file. +
    ICalWriter(File, boolean, FoldingScheme) - +Constructor for class biweekly.io.text.ICalWriter +
    Creates an iCalendar writer that writes to a file. +
    ICalWriter(File, boolean, FoldingScheme, String) - +Constructor for class biweekly.io.text.ICalWriter +
    Creates an iCalendar writer that writes to a file. +
    ICalWriter(Writer) - +Constructor for class biweekly.io.text.ICalWriter +
    Creates an iCalendar writer that writes to a writer. +
    ICalWriter(Writer, FoldingScheme) - +Constructor for class biweekly.io.text.ICalWriter +
    Creates an iCalendar writer that writes to a writer. +
    ICalWriter(Writer, FoldingScheme, String) - +Constructor for class biweekly.io.text.ICalWriter +
    Creates an iCalendar writer that writes to a writer. +
    IN_PROGRESS - +Static variable in class biweekly.parameter.ParticipationStatus +
      +
    increment() - +Method in class biweekly.property.Sequence +
    Increments the sequence number. +
    incrementSequence() - +Method in class biweekly.component.VEvent +
    Increments the revision number of the event. +
    incrementSequence() - +Method in class biweekly.component.VJournal +
    Increments the revision number of the journal entry. +
    incrementSequence() - +Method in class biweekly.component.VTodo +
    Increments the revision number of the to-do. +
    indent(boolean) - +Method in class biweekly.Biweekly.WriterChainJson +
    Sets whether or not to pretty-print the JSON. +
    indent(int) - +Method in class biweekly.Biweekly.WriterChainXml +
    Sets the number of indent spaces to use for pretty-printing. +
    INDIVIDUAL - +Static variable in class biweekly.parameter.CalendarUserType +
      +
    inProgress() - +Static method in class biweekly.property.Status +
    Creates a "in-progress" status property (only valid for to-do + components). +
    INTEGER - +Static variable in class biweekly.ICalDataType +
      +
    IntegerProperty - Class in biweekly.property
    Represents a property whose value is an integer.
    IntegerProperty(Integer) - +Constructor for class biweekly.property.IntegerProperty +
    Creates a new integer property. +
    IntegerPropertyMarshaller<T extends IntegerProperty> - Class in biweekly.property.marshaller
    Marshals properties that have integer values.
    IntegerPropertyMarshaller(Class<T>, String) - +Constructor for class biweekly.property.marshaller.IntegerPropertyMarshaller +
      +
    interval(Integer) - +Method in class biweekly.util.Recurrence.Builder +
    Gets how often the rule repeats, in relation to the frequency. +
    invalidLine(String) - +Method in interface biweekly.io.text.ICalRawReader.ICalDataStreamListener +
    Called when a line cannot be parsed. +
    IOUtils - Class in biweekly.util
    I/O helper classes.
    is(String) - +Method in class biweekly.property.EnumProperty +
    Compares the property's value with a given string (case-insensitive). +
    isAudio() - +Method in class biweekly.property.Action +
    Determines if this property is an "audio" action. +
    isCancelled() - +Method in class biweekly.property.Status +
    Determines if the status is set to "cancelled". +
    isCaretDecodingEnabled() - +Method in class biweekly.io.text.ICalRawReader +
    + Gets whether the reader will decode parameter values that use circumflex + accent encoding (enabled by default). +
    isCaretDecodingEnabled() - +Method in class biweekly.io.text.ICalReader +
    Gets whether the reader will decode parameter values that use circumflex + accent encoding (enabled by default). +
    isCaretEncodingEnabled() - +Method in class biweekly.io.text.ICalRawWriter +
    + Gets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default). +
    isCaretEncodingEnabled() - +Method in class biweekly.io.text.ICalWriter +
    + Gets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default). +
    isCompleted() - +Method in class biweekly.property.Status +
    Determines if the status is set to "completed". +
    isConfidential() - +Method in class biweekly.property.Classification +
    Determines if the classification level is "confidential". +
    isConfirmed() - +Method in class biweekly.property.Status +
    Determines if the status is set to "confirmed". +
    isDisplay() - +Method in class biweekly.property.Action +
    Determines if this property is an "display" action. +
    isDraft() - +Method in class biweekly.property.Status +
    Determines if the status is set to "draft". +
    isEmail() - +Method in class biweekly.property.Action +
    Determines if this property is an "email" action. +
    isEmpty() - +Method in class biweekly.util.ListMultimap +
    Determines if the multimap is empty or not. +
    isEmpty() - +Method in class biweekly.ValidationWarnings +
    Determines whether there are any validation warnings. +
    isFinal() - +Method in class biweekly.property.Status +
    Determines if the status is set to "final". +
    isGregorian() - +Method in class biweekly.property.CalendarScale +
    Determines whether the property is set to "gregorian". +
    isHigh() - +Method in class biweekly.property.Priority +
    Determines if this priority is considered "high" priority. +
    isIndent() - +Method in class biweekly.io.json.JCalRawWriter +
    Gets whether or not the JSON will be pretty-printed. +
    isIndent() - +Method in class biweekly.io.json.JCalWriter +
    Gets whether or not the JSON will be pretty-printed. +
    isInProgress() - +Method in class biweekly.property.Status +
    Determines if the status is set to "in-progress". +
    isLocalTime() - +Method in class biweekly.property.DateOrDateTimeProperty +
    Gets whether the date should be outputted in local time (without a + timezone). +
    isLow() - +Method in class biweekly.property.Priority +
    Determines if this priority is considered "low" priority. +
    isMedium() - +Method in class biweekly.property.Priority +
    Determines if this priority is considered "medium" priority. +
    isNeedsAction() - +Method in class biweekly.property.Status +
    Determines if the status is set to "needs-action". +
    isNull() - +Method in class biweekly.io.json.JsonValue +
    Determines if the value is "null" or not. +
    ISOFormat - Enum in biweekly.util
    Represents the various ISO8601 date-time formats that iCalendar dates can be + represented as.
    isOpaque() - +Method in class biweekly.property.Transparency +
    Determines if the event is visible to free/busy time searches. +
    isPrior() - +Method in class biweekly.util.Duration +
    Gets whether the duration is negative. +
    isPrivate() - +Method in class biweekly.property.Classification +
    Determines if the classification level is "private". +
    isPublic() - +Method in class biweekly.property.Classification +
    Determines if the classification level is "public". +
    isSingleSpaceFoldingEnabled() - +Method in class biweekly.io.text.FoldedLineReader +
    Gets whether the reader will only ignore the first whitespace character + it encounters at the beginning of a folded line. +
    isTentative() - +Method in class biweekly.property.Status +
    Determines if the status is set to "tentative". +
    isTransparent() - +Method in class biweekly.property.Transparency +
    Determines if the event is hidden from free/busy time searches. +
    isUndefined() - +Method in class biweekly.property.Priority +
    Determines if this priority has an "undefined" value. +
    isUtc() - +Method in class biweekly.util.DateTimeComponents +
    Gets whether the time is in UTC or not +
    isV2_0() - +Method in class biweekly.property.Version +
    Determines if this version is the default iCalendar version. +
    iterator() - +Method in class biweekly.util.ListMultimap +
      +
    iterator() - +Method in class biweekly.ValidationWarnings +
    Iterates over each warning group (same as calling + getWarnings().iterator()). +
    +
    +

    +J

    +
    +
    JCalParseException - Exception in biweekly.io.json
    Thrown during the parsing of a JSON-encoded iCalendar object (jCal) when the + jCal object is not formatted in the correct way (the JSON syntax is valid, + but it's not in the correct jCal format).
    JCalParseException(JsonToken, JsonToken) - +Constructor for exception biweekly.io.json.JCalParseException +
    Creates a jCal parse exception. +
    JCalRawReader - Class in biweekly.io.json
    Parses an iCalendar JSON data stream (jCal).
    JCalRawReader(Reader) - +Constructor for class biweekly.io.json.JCalRawReader +
    Creates a new reader. +
    JCalRawReader.JCalDataStreamListener - Interface in biweekly.io.json
    Handles the iCalendar data as it is read off the data stream.
    JCalRawWriter - Class in biweekly.io.json
    Writes data to an iCalendar JSON data stream (jCal).
    JCalRawWriter(Writer, boolean) - +Constructor for class biweekly.io.json.JCalRawWriter +
    Creates a new raw writer. +
    JCalReader - Class in biweekly.io.json
    + Parses ICalendar objects from a jCal data stream (JSON).
    JCalReader(String) - +Constructor for class biweekly.io.json.JCalReader +
    Creates a jCard reader. +
    JCalReader(InputStream) - +Constructor for class biweekly.io.json.JCalReader +
    Creates a jCard reader. +
    JCalReader(File) - +Constructor for class biweekly.io.json.JCalReader +
    Creates a jCard reader. +
    JCalReader(Reader) - +Constructor for class biweekly.io.json.JCalReader +
    Creates a jCard reader. +
    JCalValue - Class in biweekly.io.json
    Holds the value of a jCal property.
    JCalValue(List<JsonValue>) - +Constructor for class biweekly.io.json.JCalValue +
    Creates a new jCal value. +
    JCalValue(JsonValue...) - +Constructor for class biweekly.io.json.JCalValue +
    Creates a new jCal value. +
    JCalWriter - Class in biweekly.io.json
    + Writes ICalendar objects to a JSON data stream (jCal).
    JCalWriter(OutputStream) - +Constructor for class biweekly.io.json.JCalWriter +
    Creates a jCal writer that writes to an output stream. +
    JCalWriter(OutputStream, boolean) - +Constructor for class biweekly.io.json.JCalWriter +
    Creates a jCal writer that writes to an output stream. +
    JCalWriter(File) - +Constructor for class biweekly.io.json.JCalWriter +
    Creates a jCal writer that writes to a file. +
    JCalWriter(File, boolean) - +Constructor for class biweekly.io.json.JCalWriter +
    Creates a jCal writer that writes to a file. +
    JCalWriter(Writer) - +Constructor for class biweekly.io.json.JCalWriter +
    Creates a jCal writer that writes to a writer. +
    JCalWriter(Writer, boolean) - +Constructor for class biweekly.io.json.JCalWriter +
    Creates a jCal writer that writes to a writer. +
    join(Collection<T>, String) - +Static method in class biweekly.util.StringUtils +
    Joins a collection of values into a delimited list. +
    join(Collection<T>, String, StringBuilder) - +Static method in class biweekly.util.StringUtils +
    Joins a collection of values into a delimited list. +
    join(Collection<T>, String, StringUtils.JoinCallback<T>) - +Static method in class biweekly.util.StringUtils +
    Joins a collection of values into a delimited list. +
    join(Collection<T>, String, StringBuilder, StringUtils.JoinCallback<T>) - +Static method in class biweekly.util.StringUtils +
    Joins a collection of values into a delimited list. +
    join(Map<K, V>, String, StringUtils.JoinMapCallback<K, V>) - +Static method in class biweekly.util.StringUtils +
    Joins a map into a delimited list. +
    JsonValue - Class in biweekly.io.json
    Represents a JSON value, array, or object.
    JsonValue(Object) - +Constructor for class biweekly.io.json.JsonValue +
    Creates a JSON value (such as a string or integer). +
    JsonValue(List<JsonValue>) - +Constructor for class biweekly.io.json.JsonValue +
    Creates a JSON array. +
    JsonValue(Map<String, JsonValue>) - +Constructor for class biweekly.io.json.JsonValue +
    Creates a JSON object. +
    +
    +

    +K

    +
    +
    keySet() - +Method in class biweekly.util.ListMultimap +
    Returns all the keys. +
    +
    +

    +L

    +
    +
    LANGUAGE - +Static variable in class biweekly.parameter.ICalParameters +
      +
    LastModified - Class in biweekly.property
    + Defines the date and time that the calendar data in a component was last + changed.
    LastModified(Date) - +Constructor for class biweekly.property.LastModified +
    Creates a last modified property. +
    LastModifiedMarshaller - Class in biweekly.property.marshaller
    Marshals LastModified properties.
    LastModifiedMarshaller() - +Constructor for class biweekly.property.marshaller.LastModifiedMarshaller +
      +
    limit(int) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.Splitter +
    Sets the max number of split strings it should parse. +
    list(String) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Parses a comma-separated list of values. +
    list(Object...) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Writes a comma-separated list of values. +
    list(Collection<T>) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Writes a comma-separated list of values. +
    list(Collection<T>, ICalPropertyMarshaller.ListCallback<T>) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Writes a comma-separated list of values. +
    ListMultimap<K,V> - Class in biweekly.util
    A multimap that uses List objects to store its values.
    ListMultimap() - +Constructor for class biweekly.util.ListMultimap +
    Creates an empty multimap. +
    ListMultimap(int) - +Constructor for class biweekly.util.ListMultimap +
    Creates an empty multimap. +
    ListMultimap(ListMultimap<K, V>) - +Constructor for class biweekly.util.ListMultimap +
    Creates a copy of an existing multimap. +
    ListMultimap(Map<K, List<V>>) - +Constructor for class biweekly.util.ListMultimap +
    Creates a copy of an existing map. +
    ListProperty<T> - Class in biweekly.property
    Represents a property whose value is a list of values.
    ListProperty() - +Constructor for class biweekly.property.ListProperty +
    Creates a new list property. +
    ListProperty(T...) - +Constructor for class biweekly.property.ListProperty +
    Creates a new list property. +
    ListProperty(List<T>) - +Constructor for class biweekly.property.ListProperty +
    Creates a new list property. +
    ListPropertyMarshaller<T extends ListProperty<V>,V> - Class in biweekly.property.marshaller
    Marshals properties that contain a list of values.
    ListPropertyMarshaller(Class<T>, String) - +Constructor for class biweekly.property.marshaller.ListPropertyMarshaller +
      +
    ListPropertyMarshaller(Class<T>, String, ICalDataType) - +Constructor for class biweekly.property.marshaller.ListPropertyMarshaller +
      +
    localTime - +Variable in class biweekly.property.DateOrDateTimeProperty +
      +
    localTz(boolean) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.DateWriter +
    Outputs the date in local time (without a timezone). +
    Location - Class in biweekly.property
    + Defines the physical location of an event.
    Location(String) - +Constructor for class biweekly.property.Location +
    Creates a location property. +
    LocationMarshaller - Class in biweekly.property.marshaller
    Marshals Location properties.
    LocationMarshaller() - +Constructor for class biweekly.property.marshaller.LocationMarshaller +
      +
    +
    +

    +M

    +
    +
    matches(T, String) - +Method in class biweekly.parameter.ICalParameterCaseClasses +
      +
    matches(T, V) - +Method in class biweekly.util.CaseClasses +
    Determines if a value is associated with a case object. +
    matches(String) - +Method in enum biweekly.util.ISOFormat +
    Determines whether a date string is in this ISO format. +
    MEMBER - +Static variable in class biweekly.parameter.ICalParameters +
      +
    Method - Class in biweekly.property
    + Specifies the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity.
    Method(String) - +Constructor for class biweekly.property.Method +
    Creates a new method property. +
    MethodMarshaller - Class in biweekly.property.marshaller
    Marshals Method properties.
    MethodMarshaller() - +Constructor for class biweekly.property.marshaller.MethodMarshaller +
      +
    minutes(Integer) - +Method in class biweekly.util.Duration.Builder +
    Sets the number of minutes +
    missingXmlElements(ICalDataType...) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Creates a CannotParseException, indicating that the XML elements + that the parser expected to find are missing from the property's XML + element. +
    missingXmlElements(String...) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Creates a CannotParseException, indicating that the XML elements + that the parser expected to find are missing from property's XML element. +
    multi(Object...) - +Static method in class biweekly.io.json.JCalValue +
    Creates a multi-valued value. +
    multi(List<?>) - +Static method in class biweekly.io.json.JCalValue +
    Creates a multi-valued value. +
    +
    +

    +N

    +
    +
    NEEDS_ACTION - +Static variable in class biweekly.parameter.ParticipationStatus +
      +
    needsAction() - +Static method in class biweekly.property.Status +
    Creates a "needs-action" status property (only valid for to-do + components). +
    newInstance(String) - +Method in class biweekly.property.marshaller.ActionMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.AttendeeMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.CalendarScaleMarshaller +
      +
    newInstance(ICalDataType, ICalParameters) - +Method in class biweekly.property.marshaller.CategoriesMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.ClassificationMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.CommentMarshaller +
      +
    newInstance(Date) - +Method in class biweekly.property.marshaller.CompletedMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.ContactMarshaller +
      +
    newInstance(Date) - +Method in class biweekly.property.marshaller.CreatedMarshaller +
      +
    newInstance(Date, boolean) - +Method in class biweekly.property.marshaller.DateDueMarshaller +
      +
    newInstance(Date, boolean) - +Method in class biweekly.property.marshaller.DateEndMarshaller +
      +
    newInstance(Date, boolean) - +Method in class biweekly.property.marshaller.DateOrDateTimePropertyMarshaller +
      +
    newInstance(Date, boolean) - +Method in class biweekly.property.marshaller.DateStartMarshaller +
      +
    newInstance(Date) - +Method in class biweekly.property.marshaller.DateTimePropertyMarshaller +
      +
    newInstance(Date) - +Method in class biweekly.property.marshaller.DateTimeStampMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.DescriptionMarshaller +
      +
    newInstance(ICalDataType, ICalParameters) - +Method in class biweekly.property.marshaller.ExceptionDatesMarshaller +
      +
    newInstance(Recurrence) - +Method in class biweekly.property.marshaller.ExceptionRuleMarshaller +
      +
    newInstance(Integer) - +Method in class biweekly.property.marshaller.IntegerPropertyMarshaller +
      +
    newInstance(Date) - +Method in class biweekly.property.marshaller.LastModifiedMarshaller +
      +
    newInstance(ICalDataType, ICalParameters) - +Method in class biweekly.property.marshaller.ListPropertyMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.LocationMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.MethodMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.OrganizerMarshaller +
      +
    newInstance(Integer) - +Method in class biweekly.property.marshaller.PercentCompleteMarshaller +
      +
    newInstance(Integer) - +Method in class biweekly.property.marshaller.PriorityMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.ProductIdMarshaller +
      +
    newInstance(Date, boolean) - +Method in class biweekly.property.marshaller.RecurrenceIdMarshaller +
      +
    newInstance(Recurrence) - +Method in class biweekly.property.marshaller.RecurrencePropertyMarshaller +
    Creates a new instance of the recurrence property. +
    newInstance(Recurrence) - +Method in class biweekly.property.marshaller.RecurrenceRuleMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.RelatedToMarshaller +
      +
    newInstance(Integer) - +Method in class biweekly.property.marshaller.RepeatMarshaller +
      +
    newInstance(ICalDataType, ICalParameters) - +Method in class biweekly.property.marshaller.ResourcesMarshaller +
      +
    newInstance(Integer) - +Method in class biweekly.property.marshaller.SequenceMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.StatusMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.SummaryMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.TextPropertyMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.TimezoneIdMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.TimezoneNameMarshaller +
      +
    newInstance(UtcOffset) - +Method in class biweekly.property.marshaller.TimezoneOffsetFromMarshaller +
      +
    newInstance(UtcOffset) - +Method in class biweekly.property.marshaller.TimezoneOffsetToMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.TimezoneUrlMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.TransparencyMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.UidMarshaller +
      +
    newInstance(String) - +Method in class biweekly.property.marshaller.UrlMarshaller +
      +
    newInstance(UtcOffset) - +Method in class biweekly.property.marshaller.UtcOffsetPropertyMarshaller +
      +
    NEWLINE - +Static variable in class biweekly.util.StringUtils +
    The local computer's newline character sequence. +
    next() - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.SemiStructuredIterator +
    Gets the next value. +
    nextComponent() - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.StructuredIterator +
    Gets the next component. +
    nextString() - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.StructuredIterator +
    Gets the first value of the next component. +
    NON_PARTICIPANT - +Static variable in class biweekly.parameter.Role +
      +
    +
    +

    +O

    +
    +
    object(ListMultimap<String, Object>) - +Static method in class biweekly.io.json.JCalValue +
    Creates an object value. +
    object(Map<String, List<T>>) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Writes an object property value to a string. +
    object(String) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Parses an object property value. +
    Observance - Class in biweekly.component
    Parent class for the "daylight" and "standard" timezone observances.
    Observance() - +Constructor for class biweekly.component.Observance +
      +
    offset - +Variable in class biweekly.property.UtcOffsetProperty +
      +
    onParameterValueChanged(String, String, String, String) - +Method in interface biweekly.io.text.ICalRawWriter.ParameterValueChangedListener +
    Called when a parameter value is changed. +
    opaque() - +Static method in class biweekly.property.Transparency +
    Creates a property that marks the event as being visible to free/busy + time searches. +
    OPT_PARTICIPANT - +Static variable in class biweekly.parameter.Role +
      +
    Organizer - Class in biweekly.property
    + Defines an organizer.
    Organizer(String) - +Constructor for class biweekly.property.Organizer +
    Creates an organizer property +
    OrganizerMarshaller - Class in biweekly.property.marshaller
    Marshals Organizer properties.
    OrganizerMarshaller() - +Constructor for class biweekly.property.marshaller.OrganizerMarshaller +
      +
    +
    +

    +P

    +
    +
    parameters - +Variable in class biweekly.property.ICalProperty +
    The property parameters. +
    PARENT - +Static variable in class biweekly.parameter.RelationshipType +
      +
    parse(String) - +Static method in class biweekly.Biweekly +
    Parses an iCalendar object string. +
    parse(File) - +Static method in class biweekly.Biweekly +
    Parses an iCalendar file. +
    parse(InputStream) - +Static method in class biweekly.Biweekly +
    Parses an iCalendar data stream. +
    parse(Reader) - +Static method in class biweekly.Biweekly +
    Parses an iCalendar data stream. +
    parse() - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.DateParser +
    Parses the date string. +
    parse(String) - +Static method in class biweekly.util.DateTimeComponents +
    Parses the components out of a date-time string. +
    parse(String) - +Static method in class biweekly.util.Duration +
    Parses a duration string. +
    parse(String) - +Static method in class biweekly.util.ICalDateFormatter +
    Parses an iCalendar date. +
    parse(String, TimeZone) - +Static method in class biweekly.util.ICalDateFormatter +
    Parses an iCalendar date. +
    parse(String) - +Static method in class biweekly.util.UtcOffset +
    Parses a UTC offset from a string. +
    parseAll() - +Method in class biweekly.io.xml.XCalDocument +
    Parses all the ICalendar objects from the xCal document. +
    parseFirst() - +Method in class biweekly.io.xml.XCalDocument +
    Parses the first ICalendar object from the xCal document. +
    parseJson(String) - +Static method in class biweekly.Biweekly +
    Parses a jCal data stream (JSON-encoded iCalendar objects). +
    parseJson(File) - +Static method in class biweekly.Biweekly +
    Parses a jCal data stream (JSON-encoded iCalendar objects). +
    parseJson(InputStream) - +Static method in class biweekly.Biweekly +
    Parses a jCal data stream (JSON-encoded iCalendar objects). +
    parseJson(Reader) - +Static method in class biweekly.Biweekly +
    Parses a jCal data stream (JSON-encoded iCalendar objects). +
    parseJson(JCalValue, ICalDataType, ICalParameters) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Unmarshals a property's value from a JSON data stream (jCal). +
    parseText(String, ICalDataType, ICalParameters) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Unmarshals a property from a plain-text iCalendar data stream. +
    parseTimeZoneId(String) - +Static method in class biweekly.util.ICalDateFormatter +
    Gets the TimeZone object that corresponds to the given ID. +
    parseXml(String) - +Static method in class biweekly.Biweekly +
    Parses an xCal document (XML-encoded iCalendar objects) from a string. +
    parseXml(File) - +Static method in class biweekly.Biweekly +
    Parses an xCal document (XML-encoded iCalendar objects) from a file. +
    parseXml(InputStream) - +Static method in class biweekly.Biweekly +
    Parses an xCal document (XML-encoded iCalendar objects) from an input + stream. +
    parseXml(Reader) - +Static method in class biweekly.Biweekly +
    + Parses an xCal document (XML-encoded iCalendar objects) from a reader. +
    parseXml(Document) - +Static method in class biweekly.Biweekly +
    Parses an xCal document (XML-encoded iCalendar objects). +
    parseXml(Element, ICalParameters) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Unmarshals a property's value from an XML document (xCal). +
    ParticipationStatus - Class in biweekly.parameter
    Defines a calendar user's level of participation.
    PARTSTAT - +Static variable in class biweekly.parameter.ICalParameters +
      +
    PercentComplete - Class in biweekly.property
    + Defines a to-do task's level of completion.
    PercentComplete(Integer) - +Constructor for class biweekly.property.PercentComplete +
    Creates a percent complete property. +
    PercentCompleteMarshaller - Class in biweekly.property.marshaller
    Marshals PercentComplete properties.
    PercentCompleteMarshaller() - +Constructor for class biweekly.property.marshaller.PercentCompleteMarshaller +
      +
    PERIOD - +Static variable in class biweekly.ICalDataType +
      +
    Period - Class in biweekly.util
    A period of time.
    Period(Date, Date) - +Constructor for class biweekly.util.Period +
    Creates a new time period. +
    Period(Date, Duration) - +Constructor for class biweekly.util.Period +
    Creates a new time period. +
    Period(Period) - +Constructor for class biweekly.util.Period +
    Copies an existing time period. +
    preDefined - +Variable in class biweekly.util.CaseClasses +
      +
    prepareParameters(T) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Sanitizes a property's parameters (called before the property is + written). +
    prior(boolean) - +Method in class biweekly.util.Duration.Builder +
    Sets whether the duration should be negative. +
    Priority - Class in biweekly.property
    + Defines the priority of an event or to-do task.
    Priority(Integer) - +Constructor for class biweekly.property.Priority +
    Creates a priority property. +
    PriorityMarshaller - Class in biweekly.property.marshaller
    Marshals Priority properties.
    PriorityMarshaller() - +Constructor for class biweekly.property.marshaller.PriorityMarshaller +
      +
    private_() - +Static method in class biweekly.property.Classification +
    Creates a "private" classification property. +
    ProductId - Class in biweekly.property
    + Identifies the application that created the iCalendar object.
    ProductId(String) - +Constructor for class biweekly.property.ProductId +
    Creates a new product identifier property. +
    ProductIdMarshaller - Class in biweekly.property.marshaller
    Marshals ProductId properties.
    ProductIdMarshaller() - +Constructor for class biweekly.property.marshaller.ProductIdMarshaller +
      +
    properties - +Variable in class biweekly.component.ICalComponent +
      +
    propertyName - +Variable in class biweekly.property.marshaller.ICalPropertyMarshaller +
      +
    public_() - +Static method in class biweekly.property.Classification +
    Creates a "public" classification property. +
    put(K, V) - +Method in class biweekly.util.ListMultimap +
    Adds a value to the multimap. +
    putAll(K, Collection<V>) - +Method in class biweekly.util.ListMultimap +
    Adds multiple values to the multimap. +
    +
    +

    +Q

    +
    +
    qname - +Variable in class biweekly.property.marshaller.ICalPropertyMarshaller +
      +
    +
    +

    +R

    +
    +
    random() - +Static method in class biweekly.property.Uid +
    Creates a UID property that contains a random UID. +
    RANGE - +Static variable in class biweekly.parameter.ICalParameters +
      +
    Range - Class in biweekly.parameter
    Defines the effective range of recurrence instances specified by the + RecurrenceId property.
    RawComponent - Class in biweekly.component
    A component that does not have a marshaller associated with it.
    RawComponent(String) - +Constructor for class biweekly.component.RawComponent +
      +
    RawComponentMarshaller - Class in biweekly.component.marshaller
     
    RawComponentMarshaller(String) - +Constructor for class biweekly.component.marshaller.RawComponentMarshaller +
    Creates a new raw component marshaller. +
    rawComponents - +Variable in class biweekly.property.DateOrDateTimeProperty +
      +
    RawProperty - Class in biweekly.property
    A property that does not have a marshaller associated with it.
    RawProperty(String, String) - +Constructor for class biweekly.property.RawProperty +
      +
    RawProperty(String, ICalDataType, String) - +Constructor for class biweekly.property.RawProperty +
      +
    RawPropertyMarshaller - Class in biweekly.property.marshaller
    Marshals properties that do not have a marshaller associated with them.
    RawPropertyMarshaller(String) - +Constructor for class biweekly.property.marshaller.RawPropertyMarshaller +
      +
    readComponent(List<String>, String) - +Method in interface biweekly.io.json.JCalRawReader.JCalDataStreamListener +
    Called when the parser begins to read a component. +
    readLine() - +Method in class biweekly.io.text.FoldedLineReader +
    Reads the next line, unfolding it if necessary. +
    readNext(JCalRawReader.JCalDataStreamListener) - +Method in class biweekly.io.json.JCalRawReader +
    Reads the next iCalendar object from the jCal data stream. +
    readNext() - +Method in class biweekly.io.json.JCalReader +
    Reads the next iCalendar object from the JSON data stream. +
    readNext() - +Method in class biweekly.io.text.ICalReader +
    Reads the next iCalendar object. +
    readProperty(List<String>, String, ICalParameters, ICalDataType, JCalValue) - +Method in interface biweekly.io.json.JCalRawReader.JCalDataStreamListener +
    Called when a property is read. +
    readProperty(String, ICalParameters, String) - +Method in interface biweekly.io.text.ICalRawReader.ICalDataStreamListener +
    Called when a property is read. +
    readValue(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.ExceptionDatesMarshaller +
      +
    readValue(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.ListPropertyMarshaller +
      +
    readValue(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.TextListPropertyMarshaller +
      +
    RECUR - +Static variable in class biweekly.ICalDataType +
      +
    Recurrence - Class in biweekly.util
    + Represents a recurrence rule value.
    Recurrence.Builder - Class in biweekly.util
    Constructs Recurrence objects.
    Recurrence.Builder(Recurrence.Frequency) - +Constructor for class biweekly.util.Recurrence.Builder +
    Constructs a new builder. +
    Recurrence.Builder(Recurrence) - +Constructor for class biweekly.util.Recurrence.Builder +
    Constructs a new builder +
    Recurrence.DayOfWeek - Enum in biweekly.util
    Represents each of the seven days of the week.
    Recurrence.Frequency - Enum in biweekly.util
    Represents the frequency at which a recurrence rule repeats itself.
    RecurrenceDates - Class in biweekly.property
    + Defines a list of dates or periods that help define a recurrence rule.
    RecurrenceDates(List<Date>, boolean) - +Constructor for class biweekly.property.RecurrenceDates +
    Creates a recurrence dates property. +
    RecurrenceDates(List<Period>) - +Constructor for class biweekly.property.RecurrenceDates +
    Creates a recurrence dates property. +
    RecurrenceDatesMarshaller - Class in biweekly.property.marshaller
    Marshals RecurrenceDates properties.
    RecurrenceDatesMarshaller() - +Constructor for class biweekly.property.marshaller.RecurrenceDatesMarshaller +
      +
    RecurrenceId - Class in biweekly.property
    + Records the original value of the DateStart property if a recurrence + instance has been modified.
    RecurrenceId(Date) - +Constructor for class biweekly.property.RecurrenceId +
    Creates a recurrence ID property. +
    RecurrenceId(Date, boolean) - +Constructor for class biweekly.property.RecurrenceId +
    Creates a recurrence ID property. +
    RecurrenceIdMarshaller - Class in biweekly.property.marshaller
    Marshals RecurrenceId properties.
    RecurrenceIdMarshaller() - +Constructor for class biweekly.property.marshaller.RecurrenceIdMarshaller +
      +
    RecurrenceProperty - Class in biweekly.property
    Defines a property whose value is a recurrence rule.
    RecurrenceProperty(Recurrence) - +Constructor for class biweekly.property.RecurrenceProperty +
    Creates a new recurrence property. +
    RecurrencePropertyMarshaller<T extends RecurrenceProperty> - Class in biweekly.property.marshaller
    Marshals properties whose values are Recurrence.
    RecurrencePropertyMarshaller(Class<T>, String) - +Constructor for class biweekly.property.marshaller.RecurrencePropertyMarshaller +
      +
    RecurrenceRule - Class in biweekly.property
    + Defines how often a component repeats.
    RecurrenceRule(Recurrence) - +Constructor for class biweekly.property.RecurrenceRule +
    Creates a new recurrence rule property. +
    RecurrenceRuleMarshaller - Class in biweekly.property.marshaller
    Marshals RecurrenceRule properties.
    RecurrenceRuleMarshaller() - +Constructor for class biweekly.property.marshaller.RecurrenceRuleMarshaller +
      +
    register(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.Biweekly.ParserChainJsonReader +
      +
    register(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.Biweekly.ParserChainJsonReader +
      +
    register(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.Biweekly.ParserChainJsonString +
      +
    register(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.Biweekly.ParserChainJsonString +
      +
    register(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.Biweekly.ParserChainTextReader +
      +
    register(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.Biweekly.ParserChainTextReader +
      +
    register(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.Biweekly.ParserChainTextString +
      +
    register(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.Biweekly.ParserChainTextString +
      +
    register(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.Biweekly.ParserChainXmlDocument +
      +
    register(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.Biweekly.ParserChainXmlDocument +
      +
    register(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.Biweekly.ParserChainXmlReader +
      +
    register(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.Biweekly.ParserChainXmlReader +
      +
    register(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.Biweekly.ParserChainXmlString +
      +
    register(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.Biweekly.ParserChainXmlString +
      +
    register(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.Biweekly.WriterChainXml +
      +
    register(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.Biweekly.WriterChainXml +
      +
    register(String, ICalDataType) - +Method in class biweekly.Biweekly.WriterChainXml +
    Registers the data type of an experimental parameter. +
    register(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.io.ICalMarshallerRegistrar +
    Registers a component marshaller. +
    register(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.io.ICalMarshallerRegistrar +
    Registers a property marshaller. +
    registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.io.json.JCalReader +
    + Registers an experimental property marshaller. +
    registerMarshaller(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.io.json.JCalReader +
    + Registers an experimental component marshaller. +
    registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.io.json.JCalWriter +
    + Registers an experimental property marshaller. +
    registerMarshaller(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.io.json.JCalWriter +
    + Registers an experimental component marshaller. +
    registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.io.text.ICalReader +
    + Registers an experimental property marshaller. +
    registerMarshaller(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.io.text.ICalReader +
    + Registers an experimental component marshaller. +
    registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.io.text.ICalWriter +
    + Registers an experimental property marshaller. +
    registerMarshaller(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.io.text.ICalWriter +
    + Registers an experimental component marshaller. +
    registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.io.xml.XCalDocument +
    + Registers an experimental property marshaller. +
    registerMarshaller(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.io.xml.XCalDocument +
    + Registers an experimental component marshaller. +
    registerParameterDataType(String, ICalDataType) - +Method in class biweekly.io.xml.XCalDocument +
    Registers the data type of an experimental parameter. +
    RELATED - +Static variable in class biweekly.parameter.ICalParameters +
      +
    Related - Class in biweekly.parameter
    Defines the date that an alarm trigger is relative to.
    RelatedTo - Class in biweekly.property
    + Defines a relationship between the component that this property belongs to + and another component.
    RelatedTo(String) - +Constructor for class biweekly.property.RelatedTo +
    Creates a related-to property. +
    RelatedToMarshaller - Class in biweekly.property.marshaller
    Marshals RelatedTo properties.
    RelatedToMarshaller() - +Constructor for class biweekly.property.marshaller.RelatedToMarshaller +
      +
    RelationshipType - Class in biweekly.parameter
    Defines the hierarchical relationship that a component has with another + component.
    RELTYPE - +Static variable in class biweekly.parameter.ICalParameters +
      +
    remove(K, V) - +Method in class biweekly.util.ListMultimap +
    Removes a particular value. +
    removeAll(K) - +Method in class biweekly.util.ListMultimap +
    Removes all the values associated with a key +
    removeDelegatedFrom(String) - +Method in class biweekly.parameter.ICalParameters +
    Removes a person who has delegated his or her responsibility to an + attendee. +
    removeDelegatedFrom() - +Method in class biweekly.parameter.ICalParameters +
    Removes everyone who has delegated his or her responsibility to an + attendee. +
    removeDelegatedTo(String) - +Method in class biweekly.parameter.ICalParameters +
    Removes a person to which an attendee has delegated his or her + responsibility. +
    removeDelegatedTo() - +Method in class biweekly.parameter.ICalParameters +
    Removes everyone to which an attendee has delegated his or her + responsibility. +
    removeEmpties(boolean) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.Splitter +
    Sets whether to remove empty elements. +
    removeExperimentalComponents(String) - +Method in class biweekly.component.ICalComponent +
    Removes all experimental sub-components that have the given name. +
    removeExperimentalProperty(String) - +Method in class biweekly.component.ICalComponent +
    Removes all experimental properties that have the given name. +
    removeMember(String) - +Method in class biweekly.parameter.ICalParameters +
    Removes a group that an attendee is a member of. +
    removeMembers() - +Method in class biweekly.parameter.ICalParameters +
    Removes all groups that an attendee is a member of. +
    removeParameter(String) - +Method in class biweekly.property.ICalProperty +
    Removes a parameter from the property. +
    removeProperties(Class<? extends ICalProperty>) - +Method in class biweekly.component.ICalComponent +
    Removes properties from the iCalendar object. +
    Repeat - Class in biweekly.property
    + Defines the number of times an alarm should be repeated after its initial + trigger.
    Repeat(Integer) - +Constructor for class biweekly.property.Repeat +
    Creates a repeat property. +
    RepeatMarshaller - Class in biweekly.property.marshaller
    Marshals Repeat properties.
    RepeatMarshaller() - +Constructor for class biweekly.property.marshaller.RepeatMarshaller +
      +
    replace(K, V) - +Method in class biweekly.util.ListMultimap +
    Replaces all values with the given value. +
    replace(K, Collection<V>) - +Method in class biweekly.util.ListMultimap +
    Replaces all values with the given values. +
    REQ_PARTICIPANT - +Static variable in class biweekly.parameter.Role +
      +
    RequestStatus - Class in biweekly.property
    + Represents a response to a scheduling request, describing whether the request + was successfully processed or not.
    RequestStatus(String) - +Constructor for class biweekly.property.RequestStatus +
    Creates a request status property. +
    RequestStatusMarshaller - Class in biweekly.property.marshaller
    Marshals RequestStatus properties.
    RequestStatusMarshaller() - +Constructor for class biweekly.property.marshaller.RequestStatusMarshaller +
      +
    RESOURCE - +Static variable in class biweekly.parameter.CalendarUserType +
      +
    Resources - Class in biweekly.property
    + Defines a list of resources that are needed for an event or to-do task (for + example a projector or DVD player).
    Resources() - +Constructor for class biweekly.property.Resources +
    Creates a new resources property. +
    Resources(String...) - +Constructor for class biweekly.property.Resources +
    Creates a new resources property. +
    Resources(List<String>) - +Constructor for class biweekly.property.Resources +
    Creates a new resources property. +
    ResourcesMarshaller - Class in biweekly.property.marshaller
    Marshals Resources properties.
    ResourcesMarshaller() - +Constructor for class biweekly.property.marshaller.ResourcesMarshaller +
      +
    ROLE - +Static variable in class biweekly.parameter.ICalParameters +
      +
    Role - Class in biweekly.parameter
    Defines the role that a calendar user holds.
    ROOM - +Static variable in class biweekly.parameter.CalendarUserType +
      +
    RSVP - +Static variable in class biweekly.parameter.ICalParameters +
      +
    runtimeDefined - +Variable in class biweekly.util.CaseClasses +
      +
    +
    +

    +S

    +
    +
    sanitizeKey(String) - +Method in class biweekly.parameter.ICalParameters +
      +
    sanitizeKey(K) - +Method in class biweekly.util.ListMultimap +
    Modifies a given key before it is used to interact with the internal map. +
    seconds(Integer) - +Method in class biweekly.util.Duration.Builder +
    Sets the number of seconds. +
    semistructured(String) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Parses a list of values that are delimited by semicolons. +
    semistructured(String, int) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Parses a list of values that are delimited by semicolons. +
    SENT_BY - +Static variable in class biweekly.parameter.ICalParameters +
      +
    Sequence - Class in biweekly.property
    + Defines a revision number for an event, to-do task, or journal entry.
    Sequence(Integer) - +Constructor for class biweekly.property.Sequence +
    Creates a sequence property. +
    SequenceMarshaller - Class in biweekly.property.marshaller
    Marshals Sequence properties.
    SequenceMarshaller() - +Constructor for class biweekly.property.marshaller.SequenceMarshaller +
      +
    setAction(Action) - +Method in class biweekly.component.VAlarm +
    Sets the type of action to invoke when the alarm is triggered. +
    setAltRepresentation(String) - +Method in class biweekly.parameter.ICalParameters +
    Sets a URI pointing to additional information about the entity + represented by the property. +
    setAltRepresentation(String) - +Method in class biweekly.property.Comment +
      +
    setAltRepresentation(String) - +Method in class biweekly.property.Contact +
      +
    setAltRepresentation(String) - +Method in class biweekly.property.Description +
      +
    setAltRepresentation(String) - +Method in class biweekly.property.Location +
      +
    setAltRepresentation(String) - +Method in class biweekly.property.Resources +
      +
    setAltRepresentation(String) - +Method in class biweekly.property.Summary +
      +
    setCalendarScale(CalendarScale) - +Method in class biweekly.ICalendar +
    Sets the calendar system that this iCalendar object uses. +
    setCalendarUserType(CalendarUserType) - +Method in class biweekly.parameter.ICalParameters +
    Sets the type of user an attendee is (for example, an "individual" or a + "room"). +
    setCalendarUserType(CalendarUserType) - +Method in class biweekly.property.Attendee +
    Sets the type of user the attendee is (for example, an "individual" or a + "room"). +
    setCaretDecodingEnabled(boolean) - +Method in class biweekly.io.text.ICalRawReader +
    + Sets whether the reader will decode parameter values that use circumflex + accent encoding (enabled by default). +
    setCaretDecodingEnabled(boolean) - +Method in class biweekly.io.text.ICalReader +
    Sets whether the reader will decode parameter values that use circumflex + accent encoding (enabled by default). +
    setCaretEncodingEnabled(boolean) - +Method in class biweekly.io.text.ICalRawWriter +
    + Sets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default). +
    setCaretEncodingEnabled(boolean) - +Method in class biweekly.io.text.ICalWriter +
    + Sets whether the writer will apply circumflex accent encoding on + parameter values (disabled by default). +
    setClassification(Classification) - +Method in class biweekly.component.VEvent +
    Sets the level of sensitivity of the event data. +
    setClassification(String) - +Method in class biweekly.component.VEvent +
    Sets the level of sensitivity of the event data. +
    setClassification(Classification) - +Method in class biweekly.component.VJournal +
    Sets the level of sensitivity of the journal entry. +
    setClassification(String) - +Method in class biweekly.component.VJournal +
    Sets the level of sensitivity of the journal entry. +
    setClassification(Classification) - +Method in class biweekly.component.VTodo +
    Sets the level of sensitivity of the to-do data. +
    setClassification(String) - +Method in class biweekly.component.VTodo +
    Sets the level of sensitivity of the to-do data. +
    setCommonName(String) - +Method in class biweekly.parameter.ICalParameters +
    Sets the display name of a person. +
    setCommonName(String) - +Method in class biweekly.property.Attendee +
      +
    setCommonName(String) - +Method in class biweekly.property.Organizer +
      +
    setCompleted(Completed) - +Method in class biweekly.component.VTodo +
    Sets the date and time that the to-do was completed. +
    setCompleted(Date) - +Method in class biweekly.component.VTodo +
    Sets the date and time that the to-do was completed. +
    setComponent(ICalComponent) - +Method in class biweekly.component.ICalComponent +
    Replaces all components of a given class with the given component. +
    setComponent(Class<T>, T) - +Method in class biweekly.component.ICalComponent +
    Replaces all components of a given class with the given component. +
    setContact(Contact) - +Method in class biweekly.component.VFreeBusy +
    Sets the contact for the free/busy entry. +
    setCreated(Created) - +Method in class biweekly.component.VEvent +
    Sets the date-time that the event was initially created. +
    setCreated(Date) - +Method in class biweekly.component.VEvent +
    Sets the date-time that the event was initially created. +
    setCreated(Created) - +Method in class biweekly.component.VJournal +
    Sets the date-time that the journal entry was initially created. +
    setCreated(Date) - +Method in class biweekly.component.VJournal +
    Sets the date-time that the journal entry was initially created. +
    setCreated(Created) - +Method in class biweekly.component.VTodo +
    Sets the date-time that the to-do was initially created. +
    setCreated(Date) - +Method in class biweekly.component.VTodo +
    Sets the date-time that the to-do was initially created. +
    setData(byte[]) - +Method in class biweekly.property.Attachment +
    Sets the attachment's binary data. +
    setDate(Date) - +Method in class biweekly.property.Trigger +
    Sets the date-time that the alarm will trigger. +
    setDateDue(DateDue) - +Method in class biweekly.component.VTodo +
    Sets the date that a to-do is due by. +
    setDateDue(Date) - +Method in class biweekly.component.VTodo +
    Sets the date that a to-do is due by. +
    setDateEnd(DateEnd) - +Method in class biweekly.component.VEvent +
    Sets the date that the event ends. +
    setDateEnd(Date) - +Method in class biweekly.component.VEvent +
    Sets the date that the event ends. +
    setDateEnd(DateEnd) - +Method in class biweekly.component.VFreeBusy +
    Sets the date that the free/busy entry ends. +
    setDateEnd(Date) - +Method in class biweekly.component.VFreeBusy +
    Sets the date that the free/busy entry ends. +
    setDateStart(DateStart) - +Method in class biweekly.component.Observance +
    Sets the date that the timezone observance starts. +
    setDateStart(DateTimeComponents) - +Method in class biweekly.component.Observance +
    Sets the date that the timezone observance starts. +
    setDateStart(DateStart) - +Method in class biweekly.component.VEvent +
    Sets the date that the event starts (required if no Method + property is defined). +
    setDateStart(Date) - +Method in class biweekly.component.VEvent +
    Sets the date that the event starts (required if no Method + property is defined). +
    setDateStart(DateStart) - +Method in class biweekly.component.VFreeBusy +
    Sets the date that the free/busy entry starts. +
    setDateStart(Date) - +Method in class biweekly.component.VFreeBusy +
    Sets the date that the free/busy entry starts. +
    setDateStart(DateStart) - +Method in class biweekly.component.VJournal +
    Sets the date that the journal entry starts. +
    setDateStart(Date) - +Method in class biweekly.component.VJournal +
    Sets the date that the journal entry starts. +
    setDateStart(DateStart) - +Method in class biweekly.component.VTodo +
    Sets the date that the to-do starts. +
    setDateStart(Date) - +Method in class biweekly.component.VTodo +
    Sets the date that the to-do starts. +
    setDateTimeStamp(DateTimeStamp) - +Method in class biweekly.component.VEvent +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the event was + last modified (the LastModified property also holds this + information). +
    setDateTimeStamp(Date) - +Method in class biweekly.component.VEvent +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the event was + last modified (the LastModified property also holds this + information). +
    setDateTimeStamp(DateTimeStamp) - +Method in class biweekly.component.VFreeBusy +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the free/busy + entry was last modified (the LastModified property also holds + this information). +
    setDateTimeStamp(Date) - +Method in class biweekly.component.VFreeBusy +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the free/busy + entry was last modified (the LastModified property also holds + this information). +
    setDateTimeStamp(DateTimeStamp) - +Method in class biweekly.component.VJournal +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the journal + entry was last modified (the LastModified property also holds + this information). +
    setDateTimeStamp(Date) - +Method in class biweekly.component.VJournal +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the journal + entry was last modified (the LastModified property also holds + this information). +
    setDateTimeStamp(DateTimeStamp) - +Method in class biweekly.component.VTodo +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the to-do was + last modified (the LastModified property also holds this + information). +
    setDateTimeStamp(Date) - +Method in class biweekly.component.VTodo +
    Sets either (a) the creation date of the iCalendar object (if the + Method property is defined) or (b) the date that the to-do was + last modified (the LastModified property also holds this + information). +
    setDescription(Description) - +Method in class biweekly.component.VAlarm +
    + Sets a detailed description of the alarm. +
    setDescription(String) - +Method in class biweekly.component.VAlarm +
    + Sets a detailed description of the alarm. +
    setDescription(Description) - +Method in class biweekly.component.VEvent +
    Sets a detailed description of the event. +
    setDescription(String) - +Method in class biweekly.component.VEvent +
    Sets a detailed description of the event. +
    setDescription(Description) - +Method in class biweekly.component.VTodo +
    Sets a detailed description of the to-do. +
    setDescription(String) - +Method in class biweekly.component.VTodo +
    Sets a detailed description of the to-do. +
    setDescription(String) - +Method in class biweekly.property.RequestStatus +
    Sets a human-readable description of the status. +
    setDirectoryEntry(String) - +Method in class biweekly.parameter.ICalParameters +
    Sets a URI that contains additional information about the person. +
    setDirectoryEntry(String) - +Method in class biweekly.property.Attendee +
      +
    setDirectoryEntry(String) - +Method in class biweekly.property.Organizer +
      +
    setDuration(DurationProperty) - +Method in class biweekly.component.VAlarm +
    Sets the length of the pause between alarm repetitions. +
    setDuration(Duration) - +Method in class biweekly.component.VAlarm +
    Sets the length of the pause between alarm repetitions. +
    setDuration(DurationProperty) - +Method in class biweekly.component.VEvent +
    Sets the duration of the event. +
    setDuration(Duration) - +Method in class biweekly.component.VEvent +
    Sets the duration of the event. +
    setDuration(DurationProperty) - +Method in class biweekly.component.VTodo +
    Sets the duration of the to-do. +
    setDuration(Duration) - +Method in class biweekly.component.VTodo +
    Sets the duration of the to-do. +
    setDuration(Duration, Related) - +Method in class biweekly.property.Trigger +
    Sets a relative time at which the alarm will trigger. +
    setEncoding(Encoding) - +Method in class biweekly.parameter.ICalParameters +
    Sets the encoding of the property value (for example, "base64"). +
    setExceptionText(String) - +Method in class biweekly.property.RequestStatus +
    Sets any additional data related to the response. +
    setExperimentalComponents(String) - +Method in class biweekly.component.ICalComponent +
    Adds an experimental sub-component to this component, removing all + existing components that have the same name. +
    setExperimentalProperty(String, String) - +Method in class biweekly.component.ICalComponent +
    Adds an experimental property to this component, removing all existing + properties that have the same name. +
    setExperimentalProperty(String, ICalDataType, String) - +Method in class biweekly.component.ICalComponent +
    Adds an experimental property to this component, removing all existing + properties that have the same name. +
    setFormatType(String) - +Method in class biweekly.parameter.ICalParameters +
    Sets the content-type of the property's value. +
    setFormatType(String) - +Method in class biweekly.property.Attachment +
      +
    setFreeBusyType(FreeBusyType) - +Method in class biweekly.parameter.ICalParameters +
    Sets the person's status over the time periods that are specified in a + FreeBusy property (for example, "free" or "busy"). +
    setGeo(Geo) - +Method in class biweekly.component.VEvent +
    Sets a set of geographical coordinates. +
    setGeo(Geo) - +Method in class biweekly.component.VTodo +
    Sets a set of geographical coordinates. +
    setHasTime(boolean) - +Method in class biweekly.property.ExceptionDates +
    Sets whether the dates have time components. +
    setIndent(boolean) - +Method in class biweekly.io.json.JCalRawWriter +
    Sets whether or not to pretty-print the JSON. +
    setIndent(boolean) - +Method in class biweekly.io.json.JCalWriter +
    Sets whether or not to pretty-print the JSON. +
    setIndent(String) - +Method in class biweekly.io.text.FoldedLineWriter +
    Sets the string that is prepended to each folded line. +
    setLanguage(String) - +Method in class biweekly.parameter.ICalParameters +
    Sets the language that the property value is written in. +
    setLanguage(String) - +Method in class biweekly.property.Attendee +
    Sets the language that the common name parameter is written in. +
    setLanguage(String) - +Method in class biweekly.property.Categories +
      +
    setLanguage(String) - +Method in class biweekly.property.Comment +
      +
    setLanguage(String) - +Method in class biweekly.property.Contact +
      +
    setLanguage(String) - +Method in class biweekly.property.Description +
      +
    setLanguage(String) - +Method in class biweekly.property.Location +
      +
    setLanguage(String) - +Method in class biweekly.property.Organizer +
    Sets the language that the common name parameter is written in. +
    setLanguage(String) - +Method in class biweekly.property.RequestStatus +
      +
    setLanguage(String) - +Method in class biweekly.property.Resources +
      +
    setLanguage(String) - +Method in class biweekly.property.Summary +
      +
    setLanguage(String) - +Method in class biweekly.property.TimezoneName +
      +
    setLastModified(LastModified) - +Method in class biweekly.component.VEvent +
    Sets the date-time that event was last changed. +
    setLastModified(Date) - +Method in class biweekly.component.VEvent +
    Sets the date-time that the event was last changed. +
    setLastModified(LastModified) - +Method in class biweekly.component.VJournal +
    Sets the date-time that the journal entry was last changed. +
    setLastModified(Date) - +Method in class biweekly.component.VJournal +
    Sets the date-time that the journal entry was last changed. +
    setLastModified(LastModified) - +Method in class biweekly.component.VTimezone +
    Sets the date-time that the timezone data was last changed. +
    setLastModified(Date) - +Method in class biweekly.component.VTimezone +
    Sets the date-time that the timezone data was last changed. +
    setLastModified(LastModified) - +Method in class biweekly.component.VTodo +
    Sets the date-time that the to-do was last changed. +
    setLastModified(Date) - +Method in class biweekly.component.VTodo +
    Sets the date-time that the to-do was last changed. +
    setLatitude(Double) - +Method in class biweekly.property.Geo +
    Sets the latitude. +
    setLineLength(int) - +Method in class biweekly.io.text.FoldedLineWriter +
    Sets the maximum length a line can be before it is folded (excluding the + newline). +
    setLocalTime(boolean) - +Method in class biweekly.property.DateOrDateTimeProperty +
    Sets whether the date should be outputted in local time (without a + timezone). +
    setLocation(Location) - +Method in class biweekly.component.VEvent +
    Sets the physical location of the event. +
    setLocation(String) - +Method in class biweekly.component.VEvent +
    Sets the physical location of the event. +
    setLocation(Location) - +Method in class biweekly.component.VTodo +
    Sets the physical location of the to-do. +
    setLocation(String) - +Method in class biweekly.component.VTodo +
    Sets the physical location of the to-do. +
    setLongitude(Double) - +Method in class biweekly.property.Geo +
    Sets the longitude. +
    setMaxVersion(String) - +Method in class biweekly.property.Version +
    Sets the maximum version that a consumer must support in order to + successfully parse the iCalendar object. +
    setMethod(Method) - +Method in class biweekly.ICalendar +
    Sets the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity. +
    setMethod(String) - +Method in class biweekly.ICalendar +
    Sets the value of the Content-Type "method" parameter if the iCalendar + object is defined as a MIME message entity. +
    setMinVersion(String) - +Method in class biweekly.property.Version +
    Sets the minimum version that a consumer must support in order to + successfully parse the iCalendar object. +
    setNewline(String) - +Method in class biweekly.io.text.FoldedLineWriter +
    Sets the newline sequence that is used to separate lines +
    setOffset(int, int) - +Method in class biweekly.property.UtcOffsetProperty +
      +
    setOffset(UtcOffset) - +Method in class biweekly.property.UtcOffsetProperty +
      +
    setOrganizer(Organizer) - +Method in class biweekly.component.VEvent +
    Sets the organizer of the event. +
    setOrganizer(String) - +Method in class biweekly.component.VEvent +
    Sets the organizer of the event. +
    setOrganizer(Organizer) - +Method in class biweekly.component.VFreeBusy +
    Sets the person requesting the free/busy time. +
    setOrganizer(String) - +Method in class biweekly.component.VFreeBusy +
    Sets the person requesting the free/busy time. +
    setOrganizer(Organizer) - +Method in class biweekly.component.VJournal +
    Sets the organizer of the journal entry. +
    setOrganizer(String) - +Method in class biweekly.component.VJournal +
    Sets the organizer of the journal entry. +
    setOrganizer(Organizer) - +Method in class biweekly.component.VTodo +
    Sets the organizer of the to-do. +
    setOrganizer(String) - +Method in class biweekly.component.VTodo +
    Sets the organizer of the to-do. +
    setParameter(String, String) - +Method in class biweekly.property.ICalProperty +
    Replaces all existing values of a parameter with the given value. +
    setParameter(String, Collection<String>) - +Method in class biweekly.property.ICalProperty +
    Replaces all existing values of a parameter with the given values. +
    setParameters(ICalParameters) - +Method in class biweekly.property.ICalProperty +
    Sets the property's parameters +
    setParameterValueChangedListener(ICalRawWriter.ParameterValueChangedListener) - +Method in class biweekly.io.text.ICalRawWriter +
    Sets the listener which will be invoked when a parameter's value is + changed due to containing invalid characters. +
    setParticipationStatus(ParticipationStatus) - +Method in class biweekly.parameter.ICalParameters +
    Sets an attendee's level of participation. +
    setParticipationStatus(ParticipationStatus) - +Method in class biweekly.property.Attendee +
    Sets the attendee's level of participation. +
    setPercentComplete(PercentComplete) - +Method in class biweekly.component.VTodo +
    Sets the amount that the to-do task has been completed. +
    setPercentComplete(Integer) - +Method in class biweekly.component.VTodo +
    Sets the amount that the to-do task has been completed. +
    setPriority(Priority) - +Method in class biweekly.component.VEvent +
    Sets the priority of the event. +
    setPriority(Integer) - +Method in class biweekly.component.VEvent +
    Sets the priority of the event. +
    setPriority(Priority) - +Method in class biweekly.component.VTodo +
    Sets the priority of the to-do. +
    setPriority(Integer) - +Method in class biweekly.component.VTodo +
    Sets the priority of the to-do. +
    setProductId(ProductId) - +Method in class biweekly.ICalendar +
    Sets the name of the application that created the iCalendar object. +
    setProductId(String) - +Method in class biweekly.ICalendar +
    Sets the application that created the iCalendar object. +
    setProperty(ICalProperty) - +Method in class biweekly.component.ICalComponent +
    Replaces all existing properties of the given class with a single + property instance. +
    setProperty(Class<T>, T) - +Method in class biweekly.component.ICalComponent +
    Replaces all existing properties of the given class with a single + property instance. +
    setRange(Range) - +Method in class biweekly.parameter.ICalParameters +
    Sets the effective range of recurrence instances from the instance + specified by a RecurrenceId property. +
    setRange(Range) - +Method in class biweekly.property.RecurrenceId +
    Sets the effective range of recurrence instances from the instance + specified by this property. +
    setRawComponents(DateTimeComponents) - +Method in class biweekly.property.DateOrDateTimeProperty +
    Sets the raw components of the date-time value. +
    setRecurrenceId(RecurrenceId) - +Method in class biweekly.component.VEvent +
    Sets the original value of the DateStart property if the event is + recurring and has been modified. +
    setRecurrenceId(Date) - +Method in class biweekly.component.VEvent +
    Sets the original value of the DateStart property if the event is + recurring and has been modified. +
    setRecurrenceId(RecurrenceId) - +Method in class biweekly.component.VJournal +
    Sets the original value of the DateStart property if the event is + recurring and has been modified. +
    setRecurrenceId(Date) - +Method in class biweekly.component.VJournal +
    Sets the original value of the DateStart property if the journal + entry is recurring and has been modified. +
    setRecurrenceId(RecurrenceId) - +Method in class biweekly.component.VTodo +
    Sets the original value of the DateStart property if the to-do is + recurring and has been modified. +
    setRecurrenceId(Date) - +Method in class biweekly.component.VTodo +
    Sets the original value of the DateStart property if the to-do is + recurring and has been modified. +
    setRecurrenceRule(Recurrence) - +Method in class biweekly.component.Observance +
    Sets how often the timezone observance repeats. +
    setRecurrenceRule(RecurrenceRule) - +Method in class biweekly.component.Observance +
    Sets how often the timezone observance repeats. +
    setRecurrenceRule(Recurrence) - +Method in class biweekly.component.VEvent +
    Sets how often the event repeats. +
    setRecurrenceRule(RecurrenceRule) - +Method in class biweekly.component.VEvent +
    Sets how often the event repeats. +
    setRecurrenceRule(Recurrence) - +Method in class biweekly.component.VJournal +
    Sets how often the journal entry repeats. +
    setRecurrenceRule(RecurrenceRule) - +Method in class biweekly.component.VJournal +
    Sets how often the journal entry repeats. +
    setRecurrenceRule(Recurrence) - +Method in class biweekly.component.VTodo +
    Sets how often the to-do repeats. +
    setRecurrenceRule(RecurrenceRule) - +Method in class biweekly.component.VTodo +
    Sets how often the to-do repeats. +
    setRegistrar(ICalMarshallerRegistrar) - +Method in class biweekly.io.json.JCalReader +
    Sets the object that manages the component/property marshaller objects. +
    setRegistrar(ICalMarshallerRegistrar) - +Method in class biweekly.io.json.JCalWriter +
    Sets the object that manages the component/property marshaller objects. +
    setRegistrar(ICalMarshallerRegistrar) - +Method in class biweekly.io.text.ICalReader +
    Sets the object that manages the component/property marshaller objects. +
    setRegistrar(ICalMarshallerRegistrar) - +Method in class biweekly.io.text.ICalWriter +
    Sets the object that manages the component/property marshaller objects. +
    setRegistrar(ICalMarshallerRegistrar) - +Method in class biweekly.io.xml.XCalDocument +
    Sets the object that manages the component/property marshaller objects. +
    setRelated(Related) - +Method in class biweekly.parameter.ICalParameters +
    Sets the date-time field that the duration in a Trigger property + is relative to. +
    setRelated(Related) - +Method in class biweekly.property.Trigger +
    Sets the date-time field that the duration is relative to. +
    setRelationshipType(RelationshipType) - +Method in class biweekly.parameter.ICalParameters +
    Sets the relationship type of a RelatedTo property. +
    setRelationshipType(RelationshipType) - +Method in class biweekly.property.RelatedTo +
    Sets the relationship type. +
    setRepeat(Repeat) - +Method in class biweekly.component.VAlarm +
    Sets the number of times an alarm should be repeated after its initial + trigger. +
    setRepeat(Integer) - +Method in class biweekly.component.VAlarm +
    Sets the number of times an alarm should be repeated after its initial + trigger. +
    setRepeat(int, Duration) - +Method in class biweekly.component.VAlarm +
    Sets the repetition information for the alarm. +
    setRequestStatus(RequestStatus) - +Method in class biweekly.component.VEvent +
    Sets the response to a scheduling request. +
    setRequestStatus(RequestStatus) - +Method in class biweekly.component.VFreeBusy +
    Sets the response to a scheduling request. +
    setRequestStatus(RequestStatus) - +Method in class biweekly.component.VJournal +
    Sets the response to a scheduling request. +
    setRequestStatus(RequestStatus) - +Method in class biweekly.component.VTodo +
    Sets the response to a scheduling request. +
    setRole(Role) - +Method in class biweekly.parameter.ICalParameters +
    Sets an attendee's role (for example, "chair" or "required participant"). +
    setRole(Role) - +Method in class biweekly.property.Attendee +
    Sets the attendee's role (for example, "chair" or + "required participant"). +
    setRsvp(Boolean) - +Method in class biweekly.parameter.ICalParameters +
    Sets whether the organizer requests a response from an attendee. +
    setRsvp(Boolean) - +Method in class biweekly.property.Attendee +
    Sets whether the organizer requests a response from the attendee. +
    setSentBy(String) - +Method in class biweekly.parameter.ICalParameters +
    Sets a person that is acting on behalf of the person defined in the + property. +
    setSentBy(String) - +Method in class biweekly.property.Attendee +
      +
    setSentBy(String) - +Method in class biweekly.property.Organizer +
      +
    setSequence(Sequence) - +Method in class biweekly.component.VEvent +
    Sets the revision number of the event. +
    setSequence(Integer) - +Method in class biweekly.component.VEvent +
    Sets the revision number of the event. +
    setSequence(Sequence) - +Method in class biweekly.component.VJournal +
    Sets the revision number of the journal entry. +
    setSequence(Integer) - +Method in class biweekly.component.VJournal +
    Sets the revision number of the journal entry. +
    setSequence(Sequence) - +Method in class biweekly.component.VTodo +
    Sets the revision number of the to-do. +
    setSequence(Integer) - +Method in class biweekly.component.VTodo +
    Sets the revision number of the to-do. +
    setSingleSpaceFoldingEnabled(boolean) - +Method in class biweekly.io.text.FoldedLineReader +
    Sets whether the reader will only ignore the first whitespace character + it encounters at the beginning of a folded line. +
    setStatus(Status) - +Method in class biweekly.component.VEvent +
    Sets the status of the event. +
    setStatus(Status) - +Method in class biweekly.component.VJournal +
    Sets the status of the journal entry. +
    setStatus(Status) - +Method in class biweekly.component.VTodo +
    Sets the status of the to-do. +
    setStatusCode(String) - +Method in class biweekly.property.RequestStatus +
    Sets a status code. +
    setSummary(Summary) - +Method in class biweekly.component.VAlarm +
    + Sets the summary of the alarm. +
    setSummary(String) - +Method in class biweekly.component.VAlarm +
    + Sets the summary of the alarm. +
    setSummary(Summary) - +Method in class biweekly.component.VEvent +
    Sets the summary of the event. +
    setSummary(String) - +Method in class biweekly.component.VEvent +
    Sets the summary of the event. +
    setSummary(Summary) - +Method in class biweekly.component.VJournal +
    Sets the summary of the journal entry. +
    setSummary(String) - +Method in class biweekly.component.VJournal +
    Sets the summary of the journal entry. +
    setSummary(Summary) - +Method in class biweekly.component.VTodo +
    Sets the summary of the to-do. +
    setSummary(String) - +Method in class biweekly.component.VTodo +
    Sets the summary of the to-do. +
    setTimezone(VTimezone) - +Method in class biweekly.property.DateOrDateTimeProperty +
      +
    setTimezone(VTimezone) - +Method in class biweekly.property.ExceptionDates +
      +
    setTimezone(VTimezone) - +Method in class biweekly.property.RecurrenceDates +
      +
    setTimezoneId(TimezoneId) - +Method in class biweekly.component.VTimezone +
    Sets an ID for this timezone. +
    setTimezoneId(String) - +Method in class biweekly.component.VTimezone +
    Sets an ID for this timezone. +
    setTimezoneId(String) - +Method in class biweekly.parameter.ICalParameters +
    Sets the timezone identifier. +
    setTimezoneId(String) - +Method in class biweekly.property.DateOrDateTimeProperty +
      +
    setTimezoneId(String) - +Method in class biweekly.property.ExceptionDates +
      +
    setTimezoneId(String) - +Method in class biweekly.property.RecurrenceDates +
      +
    setTimezoneOffsetFrom(TimezoneOffsetFrom) - +Method in class biweekly.component.Observance +
    Sets the UTC offset that the timezone observance transitions from. +
    setTimezoneOffsetFrom(Integer, Integer) - +Method in class biweekly.component.Observance +
    Sets the UTC offset that the timezone observance transitions from. +
    setTimezoneOffsetTo(TimezoneOffsetTo) - +Method in class biweekly.component.Observance +
    Sets the UTC offset that the timezone observance transitions to. +
    setTimezoneOffsetTo(Integer, Integer) - +Method in class biweekly.component.Observance +
    Sets the UTC offset that the timezone observance transitions to. +
    setTimezoneUrl(TimezoneUrl) - +Method in class biweekly.component.VTimezone +
    Sets the timezone URL, which points to an iCalendar object that contains + further information on the timezone. +
    setTimezoneUrl(String) - +Method in class biweekly.component.VTimezone +
    Sets the timezone URL, which points to an iCalendar object that contains + further information on the timezone. +
    setTransparency(Transparency) - +Method in class biweekly.component.VEvent +
    Sets whether an event is visible to free/busy time searches. +
    setTransparency(Boolean) - +Method in class biweekly.component.VEvent +
    Sets whether an event is visible to free/busy time searches. +
    setTrigger(Trigger) - +Method in class biweekly.component.VAlarm +
    Sets when the alarm will be triggered. +
    setType(FreeBusyType) - +Method in class biweekly.property.FreeBusy +
    Sets the person's status over the time periods that are specified in this + property (for example, "free" or "busy"). +
    setUid(Uid) - +Method in class biweekly.component.VEvent +
    Sets the unique identifier for this event. +
    setUid(String) - +Method in class biweekly.component.VEvent +
    Sets the unique identifier for this event. +
    setUid(Uid) - +Method in class biweekly.component.VFreeBusy +
    Sets the unique identifier for this free/busy entry. +
    setUid(String) - +Method in class biweekly.component.VFreeBusy +
    Sets the unique identifier for this free/busy entry. +
    setUid(Uid) - +Method in class biweekly.component.VJournal +
    Sets the unique identifier for this journal entry. +
    setUid(String) - +Method in class biweekly.component.VJournal +
    Sets the unique identifier for this journal entry. +
    setUid(Uid) - +Method in class biweekly.component.VTodo +
    Sets the unique identifier for this to-do. +
    setUid(String) - +Method in class biweekly.component.VTodo +
    Sets the unique identifier for this to-do. +
    setUri(String) - +Method in class biweekly.property.Attachment +
    Sets the attachment's URI. +
    setUrl(Url) - +Method in class biweekly.component.VEvent +
    Sets a URL to a resource that contains additional information about the + event. +
    setUrl(String) - +Method in class biweekly.component.VEvent +
    Sets a URL to a resource that contains additional information about the + event. +
    setUrl(Url) - +Method in class biweekly.component.VFreeBusy +
    Sets a URL to a resource that contains additional information about the + free/busy entry. +
    setUrl(String) - +Method in class biweekly.component.VFreeBusy +
    Sets a URL to a resource that contains additional information about the + free/busy entry. +
    setUrl(Url) - +Method in class biweekly.component.VJournal +
    Sets a URL to a resource that contains additional information about the + journal entry. +
    setUrl(String) - +Method in class biweekly.component.VJournal +
    Sets a URL to a resource that contains additional information about the + journal entry. +
    setUrl(Url) - +Method in class biweekly.component.VTodo +
    Sets a URL to a resource that contains additional information about the + to-do. +
    setUrl(String) - +Method in class biweekly.component.VTodo +
    Sets a URL to a resource that contains additional information about the + to-do. +
    setValue(ICalDataType) - +Method in class biweekly.parameter.ICalParameters +
    Sets the data type of the property's value (for example, "text" or + "datetime"). +
    setValue(Date, boolean) - +Method in class biweekly.property.DateOrDateTimeProperty +
    Sets the date-time value. +
    setValue(T) - +Method in class biweekly.property.ValuedProperty +
    Sets the value of this property. +
    setVersion(Version) - +Method in class biweekly.ICalendar +
    Sets the min/max versions a consumer must support in order to + successfully parse the iCalendar object. +
    SIBLING - +Static variable in class biweekly.parameter.RelationshipType +
      +
    single(Object) - +Static method in class biweekly.io.json.JCalValue +
    Creates a single-valued value. +
    size() - +Method in class biweekly.util.ListMultimap +
    Returns the number of values in the map. +
    SkipMeException - Exception in biweekly.io
    Thrown during the reading or writing of an iCalendar property to show that + the property should not be written to the iCalendar data stream or not be + included in the parsed ICalendar object.
    SkipMeException() - +Constructor for exception biweekly.io.SkipMeException +
    Creates a new skip-me exception. +
    SkipMeException(String) - +Constructor for exception biweekly.io.SkipMeException +
    Creates a new skip-me exception. +
    split(String, String) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Splits a string by a delimiter, taking escaped characters into account. +
    split() - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.Splitter +
    Performs the split operation. +
    StandardTime - Class in biweekly.component
    + Defines a standard time range within a VTimezone.
    StandardTime() - +Constructor for class biweekly.component.StandardTime +
      +
    StandardTimeMarshaller - Class in biweekly.component.marshaller
     
    StandardTimeMarshaller() - +Constructor for class biweekly.component.marshaller.StandardTimeMarshaller +
      +
    start(ICalRawReader.ICalDataStreamListener) - +Method in class biweekly.io.text.ICalRawReader +
    Starts or continues reading from the iCalendar data stream. +
    START - +Static variable in class biweekly.parameter.Related +
      +
    Status - Class in biweekly.property
    + Defines the status of the component that this property belongs to, such as a + to-do task being in a "completed" state.
    Status(String) - +Constructor for class biweekly.property.Status +
    Creates a status property. +
    StatusMarshaller - Class in biweekly.property.marshaller
    Marshals Status properties.
    StatusMarshaller() - +Constructor for class biweekly.property.marshaller.StatusMarshaller +
      +
    StringUtils - Class in biweekly.util
    Contains miscellaneous string utilities.
    StringUtils.JoinCallback<T> - Interface in biweekly.util
    Callback interface used with the + StringUtils.join(Collection, String, JoinCallback) method.
    StringUtils.JoinMapCallback<K,V> - Interface in biweekly.util
    Callback interface used with the + StringUtils.join(Map, String, JoinMapCallback) method.
    structured(Object...) - +Static method in class biweekly.io.json.JCalValue +
    + Creates a structured value. +
    structured(List<List<?>>) - +Static method in class biweekly.io.json.JCalValue +
    Creates a structured value. +
    structured(String) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Parses a structured value. +
    structured(JCalValue) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Provides an iterator for a jCard structured value. +
    structured(Object...) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    + Writes a structured value. +
    Summary - Class in biweekly.property
    + Defines a short, one line summary of the component that this property belongs + to.
    Summary(String) - +Constructor for class biweekly.property.Summary +
    Creates a new summary property. +
    SummaryMarshaller - Class in biweekly.property.marshaller
    Marshals Summary properties.
    SummaryMarshaller() - +Constructor for class biweekly.property.marshaller.SummaryMarshaller +
      +
    +
    +

    +T

    +
    +
    TENTATIVE - +Static variable in class biweekly.parameter.ParticipationStatus +
      +
    tentative() - +Static method in class biweekly.property.Status +
    Creates a "tentative" status property (only valid for event components). +
    TEXT - +Static variable in class biweekly.ICalDataType +
      +
    TextListPropertyMarshaller<T extends ListProperty<String>> - Class in biweekly.property.marshaller
    Marshals properties that have a list of text values.
    TextListPropertyMarshaller(Class<T>, String) - +Constructor for class biweekly.property.marshaller.TextListPropertyMarshaller +
      +
    TextProperty - Class in biweekly.property
    Represents a property whose value is a plain-text string.
    TextProperty(String) - +Constructor for class biweekly.property.TextProperty +
    Creates a new text property. +
    TextPropertyMarshaller<T extends TextProperty> - Class in biweekly.property.marshaller
    Marshals properties that have text values.
    TextPropertyMarshaller(Class<T>, String) - +Constructor for class biweekly.property.marshaller.TextPropertyMarshaller +
      +
    TextPropertyMarshaller(Class<T>, String, ICalDataType) - +Constructor for class biweekly.property.marshaller.TextPropertyMarshaller +
      +
    THIS_AND_FUTURE - +Static variable in class biweekly.parameter.Range +
      +
    THIS_AND_PRIOR - +Static variable in class biweekly.parameter.Range +
    Deprecated in the latest iCal specification. +
    TIME - +Static variable in class biweekly.ICalDataType +
      +
    time(boolean) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.DateWriter +
    Sets whether to output the date's time component. +
    TimezoneId - Class in biweekly.property
    + Defines a unique identifier for a VTimezone component.
    TimezoneId(String) - +Constructor for class biweekly.property.TimezoneId +
    Creates a timezone identifier property. +
    TimezoneIdMarshaller - Class in biweekly.property.marshaller
    Marshals TimezoneId properties.
    TimezoneIdMarshaller() - +Constructor for class biweekly.property.marshaller.TimezoneIdMarshaller +
      +
    TimezoneName - Class in biweekly.property
    + Defines a traditional, non-standard name for a timezone observance (for + example, "Eastern Standard Time" for standard time on the US east coast).
    TimezoneName(String) - +Constructor for class biweekly.property.TimezoneName +
    Creates a timezone name property. +
    TimezoneNameMarshaller - Class in biweekly.property.marshaller
    Marshals TimezoneName properties.
    TimezoneNameMarshaller() - +Constructor for class biweekly.property.marshaller.TimezoneNameMarshaller +
      +
    TimezoneOffsetFrom - Class in biweekly.property
    + Defines the timezone offset that was in use before a timezone observance.
    TimezoneOffsetFrom(Integer, Integer) - +Constructor for class biweekly.property.TimezoneOffsetFrom +
    Creates a new timezone offset from property. +
    TimezoneOffsetFrom(UtcOffset) - +Constructor for class biweekly.property.TimezoneOffsetFrom +
    Creates a new timezone offset from property. +
    TimezoneOffsetFromMarshaller - Class in biweekly.property.marshaller
    Marshals TimezoneOffsetFrom properties.
    TimezoneOffsetFromMarshaller() - +Constructor for class biweekly.property.marshaller.TimezoneOffsetFromMarshaller +
      +
    TimezoneOffsetTo - Class in biweekly.property
    + Defines the timezone offset that is currently in use in a timezone + observance.
    TimezoneOffsetTo(int, int) - +Constructor for class biweekly.property.TimezoneOffsetTo +
    Creates a new timezone offset to property. +
    TimezoneOffsetTo(UtcOffset) - +Constructor for class biweekly.property.TimezoneOffsetTo +
    Creates a new timezone offset to property. +
    TimezoneOffsetToMarshaller - Class in biweekly.property.marshaller
    Marshals TimezoneOffsetTo properties.
    TimezoneOffsetToMarshaller() - +Constructor for class biweekly.property.marshaller.TimezoneOffsetToMarshaller +
      +
    TimezoneUrl - Class in biweekly.property
    + Defines a URL that points to an iCalendar object that contains further + information on a timezone.
    TimezoneUrl(String) - +Constructor for class biweekly.property.TimezoneUrl +
    Creates a timezone URL property. +
    TimezoneUrlMarshaller - Class in biweekly.property.marshaller
    Marshals TimezoneUrl properties.
    TimezoneUrlMarshaller() - +Constructor for class biweekly.property.marshaller.TimezoneUrlMarshaller +
      +
    toByteArray(InputStream) - +Static method in class biweekly.util.IOUtils +
    Reads all the bytes from an input stream. +
    toByteArray(InputStream, boolean) - +Static method in class biweekly.util.IOUtils +
    Reads all the bytes from an input stream. +
    toCuaPriority() - +Method in class biweekly.property.Priority +
    Converts this priority to its two-character CUA code. +
    toDate() - +Method in class biweekly.util.DateTimeComponents +
    Converts the date-time components to a Date object. +
    toDecimal(int, int, int) - +Static method in class biweekly.property.Geo +
    Converts a coordinate in the degrees-minutes-seconds format into its + decimal equivalent. +
    toDocument(String) - +Static method in class biweekly.util.XmlUtils +
    Parses an XML string into a DOM. +
    toDocument(InputStream) - +Static method in class biweekly.util.XmlUtils +
    Parses an XML document from an input stream. +
    toDocument(Reader) - +Static method in class biweekly.util.XmlUtils +
    + Parses an XML document from a reader. +
    toElementList(NodeList) - +Static method in class biweekly.util.XmlUtils +
    Gets all the elements out of a NodeList. +
    toMillis() - +Method in class biweekly.util.Duration +
    Converts the duration value to milliseconds. +
    toString() - +Method in class biweekly.ICalDataType +
      +
    toString() - +Method in class biweekly.io.json.JsonValue +
      +
    toString() - +Method in class biweekly.io.xml.XCalDocument +
      +
    toString() - +Method in class biweekly.parameter.EnumParameterValue +
      +
    toString() - +Method in class biweekly.util.DateTimeComponents +
    Converts the date-time components to a string using "basic" format. +
    toString(boolean) - +Method in class biweekly.util.DateTimeComponents +
    Converts the date-time components to a string. +
    toString() - +Method in class biweekly.util.Duration +
    Converts the duration to its string representation. +
    toString() - +Method in class biweekly.util.ListMultimap +
      +
    toString() - +Method in class biweekly.util.UtcOffset +
    Converts this offset to its ISO string representation using "basic" + format. +
    toString(boolean) - +Method in class biweekly.util.UtcOffset +
    Converts this offset to its ISO string representation. +
    toString(Node) - +Static method in class biweekly.util.XmlUtils +
    Converts an XML node to a string. +
    toString(Node, Map<String, String>) - +Static method in class biweekly.util.XmlUtils +
    Converts an XML node to a string. +
    toString() - +Method in class biweekly.ValidationWarnings +
    + Outputs all validation warnings as a newline-delimited string. +
    toString() - +Method in class biweekly.ValidationWarnings.WarningsGroup +
    + Outputs each message in this warnings group as a newline-delimited + string. +
    toWriter(Node, Writer) - +Static method in class biweekly.util.XmlUtils +
    Writes an XML node to a writer. +
    toWriter(Node, Writer, Map<String, String>) - +Static method in class biweekly.util.XmlUtils +
    Writes an XML node to a writer. +
    Transparency - Class in biweekly.property
    + Defines whether an event is visible to free/busy time searches.
    Transparency(String) - +Constructor for class biweekly.property.Transparency +
    Creates a new transparency property. +
    TransparencyMarshaller - Class in biweekly.property.marshaller
    Marshals Transparency properties.
    TransparencyMarshaller() - +Constructor for class biweekly.property.marshaller.TransparencyMarshaller +
      +
    transparent() - +Static method in class biweekly.property.Transparency +
    Creates a property that marks the event as being hidden from free/busy + time searches. +
    Trigger - Class in biweekly.property
    + Defines when an alarm will be triggered.
    Trigger(Duration, Related) - +Constructor for class biweekly.property.Trigger +
    Creates a trigger property. +
    Trigger(Date) - +Constructor for class biweekly.property.Trigger +
    Creates a trigger property. +
    TriggerMarshaller - Class in biweekly.property.marshaller
    Marshals Trigger properties.
    TriggerMarshaller() - +Constructor for class biweekly.property.marshaller.TriggerMarshaller +
      +
    tz(TimeZone) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.DateParser +
    Sets the timezone to parse the date as. +
    tz(boolean, String) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.DateWriter +
    Convenience method that combines ICalPropertyMarshaller.DateWriter.localTz(boolean) and + ICalPropertyMarshaller.DateWriter.tzid(String) into one method. +
    tz(TimeZone) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.DateWriter +
    Sets the timezone to format the date as. +
    TZID - +Static variable in class biweekly.parameter.ICalParameters +
      +
    tzid(String) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.DateParser +
    Sets the ID of the timezone to parse the date as (TZID parameter + value). +
    tzid(String, List<String>) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.DateParser +
    Sets the ID of the timezone to parse the date as (TZID parameter + value). +
    tzid(String) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.DateWriter +
    Sets the ID of the timezone to format the date as (TZID parameter + value). +
    +
    +

    +U

    +
    +
    Uid - Class in biweekly.property
    + Defines a unique identifier for a component.
    Uid(String) - +Constructor for class biweekly.property.Uid +
    Creates a UID property. +
    UidMarshaller - Class in biweekly.property.marshaller
    Marshals Uid properties.
    UidMarshaller() - +Constructor for class biweekly.property.marshaller.UidMarshaller +
      +
    unescape(boolean) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.Splitter +
    Sets whether to unescape each split string. +
    unescape(String) - +Static method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Unescapes all special characters that are escaped with a backslash, as + well as escaped newlines. +
    UNKNOWN - +Static variable in class biweekly.parameter.CalendarUserType +
      +
    unregister(ICalComponentMarshaller<? extends ICalComponent>) - +Method in class biweekly.io.ICalMarshallerRegistrar +
    Unregisters a component marshaller. +
    unregister(ICalPropertyMarshaller<? extends ICalProperty>) - +Method in class biweekly.io.ICalMarshallerRegistrar +
    Unregisters a property marshaller +
    until(Date) - +Method in class biweekly.util.Recurrence.Builder +
    Sets the date that the recurrence stops. +
    until(Date, boolean) - +Method in class biweekly.util.Recurrence.Builder +
    Sets the date that the recurrence stops. +
    URI - +Static variable in class biweekly.ICalDataType +
      +
    URL - +Static variable in class biweekly.Biweekly +
    The project webpage. +
    Url - Class in biweekly.property
    + Points to a resource that contains additional information about a component.
    Url(String) - +Constructor for class biweekly.property.Url +
    Creates a URL property. +
    UrlMarshaller - Class in biweekly.property.marshaller
    Marshals Url properties.
    UrlMarshaller() - +Constructor for class biweekly.property.marshaller.UrlMarshaller +
      +
    UTC_OFFSET - +Static variable in class biweekly.ICalDataType +
      +
    UtcOffset - Class in biweekly.util
    Represents a UTC offset.
    UtcOffset(int, int) - +Constructor for class biweekly.util.UtcOffset +
    Creates a new UTC offset. +
    UtcOffsetProperty - Class in biweekly.property
    Represents a property whose value is a timezone offset.
    UtcOffsetProperty(int, int) - +Constructor for class biweekly.property.UtcOffsetProperty +
      +
    UtcOffsetProperty(UtcOffset) - +Constructor for class biweekly.property.UtcOffsetProperty +
      +
    UtcOffsetPropertyMarshaller<T extends UtcOffsetProperty> - Class in biweekly.property.marshaller
    Marshals properties that have UTC offset values.
    UtcOffsetPropertyMarshaller(Class<T>, String) - +Constructor for class biweekly.property.marshaller.UtcOffsetPropertyMarshaller +
      +
    utf8Reader(InputStream) - +Static method in class biweekly.util.IOUtils +
    Creates a reader whose character encoding is set to "UTF-8". +
    utf8Reader(File) - +Static method in class biweekly.util.IOUtils +
    Creates a reader whose character encoding is set to "UTF-8". +
    utf8Writer(OutputStream) - +Static method in class biweekly.util.IOUtils +
    Creates a writer whose character encoding is set to "UTF-8". +
    utf8Writer(File) - +Static method in class biweekly.util.IOUtils +
    Creates a writer whose character encoding is set to "UTF-8". +
    utf8Writer(File, boolean) - +Static method in class biweekly.util.IOUtils +
    Creates a writer whose character encoding is set to "UTF-8". +
    +
    +

    +V

    +
    +
    v2_0() - +Static method in class biweekly.property.Version +
    Creates a version property that is set to the default iCalendar version + (2.0). +
    VAlarm - Class in biweekly.component
    + Defines a reminder for an event or to-do task.
    VAlarm(Action, Trigger) - +Constructor for class biweekly.component.VAlarm +
    Creates a new alarm. +
    VAlarmMarshaller - Class in biweekly.component.marshaller
     
    VAlarmMarshaller() - +Constructor for class biweekly.component.marshaller.VAlarmMarshaller +
      +
    validate(List<ICalComponent>) - +Method in class biweekly.component.ICalComponent +
    Checks the component for data consistency problems or deviations from the + spec. +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.component.ICalComponent +
    Checks the component for data consistency problems or deviations from the + spec. +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.component.Observance +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.component.VAlarm +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.component.VEvent +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.component.VFreeBusy +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.component.VJournal +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.component.VTimezone +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.component.VTodo +
      +
    validate() - +Method in class biweekly.ICalendar +
    Checks this iCalendar object for data consistency problems or deviations + from the spec. +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.ICalendar +
      +
    validate() - +Method in class biweekly.parameter.ICalParameters +
    Checks this parameters list for data consistency problems or deviations + from the spec. +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.Attachment +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.DateOrDateTimeProperty +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.EnumProperty +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.ExceptionDates +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.ExceptionRule +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.FreeBusy +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.Geo +
      +
    validate(List<ICalComponent>) - +Method in class biweekly.property.ICalProperty +
    Checks the property for data consistency problems or deviations from the + spec. +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.ICalProperty +
    Checks the property for data consistency problems or deviations from the + spec. +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.ListProperty +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.PercentComplete +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.RecurrenceDates +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.RecurrenceProperty +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.RecurrenceRule +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.RequestStatus +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.Trigger +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.UtcOffsetProperty +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.ValuedProperty +
      +
    validate(List<ICalComponent>, List<String>) - +Method in class biweekly.property.Version +
      +
    ValidationWarnings - Class in biweekly
    + Holds the validation warnings of an iCalendar object.
    ValidationWarnings(List<ValidationWarnings.WarningsGroup>) - +Constructor for class biweekly.ValidationWarnings +
    Creates a new validation warnings list. +
    ValidationWarnings.WarningsGroup - Class in biweekly
    Holds the validation warnings of a property or component.
    ValidationWarnings.WarningsGroup(ICalProperty, List<ICalComponent>, List<String>) - +Constructor for class biweekly.ValidationWarnings.WarningsGroup +
    Creates a new set of validation warnings for a property. +
    ValidationWarnings.WarningsGroup(ICalComponent, List<ICalComponent>, List<String>) - +Constructor for class biweekly.ValidationWarnings.WarningsGroup +
    Creates a new set of validation warnings for a component. +
    value - +Variable in class biweekly.parameter.EnumParameterValue +
    The value (for example, "text"). +
    VALUE - +Static variable in class biweekly.parameter.ICalParameters +
      +
    value - +Variable in class biweekly.property.DateOrDateTimeProperty +
      +
    value - +Variable in class biweekly.property.ValuedProperty +
      +
    ValuedProperty<T> - Class in biweekly.property
    Represents a property whose data model consists of a single object (such as a + String).
    ValuedProperty(T) - +Constructor for class biweekly.property.ValuedProperty +
    Creates a new valued property. +
    valuelessParameter(String, String) - +Method in interface biweekly.io.text.ICalRawReader.ICalDataStreamListener +
    Called when a value-less parameter is read. +
    valueOf(String) - +Static method in enum biweekly.util.ISOFormat +
    Returns the enum constant of this type with the specified name. +
    valueOf(String) - +Static method in enum biweekly.util.Recurrence.DayOfWeek +
    Returns the enum constant of this type with the specified name. +
    valueOf(String) - +Static method in enum biweekly.util.Recurrence.Frequency +
    Returns the enum constant of this type with the specified name. +
    valueOfAbbr(String) - +Static method in enum biweekly.util.Recurrence.DayOfWeek +
    Gets a day by its abbreviation. +
    values() - +Static method in enum biweekly.util.ISOFormat +
    Returns an array containing the constants of this enum type, in +the order they are declared. +
    values() - +Method in class biweekly.util.ListMultimap +
    Returns all the values. +
    values() - +Static method in enum biweekly.util.Recurrence.DayOfWeek +
    Returns an array containing the constants of this enum type, in +the order they are declared. +
    values() - +Static method in enum biweekly.util.Recurrence.Frequency +
    Returns an array containing the constants of this enum type, in +the order they are declared. +
    VERSION - +Static variable in class biweekly.Biweekly +
    The version of the library. +
    Version - Class in biweekly.property
    + Specifies the min/max versions a consumer must support in order to + successfully parse the iCalendar object.
    Version(String) - +Constructor for class biweekly.property.Version +
    Creates a new version property. +
    Version(String, String) - +Constructor for class biweekly.property.Version +
    Creates a new version property. +
    VersionMarshaller - Class in biweekly.property.marshaller
    Marshals Version properties.
    VersionMarshaller() - +Constructor for class biweekly.property.marshaller.VersionMarshaller +
      +
    VEvent - Class in biweekly.component
    + Defines a scheduled activity, such as a meeting that's two hours long.
    VEvent() - +Constructor for class biweekly.component.VEvent +
    + Creates a new event. +
    VEventMarshaller - Class in biweekly.component.marshaller
     
    VEventMarshaller() - +Constructor for class biweekly.component.marshaller.VEventMarshaller +
      +
    VFreeBusy - Class in biweekly.component
    + Defines a collection of time ranges that describe when the person is + available or unavailable.
    VFreeBusy() - +Constructor for class biweekly.component.VFreeBusy +
    + Creates a new free/busy component. +
    VFreeBusyMarshaller - Class in biweekly.component.marshaller
     
    VFreeBusyMarshaller() - +Constructor for class biweekly.component.marshaller.VFreeBusyMarshaller +
      +
    VJournal - Class in biweekly.component
    + Defines descriptive text associated with the calendar data.
    VJournal() - +Constructor for class biweekly.component.VJournal +
    + Creates a new journal entry. +
    VJournalMarshaller - Class in biweekly.component.marshaller
     
    VJournalMarshaller() - +Constructor for class biweekly.component.marshaller.VJournalMarshaller +
      +
    VTimezone - Class in biweekly.component
    + Defines a timezone's UTC offsets throughout the year.
    VTimezone(String) - +Constructor for class biweekly.component.VTimezone +
    Creates a new timezone component. +
    VTimezoneMarshaller - Class in biweekly.component.marshaller
     
    VTimezoneMarshaller() - +Constructor for class biweekly.component.marshaller.VTimezoneMarshaller +
      +
    VTodo - Class in biweekly.component
    + Defines a task or assignment.
    VTodo() - +Constructor for class biweekly.component.VTodo +
    + Creates a new to-do entry. +
    VTodoMarshaller - Class in biweekly.component.marshaller
     
    VTodoMarshaller() - +Constructor for class biweekly.component.marshaller.VTodoMarshaller +
      +
    +
    +

    +W

    +
    +
    warnings(List<List<String>>) - +Method in class biweekly.Biweekly.ParserChainJsonReader +
      +
    warnings(List<List<String>>) - +Method in class biweekly.Biweekly.ParserChainJsonString +
      +
    warnings(List<List<String>>) - +Method in class biweekly.Biweekly.ParserChainTextReader +
      +
    warnings(List<List<String>>) - +Method in class biweekly.Biweekly.ParserChainTextString +
      +
    warnings(List<List<String>>) - +Method in class biweekly.Biweekly.ParserChainXmlDocument +
      +
    warnings(List<List<String>>) - +Method in class biweekly.Biweekly.ParserChainXmlReader +
      +
    warnings(List<List<String>>) - +Method in class biweekly.Biweekly.ParserChainXmlString +
      +
    weeks(Integer) - +Method in class biweekly.util.Duration.Builder +
    Sets the number of weeks. +
    workweekStarts(Recurrence.DayOfWeek) - +Method in class biweekly.util.Recurrence.Builder +
    Sets the day that the work week starts. +
    write(ICalendar...) - +Static method in class biweekly.Biweekly +
    Writes multiple iCalendar objects to a data stream. +
    write(Collection<ICalendar>) - +Static method in class biweekly.Biweekly +
    Writes multiple iCalendar objects to a data stream. +
    write() - +Method in class biweekly.ICalendar +
    Marshals this iCalendar object to its plain text representation. +
    write(File) - +Method in class biweekly.ICalendar +
    Marshals this iCalendar object to its plain text representation. +
    write(OutputStream) - +Method in class biweekly.ICalendar +
    Marshals this iCalendar object to its plain text representation. +
    write(Writer) - +Method in class biweekly.ICalendar +
    Marshals this iCalendar object to its plain text representation. +
    write(ICalendar) - +Method in class biweekly.io.json.JCalWriter +
    Writes an iCalendar object to the data stream. +
    write(char[], int, int) - +Method in class biweekly.io.text.FoldedLineWriter +
      +
    write(char[], int, int, int, String) - +Method in class biweekly.io.text.FoldedLineWriter +
    Writes a portion of an array of characters. +
    write(ICalendar) - +Method in class biweekly.io.text.ICalWriter +
    Writes an iCalendar object to the data stream. +
    write() - +Method in class biweekly.io.xml.XCalDocument +
    Writes the xCal document to a string without pretty-printing it. +
    write(int) - +Method in class biweekly.io.xml.XCalDocument +
    Writes the xCal document to a string and pretty-prints it. +
    write(OutputStream) - +Method in class biweekly.io.xml.XCalDocument +
    Writes the xCal document to an output stream without pretty-printing it. +
    write(OutputStream, int) - +Method in class biweekly.io.xml.XCalDocument +
    Writes the xCal document to an output stream and pretty-prints it. +
    write(File) - +Method in class biweekly.io.xml.XCalDocument +
    Writes the xCal document to a file without pretty-printing it. +
    write(File, int) - +Method in class biweekly.io.xml.XCalDocument +
    Writes the xCal document to a file and pretty-prints it. +
    write(Writer) - +Method in class biweekly.io.xml.XCalDocument +
    Writes the xCal document to a writer without pretty-printing it. +
    write(Writer, int) - +Method in class biweekly.io.xml.XCalDocument +
    Writes the xCal document to a writer and pretty-prints it. +
    write() - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller.DateWriter +
    Creates the date string. +
    writeBeginComponent(String) - +Method in class biweekly.io.text.ICalRawWriter +
    Writes a property marking the beginning of a component (in other words, + writes a "BEGIN:NAME" property). +
    writeEndComponent() - +Method in class biweekly.io.json.JCalRawWriter +
    Closes the current component array. +
    writeEndComponent(String) - +Method in class biweekly.io.text.ICalRawWriter +
    Writes a property marking the end of a component (in other words, writes + a "END:NAME" property). +
    writeJson(ICalendar...) - +Static method in class biweekly.Biweekly +
    Writes an xCal document (XML-encoded iCalendar objects). +
    writeJson(Collection<ICalendar>) - +Static method in class biweekly.Biweekly +
    Writes an xCal document (XML-encoded iCalendar objects). +
    writeJson() - +Method in class biweekly.ICalendar +
    Marshals this iCalendar object to its JSON representation (jCal). +
    writeJson(File) - +Method in class biweekly.ICalendar +
    Marshals this iCalendar object to its JSON representation (jCal). +
    writeJson(OutputStream) - +Method in class biweekly.ICalendar +
    Marshals this iCalendar object to its JSON representation (jCal). +
    writeJson(Writer) - +Method in class biweekly.ICalendar +
    Marshals this iCalendar object to its JSON representation (jCal). +
    writeJson(T) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Marshals a property's value to a JSON data stream (jCal). +
    writeln(String) - +Method in class biweekly.io.text.FoldedLineWriter +
    Writes a string of text, followed by a newline. +
    writeProperty(String, ICalDataType, JCalValue) - +Method in class biweekly.io.json.JCalRawWriter +
    Writes a property to the current component. +
    writeProperty(String, ICalParameters, ICalDataType, JCalValue) - +Method in class biweekly.io.json.JCalRawWriter +
    Writes a property to the current component. +
    writeProperty(String, String) - +Method in class biweekly.io.text.ICalRawWriter +
    Writes a property to the iCalendar data stream. +
    writeProperty(String, ICalParameters, String) - +Method in class biweekly.io.text.ICalRawWriter +
    Writes a property to the iCalendar data stream. +
    writeStartComponent(String) - +Method in class biweekly.io.json.JCalRawWriter +
    Writes the beginning of a new component array. +
    writeText(T) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Marshals a property's value to a string. +
    writeValue(ExceptionDates, Date) - +Method in class biweekly.property.marshaller.ExceptionDatesMarshaller +
      +
    writeValue(T, V) - +Method in class biweekly.property.marshaller.ListPropertyMarshaller +
      +
    writeValue(T, String) - +Method in class biweekly.property.marshaller.TextListPropertyMarshaller +
      +
    writeXml(ICalendar...) - +Static method in class biweekly.Biweekly +
    Writes an xCal document (XML-encoded iCalendar objects). +
    writeXml(Collection<ICalendar>) - +Static method in class biweekly.Biweekly +
    Writes an xCal document (XML-encoded iCalendar objects). +
    writeXml() - +Method in class biweekly.ICalendar +
    Marshals this iCalendar object to its XML representation (xCal). +
    writeXml(File) - +Method in class biweekly.ICalendar +
    Marshals this iCalendar object to its XML representation (xCal). +
    writeXml(OutputStream) - +Method in class biweekly.ICalendar +
    Marshals this iCalendar object to its XML representation (xCal). +
    writeXml(Writer) - +Method in class biweekly.ICalendar +
    Marshals this iCalendar object to its XML representation (xCal). +
    writeXml(T, Element) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Marshals a property's value to an XML element (xCal). +
    +
    +

    +X

    +
    +
    XCAL_NS - +Static variable in class biweekly.io.xml.XCalNamespaceContext +
    The XML namespace for xCal documents. +
    XCalDocument - Class in biweekly.io.xml
    + Represents an XML document that contains iCalendar objects ("xCal" standard).
    XCalDocument(String) - +Constructor for class biweekly.io.xml.XCalDocument +
    Parses an xCal document from a string. +
    XCalDocument(InputStream) - +Constructor for class biweekly.io.xml.XCalDocument +
    Parses an xCal document from an input stream. +
    XCalDocument(File) - +Constructor for class biweekly.io.xml.XCalDocument +
    Parses an xCal document from a file. +
    XCalDocument(Reader) - +Constructor for class biweekly.io.xml.XCalDocument +
    + Parses an xCal document from a reader. +
    XCalDocument(Document) - +Constructor for class biweekly.io.xml.XCalDocument +
    Wraps an existing XML DOM object. +
    XCalDocument() - +Constructor for class biweekly.io.xml.XCalDocument +
    Creates an empty xCal document. +
    XCalElement - Class in biweekly.io.xml
    Wraps xCal functionality around an XML Element object.
    XCalElement(Element) - +Constructor for class biweekly.io.xml.XCalElement +
    Creates a new xCal element. +
    XCalNamespaceContext - Class in biweekly.io.xml
    Used for xCal xpath expressions.
    XCalNamespaceContext(String) - +Constructor for class biweekly.io.xml.XCalNamespaceContext +
    Creates a new namespace context. +
    Xml - Class in biweekly.property
    + Used for storing properties parsed from xCal documents whose XML namespaces + are not part of the xCal XML namespace.
    Xml(String) - +Constructor for class biweekly.property.Xml +
    Creates an XML property. +
    Xml(Element) - +Constructor for class biweekly.property.Xml +
    Creates an XML property. +
    Xml(Document) - +Constructor for class biweekly.property.Xml +
    Creates an XML property. +
    XmlMarshaller - Class in biweekly.property.marshaller
    Marshals Xml properties.
    XmlMarshaller() - +Constructor for class biweekly.property.marshaller.XmlMarshaller +
      +
    XmlUtils - Class in biweekly.util
    Generic XML utility methods.
    xrule(String, String) - +Method in class biweekly.util.Recurrence.Builder +
    Adds a non-standard rule part. +
    +
    +

    +_

    +
    +
    _8BIT - +Static variable in class biweekly.parameter.Encoding +
      +
    _dataType(Attachment) - +Method in class biweekly.property.marshaller.AttachmentMarshaller +
      +
    _dataType(T) - +Method in class biweekly.property.marshaller.DateOrDateTimePropertyMarshaller +
      +
    _dataType(ExceptionDates) - +Method in class biweekly.property.marshaller.ExceptionDatesMarshaller +
      +
    _dataType(T) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    + Determines the data type of a property instance. +
    _dataType(RawProperty) - +Method in class biweekly.property.marshaller.RawPropertyMarshaller +
      +
    _dataType(RecurrenceDates) - +Method in class biweekly.property.marshaller.RecurrenceDatesMarshaller +
      +
    _dataType(Trigger) - +Method in class biweekly.property.marshaller.TriggerMarshaller +
      +
    _newInstance() - +Method in class biweekly.component.marshaller.DaylightSavingsTimeMarshaller +
      +
    _newInstance() - +Method in class biweekly.component.marshaller.ICalComponentMarshaller +
    Creates a new instance of the component class. +
    _newInstance() - +Method in class biweekly.component.marshaller.ICalendarMarshaller +
      +
    _newInstance() - +Method in class biweekly.component.marshaller.RawComponentMarshaller +
      +
    _newInstance() - +Method in class biweekly.component.marshaller.StandardTimeMarshaller +
      +
    _newInstance() - +Method in class biweekly.component.marshaller.VAlarmMarshaller +
      +
    _newInstance() - +Method in class biweekly.component.marshaller.VEventMarshaller +
      +
    _newInstance() - +Method in class biweekly.component.marshaller.VFreeBusyMarshaller +
      +
    _newInstance() - +Method in class biweekly.component.marshaller.VJournalMarshaller +
      +
    _newInstance() - +Method in class biweekly.component.marshaller.VTimezoneMarshaller +
      +
    _newInstance() - +Method in class biweekly.component.marshaller.VTodoMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.AttachmentMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.DateOrDateTimePropertyMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.DateTimePropertyMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.DurationPropertyMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.ExceptionDatesMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.FreeBusyMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.GeoMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    /** +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.IntegerPropertyMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.ListPropertyMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.RecurrenceDatesMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.RecurrencePropertyMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.RequestStatusMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.TextPropertyMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.TriggerMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.UtcOffsetPropertyMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.VersionMarshaller +
      +
    _parseJson(JCalValue, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.XmlMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.AttachmentMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.DateOrDateTimePropertyMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.DateTimePropertyMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.DurationPropertyMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.FreeBusyMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.GeoMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Unmarshals a property from a plain-text iCalendar data stream. +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.IntegerPropertyMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.ListPropertyMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.RawPropertyMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.RecurrenceDatesMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.RecurrencePropertyMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.RequestStatusMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.TextPropertyMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.TriggerMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.UtcOffsetPropertyMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.VersionMarshaller +
      +
    _parseText(String, ICalDataType, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.XmlMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.AttachmentMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.DateOrDateTimePropertyMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.DateTimePropertyMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.DurationPropertyMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.ExceptionDatesMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.FreeBusyMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.GeoMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    + Unmarshals a property from an XML document (xCal). +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.IntegerPropertyMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.ListPropertyMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.RawPropertyMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.RecurrenceDatesMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.RecurrencePropertyMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.RequestStatusMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.TextPropertyMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.TriggerMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.UtcOffsetPropertyMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.VersionMarshaller +
      +
    _parseXml(XCalElement, ICalParameters, List<String>) - +Method in class biweekly.property.marshaller.XmlMarshaller +
      +
    _prepareParameters(Attachment, ICalParameters) - +Method in class biweekly.property.marshaller.AttachmentMarshaller +
      +
    _prepareParameters(T, ICalParameters) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    + Sanitizes a property's parameters before the property is written. +
    _writeJson(Attachment) - +Method in class biweekly.property.marshaller.AttachmentMarshaller +
      +
    _writeJson(T) - +Method in class biweekly.property.marshaller.DateOrDateTimePropertyMarshaller +
      +
    _writeJson(T) - +Method in class biweekly.property.marshaller.DateTimePropertyMarshaller +
      +
    _writeJson(DurationProperty) - +Method in class biweekly.property.marshaller.DurationPropertyMarshaller +
      +
    _writeJson(ExceptionDates) - +Method in class biweekly.property.marshaller.ExceptionDatesMarshaller +
      +
    _writeJson(FreeBusy) - +Method in class biweekly.property.marshaller.FreeBusyMarshaller +
      +
    _writeJson(Geo) - +Method in class biweekly.property.marshaller.GeoMarshaller +
      +
    _writeJson(T) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    + Marshals a property's value to a JSON data stream (jCal). +
    _writeJson(T) - +Method in class biweekly.property.marshaller.IntegerPropertyMarshaller +
      +
    _writeJson(T) - +Method in class biweekly.property.marshaller.ListPropertyMarshaller +
      +
    _writeJson(RecurrenceDates) - +Method in class biweekly.property.marshaller.RecurrenceDatesMarshaller +
      +
    _writeJson(T) - +Method in class biweekly.property.marshaller.RecurrencePropertyMarshaller +
      +
    _writeJson(RequestStatus) - +Method in class biweekly.property.marshaller.RequestStatusMarshaller +
      +
    _writeJson(T) - +Method in class biweekly.property.marshaller.TextPropertyMarshaller +
      +
    _writeJson(Trigger) - +Method in class biweekly.property.marshaller.TriggerMarshaller +
      +
    _writeJson(T) - +Method in class biweekly.property.marshaller.UtcOffsetPropertyMarshaller +
      +
    _writeJson(Version) - +Method in class biweekly.property.marshaller.VersionMarshaller +
      +
    _writeJson(Xml) - +Method in class biweekly.property.marshaller.XmlMarshaller +
      +
    _writeText(Attachment) - +Method in class biweekly.property.marshaller.AttachmentMarshaller +
      +
    _writeText(T) - +Method in class biweekly.property.marshaller.DateOrDateTimePropertyMarshaller +
      +
    _writeText(T) - +Method in class biweekly.property.marshaller.DateTimePropertyMarshaller +
      +
    _writeText(DurationProperty) - +Method in class biweekly.property.marshaller.DurationPropertyMarshaller +
      +
    _writeText(FreeBusy) - +Method in class biweekly.property.marshaller.FreeBusyMarshaller +
      +
    _writeText(Geo) - +Method in class biweekly.property.marshaller.GeoMarshaller +
      +
    _writeText(T) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    Marshals a property's value to a string. +
    _writeText(T) - +Method in class biweekly.property.marshaller.IntegerPropertyMarshaller +
      +
    _writeText(T) - +Method in class biweekly.property.marshaller.ListPropertyMarshaller +
      +
    _writeText(RawProperty) - +Method in class biweekly.property.marshaller.RawPropertyMarshaller +
      +
    _writeText(RecurrenceDates) - +Method in class biweekly.property.marshaller.RecurrenceDatesMarshaller +
      +
    _writeText(T) - +Method in class biweekly.property.marshaller.RecurrencePropertyMarshaller +
      +
    _writeText(RequestStatus) - +Method in class biweekly.property.marshaller.RequestStatusMarshaller +
      +
    _writeText(T) - +Method in class biweekly.property.marshaller.TextPropertyMarshaller +
      +
    _writeText(Trigger) - +Method in class biweekly.property.marshaller.TriggerMarshaller +
      +
    _writeText(T) - +Method in class biweekly.property.marshaller.UtcOffsetPropertyMarshaller +
      +
    _writeText(Version) - +Method in class biweekly.property.marshaller.VersionMarshaller +
      +
    _writeText(Xml) - +Method in class biweekly.property.marshaller.XmlMarshaller +
      +
    _writeXml(Attachment, XCalElement) - +Method in class biweekly.property.marshaller.AttachmentMarshaller +
      +
    _writeXml(T, XCalElement) - +Method in class biweekly.property.marshaller.DateOrDateTimePropertyMarshaller +
      +
    _writeXml(T, XCalElement) - +Method in class biweekly.property.marshaller.DateTimePropertyMarshaller +
      +
    _writeXml(DurationProperty, XCalElement) - +Method in class biweekly.property.marshaller.DurationPropertyMarshaller +
      +
    _writeXml(ExceptionDates, XCalElement) - +Method in class biweekly.property.marshaller.ExceptionDatesMarshaller +
      +
    _writeXml(FreeBusy, XCalElement) - +Method in class biweekly.property.marshaller.FreeBusyMarshaller +
      +
    _writeXml(Geo, XCalElement) - +Method in class biweekly.property.marshaller.GeoMarshaller +
      +
    _writeXml(T, XCalElement) - +Method in class biweekly.property.marshaller.ICalPropertyMarshaller +
    + Marshals a property's value to an XML element (xCal). +
    _writeXml(T, XCalElement) - +Method in class biweekly.property.marshaller.IntegerPropertyMarshaller +
      +
    _writeXml(T, XCalElement) - +Method in class biweekly.property.marshaller.ListPropertyMarshaller +
      +
    _writeXml(RecurrenceDates, XCalElement) - +Method in class biweekly.property.marshaller.RecurrenceDatesMarshaller +
      +
    _writeXml(T, XCalElement) - +Method in class biweekly.property.marshaller.RecurrencePropertyMarshaller +
      +
    _writeXml(RequestStatus, XCalElement) - +Method in class biweekly.property.marshaller.RequestStatusMarshaller +
      +
    _writeXml(T, XCalElement) - +Method in class biweekly.property.marshaller.TextPropertyMarshaller +
      +
    _writeXml(Trigger, XCalElement) - +Method in class biweekly.property.marshaller.TriggerMarshaller +
      +
    _writeXml(T, XCalElement) - +Method in class biweekly.property.marshaller.UtcOffsetPropertyMarshaller +
      +
    _writeXml(Version, XCalElement) - +Method in class biweekly.property.marshaller.VersionMarshaller +
      +
    _writeXml(Xml, XCalElement) - +Method in class biweekly.property.marshaller.XmlMarshaller +
      +
    +
    +A B C D E F G H I J K L M N O P Q R S T U V W X _ + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/index.html b/libs/biweekly-0.3.1-javadoc/index.html new file mode 100644 index 000000000..288e244c8 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/index.html @@ -0,0 +1,74 @@ + + + + + + + +biweekly 0.3.1 API + + + + + + + + + + + +<H2> +Frame Alert</H2> + +<P> +This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. +<BR> +Link to<A HREF="overview-summary.html">Non-frame version.</A> + + + diff --git a/libs/biweekly-0.3.1-javadoc/overview-frame.html b/libs/biweekly-0.3.1-javadoc/overview-frame.html new file mode 100644 index 000000000..738521cac --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/overview-frame.html @@ -0,0 +1,63 @@ + + + + + + + +Overview List (biweekly 0.3.1 API) + + + + + + + + + + + + + + + +
    +
    + + + + + +
    All Classes +

    + +Packages +
    +biweekly +
    +biweekly.component +
    +biweekly.component.marshaller +
    +biweekly.io +
    +biweekly.io.json +
    +biweekly.io.text +
    +biweekly.io.xml +
    +biweekly.parameter +
    +biweekly.property +
    +biweekly.property.marshaller +
    +biweekly.util +
    +

    + +

    +  + + diff --git a/libs/biweekly-0.3.1-javadoc/overview-summary.html b/libs/biweekly-0.3.1-javadoc/overview-summary.html new file mode 100644 index 000000000..279fe6478 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/overview-summary.html @@ -0,0 +1,197 @@ + + + + + + + +Overview (biweekly 0.3.1 API) + + + + + + + + + + + + +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +biweekly 0.3.1 API +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Packages
    biweekly 
    biweekly.component 
    biweekly.component.marshaller 
    biweekly.io 
    biweekly.io.json 
    biweekly.io.text 
    biweekly.io.xml 
    biweekly.parameter 
    biweekly.property 
    biweekly.property.marshaller 
    biweekly.util 
    + +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/overview-tree.html b/libs/biweekly-0.3.1-javadoc/overview-tree.html new file mode 100644 index 000000000..ad2db7398 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/overview-tree.html @@ -0,0 +1,253 @@ + + + + + + + +Class Hierarchy (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Hierarchy For All Packages

    +
    +
    +
    Package Hierarchies:
    biweekly, biweekly.component, biweekly.component.marshaller, biweekly.io, biweekly.io.json, biweekly.io.text, biweekly.io.xml, biweekly.parameter, biweekly.property, biweekly.property.marshaller, biweekly.util
    +
    +

    +Class Hierarchy +

    + +

    +Interface Hierarchy +

    + +

    +Enum Hierarchy +

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/package-list b/libs/biweekly-0.3.1-javadoc/package-list new file mode 100644 index 000000000..6b49b8a53 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/package-list @@ -0,0 +1,11 @@ +biweekly +biweekly.component +biweekly.component.marshaller +biweekly.io +biweekly.io.json +biweekly.io.text +biweekly.io.xml +biweekly.parameter +biweekly.property +biweekly.property.marshaller +biweekly.util diff --git a/libs/biweekly-0.3.1-javadoc/resources/inherit.gif b/libs/biweekly-0.3.1-javadoc/resources/inherit.gif new file mode 100644 index 0000000000000000000000000000000000000000..c814867a13deb0ca7ea2156c6ca1d5a03372af7e GIT binary patch literal 57 zcmZ?wbhEHbIIT!9-C*e{wE9>Kx3D)-;0v)C; KYxQGgum%9JOA&7X literal 0 HcmV?d00001 diff --git a/libs/biweekly-0.3.1-javadoc/serialized-form.html b/libs/biweekly-0.3.1-javadoc/serialized-form.html new file mode 100644 index 000000000..3d82159b8 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/serialized-form.html @@ -0,0 +1,276 @@ + + + + + + + +Serialized Form (biweekly 0.3.1 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Serialized Form

    +
    +
    + + + + + +
    +Package biweekly
    + +

    + + + + + +
    +Class biweekly.ICalException extends RuntimeException implements Serializable
    + +

    +


    + + + + + +
    +Package biweekly.io
    + +

    + + + + + +
    +Class biweekly.io.CannotParseException extends ICalException implements Serializable
    + +

    + +

    + + + + + +
    +Class biweekly.io.SkipMeException extends ICalException implements Serializable
    + +

    +


    + + + + + +
    +Package biweekly.io.json
    + +

    + + + + + +
    +Class biweekly.io.json.JCalParseException extends ICalException implements Serializable
    + +

    + + + + + +
    +Serialized Fields
    + +

    +expected

    +
    +JsonToken expected
    +
    +
    +
    +
    +
    +

    +actual

    +
    +JsonToken actual
    +
    +
    +
    +
    +
    + + + + + +
    +Package biweekly.io.text
    + +

    + + + + + +
    +Class biweekly.io.text.ICalRawReader.StopReadingException extends ICalException implements Serializable
    + +

    +


    + + + + + +
    +Package biweekly.util
    + +

    + + + + + +
    +Class biweekly.util.ICalFloatFormatter extends DecimalFormat implements Serializable
    + +

    + +

    +


    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +Copyright © 2013 Michael Angstadt. All Rights Reserved. + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainJsonReader.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainJsonReader.html new file mode 100644 index 000000000..6e42f0110 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainJsonReader.html @@ -0,0 +1,1542 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.io.File;
    +004    import java.io.IOException;
    +005    import java.io.InputStream;
    +006    import java.io.OutputStream;
    +007    import java.io.Reader;
    +008    import java.io.StringWriter;
    +009    import java.io.Writer;
    +010    import java.util.ArrayList;
    +011    import java.util.Arrays;
    +012    import java.util.Collection;
    +013    import java.util.HashMap;
    +014    import java.util.List;
    +015    import java.util.Map;
    +016    import java.util.Properties;
    +017    
    +018    import javax.xml.transform.TransformerException;
    +019    
    +020    import org.w3c.dom.Document;
    +021    import org.xml.sax.SAXException;
    +022    
    +023    import biweekly.component.ICalComponent;
    +024    import biweekly.component.marshaller.ICalComponentMarshaller;
    +025    import biweekly.io.ICalMarshallerRegistrar;
    +026    import biweekly.io.json.JCalParseException;
    +027    import biweekly.io.json.JCalReader;
    +028    import biweekly.io.json.JCalWriter;
    +029    import biweekly.io.text.ICalRawReader;
    +030    import biweekly.io.text.ICalRawWriter;
    +031    import biweekly.io.text.ICalReader;
    +032    import biweekly.io.text.ICalWriter;
    +033    import biweekly.io.xml.XCalDocument;
    +034    import biweekly.property.ICalProperty;
    +035    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +036    import biweekly.util.IOUtils;
    +037    
    +038    import com.fasterxml.jackson.core.JsonParseException;
    +039    
    +040    /*
    +041     Copyright (c) 2013, Michael Angstadt
    +042     All rights reserved.
    +043    
    +044     Redistribution and use in source and binary forms, with or without
    +045     modification, are permitted provided that the following conditions are met: 
    +046    
    +047     1. Redistributions of source code must retain the above copyright notice, this
    +048     list of conditions and the following disclaimer. 
    +049     2. Redistributions in binary form must reproduce the above copyright notice,
    +050     this list of conditions and the following disclaimer in the documentation
    +051     and/or other materials provided with the distribution. 
    +052    
    +053     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +054     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +055     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +056     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +057     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +058     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +059     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +060     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +061     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +062     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +063     */
    +064    
    +065    /**
    +066     * <p>
    +067     * Contains static chaining factory methods for reading/writing iCalendar
    +068     * objects.
    +069     * </p>
    +070     * 
    +071     * <p>
    +072     * <b>Writing an iCalendar object</b>
    +073     * 
    +074     * <pre class="brush:java">
    +075     * ICalendar ical = new ICalendar();
    +076     * 
    +077     * //string
    +078     * String icalString = Biweekly.write(ical).go();
    +079     * 
    +080     * //file
    +081     * File file = new File("meeting.ics");
    +082     * Biweekly.write(ical).go(file);
    +083     * 
    +084     * //output stream
    +085     * OutputStream out = ...
    +086     * Biweekly.write(ical).go(out);
    +087     * out.close();
    +088     * 
    +089     * //writer (should be configured to use UTF-8 encoding)
    +090     * Writer writer = ...
    +091     * Biweekly.write(ical).go(writer);
    +092     * writer.close();
    +093     * </pre>
    +094     * 
    +095     * </p>
    +096     * 
    +097     * <p>
    +098     * <b>Writing multiple iCalendar objects</b>
    +099     * 
    +100     * <pre class="brush:java">
    +101     * ICalendar ical1 = new ICalendar();
    +102     * ICalendar ical2 = new ICalendar();
    +103     * 
    +104     * String icalString = Biweekly.write(ical1, ical2).go();
    +105     * </pre>
    +106     * 
    +107     * </p>
    +108     * 
    +109     * <p>
    +110     * <b>Writing an XML-encoded iCalendar object (xCal)</b><br>
    +111     * 
    +112     * <pre class="brush:java">
    +113     * //Call writeXml() instead of write()
    +114     * ICalendar ical = new ICalendar();
    +115     * String xml = Biweekly.writeXml(ical).indent(2).go();
    +116     * </pre>
    +117     * 
    +118     * </p>
    +119     * 
    +120     * <p>
    +121     * <b>Writing a JSON-encoded iCalendar object (jCal)</b><br>
    +122     * 
    +123     * <pre class="brush:java">
    +124     * //Call writeJson() instead of write()
    +125     * ICalendar ical = new ICalendar();
    +126     * String json = Biweekly.writeJson(ical).go();
    +127     * </pre>
    +128     * 
    +129     * </p>
    +130     * 
    +131     * <p>
    +132     * <b>Reading an iCalendar object</b>
    +133     * 
    +134     * <pre class="brush:java">
    +135     * ICalendar ical;
    +136     * 
    +137     * //string
    +138     * String icalStr = ...
    +139     * ical = Biweekly.parse(icalStr).first();
    +140     * 
    +141     * //file
    +142     * File file = new File("meeting.ics");
    +143     * ical = Biweekly.parse(file).first();
    +144     * 
    +145     * //input stream
    +146     * InputStream in = ...
    +147     * ical = Biweekly.parse(in).first();
    +148     * in.close();  
    +149     * 
    +150     * //reader (should be configured to read UTF-8)
    +151     * Reader reader = ...
    +152     * ical = Biweekly.parse(reader).first();
    +153     * reader.close();
    +154     * </pre>
    +155     * 
    +156     * </p>
    +157     * 
    +158     * <p>
    +159     * <b>Reading multiple iCalendar objects</b>
    +160     * 
    +161     * <pre class="brush:java">
    +162     * String icalStr = ...
    +163     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).all();
    +164     * </pre>
    +165     * 
    +166     * </p>
    +167     * 
    +168     * <p>
    +169     * <b>Reading an XML-encoded iCalendar object (xCal)</b><br>
    +170     * 
    +171     * <pre class="brush:java">
    +172     * //Call parseXml() instead of parse()
    +173     * String xml = ...
    +174     * ICalendar ical = Biweekly.parseXml(xml).first();
    +175     * </pre>
    +176     * 
    +177     * </p>
    +178     * 
    +179     * <p>
    +180     * <b>Reading a JSON-encoded iCalendar object (Cal)</b><br>
    +181     * 
    +182     * <pre class="brush:java">
    +183     * //Call parseJson() instead of parse()
    +184     * String json = ...
    +185     * ICalendar ical = Biweekly.parseJson(json).first();
    +186     * </pre>
    +187     * 
    +188     * </p>
    +189     * 
    +190     * <p>
    +191     * <b>Retrieving parser warnings</b>
    +192     * 
    +193     * <pre class="brush:java">
    +194     * String icalStr = ...
    +195     * List&lt;List&lt;String&gt;&gt; warnings = new ArrayList&lt;List&lt;String&gt;&gt;();
    +196     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).warnings(warnings).all();
    +197     * int i = 0;
    +198     * for (List&lt;String&gt; icalWarnings : warnings){
    +199     *   System.out.println("iCal #" + (i++) + " warnings:");
    +200     *   for (String warning : icalWarnings){
    +201     *     System.out.println(warning);
    +202     *   }
    +203     * }
    +204     * </pre>
    +205     * 
    +206     * </p>
    +207     * 
    +208     * <p>
    +209     * The methods in this class make use of the following classes. These classes
    +210     * can be used if greater control over the read/write operation is required:
    +211     * </p>
    +212     * 
    +213     * <style> table.t td, table.t th {border:1px solid #000;} </style>
    +214     * <table class="t" cellpadding="5" style="border-collapse:collapse;">
    +215     * <tr>
    +216     * <th></th>
    +217     * <th>Classes</th>
    +218     * <th>Supports<br>
    +219     * streaming?</th>
    +220     * </tr>
    +221     * <tr>
    +222     * <th>Text</th>
    +223     * <td>{@link ICalReader} / {@link ICalWriter}</td>
    +224     * <td>yes</td>
    +225     * </tr>
    +226     * <tr>
    +227     * <th>XML</th>
    +228     * <td>{@link XCalDocument}</td>
    +229     * <td>no</td>
    +230     * </tr>
    +231     * <tr>
    +232     * <th>JSON</th>
    +233     * <td>{@link JCalReader} / {@link JCalWriter}</td>
    +234     * <td>yes</td>
    +235     * </tr>
    +236     * </table>
    +237     * @author Michael Angstadt
    +238     */
    +239    public class Biweekly {
    +240            /**
    +241             * The version of the library.
    +242             */
    +243            public static final String VERSION;
    +244    
    +245            /**
    +246             * The project webpage.
    +247             */
    +248            public static final String URL;
    +249    
    +250            static {
    +251                    InputStream in = null;
    +252                    try {
    +253                            in = Biweekly.class.getResourceAsStream("/biweekly.properties");
    +254                            Properties props = new Properties();
    +255                            props.load(in);
    +256    
    +257                            VERSION = props.getProperty("version");
    +258                            URL = props.getProperty("url");
    +259                    } catch (IOException e) {
    +260                            throw new RuntimeException(e);
    +261                    } finally {
    +262                            IOUtils.closeQuietly(in);
    +263                    }
    +264            }
    +265    
    +266            /**
    +267             * Parses an iCalendar object string.
    +268             * @param ical the iCalendar data
    +269             * @return chainer object for completing the parse operation
    +270             */
    +271            public static ParserChainTextString parse(String ical) {
    +272                    return new ParserChainTextString(ical);
    +273            }
    +274    
    +275            /**
    +276             * Parses an iCalendar file.
    +277             * @param file the iCalendar file
    +278             * @return chainer object for completing the parse operation
    +279             */
    +280            public static ParserChainTextReader parse(File file) {
    +281                    return new ParserChainTextReader(file);
    +282            }
    +283    
    +284            /**
    +285             * Parses an iCalendar data stream.
    +286             * @param in the input stream
    +287             * @return chainer object for completing the parse operation
    +288             */
    +289            public static ParserChainTextReader parse(InputStream in) {
    +290                    return new ParserChainTextReader(in);
    +291            }
    +292    
    +293            /**
    +294             * Parses an iCalendar data stream.
    +295             * @param reader the reader
    +296             * @return chainer object for completing the parse operation
    +297             */
    +298            public static ParserChainTextReader parse(Reader reader) {
    +299                    return new ParserChainTextReader(reader);
    +300            }
    +301    
    +302            /**
    +303             * Writes multiple iCalendar objects to a data stream.
    +304             * @param icals the iCalendar objects to write
    +305             * @return chainer object for completing the write operation
    +306             */
    +307            public static WriterChainText write(ICalendar... icals) {
    +308                    return write(Arrays.asList(icals));
    +309            }
    +310    
    +311            /**
    +312             * Writes multiple iCalendar objects to a data stream.
    +313             * @param icals the iCalendar objects to write
    +314             * @return chainer object for completing the write operation
    +315             */
    +316            public static WriterChainText write(Collection<ICalendar> icals) {
    +317                    return new WriterChainText(icals);
    +318            }
    +319    
    +320            /**
    +321             * Parses an xCal document (XML-encoded iCalendar objects) from a string.
    +322             * @param xml the XML string
    +323             * @return chainer object for completing the parse operation
    +324             */
    +325            public static ParserChainXmlString parseXml(String xml) {
    +326                    return new ParserChainXmlString(xml);
    +327            }
    +328    
    +329            /**
    +330             * Parses an xCal document (XML-encoded iCalendar objects) from a file.
    +331             * @param file the XML file
    +332             * @return chainer object for completing the parse operation
    +333             */
    +334            public static ParserChainXmlReader parseXml(File file) {
    +335                    return new ParserChainXmlReader(file);
    +336            }
    +337    
    +338            /**
    +339             * Parses an xCal document (XML-encoded iCalendar objects) from an input
    +340             * stream.
    +341             * @param in the input stream
    +342             * @return chainer object for completing the parse operation
    +343             */
    +344            public static ParserChainXmlReader parseXml(InputStream in) {
    +345                    return new ParserChainXmlReader(in);
    +346            }
    +347    
    +348            /**
    +349             * <p>
    +350             * Parses an xCal document (XML-encoded iCalendar objects) from a reader.
    +351             * </p>
    +352             * <p>
    +353             * Note that use of this method is discouraged. It ignores the character
    +354             * encoding that is defined within the XML document itself, and should only
    +355             * be used if the encoding is undefined or if the encoding needs to be
    +356             * ignored for whatever reason. The {@link #parseXml(InputStream)} method
    +357             * should be used instead, since it takes the XML document's character
    +358             * encoding into account when parsing.
    +359             * </p>
    +360             * @param reader the reader
    +361             * @return chainer object for completing the parse operation
    +362             */
    +363            public static ParserChainXmlReader parseXml(Reader reader) {
    +364                    return new ParserChainXmlReader(reader);
    +365            }
    +366    
    +367            /**
    +368             * Parses an xCal document (XML-encoded iCalendar objects).
    +369             * @param document the XML document
    +370             * @return chainer object for completing the parse operation
    +371             */
    +372            public static ParserChainXmlDocument parseXml(Document document) {
    +373                    return new ParserChainXmlDocument(document);
    +374            }
    +375    
    +376            /**
    +377             * Writes an xCal document (XML-encoded iCalendar objects).
    +378             * @param icals the iCalendar object(s) to write
    +379             * @return chainer object for completing the write operation
    +380             */
    +381            public static WriterChainXml writeXml(ICalendar... icals) {
    +382                    return writeXml(Arrays.asList(icals));
    +383            }
    +384    
    +385            /**
    +386             * Writes an xCal document (XML-encoded iCalendar objects).
    +387             * @param icals the iCalendar objects to write
    +388             * @return chainer object for completing the write operation
    +389             */
    +390            public static WriterChainXml writeXml(Collection<ICalendar> icals) {
    +391                    return new WriterChainXml(icals);
    +392            }
    +393    
    +394            /**
    +395             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +396             * @param json the JSON data
    +397             * @return chainer object for completing the parse operation
    +398             */
    +399            public static ParserChainJsonString parseJson(String json) {
    +400                    return new ParserChainJsonString(json);
    +401            }
    +402    
    +403            /**
    +404             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +405             * @param file the JSON file
    +406             * @return chainer object for completing the parse operation
    +407             */
    +408            public static ParserChainJsonReader parseJson(File file) {
    +409                    return new ParserChainJsonReader(file);
    +410            }
    +411    
    +412            /**
    +413             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +414             * @param in the input stream
    +415             * @return chainer object for completing the parse operation
    +416             */
    +417            public static ParserChainJsonReader parseJson(InputStream in) {
    +418                    return new ParserChainJsonReader(in);
    +419            }
    +420    
    +421            /**
    +422             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +423             * @param reader the reader
    +424             * @return chainer object for completing the parse operation
    +425             */
    +426            public static ParserChainJsonReader parseJson(Reader reader) {
    +427                    return new ParserChainJsonReader(reader);
    +428            }
    +429    
    +430            /**
    +431             * Writes an xCal document (XML-encoded iCalendar objects).
    +432             * @param icals the iCalendar object(s) to write
    +433             * @return chainer object for completing the write operation
    +434             */
    +435            public static WriterChainJson writeJson(ICalendar... icals) {
    +436                    return writeJson(Arrays.asList(icals));
    +437            }
    +438    
    +439            /**
    +440             * Writes an xCal document (XML-encoded iCalendar objects).
    +441             * @param icals the iCalendar objects to write
    +442             * @return chainer object for completing the write operation
    +443             */
    +444            public static WriterChainJson writeJson(Collection<ICalendar> icals) {
    +445                    return new WriterChainJson(icals);
    +446            }
    +447    
    +448            static abstract class ParserChain<T> {
    +449                    //Note: "package" level is used so various fields/methods don't show up in the Javadocs, but are still visible to child classes
    +450                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +451    
    +452                    @SuppressWarnings("unchecked")
    +453                    final T this_ = (T) this;
    +454    
    +455                    List<List<String>> warnings;
    +456    
    +457                    /**
    +458                     * Registers a property marshaller.
    +459                     * @param marshaller the marshaller
    +460                     * @return this
    +461                     */
    +462                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +463                            registrar.register(marshaller);
    +464                            return this_;
    +465                    }
    +466    
    +467                    /**
    +468                     * Registers a component marshaller.
    +469                     * @param marshaller the marshaller
    +470                     * @return this
    +471                     */
    +472                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +473                            registrar.register(marshaller);
    +474                            return this_;
    +475                    }
    +476    
    +477                    /**
    +478                     * Provides a list for putting the parser warnings into.
    +479                     * @param warnings the list object to populate (it is a
    +480                     * "list of lists"--each parsed {@link ICalendar} object has its own
    +481                     * warnings list)
    +482                     * @return this
    +483                     */
    +484                    public T warnings(List<List<String>> warnings) {
    +485                            this.warnings = warnings;
    +486                            return this_;
    +487                    }
    +488    
    +489                    /**
    +490                     * Reads the first iCalendar object from the data stream.
    +491                     * @return the first iCalendar object or null if there are none
    +492                     * @throws IOException if there a problem reading from the data stream
    +493                     * @throws SAXException if there's a problem parsing the XML
    +494                     */
    +495                    public abstract ICalendar first() throws IOException, SAXException;
    +496    
    +497                    /**
    +498                     * Reads all iCalendar objects from the data stream.
    +499                     * @return the parsed iCalendar objects
    +500                     * @throws IOException if there's a problem reading from the data stream
    +501                     * @throws SAXException if there's a problem parsing the XML
    +502                     */
    +503                    public abstract List<ICalendar> all() throws IOException, SAXException;
    +504            }
    +505    
    +506            ///////////////////////////////////////////////////////
    +507            // plain-text
    +508            ///////////////////////////////////////////////////////
    +509    
    +510            static abstract class ParserChainText<T> extends ParserChain<T> {
    +511                    boolean caretDecoding = true;
    +512                    final boolean closeWhenDone;
    +513    
    +514                    private ParserChainText(boolean closeWhenDone) {
    +515                            this.closeWhenDone = closeWhenDone;
    +516                    }
    +517    
    +518                    /**
    +519                     * Sets whether the reader will decode parameter values that use
    +520                     * circumflex accent encoding (enabled by default). This escaping
    +521                     * mechanism allows newlines and double quotes to be included in
    +522                     * parameter values.
    +523                     * @param enable true to use circumflex accent decoding, false not to
    +524                     * @return this
    +525                     * @see ICalRawReader#setCaretDecodingEnabled(boolean)
    +526                     */
    +527                    public T caretDecoding(boolean enable) {
    +528                            caretDecoding = enable;
    +529                            return this_;
    +530                    }
    +531    
    +532                    @Override
    +533                    public ICalendar first() throws IOException {
    +534                            ICalReader parser = constructReader();
    +535    
    +536                            try {
    +537                                    ICalendar ical = parser.readNext();
    +538                                    if (warnings != null) {
    +539                                            warnings.add(parser.getWarnings());
    +540                                    }
    +541                                    return ical;
    +542                            } finally {
    +543                                    if (closeWhenDone) {
    +544                                            IOUtils.closeQuietly(parser);
    +545                                    }
    +546                            }
    +547                    }
    +548    
    +549                    @Override
    +550                    public List<ICalendar> all() throws IOException {
    +551                            ICalReader parser = constructReader();
    +552    
    +553                            try {
    +554                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +555                                    ICalendar ical;
    +556                                    while ((ical = parser.readNext()) != null) {
    +557                                            if (warnings != null) {
    +558                                                    warnings.add(parser.getWarnings());
    +559                                            }
    +560                                            icals.add(ical);
    +561                                    }
    +562                                    return icals;
    +563                            } finally {
    +564                                    if (closeWhenDone) {
    +565                                            IOUtils.closeQuietly(parser);
    +566                                    }
    +567                            }
    +568                    }
    +569    
    +570                    private ICalReader constructReader() throws IOException {
    +571                            ICalReader parser = _constructReader();
    +572                            parser.setRegistrar(registrar);
    +573                            parser.setCaretDecodingEnabled(caretDecoding);
    +574                            return parser;
    +575                    }
    +576    
    +577                    abstract ICalReader _constructReader() throws IOException;
    +578            }
    +579    
    +580            /**
    +581             * Chainer class for parsing plain text iCalendar data streams.
    +582             * @see Biweekly#parse(InputStream)
    +583             * @see Biweekly#parse(File)
    +584             * @see Biweekly#parse(Reader)
    +585             */
    +586            public static class ParserChainTextReader extends ParserChainText<ParserChainTextReader> {
    +587                    private final InputStream in;
    +588                    private final File file;
    +589                    private final Reader reader;
    +590    
    +591                    private ParserChainTextReader(InputStream in) {
    +592                            super(false);
    +593                            this.in = in;
    +594                            this.reader = null;
    +595                            this.file = null;
    +596                    }
    +597    
    +598                    private ParserChainTextReader(File file) {
    +599                            super(true);
    +600                            this.in = null;
    +601                            this.reader = null;
    +602                            this.file = file;
    +603                    }
    +604    
    +605                    private ParserChainTextReader(Reader reader) {
    +606                            super(false);
    +607                            this.in = null;
    +608                            this.reader = reader;
    +609                            this.file = null;
    +610                    }
    +611    
    +612                    @Override
    +613                    public ParserChainTextReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +614                            return super.register(marshaller);
    +615                    }
    +616    
    +617                    @Override
    +618                    public ParserChainTextReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +619                            return super.register(marshaller);
    +620                    }
    +621    
    +622                    @Override
    +623                    public ParserChainTextReader warnings(List<List<String>> warnings) {
    +624                            return super.warnings(warnings);
    +625                    }
    +626    
    +627                    @Override
    +628                    public ParserChainTextReader caretDecoding(boolean enable) {
    +629                            return super.caretDecoding(enable);
    +630                    }
    +631    
    +632                    @Override
    +633                    ICalReader _constructReader() throws IOException {
    +634                            if (in != null) {
    +635                                    return new ICalReader(in);
    +636                            }
    +637                            if (file != null) {
    +638                                    return new ICalReader(file);
    +639                            }
    +640                            return new ICalReader(reader);
    +641                    }
    +642            }
    +643    
    +644            /**
    +645             * Chainer class for parsing plain text iCalendar strings.
    +646             * @see Biweekly#parse(String)
    +647             */
    +648            public static class ParserChainTextString extends ParserChainText<ParserChainTextString> {
    +649                    private final String text;
    +650    
    +651                    private ParserChainTextString(String text) {
    +652                            super(false);
    +653                            this.text = text;
    +654                    }
    +655    
    +656                    @Override
    +657                    public ParserChainTextString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +658                            return super.register(marshaller);
    +659                    }
    +660    
    +661                    @Override
    +662                    public ParserChainTextString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +663                            return super.register(marshaller);
    +664                    }
    +665    
    +666                    @Override
    +667                    public ParserChainTextString warnings(List<List<String>> warnings) {
    +668                            return super.warnings(warnings);
    +669                    }
    +670    
    +671                    @Override
    +672                    public ParserChainTextString caretDecoding(boolean enable) {
    +673                            return super.caretDecoding(enable);
    +674                    }
    +675    
    +676                    @Override
    +677                    ICalReader _constructReader() {
    +678                            return new ICalReader(text);
    +679                    }
    +680    
    +681                    @Override
    +682                    public ICalendar first() {
    +683                            try {
    +684                                    return super.first();
    +685                            } catch (IOException e) {
    +686                                    //should never been thrown because we're reading from a string
    +687                                    throw new RuntimeException(e);
    +688                            }
    +689                    }
    +690    
    +691                    @Override
    +692                    public List<ICalendar> all() {
    +693                            try {
    +694                                    return super.all();
    +695                            } catch (IOException e) {
    +696                                    //should never been thrown because we're reading from a string
    +697                                    throw new RuntimeException(e);
    +698                            }
    +699                    }
    +700            }
    +701    
    +702            ///////////////////////////////////////////////////////
    +703            // XML
    +704            ///////////////////////////////////////////////////////
    +705    
    +706            static abstract class ParserChainXml<T> extends ParserChain<T> {
    +707                    @Override
    +708                    public ICalendar first() throws IOException, SAXException {
    +709                            XCalDocument document = constructDocument();
    +710                            ICalendar ical = document.parseFirst();
    +711                            if (warnings != null) {
    +712                                    warnings.addAll(document.getParseWarnings());
    +713                            }
    +714                            return ical;
    +715                    }
    +716    
    +717                    @Override
    +718                    public List<ICalendar> all() throws IOException, SAXException {
    +719                            XCalDocument document = constructDocument();
    +720                            List<ICalendar> icals = document.parseAll();
    +721                            if (warnings != null) {
    +722                                    warnings.addAll(document.getParseWarnings());
    +723                            }
    +724                            return icals;
    +725                    }
    +726    
    +727                    private XCalDocument constructDocument() throws SAXException, IOException {
    +728                            XCalDocument parser = _constructDocument();
    +729                            parser.setRegistrar(registrar);
    +730                            return parser;
    +731                    }
    +732    
    +733                    abstract XCalDocument _constructDocument() throws IOException, SAXException;
    +734            }
    +735    
    +736            /**
    +737             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +738             * @see Biweekly#parseXml(String)
    +739             */
    +740            public static class ParserChainXmlString extends ParserChainXml<ParserChainXmlString> {
    +741                    private final String xml;
    +742    
    +743                    private ParserChainXmlString(String xml) {
    +744                            this.xml = xml;
    +745                    }
    +746    
    +747                    @Override
    +748                    public ParserChainXmlString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +749                            return super.register(marshaller);
    +750                    }
    +751    
    +752                    @Override
    +753                    public ParserChainXmlString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +754                            return super.register(marshaller);
    +755                    }
    +756    
    +757                    @Override
    +758                    public ParserChainXmlString warnings(List<List<String>> warnings) {
    +759                            return super.warnings(warnings);
    +760                    }
    +761    
    +762                    @Override
    +763                    XCalDocument _constructDocument() throws SAXException {
    +764                            return new XCalDocument(xml);
    +765                    }
    +766    
    +767                    @Override
    +768                    public ICalendar first() throws SAXException {
    +769                            try {
    +770                                    return super.first();
    +771                            } catch (IOException e) {
    +772                                    //should never been thrown because we're reading from a string
    +773                                    throw new RuntimeException(e);
    +774                            }
    +775                    }
    +776    
    +777                    @Override
    +778                    public List<ICalendar> all() throws SAXException {
    +779                            try {
    +780                                    return super.all();
    +781                            } catch (IOException e) {
    +782                                    //should never been thrown because we're reading from a string
    +783                                    throw new RuntimeException(e);
    +784                            }
    +785                    }
    +786            }
    +787    
    +788            /**
    +789             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +790             * @see Biweekly#parseXml(InputStream)
    +791             * @see Biweekly#parseXml(File)
    +792             * @see Biweekly#parseXml(Reader)
    +793             */
    +794            public static class ParserChainXmlReader extends ParserChainXml<ParserChainXmlReader> {
    +795                    private final InputStream in;
    +796                    private final File file;
    +797                    private final Reader reader;
    +798    
    +799                    private ParserChainXmlReader(InputStream in) {
    +800                            this.in = in;
    +801                            this.reader = null;
    +802                            this.file = null;
    +803                    }
    +804    
    +805                    private ParserChainXmlReader(File file) {
    +806                            this.in = null;
    +807                            this.reader = null;
    +808                            this.file = file;
    +809                    }
    +810    
    +811                    private ParserChainXmlReader(Reader reader) {
    +812                            this.in = null;
    +813                            this.reader = reader;
    +814                            this.file = null;
    +815                    }
    +816    
    +817                    @Override
    +818                    public ParserChainXmlReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +819                            return super.register(marshaller);
    +820                    }
    +821    
    +822                    @Override
    +823                    public ParserChainXmlReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +824                            return super.register(marshaller);
    +825                    }
    +826    
    +827                    @Override
    +828                    public ParserChainXmlReader warnings(List<List<String>> warnings) {
    +829                            return super.warnings(warnings);
    +830                    }
    +831    
    +832                    @Override
    +833                    XCalDocument _constructDocument() throws IOException, SAXException {
    +834                            if (in != null) {
    +835                                    return new XCalDocument(in);
    +836                            }
    +837                            if (file != null) {
    +838                                    return new XCalDocument(file);
    +839                            }
    +840                            return new XCalDocument(reader);
    +841                    }
    +842            }
    +843    
    +844            /**
    +845             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +846             * @see Biweekly#parseXml(Document)
    +847             */
    +848            public static class ParserChainXmlDocument extends ParserChainXml<ParserChainXmlDocument> {
    +849                    private final Document document;
    +850    
    +851                    private ParserChainXmlDocument(Document document) {
    +852                            this.document = document;
    +853                    }
    +854    
    +855                    @Override
    +856                    public ParserChainXmlDocument register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +857                            return super.register(marshaller);
    +858                    }
    +859    
    +860                    @Override
    +861                    public ParserChainXmlDocument register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +862                            return super.register(marshaller);
    +863                    }
    +864    
    +865                    @Override
    +866                    public ParserChainXmlDocument warnings(List<List<String>> warnings) {
    +867                            return super.warnings(warnings);
    +868                    }
    +869    
    +870                    @Override
    +871                    XCalDocument _constructDocument() {
    +872                            return new XCalDocument(document);
    +873                    }
    +874    
    +875                    @Override
    +876                    public ICalendar first() {
    +877                            try {
    +878                                    return super.first();
    +879                            } catch (IOException e) {
    +880                                    //should never been thrown because we're reading from a DOM
    +881                                    throw new RuntimeException(e);
    +882                            } catch (SAXException e) {
    +883                                    //should never been thrown because we're reading from a DOM
    +884                                    throw new RuntimeException(e);
    +885                            }
    +886                    }
    +887    
    +888                    @Override
    +889                    public List<ICalendar> all() {
    +890                            try {
    +891                                    return super.all();
    +892                            } catch (IOException e) {
    +893                                    //should never been thrown because we're reading from a DOM
    +894                                    throw new RuntimeException(e);
    +895                            } catch (SAXException e) {
    +896                                    //should never been thrown because we're reading from a DOM
    +897                                    throw new RuntimeException(e);
    +898                            }
    +899                    }
    +900            }
    +901    
    +902            ///////////////////////////////////////////////////////
    +903            // JSON
    +904            ///////////////////////////////////////////////////////
    +905    
    +906            static abstract class ParserChainJson<T> extends ParserChain<T> {
    +907                    final boolean closeWhenDone;
    +908    
    +909                    private ParserChainJson(boolean closeWhenDone) {
    +910                            this.closeWhenDone = closeWhenDone;
    +911                    }
    +912    
    +913                    /**
    +914                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +915                     * syntax may be valid, but it is not in the correct jCal format).
    +916                     * @throws JsonParseException if the JSON syntax is incorrect
    +917                     */
    +918                    @Override
    +919                    public ICalendar first() throws IOException {
    +920                            JCalReader parser = constructReader();
    +921    
    +922                            try {
    +923                                    ICalendar ical = parser.readNext();
    +924                                    if (warnings != null) {
    +925                                            warnings.add(parser.getWarnings());
    +926                                    }
    +927                                    return ical;
    +928                            } finally {
    +929                                    if (closeWhenDone) {
    +930                                            IOUtils.closeQuietly(parser);
    +931                                    }
    +932                            }
    +933                    }
    +934    
    +935                    /**
    +936                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +937                     * syntax may be valid, but it is not in the correct jCal format).
    +938                     * @throws JsonParseException if the JSON syntax is incorrect
    +939                     */
    +940                    @Override
    +941                    public List<ICalendar> all() throws IOException {
    +942                            JCalReader parser = constructReader();
    +943    
    +944                            try {
    +945                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +946                                    ICalendar ical;
    +947                                    while ((ical = parser.readNext()) != null) {
    +948                                            if (warnings != null) {
    +949                                                    warnings.add(parser.getWarnings());
    +950                                            }
    +951                                            icals.add(ical);
    +952                                    }
    +953                                    return icals;
    +954                            } finally {
    +955                                    if (closeWhenDone) {
    +956                                            IOUtils.closeQuietly(parser);
    +957                                    }
    +958                            }
    +959                    }
    +960    
    +961                    private JCalReader constructReader() throws IOException {
    +962                            JCalReader parser = _constructReader();
    +963                            parser.setRegistrar(registrar);
    +964                            return parser;
    +965                    }
    +966    
    +967                    abstract JCalReader _constructReader() throws IOException;
    +968            }
    +969    
    +970            /**
    +971             * Chainer class for parsing JSON-encoded iCalendar data streams (jCal).
    +972             * @see Biweekly#parseJson(InputStream)
    +973             * @see Biweekly#parseJson(File)
    +974             * @see Biweekly#parseJson(Reader)
    +975             */
    +976            public static class ParserChainJsonReader extends ParserChainJson<ParserChainJsonReader> {
    +977                    private final InputStream in;
    +978                    private final File file;
    +979                    private final Reader reader;
    +980    
    +981                    private ParserChainJsonReader(InputStream in) {
    +982                            super(false);
    +983                            this.in = in;
    +984                            this.reader = null;
    +985                            this.file = null;
    +986                    }
    +987    
    +988                    private ParserChainJsonReader(File file) {
    +989                            super(true);
    +990                            this.in = null;
    +991                            this.reader = null;
    +992                            this.file = file;
    +993                    }
    +994    
    +995                    private ParserChainJsonReader(Reader reader) {
    +996                            super(false);
    +997                            this.in = null;
    +998                            this.reader = reader;
    +999                            this.file = null;
    +1000                    }
    +1001    
    +1002                    @Override
    +1003                    public ParserChainJsonReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1004                            return super.register(marshaller);
    +1005                    }
    +1006    
    +1007                    @Override
    +1008                    public ParserChainJsonReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1009                            return super.register(marshaller);
    +1010                    }
    +1011    
    +1012                    @Override
    +1013                    public ParserChainJsonReader warnings(List<List<String>> warnings) {
    +1014                            return super.warnings(warnings);
    +1015                    }
    +1016    
    +1017                    @Override
    +1018                    JCalReader _constructReader() throws IOException {
    +1019                            if (in != null) {
    +1020                                    return new JCalReader(in);
    +1021                            }
    +1022                            if (file != null) {
    +1023                                    return new JCalReader(file);
    +1024                            }
    +1025                            return new JCalReader(reader);
    +1026                    }
    +1027            }
    +1028    
    +1029            /**
    +1030             * Chainer class for parsing JSON-encoded iCalendar strings (jCal).
    +1031             * @see Biweekly#parseJson(String)
    +1032             */
    +1033            public static class ParserChainJsonString extends ParserChainJson<ParserChainJsonString> {
    +1034                    private final String text;
    +1035    
    +1036                    private ParserChainJsonString(String text) {
    +1037                            super(false);
    +1038                            this.text = text;
    +1039                    }
    +1040    
    +1041                    @Override
    +1042                    public ParserChainJsonString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1043                            return super.register(marshaller);
    +1044                    }
    +1045    
    +1046                    @Override
    +1047                    public ParserChainJsonString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1048                            return super.register(marshaller);
    +1049                    }
    +1050    
    +1051                    @Override
    +1052                    public ParserChainJsonString warnings(List<List<String>> warnings) {
    +1053                            return super.warnings(warnings);
    +1054                    }
    +1055    
    +1056                    @Override
    +1057                    JCalReader _constructReader() {
    +1058                            return new JCalReader(text);
    +1059                    }
    +1060    
    +1061                    @Override
    +1062                    public ICalendar first() {
    +1063                            try {
    +1064                                    return super.first();
    +1065                            } catch (IOException e) {
    +1066                                    //should never been thrown because we're reading from a string
    +1067                                    throw new RuntimeException(e);
    +1068                            }
    +1069                    }
    +1070    
    +1071                    @Override
    +1072                    public List<ICalendar> all() {
    +1073                            try {
    +1074                                    return super.all();
    +1075                            } catch (IOException e) {
    +1076                                    //should never been thrown because we're reading from a string
    +1077                                    throw new RuntimeException(e);
    +1078                            }
    +1079                    }
    +1080            }
    +1081    
    +1082            static abstract class WriterChain<T> {
    +1083                    final Collection<ICalendar> icals;
    +1084                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +1085    
    +1086                    @SuppressWarnings("unchecked")
    +1087                    final T this_ = (T) this;
    +1088    
    +1089                    WriterChain(Collection<ICalendar> icals) {
    +1090                            this.icals = icals;
    +1091                    }
    +1092    
    +1093                    /**
    +1094                     * Registers a property marshaller.
    +1095                     * @param marshaller the marshaller
    +1096                     * @return this
    +1097                     */
    +1098                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1099                            registrar.register(marshaller);
    +1100                            return this_;
    +1101                    }
    +1102    
    +1103                    /**
    +1104                     * Registers a component marshaller.
    +1105                     * @param marshaller the marshaller
    +1106                     * @return this
    +1107                     */
    +1108                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1109                            registrar.register(marshaller);
    +1110                            return this_;
    +1111                    }
    +1112            }
    +1113    
    +1114            ///////////////////////////////////////////////////////
    +1115            // plain-text
    +1116            ///////////////////////////////////////////////////////
    +1117    
    +1118            /**
    +1119             * Chainer class for writing to plain text iCalendar data streams.
    +1120             * @see Biweekly#write(Collection)
    +1121             * @see Biweekly#write(ICalendar...)
    +1122             */
    +1123            public static class WriterChainText extends WriterChain<WriterChainText> {
    +1124                    boolean caretEncoding = false;
    +1125    
    +1126                    private WriterChainText(Collection<ICalendar> icals) {
    +1127                            super(icals);
    +1128                    }
    +1129    
    +1130                    /**
    +1131                     * <p>
    +1132                     * Sets whether the writer will apply circumflex accent encoding on
    +1133                     * parameter values (disabled by default). This escaping mechanism
    +1134                     * allows for newlines and double quotes to be included in parameter
    +1135                     * values.
    +1136                     * </p>
    +1137                     * 
    +1138                     * <p>
    +1139                     * When disabled, the writer will replace newlines with spaces and
    +1140                     * double quotes with single quotes.
    +1141                     * </p>
    +1142                     * @param enable true to use circumflex accent encoding, false not to
    +1143                     * @return this
    +1144                     * @see ICalRawWriter#setCaretEncodingEnabled(boolean)
    +1145                     */
    +1146                    public WriterChainText caretEncoding(boolean enable) {
    +1147                            this.caretEncoding = enable;
    +1148                            return this_;
    +1149                    }
    +1150    
    +1151                    /**
    +1152                     * Writes the iCalendar objects to a string.
    +1153                     * @return the iCalendar string
    +1154                     * @throws IllegalArgumentException if the marshaller class for a
    +1155                     * component or property object cannot be found (only happens when an
    +1156                     * experimental property/component marshaller is not registered with the
    +1157                     * {@code register} method.)
    +1158                     */
    +1159                    public String go() {
    +1160                            StringWriter sw = new StringWriter();
    +1161                            try {
    +1162                                    go(sw);
    +1163                            } catch (IOException e) {
    +1164                                    //writing to a string
    +1165                            }
    +1166                            return sw.toString();
    +1167                    }
    +1168    
    +1169                    /**
    +1170                     * Writes the iCalendar objects to a data stream.
    +1171                     * @param out the output stream to write to
    +1172                     * @throws IllegalArgumentException if the marshaller class for a
    +1173                     * component or property object cannot be found (only happens when an
    +1174                     * experimental property/component marshaller is not registered with the
    +1175                     * {@code register} method.)
    +1176                     * @throws IOException if there's a problem writing to the output stream
    +1177                     */
    +1178                    public void go(OutputStream out) throws IOException {
    +1179                            go(new ICalWriter(out));
    +1180                    }
    +1181    
    +1182                    /**
    +1183                     * Writes the iCalendar objects to a file.
    +1184                     * @param file the file to write to
    +1185                     * @throws IllegalArgumentException if the marshaller class for a
    +1186                     * component or property object cannot be found (only happens when an
    +1187                     * experimental property/component marshaller is not registered with the
    +1188                     * {@code register} method.)
    +1189                     * @throws IOException if there's a problem writing to the file
    +1190                     */
    +1191                    public void go(File file) throws IOException {
    +1192                            go(file, false);
    +1193                    }
    +1194    
    +1195                    /**
    +1196                     * Writes the iCalendar objects to a file.
    +1197                     * @param file the file to write to
    +1198                     * @param append true to append to the end of the file, false to
    +1199                     * overwrite it
    +1200                     * @throws IllegalArgumentException if the marshaller class for a
    +1201                     * component or property object cannot be found (only happens when an
    +1202                     * experimental property/component marshaller is not registered with the
    +1203                     * {@code register} method.)
    +1204                     * @throws IOException if there's a problem writing to the file
    +1205                     */
    +1206                    public void go(File file, boolean append) throws IOException {
    +1207                            ICalWriter icalWriter = new ICalWriter(file, append);
    +1208                            try {
    +1209                                    go(icalWriter);
    +1210                            } finally {
    +1211                                    IOUtils.closeQuietly(icalWriter);
    +1212                            }
    +1213                    }
    +1214    
    +1215                    /**
    +1216                     * Writes the iCalendar objects to a data stream.
    +1217                     * @param writer the writer to write to
    +1218                     * @throws IllegalArgumentException if the marshaller class for a
    +1219                     * component or property object cannot be found (only happens when an
    +1220                     * experimental property/component marshaller is not registered with the
    +1221                     * {@code register} method.)
    +1222                     * @throws IOException if there's a problem writing to the writer
    +1223                     */
    +1224                    public void go(Writer writer) throws IOException {
    +1225                            go(new ICalWriter(writer));
    +1226                    }
    +1227    
    +1228                    private void go(ICalWriter icalWriter) throws IOException {
    +1229                            icalWriter.setRegistrar(registrar);
    +1230                            icalWriter.setCaretEncodingEnabled(caretEncoding);
    +1231    
    +1232                            for (ICalendar ical : icals) {
    +1233                                    icalWriter.write(ical);
    +1234                            }
    +1235                    }
    +1236            }
    +1237    
    +1238            ///////////////////////////////////////////////////////
    +1239            // XML
    +1240            ///////////////////////////////////////////////////////
    +1241    
    +1242            /**
    +1243             * Chainer class for writing xCal documents (XML-encoded iCalendar objects).
    +1244             * @see Biweekly#writeXml(Collection)
    +1245             * @see Biweekly#writeXml(ICalendar...)
    +1246             */
    +1247            public static class WriterChainXml extends WriterChain<WriterChainXml> {
    +1248                    int indent = -1;
    +1249                    final Map<String, ICalDataType> parameterDataTypes = new HashMap<String, ICalDataType>(0);
    +1250    
    +1251                    WriterChainXml(Collection<ICalendar> icals) {
    +1252                            super(icals);
    +1253                    }
    +1254    
    +1255                    @Override
    +1256                    public WriterChainXml register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1257                            return super.register(marshaller);
    +1258                    }
    +1259    
    +1260                    @Override
    +1261                    public WriterChainXml register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1262                            return super.register(marshaller);
    +1263                    }
    +1264    
    +1265                    /**
    +1266                     * Registers the data type of an experimental parameter. Experimental
    +1267                     * parameters use the "unknown" xCal data type by default.
    +1268                     * @param parameterName the parameter name (e.g. "x-foo")
    +1269                     * @param dataType the data type
    +1270                     * @return this
    +1271                     */
    +1272                    public WriterChainXml register(String parameterName, ICalDataType dataType) {
    +1273                            parameterDataTypes.put(parameterName, dataType);
    +1274                            return this_;
    +1275                    }
    +1276    
    +1277                    /**
    +1278                     * Sets the number of indent spaces to use for pretty-printing. If not
    +1279                     * set, then the XML will not be pretty-printed.
    +1280                     * @param indent the number of spaces
    +1281                     * @return this
    +1282                     */
    +1283                    public WriterChainXml indent(int indent) {
    +1284                            this.indent = indent;
    +1285                            return this_;
    +1286                    }
    +1287    
    +1288                    /**
    +1289                     * Writes the xCal document to a string.
    +1290                     * @return the XML string
    +1291                     * @throws IllegalArgumentException if the marshaller class for a
    +1292                     * component or property object cannot be found (only happens when an
    +1293                     * experimental property/component marshaller is not registered with the
    +1294                     * {@code register} method.)
    +1295                     */
    +1296                    public String go() {
    +1297                            StringWriter sw = new StringWriter();
    +1298                            try {
    +1299                                    go(sw);
    +1300                            } catch (TransformerException e) {
    +1301                                    //writing to a string
    +1302                            }
    +1303                            return sw.toString();
    +1304                    }
    +1305    
    +1306                    /**
    +1307                     * Writes the xCal document to an output stream.
    +1308                     * @param out the output stream to write to
    +1309                     * @throws IllegalArgumentException if the marshaller class for a
    +1310                     * component or property object cannot be found (only happens when an
    +1311                     * experimental property/component marshaller is not registered with the
    +1312                     * {@code register} method.)
    +1313                     * @throws TransformerException if there's a problem writing the XML
    +1314                     */
    +1315                    public void go(OutputStream out) throws TransformerException {
    +1316                            XCalDocument document = constructDocument();
    +1317                            document.write(out, indent);
    +1318                    }
    +1319    
    +1320                    /**
    +1321                     * Writes the xCal document to a file.
    +1322                     * @param file the file to write to
    +1323                     * @throws IllegalArgumentException if the marshaller class for a
    +1324                     * component or property object cannot be found (only happens when an
    +1325                     * experimental property/component marshaller is not registered with the
    +1326                     * {@code register} method.)
    +1327                     * @throws TransformerException if there's a problem writing the XML
    +1328                     * @throws IOException if there's a problem writing to the file
    +1329                     */
    +1330                    public void go(File file) throws TransformerException, IOException {
    +1331                            XCalDocument document = constructDocument();
    +1332                            document.write(file, indent);
    +1333                    }
    +1334    
    +1335                    /**
    +1336                     * Writes the xCal document to a writer.
    +1337                     * @param writer the writer to write to
    +1338                     * @throws IllegalArgumentException if the marshaller class for a
    +1339                     * component or property object cannot be found (only happens when an
    +1340                     * experimental property/component marshaller is not registered with the
    +1341                     * {@code register} method.)
    +1342                     * @throws TransformerException if there's a problem writing the XML
    +1343                     */
    +1344                    public void go(Writer writer) throws TransformerException {
    +1345                            XCalDocument document = constructDocument();
    +1346                            document.write(writer, indent);
    +1347                    }
    +1348    
    +1349                    /**
    +1350                     * Writes the xCal document to an XML DOM.
    +1351                     * @return the XML DOM
    +1352                     */
    +1353                    public Document dom() {
    +1354                            XCalDocument document = constructDocument();
    +1355                            return document.getDocument();
    +1356                    }
    +1357    
    +1358                    private XCalDocument constructDocument() {
    +1359                            XCalDocument document = new XCalDocument();
    +1360                            document.setRegistrar(registrar);
    +1361                            for (Map.Entry<String, ICalDataType> entry : parameterDataTypes.entrySet()) {
    +1362                                    document.registerParameterDataType(entry.getKey(), entry.getValue());
    +1363                            }
    +1364    
    +1365                            for (ICalendar ical : icals) {
    +1366                                    document.add(ical);
    +1367                            }
    +1368    
    +1369                            return document;
    +1370                    }
    +1371            }
    +1372    
    +1373            ///////////////////////////////////////////////////////
    +1374            // JSON
    +1375            ///////////////////////////////////////////////////////
    +1376    
    +1377            /**
    +1378             * Chainer class for writing to JSON-encoded iCalendar data streams (jCal).
    +1379             * @see Biweekly#writeJson(Collection)
    +1380             * @see Biweekly#writeJson(ICalendar...)
    +1381             */
    +1382            public static class WriterChainJson extends WriterChain<WriterChainJson> {
    +1383                    private boolean indent = false;
    +1384    
    +1385                    private WriterChainJson(Collection<ICalendar> icals) {
    +1386                            super(icals);
    +1387                    }
    +1388    
    +1389                    /**
    +1390                     * Sets whether or not to pretty-print the JSON.
    +1391                     * @param indent true to pretty-print it, false not to (defaults to
    +1392                     * false)
    +1393                     * @return this
    +1394                     */
    +1395                    public WriterChainJson indent(boolean indent) {
    +1396                            this.indent = indent;
    +1397                            return this_;
    +1398                    }
    +1399    
    +1400                    /**
    +1401                     * Writes the iCalendar objects to a string.
    +1402                     * @return the iCalendar string
    +1403                     * @throws IllegalArgumentException if the marshaller class for a
    +1404                     * component or property object cannot be found (only happens when an
    +1405                     * experimental property/component marshaller is not registered with the
    +1406                     * {@code register} method.)
    +1407                     */
    +1408                    public String go() {
    +1409                            StringWriter sw = new StringWriter();
    +1410                            try {
    +1411                                    go(sw);
    +1412                            } catch (IOException e) {
    +1413                                    //writing to a string
    +1414                            }
    +1415                            return sw.toString();
    +1416                    }
    +1417    
    +1418                    /**
    +1419                     * Writes the iCalendar objects to a data stream.
    +1420                     * @param out the output stream to write to
    +1421                     * @throws IllegalArgumentException if the marshaller class for a
    +1422                     * component or property object cannot be found (only happens when an
    +1423                     * experimental property/component marshaller is not registered with the
    +1424                     * {@code register} method.)
    +1425                     * @throws IOException if there's a problem writing to the output stream
    +1426                     */
    +1427                    public void go(OutputStream out) throws IOException {
    +1428                            go(new JCalWriter(out, icals.size() > 1));
    +1429                    }
    +1430    
    +1431                    /**
    +1432                     * Writes the iCalendar objects to a file.
    +1433                     * @param file the file to write to
    +1434                     * @throws IllegalArgumentException if the marshaller class for a
    +1435                     * component or property object cannot be found (only happens when an
    +1436                     * experimental property/component marshaller is not registered with the
    +1437                     * {@code register} method.)
    +1438                     * @throws IOException if there's a problem writing to the file
    +1439                     */
    +1440                    public void go(File file) throws IOException {
    +1441                            JCalWriter jcalWriter = new JCalWriter(file, icals.size() > 1);
    +1442                            try {
    +1443                                    go(jcalWriter);
    +1444                            } finally {
    +1445                                    IOUtils.closeQuietly(jcalWriter);
    +1446                            }
    +1447                    }
    +1448    
    +1449                    /**
    +1450                     * Writes the iCalendar objects to a data stream.
    +1451                     * @param writer the writer to write to
    +1452                     * @throws IllegalArgumentException if the marshaller class for a
    +1453                     * component or property object cannot be found (only happens when an
    +1454                     * experimental property/component marshaller is not registered with the
    +1455                     * {@code register} method.)
    +1456                     * @throws IOException if there's a problem writing to the writer
    +1457                     */
    +1458                    public void go(Writer writer) throws IOException {
    +1459                            go(new JCalWriter(writer, icals.size() > 1));
    +1460                    }
    +1461    
    +1462                    private void go(JCalWriter jcalWriter) throws IOException {
    +1463                            jcalWriter.setRegistrar(registrar);
    +1464                            jcalWriter.setIndent(indent);
    +1465    
    +1466                            for (ICalendar ical : icals) {
    +1467                                    jcalWriter.write(ical);
    +1468                            }
    +1469                            jcalWriter.closeJsonStream();
    +1470                    }
    +1471            }
    +1472    
    +1473            private Biweekly() {
    +1474                    //hide
    +1475            }
    +1476    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainJsonString.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainJsonString.html new file mode 100644 index 000000000..6e42f0110 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainJsonString.html @@ -0,0 +1,1542 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.io.File;
    +004    import java.io.IOException;
    +005    import java.io.InputStream;
    +006    import java.io.OutputStream;
    +007    import java.io.Reader;
    +008    import java.io.StringWriter;
    +009    import java.io.Writer;
    +010    import java.util.ArrayList;
    +011    import java.util.Arrays;
    +012    import java.util.Collection;
    +013    import java.util.HashMap;
    +014    import java.util.List;
    +015    import java.util.Map;
    +016    import java.util.Properties;
    +017    
    +018    import javax.xml.transform.TransformerException;
    +019    
    +020    import org.w3c.dom.Document;
    +021    import org.xml.sax.SAXException;
    +022    
    +023    import biweekly.component.ICalComponent;
    +024    import biweekly.component.marshaller.ICalComponentMarshaller;
    +025    import biweekly.io.ICalMarshallerRegistrar;
    +026    import biweekly.io.json.JCalParseException;
    +027    import biweekly.io.json.JCalReader;
    +028    import biweekly.io.json.JCalWriter;
    +029    import biweekly.io.text.ICalRawReader;
    +030    import biweekly.io.text.ICalRawWriter;
    +031    import biweekly.io.text.ICalReader;
    +032    import biweekly.io.text.ICalWriter;
    +033    import biweekly.io.xml.XCalDocument;
    +034    import biweekly.property.ICalProperty;
    +035    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +036    import biweekly.util.IOUtils;
    +037    
    +038    import com.fasterxml.jackson.core.JsonParseException;
    +039    
    +040    /*
    +041     Copyright (c) 2013, Michael Angstadt
    +042     All rights reserved.
    +043    
    +044     Redistribution and use in source and binary forms, with or without
    +045     modification, are permitted provided that the following conditions are met: 
    +046    
    +047     1. Redistributions of source code must retain the above copyright notice, this
    +048     list of conditions and the following disclaimer. 
    +049     2. Redistributions in binary form must reproduce the above copyright notice,
    +050     this list of conditions and the following disclaimer in the documentation
    +051     and/or other materials provided with the distribution. 
    +052    
    +053     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +054     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +055     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +056     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +057     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +058     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +059     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +060     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +061     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +062     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +063     */
    +064    
    +065    /**
    +066     * <p>
    +067     * Contains static chaining factory methods for reading/writing iCalendar
    +068     * objects.
    +069     * </p>
    +070     * 
    +071     * <p>
    +072     * <b>Writing an iCalendar object</b>
    +073     * 
    +074     * <pre class="brush:java">
    +075     * ICalendar ical = new ICalendar();
    +076     * 
    +077     * //string
    +078     * String icalString = Biweekly.write(ical).go();
    +079     * 
    +080     * //file
    +081     * File file = new File("meeting.ics");
    +082     * Biweekly.write(ical).go(file);
    +083     * 
    +084     * //output stream
    +085     * OutputStream out = ...
    +086     * Biweekly.write(ical).go(out);
    +087     * out.close();
    +088     * 
    +089     * //writer (should be configured to use UTF-8 encoding)
    +090     * Writer writer = ...
    +091     * Biweekly.write(ical).go(writer);
    +092     * writer.close();
    +093     * </pre>
    +094     * 
    +095     * </p>
    +096     * 
    +097     * <p>
    +098     * <b>Writing multiple iCalendar objects</b>
    +099     * 
    +100     * <pre class="brush:java">
    +101     * ICalendar ical1 = new ICalendar();
    +102     * ICalendar ical2 = new ICalendar();
    +103     * 
    +104     * String icalString = Biweekly.write(ical1, ical2).go();
    +105     * </pre>
    +106     * 
    +107     * </p>
    +108     * 
    +109     * <p>
    +110     * <b>Writing an XML-encoded iCalendar object (xCal)</b><br>
    +111     * 
    +112     * <pre class="brush:java">
    +113     * //Call writeXml() instead of write()
    +114     * ICalendar ical = new ICalendar();
    +115     * String xml = Biweekly.writeXml(ical).indent(2).go();
    +116     * </pre>
    +117     * 
    +118     * </p>
    +119     * 
    +120     * <p>
    +121     * <b>Writing a JSON-encoded iCalendar object (jCal)</b><br>
    +122     * 
    +123     * <pre class="brush:java">
    +124     * //Call writeJson() instead of write()
    +125     * ICalendar ical = new ICalendar();
    +126     * String json = Biweekly.writeJson(ical).go();
    +127     * </pre>
    +128     * 
    +129     * </p>
    +130     * 
    +131     * <p>
    +132     * <b>Reading an iCalendar object</b>
    +133     * 
    +134     * <pre class="brush:java">
    +135     * ICalendar ical;
    +136     * 
    +137     * //string
    +138     * String icalStr = ...
    +139     * ical = Biweekly.parse(icalStr).first();
    +140     * 
    +141     * //file
    +142     * File file = new File("meeting.ics");
    +143     * ical = Biweekly.parse(file).first();
    +144     * 
    +145     * //input stream
    +146     * InputStream in = ...
    +147     * ical = Biweekly.parse(in).first();
    +148     * in.close();  
    +149     * 
    +150     * //reader (should be configured to read UTF-8)
    +151     * Reader reader = ...
    +152     * ical = Biweekly.parse(reader).first();
    +153     * reader.close();
    +154     * </pre>
    +155     * 
    +156     * </p>
    +157     * 
    +158     * <p>
    +159     * <b>Reading multiple iCalendar objects</b>
    +160     * 
    +161     * <pre class="brush:java">
    +162     * String icalStr = ...
    +163     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).all();
    +164     * </pre>
    +165     * 
    +166     * </p>
    +167     * 
    +168     * <p>
    +169     * <b>Reading an XML-encoded iCalendar object (xCal)</b><br>
    +170     * 
    +171     * <pre class="brush:java">
    +172     * //Call parseXml() instead of parse()
    +173     * String xml = ...
    +174     * ICalendar ical = Biweekly.parseXml(xml).first();
    +175     * </pre>
    +176     * 
    +177     * </p>
    +178     * 
    +179     * <p>
    +180     * <b>Reading a JSON-encoded iCalendar object (Cal)</b><br>
    +181     * 
    +182     * <pre class="brush:java">
    +183     * //Call parseJson() instead of parse()
    +184     * String json = ...
    +185     * ICalendar ical = Biweekly.parseJson(json).first();
    +186     * </pre>
    +187     * 
    +188     * </p>
    +189     * 
    +190     * <p>
    +191     * <b>Retrieving parser warnings</b>
    +192     * 
    +193     * <pre class="brush:java">
    +194     * String icalStr = ...
    +195     * List&lt;List&lt;String&gt;&gt; warnings = new ArrayList&lt;List&lt;String&gt;&gt;();
    +196     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).warnings(warnings).all();
    +197     * int i = 0;
    +198     * for (List&lt;String&gt; icalWarnings : warnings){
    +199     *   System.out.println("iCal #" + (i++) + " warnings:");
    +200     *   for (String warning : icalWarnings){
    +201     *     System.out.println(warning);
    +202     *   }
    +203     * }
    +204     * </pre>
    +205     * 
    +206     * </p>
    +207     * 
    +208     * <p>
    +209     * The methods in this class make use of the following classes. These classes
    +210     * can be used if greater control over the read/write operation is required:
    +211     * </p>
    +212     * 
    +213     * <style> table.t td, table.t th {border:1px solid #000;} </style>
    +214     * <table class="t" cellpadding="5" style="border-collapse:collapse;">
    +215     * <tr>
    +216     * <th></th>
    +217     * <th>Classes</th>
    +218     * <th>Supports<br>
    +219     * streaming?</th>
    +220     * </tr>
    +221     * <tr>
    +222     * <th>Text</th>
    +223     * <td>{@link ICalReader} / {@link ICalWriter}</td>
    +224     * <td>yes</td>
    +225     * </tr>
    +226     * <tr>
    +227     * <th>XML</th>
    +228     * <td>{@link XCalDocument}</td>
    +229     * <td>no</td>
    +230     * </tr>
    +231     * <tr>
    +232     * <th>JSON</th>
    +233     * <td>{@link JCalReader} / {@link JCalWriter}</td>
    +234     * <td>yes</td>
    +235     * </tr>
    +236     * </table>
    +237     * @author Michael Angstadt
    +238     */
    +239    public class Biweekly {
    +240            /**
    +241             * The version of the library.
    +242             */
    +243            public static final String VERSION;
    +244    
    +245            /**
    +246             * The project webpage.
    +247             */
    +248            public static final String URL;
    +249    
    +250            static {
    +251                    InputStream in = null;
    +252                    try {
    +253                            in = Biweekly.class.getResourceAsStream("/biweekly.properties");
    +254                            Properties props = new Properties();
    +255                            props.load(in);
    +256    
    +257                            VERSION = props.getProperty("version");
    +258                            URL = props.getProperty("url");
    +259                    } catch (IOException e) {
    +260                            throw new RuntimeException(e);
    +261                    } finally {
    +262                            IOUtils.closeQuietly(in);
    +263                    }
    +264            }
    +265    
    +266            /**
    +267             * Parses an iCalendar object string.
    +268             * @param ical the iCalendar data
    +269             * @return chainer object for completing the parse operation
    +270             */
    +271            public static ParserChainTextString parse(String ical) {
    +272                    return new ParserChainTextString(ical);
    +273            }
    +274    
    +275            /**
    +276             * Parses an iCalendar file.
    +277             * @param file the iCalendar file
    +278             * @return chainer object for completing the parse operation
    +279             */
    +280            public static ParserChainTextReader parse(File file) {
    +281                    return new ParserChainTextReader(file);
    +282            }
    +283    
    +284            /**
    +285             * Parses an iCalendar data stream.
    +286             * @param in the input stream
    +287             * @return chainer object for completing the parse operation
    +288             */
    +289            public static ParserChainTextReader parse(InputStream in) {
    +290                    return new ParserChainTextReader(in);
    +291            }
    +292    
    +293            /**
    +294             * Parses an iCalendar data stream.
    +295             * @param reader the reader
    +296             * @return chainer object for completing the parse operation
    +297             */
    +298            public static ParserChainTextReader parse(Reader reader) {
    +299                    return new ParserChainTextReader(reader);
    +300            }
    +301    
    +302            /**
    +303             * Writes multiple iCalendar objects to a data stream.
    +304             * @param icals the iCalendar objects to write
    +305             * @return chainer object for completing the write operation
    +306             */
    +307            public static WriterChainText write(ICalendar... icals) {
    +308                    return write(Arrays.asList(icals));
    +309            }
    +310    
    +311            /**
    +312             * Writes multiple iCalendar objects to a data stream.
    +313             * @param icals the iCalendar objects to write
    +314             * @return chainer object for completing the write operation
    +315             */
    +316            public static WriterChainText write(Collection<ICalendar> icals) {
    +317                    return new WriterChainText(icals);
    +318            }
    +319    
    +320            /**
    +321             * Parses an xCal document (XML-encoded iCalendar objects) from a string.
    +322             * @param xml the XML string
    +323             * @return chainer object for completing the parse operation
    +324             */
    +325            public static ParserChainXmlString parseXml(String xml) {
    +326                    return new ParserChainXmlString(xml);
    +327            }
    +328    
    +329            /**
    +330             * Parses an xCal document (XML-encoded iCalendar objects) from a file.
    +331             * @param file the XML file
    +332             * @return chainer object for completing the parse operation
    +333             */
    +334            public static ParserChainXmlReader parseXml(File file) {
    +335                    return new ParserChainXmlReader(file);
    +336            }
    +337    
    +338            /**
    +339             * Parses an xCal document (XML-encoded iCalendar objects) from an input
    +340             * stream.
    +341             * @param in the input stream
    +342             * @return chainer object for completing the parse operation
    +343             */
    +344            public static ParserChainXmlReader parseXml(InputStream in) {
    +345                    return new ParserChainXmlReader(in);
    +346            }
    +347    
    +348            /**
    +349             * <p>
    +350             * Parses an xCal document (XML-encoded iCalendar objects) from a reader.
    +351             * </p>
    +352             * <p>
    +353             * Note that use of this method is discouraged. It ignores the character
    +354             * encoding that is defined within the XML document itself, and should only
    +355             * be used if the encoding is undefined or if the encoding needs to be
    +356             * ignored for whatever reason. The {@link #parseXml(InputStream)} method
    +357             * should be used instead, since it takes the XML document's character
    +358             * encoding into account when parsing.
    +359             * </p>
    +360             * @param reader the reader
    +361             * @return chainer object for completing the parse operation
    +362             */
    +363            public static ParserChainXmlReader parseXml(Reader reader) {
    +364                    return new ParserChainXmlReader(reader);
    +365            }
    +366    
    +367            /**
    +368             * Parses an xCal document (XML-encoded iCalendar objects).
    +369             * @param document the XML document
    +370             * @return chainer object for completing the parse operation
    +371             */
    +372            public static ParserChainXmlDocument parseXml(Document document) {
    +373                    return new ParserChainXmlDocument(document);
    +374            }
    +375    
    +376            /**
    +377             * Writes an xCal document (XML-encoded iCalendar objects).
    +378             * @param icals the iCalendar object(s) to write
    +379             * @return chainer object for completing the write operation
    +380             */
    +381            public static WriterChainXml writeXml(ICalendar... icals) {
    +382                    return writeXml(Arrays.asList(icals));
    +383            }
    +384    
    +385            /**
    +386             * Writes an xCal document (XML-encoded iCalendar objects).
    +387             * @param icals the iCalendar objects to write
    +388             * @return chainer object for completing the write operation
    +389             */
    +390            public static WriterChainXml writeXml(Collection<ICalendar> icals) {
    +391                    return new WriterChainXml(icals);
    +392            }
    +393    
    +394            /**
    +395             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +396             * @param json the JSON data
    +397             * @return chainer object for completing the parse operation
    +398             */
    +399            public static ParserChainJsonString parseJson(String json) {
    +400                    return new ParserChainJsonString(json);
    +401            }
    +402    
    +403            /**
    +404             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +405             * @param file the JSON file
    +406             * @return chainer object for completing the parse operation
    +407             */
    +408            public static ParserChainJsonReader parseJson(File file) {
    +409                    return new ParserChainJsonReader(file);
    +410            }
    +411    
    +412            /**
    +413             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +414             * @param in the input stream
    +415             * @return chainer object for completing the parse operation
    +416             */
    +417            public static ParserChainJsonReader parseJson(InputStream in) {
    +418                    return new ParserChainJsonReader(in);
    +419            }
    +420    
    +421            /**
    +422             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +423             * @param reader the reader
    +424             * @return chainer object for completing the parse operation
    +425             */
    +426            public static ParserChainJsonReader parseJson(Reader reader) {
    +427                    return new ParserChainJsonReader(reader);
    +428            }
    +429    
    +430            /**
    +431             * Writes an xCal document (XML-encoded iCalendar objects).
    +432             * @param icals the iCalendar object(s) to write
    +433             * @return chainer object for completing the write operation
    +434             */
    +435            public static WriterChainJson writeJson(ICalendar... icals) {
    +436                    return writeJson(Arrays.asList(icals));
    +437            }
    +438    
    +439            /**
    +440             * Writes an xCal document (XML-encoded iCalendar objects).
    +441             * @param icals the iCalendar objects to write
    +442             * @return chainer object for completing the write operation
    +443             */
    +444            public static WriterChainJson writeJson(Collection<ICalendar> icals) {
    +445                    return new WriterChainJson(icals);
    +446            }
    +447    
    +448            static abstract class ParserChain<T> {
    +449                    //Note: "package" level is used so various fields/methods don't show up in the Javadocs, but are still visible to child classes
    +450                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +451    
    +452                    @SuppressWarnings("unchecked")
    +453                    final T this_ = (T) this;
    +454    
    +455                    List<List<String>> warnings;
    +456    
    +457                    /**
    +458                     * Registers a property marshaller.
    +459                     * @param marshaller the marshaller
    +460                     * @return this
    +461                     */
    +462                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +463                            registrar.register(marshaller);
    +464                            return this_;
    +465                    }
    +466    
    +467                    /**
    +468                     * Registers a component marshaller.
    +469                     * @param marshaller the marshaller
    +470                     * @return this
    +471                     */
    +472                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +473                            registrar.register(marshaller);
    +474                            return this_;
    +475                    }
    +476    
    +477                    /**
    +478                     * Provides a list for putting the parser warnings into.
    +479                     * @param warnings the list object to populate (it is a
    +480                     * "list of lists"--each parsed {@link ICalendar} object has its own
    +481                     * warnings list)
    +482                     * @return this
    +483                     */
    +484                    public T warnings(List<List<String>> warnings) {
    +485                            this.warnings = warnings;
    +486                            return this_;
    +487                    }
    +488    
    +489                    /**
    +490                     * Reads the first iCalendar object from the data stream.
    +491                     * @return the first iCalendar object or null if there are none
    +492                     * @throws IOException if there a problem reading from the data stream
    +493                     * @throws SAXException if there's a problem parsing the XML
    +494                     */
    +495                    public abstract ICalendar first() throws IOException, SAXException;
    +496    
    +497                    /**
    +498                     * Reads all iCalendar objects from the data stream.
    +499                     * @return the parsed iCalendar objects
    +500                     * @throws IOException if there's a problem reading from the data stream
    +501                     * @throws SAXException if there's a problem parsing the XML
    +502                     */
    +503                    public abstract List<ICalendar> all() throws IOException, SAXException;
    +504            }
    +505    
    +506            ///////////////////////////////////////////////////////
    +507            // plain-text
    +508            ///////////////////////////////////////////////////////
    +509    
    +510            static abstract class ParserChainText<T> extends ParserChain<T> {
    +511                    boolean caretDecoding = true;
    +512                    final boolean closeWhenDone;
    +513    
    +514                    private ParserChainText(boolean closeWhenDone) {
    +515                            this.closeWhenDone = closeWhenDone;
    +516                    }
    +517    
    +518                    /**
    +519                     * Sets whether the reader will decode parameter values that use
    +520                     * circumflex accent encoding (enabled by default). This escaping
    +521                     * mechanism allows newlines and double quotes to be included in
    +522                     * parameter values.
    +523                     * @param enable true to use circumflex accent decoding, false not to
    +524                     * @return this
    +525                     * @see ICalRawReader#setCaretDecodingEnabled(boolean)
    +526                     */
    +527                    public T caretDecoding(boolean enable) {
    +528                            caretDecoding = enable;
    +529                            return this_;
    +530                    }
    +531    
    +532                    @Override
    +533                    public ICalendar first() throws IOException {
    +534                            ICalReader parser = constructReader();
    +535    
    +536                            try {
    +537                                    ICalendar ical = parser.readNext();
    +538                                    if (warnings != null) {
    +539                                            warnings.add(parser.getWarnings());
    +540                                    }
    +541                                    return ical;
    +542                            } finally {
    +543                                    if (closeWhenDone) {
    +544                                            IOUtils.closeQuietly(parser);
    +545                                    }
    +546                            }
    +547                    }
    +548    
    +549                    @Override
    +550                    public List<ICalendar> all() throws IOException {
    +551                            ICalReader parser = constructReader();
    +552    
    +553                            try {
    +554                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +555                                    ICalendar ical;
    +556                                    while ((ical = parser.readNext()) != null) {
    +557                                            if (warnings != null) {
    +558                                                    warnings.add(parser.getWarnings());
    +559                                            }
    +560                                            icals.add(ical);
    +561                                    }
    +562                                    return icals;
    +563                            } finally {
    +564                                    if (closeWhenDone) {
    +565                                            IOUtils.closeQuietly(parser);
    +566                                    }
    +567                            }
    +568                    }
    +569    
    +570                    private ICalReader constructReader() throws IOException {
    +571                            ICalReader parser = _constructReader();
    +572                            parser.setRegistrar(registrar);
    +573                            parser.setCaretDecodingEnabled(caretDecoding);
    +574                            return parser;
    +575                    }
    +576    
    +577                    abstract ICalReader _constructReader() throws IOException;
    +578            }
    +579    
    +580            /**
    +581             * Chainer class for parsing plain text iCalendar data streams.
    +582             * @see Biweekly#parse(InputStream)
    +583             * @see Biweekly#parse(File)
    +584             * @see Biweekly#parse(Reader)
    +585             */
    +586            public static class ParserChainTextReader extends ParserChainText<ParserChainTextReader> {
    +587                    private final InputStream in;
    +588                    private final File file;
    +589                    private final Reader reader;
    +590    
    +591                    private ParserChainTextReader(InputStream in) {
    +592                            super(false);
    +593                            this.in = in;
    +594                            this.reader = null;
    +595                            this.file = null;
    +596                    }
    +597    
    +598                    private ParserChainTextReader(File file) {
    +599                            super(true);
    +600                            this.in = null;
    +601                            this.reader = null;
    +602                            this.file = file;
    +603                    }
    +604    
    +605                    private ParserChainTextReader(Reader reader) {
    +606                            super(false);
    +607                            this.in = null;
    +608                            this.reader = reader;
    +609                            this.file = null;
    +610                    }
    +611    
    +612                    @Override
    +613                    public ParserChainTextReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +614                            return super.register(marshaller);
    +615                    }
    +616    
    +617                    @Override
    +618                    public ParserChainTextReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +619                            return super.register(marshaller);
    +620                    }
    +621    
    +622                    @Override
    +623                    public ParserChainTextReader warnings(List<List<String>> warnings) {
    +624                            return super.warnings(warnings);
    +625                    }
    +626    
    +627                    @Override
    +628                    public ParserChainTextReader caretDecoding(boolean enable) {
    +629                            return super.caretDecoding(enable);
    +630                    }
    +631    
    +632                    @Override
    +633                    ICalReader _constructReader() throws IOException {
    +634                            if (in != null) {
    +635                                    return new ICalReader(in);
    +636                            }
    +637                            if (file != null) {
    +638                                    return new ICalReader(file);
    +639                            }
    +640                            return new ICalReader(reader);
    +641                    }
    +642            }
    +643    
    +644            /**
    +645             * Chainer class for parsing plain text iCalendar strings.
    +646             * @see Biweekly#parse(String)
    +647             */
    +648            public static class ParserChainTextString extends ParserChainText<ParserChainTextString> {
    +649                    private final String text;
    +650    
    +651                    private ParserChainTextString(String text) {
    +652                            super(false);
    +653                            this.text = text;
    +654                    }
    +655    
    +656                    @Override
    +657                    public ParserChainTextString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +658                            return super.register(marshaller);
    +659                    }
    +660    
    +661                    @Override
    +662                    public ParserChainTextString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +663                            return super.register(marshaller);
    +664                    }
    +665    
    +666                    @Override
    +667                    public ParserChainTextString warnings(List<List<String>> warnings) {
    +668                            return super.warnings(warnings);
    +669                    }
    +670    
    +671                    @Override
    +672                    public ParserChainTextString caretDecoding(boolean enable) {
    +673                            return super.caretDecoding(enable);
    +674                    }
    +675    
    +676                    @Override
    +677                    ICalReader _constructReader() {
    +678                            return new ICalReader(text);
    +679                    }
    +680    
    +681                    @Override
    +682                    public ICalendar first() {
    +683                            try {
    +684                                    return super.first();
    +685                            } catch (IOException e) {
    +686                                    //should never been thrown because we're reading from a string
    +687                                    throw new RuntimeException(e);
    +688                            }
    +689                    }
    +690    
    +691                    @Override
    +692                    public List<ICalendar> all() {
    +693                            try {
    +694                                    return super.all();
    +695                            } catch (IOException e) {
    +696                                    //should never been thrown because we're reading from a string
    +697                                    throw new RuntimeException(e);
    +698                            }
    +699                    }
    +700            }
    +701    
    +702            ///////////////////////////////////////////////////////
    +703            // XML
    +704            ///////////////////////////////////////////////////////
    +705    
    +706            static abstract class ParserChainXml<T> extends ParserChain<T> {
    +707                    @Override
    +708                    public ICalendar first() throws IOException, SAXException {
    +709                            XCalDocument document = constructDocument();
    +710                            ICalendar ical = document.parseFirst();
    +711                            if (warnings != null) {
    +712                                    warnings.addAll(document.getParseWarnings());
    +713                            }
    +714                            return ical;
    +715                    }
    +716    
    +717                    @Override
    +718                    public List<ICalendar> all() throws IOException, SAXException {
    +719                            XCalDocument document = constructDocument();
    +720                            List<ICalendar> icals = document.parseAll();
    +721                            if (warnings != null) {
    +722                                    warnings.addAll(document.getParseWarnings());
    +723                            }
    +724                            return icals;
    +725                    }
    +726    
    +727                    private XCalDocument constructDocument() throws SAXException, IOException {
    +728                            XCalDocument parser = _constructDocument();
    +729                            parser.setRegistrar(registrar);
    +730                            return parser;
    +731                    }
    +732    
    +733                    abstract XCalDocument _constructDocument() throws IOException, SAXException;
    +734            }
    +735    
    +736            /**
    +737             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +738             * @see Biweekly#parseXml(String)
    +739             */
    +740            public static class ParserChainXmlString extends ParserChainXml<ParserChainXmlString> {
    +741                    private final String xml;
    +742    
    +743                    private ParserChainXmlString(String xml) {
    +744                            this.xml = xml;
    +745                    }
    +746    
    +747                    @Override
    +748                    public ParserChainXmlString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +749                            return super.register(marshaller);
    +750                    }
    +751    
    +752                    @Override
    +753                    public ParserChainXmlString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +754                            return super.register(marshaller);
    +755                    }
    +756    
    +757                    @Override
    +758                    public ParserChainXmlString warnings(List<List<String>> warnings) {
    +759                            return super.warnings(warnings);
    +760                    }
    +761    
    +762                    @Override
    +763                    XCalDocument _constructDocument() throws SAXException {
    +764                            return new XCalDocument(xml);
    +765                    }
    +766    
    +767                    @Override
    +768                    public ICalendar first() throws SAXException {
    +769                            try {
    +770                                    return super.first();
    +771                            } catch (IOException e) {
    +772                                    //should never been thrown because we're reading from a string
    +773                                    throw new RuntimeException(e);
    +774                            }
    +775                    }
    +776    
    +777                    @Override
    +778                    public List<ICalendar> all() throws SAXException {
    +779                            try {
    +780                                    return super.all();
    +781                            } catch (IOException e) {
    +782                                    //should never been thrown because we're reading from a string
    +783                                    throw new RuntimeException(e);
    +784                            }
    +785                    }
    +786            }
    +787    
    +788            /**
    +789             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +790             * @see Biweekly#parseXml(InputStream)
    +791             * @see Biweekly#parseXml(File)
    +792             * @see Biweekly#parseXml(Reader)
    +793             */
    +794            public static class ParserChainXmlReader extends ParserChainXml<ParserChainXmlReader> {
    +795                    private final InputStream in;
    +796                    private final File file;
    +797                    private final Reader reader;
    +798    
    +799                    private ParserChainXmlReader(InputStream in) {
    +800                            this.in = in;
    +801                            this.reader = null;
    +802                            this.file = null;
    +803                    }
    +804    
    +805                    private ParserChainXmlReader(File file) {
    +806                            this.in = null;
    +807                            this.reader = null;
    +808                            this.file = file;
    +809                    }
    +810    
    +811                    private ParserChainXmlReader(Reader reader) {
    +812                            this.in = null;
    +813                            this.reader = reader;
    +814                            this.file = null;
    +815                    }
    +816    
    +817                    @Override
    +818                    public ParserChainXmlReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +819                            return super.register(marshaller);
    +820                    }
    +821    
    +822                    @Override
    +823                    public ParserChainXmlReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +824                            return super.register(marshaller);
    +825                    }
    +826    
    +827                    @Override
    +828                    public ParserChainXmlReader warnings(List<List<String>> warnings) {
    +829                            return super.warnings(warnings);
    +830                    }
    +831    
    +832                    @Override
    +833                    XCalDocument _constructDocument() throws IOException, SAXException {
    +834                            if (in != null) {
    +835                                    return new XCalDocument(in);
    +836                            }
    +837                            if (file != null) {
    +838                                    return new XCalDocument(file);
    +839                            }
    +840                            return new XCalDocument(reader);
    +841                    }
    +842            }
    +843    
    +844            /**
    +845             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +846             * @see Biweekly#parseXml(Document)
    +847             */
    +848            public static class ParserChainXmlDocument extends ParserChainXml<ParserChainXmlDocument> {
    +849                    private final Document document;
    +850    
    +851                    private ParserChainXmlDocument(Document document) {
    +852                            this.document = document;
    +853                    }
    +854    
    +855                    @Override
    +856                    public ParserChainXmlDocument register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +857                            return super.register(marshaller);
    +858                    }
    +859    
    +860                    @Override
    +861                    public ParserChainXmlDocument register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +862                            return super.register(marshaller);
    +863                    }
    +864    
    +865                    @Override
    +866                    public ParserChainXmlDocument warnings(List<List<String>> warnings) {
    +867                            return super.warnings(warnings);
    +868                    }
    +869    
    +870                    @Override
    +871                    XCalDocument _constructDocument() {
    +872                            return new XCalDocument(document);
    +873                    }
    +874    
    +875                    @Override
    +876                    public ICalendar first() {
    +877                            try {
    +878                                    return super.first();
    +879                            } catch (IOException e) {
    +880                                    //should never been thrown because we're reading from a DOM
    +881                                    throw new RuntimeException(e);
    +882                            } catch (SAXException e) {
    +883                                    //should never been thrown because we're reading from a DOM
    +884                                    throw new RuntimeException(e);
    +885                            }
    +886                    }
    +887    
    +888                    @Override
    +889                    public List<ICalendar> all() {
    +890                            try {
    +891                                    return super.all();
    +892                            } catch (IOException e) {
    +893                                    //should never been thrown because we're reading from a DOM
    +894                                    throw new RuntimeException(e);
    +895                            } catch (SAXException e) {
    +896                                    //should never been thrown because we're reading from a DOM
    +897                                    throw new RuntimeException(e);
    +898                            }
    +899                    }
    +900            }
    +901    
    +902            ///////////////////////////////////////////////////////
    +903            // JSON
    +904            ///////////////////////////////////////////////////////
    +905    
    +906            static abstract class ParserChainJson<T> extends ParserChain<T> {
    +907                    final boolean closeWhenDone;
    +908    
    +909                    private ParserChainJson(boolean closeWhenDone) {
    +910                            this.closeWhenDone = closeWhenDone;
    +911                    }
    +912    
    +913                    /**
    +914                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +915                     * syntax may be valid, but it is not in the correct jCal format).
    +916                     * @throws JsonParseException if the JSON syntax is incorrect
    +917                     */
    +918                    @Override
    +919                    public ICalendar first() throws IOException {
    +920                            JCalReader parser = constructReader();
    +921    
    +922                            try {
    +923                                    ICalendar ical = parser.readNext();
    +924                                    if (warnings != null) {
    +925                                            warnings.add(parser.getWarnings());
    +926                                    }
    +927                                    return ical;
    +928                            } finally {
    +929                                    if (closeWhenDone) {
    +930                                            IOUtils.closeQuietly(parser);
    +931                                    }
    +932                            }
    +933                    }
    +934    
    +935                    /**
    +936                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +937                     * syntax may be valid, but it is not in the correct jCal format).
    +938                     * @throws JsonParseException if the JSON syntax is incorrect
    +939                     */
    +940                    @Override
    +941                    public List<ICalendar> all() throws IOException {
    +942                            JCalReader parser = constructReader();
    +943    
    +944                            try {
    +945                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +946                                    ICalendar ical;
    +947                                    while ((ical = parser.readNext()) != null) {
    +948                                            if (warnings != null) {
    +949                                                    warnings.add(parser.getWarnings());
    +950                                            }
    +951                                            icals.add(ical);
    +952                                    }
    +953                                    return icals;
    +954                            } finally {
    +955                                    if (closeWhenDone) {
    +956                                            IOUtils.closeQuietly(parser);
    +957                                    }
    +958                            }
    +959                    }
    +960    
    +961                    private JCalReader constructReader() throws IOException {
    +962                            JCalReader parser = _constructReader();
    +963                            parser.setRegistrar(registrar);
    +964                            return parser;
    +965                    }
    +966    
    +967                    abstract JCalReader _constructReader() throws IOException;
    +968            }
    +969    
    +970            /**
    +971             * Chainer class for parsing JSON-encoded iCalendar data streams (jCal).
    +972             * @see Biweekly#parseJson(InputStream)
    +973             * @see Biweekly#parseJson(File)
    +974             * @see Biweekly#parseJson(Reader)
    +975             */
    +976            public static class ParserChainJsonReader extends ParserChainJson<ParserChainJsonReader> {
    +977                    private final InputStream in;
    +978                    private final File file;
    +979                    private final Reader reader;
    +980    
    +981                    private ParserChainJsonReader(InputStream in) {
    +982                            super(false);
    +983                            this.in = in;
    +984                            this.reader = null;
    +985                            this.file = null;
    +986                    }
    +987    
    +988                    private ParserChainJsonReader(File file) {
    +989                            super(true);
    +990                            this.in = null;
    +991                            this.reader = null;
    +992                            this.file = file;
    +993                    }
    +994    
    +995                    private ParserChainJsonReader(Reader reader) {
    +996                            super(false);
    +997                            this.in = null;
    +998                            this.reader = reader;
    +999                            this.file = null;
    +1000                    }
    +1001    
    +1002                    @Override
    +1003                    public ParserChainJsonReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1004                            return super.register(marshaller);
    +1005                    }
    +1006    
    +1007                    @Override
    +1008                    public ParserChainJsonReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1009                            return super.register(marshaller);
    +1010                    }
    +1011    
    +1012                    @Override
    +1013                    public ParserChainJsonReader warnings(List<List<String>> warnings) {
    +1014                            return super.warnings(warnings);
    +1015                    }
    +1016    
    +1017                    @Override
    +1018                    JCalReader _constructReader() throws IOException {
    +1019                            if (in != null) {
    +1020                                    return new JCalReader(in);
    +1021                            }
    +1022                            if (file != null) {
    +1023                                    return new JCalReader(file);
    +1024                            }
    +1025                            return new JCalReader(reader);
    +1026                    }
    +1027            }
    +1028    
    +1029            /**
    +1030             * Chainer class for parsing JSON-encoded iCalendar strings (jCal).
    +1031             * @see Biweekly#parseJson(String)
    +1032             */
    +1033            public static class ParserChainJsonString extends ParserChainJson<ParserChainJsonString> {
    +1034                    private final String text;
    +1035    
    +1036                    private ParserChainJsonString(String text) {
    +1037                            super(false);
    +1038                            this.text = text;
    +1039                    }
    +1040    
    +1041                    @Override
    +1042                    public ParserChainJsonString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1043                            return super.register(marshaller);
    +1044                    }
    +1045    
    +1046                    @Override
    +1047                    public ParserChainJsonString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1048                            return super.register(marshaller);
    +1049                    }
    +1050    
    +1051                    @Override
    +1052                    public ParserChainJsonString warnings(List<List<String>> warnings) {
    +1053                            return super.warnings(warnings);
    +1054                    }
    +1055    
    +1056                    @Override
    +1057                    JCalReader _constructReader() {
    +1058                            return new JCalReader(text);
    +1059                    }
    +1060    
    +1061                    @Override
    +1062                    public ICalendar first() {
    +1063                            try {
    +1064                                    return super.first();
    +1065                            } catch (IOException e) {
    +1066                                    //should never been thrown because we're reading from a string
    +1067                                    throw new RuntimeException(e);
    +1068                            }
    +1069                    }
    +1070    
    +1071                    @Override
    +1072                    public List<ICalendar> all() {
    +1073                            try {
    +1074                                    return super.all();
    +1075                            } catch (IOException e) {
    +1076                                    //should never been thrown because we're reading from a string
    +1077                                    throw new RuntimeException(e);
    +1078                            }
    +1079                    }
    +1080            }
    +1081    
    +1082            static abstract class WriterChain<T> {
    +1083                    final Collection<ICalendar> icals;
    +1084                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +1085    
    +1086                    @SuppressWarnings("unchecked")
    +1087                    final T this_ = (T) this;
    +1088    
    +1089                    WriterChain(Collection<ICalendar> icals) {
    +1090                            this.icals = icals;
    +1091                    }
    +1092    
    +1093                    /**
    +1094                     * Registers a property marshaller.
    +1095                     * @param marshaller the marshaller
    +1096                     * @return this
    +1097                     */
    +1098                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1099                            registrar.register(marshaller);
    +1100                            return this_;
    +1101                    }
    +1102    
    +1103                    /**
    +1104                     * Registers a component marshaller.
    +1105                     * @param marshaller the marshaller
    +1106                     * @return this
    +1107                     */
    +1108                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1109                            registrar.register(marshaller);
    +1110                            return this_;
    +1111                    }
    +1112            }
    +1113    
    +1114            ///////////////////////////////////////////////////////
    +1115            // plain-text
    +1116            ///////////////////////////////////////////////////////
    +1117    
    +1118            /**
    +1119             * Chainer class for writing to plain text iCalendar data streams.
    +1120             * @see Biweekly#write(Collection)
    +1121             * @see Biweekly#write(ICalendar...)
    +1122             */
    +1123            public static class WriterChainText extends WriterChain<WriterChainText> {
    +1124                    boolean caretEncoding = false;
    +1125    
    +1126                    private WriterChainText(Collection<ICalendar> icals) {
    +1127                            super(icals);
    +1128                    }
    +1129    
    +1130                    /**
    +1131                     * <p>
    +1132                     * Sets whether the writer will apply circumflex accent encoding on
    +1133                     * parameter values (disabled by default). This escaping mechanism
    +1134                     * allows for newlines and double quotes to be included in parameter
    +1135                     * values.
    +1136                     * </p>
    +1137                     * 
    +1138                     * <p>
    +1139                     * When disabled, the writer will replace newlines with spaces and
    +1140                     * double quotes with single quotes.
    +1141                     * </p>
    +1142                     * @param enable true to use circumflex accent encoding, false not to
    +1143                     * @return this
    +1144                     * @see ICalRawWriter#setCaretEncodingEnabled(boolean)
    +1145                     */
    +1146                    public WriterChainText caretEncoding(boolean enable) {
    +1147                            this.caretEncoding = enable;
    +1148                            return this_;
    +1149                    }
    +1150    
    +1151                    /**
    +1152                     * Writes the iCalendar objects to a string.
    +1153                     * @return the iCalendar string
    +1154                     * @throws IllegalArgumentException if the marshaller class for a
    +1155                     * component or property object cannot be found (only happens when an
    +1156                     * experimental property/component marshaller is not registered with the
    +1157                     * {@code register} method.)
    +1158                     */
    +1159                    public String go() {
    +1160                            StringWriter sw = new StringWriter();
    +1161                            try {
    +1162                                    go(sw);
    +1163                            } catch (IOException e) {
    +1164                                    //writing to a string
    +1165                            }
    +1166                            return sw.toString();
    +1167                    }
    +1168    
    +1169                    /**
    +1170                     * Writes the iCalendar objects to a data stream.
    +1171                     * @param out the output stream to write to
    +1172                     * @throws IllegalArgumentException if the marshaller class for a
    +1173                     * component or property object cannot be found (only happens when an
    +1174                     * experimental property/component marshaller is not registered with the
    +1175                     * {@code register} method.)
    +1176                     * @throws IOException if there's a problem writing to the output stream
    +1177                     */
    +1178                    public void go(OutputStream out) throws IOException {
    +1179                            go(new ICalWriter(out));
    +1180                    }
    +1181    
    +1182                    /**
    +1183                     * Writes the iCalendar objects to a file.
    +1184                     * @param file the file to write to
    +1185                     * @throws IllegalArgumentException if the marshaller class for a
    +1186                     * component or property object cannot be found (only happens when an
    +1187                     * experimental property/component marshaller is not registered with the
    +1188                     * {@code register} method.)
    +1189                     * @throws IOException if there's a problem writing to the file
    +1190                     */
    +1191                    public void go(File file) throws IOException {
    +1192                            go(file, false);
    +1193                    }
    +1194    
    +1195                    /**
    +1196                     * Writes the iCalendar objects to a file.
    +1197                     * @param file the file to write to
    +1198                     * @param append true to append to the end of the file, false to
    +1199                     * overwrite it
    +1200                     * @throws IllegalArgumentException if the marshaller class for a
    +1201                     * component or property object cannot be found (only happens when an
    +1202                     * experimental property/component marshaller is not registered with the
    +1203                     * {@code register} method.)
    +1204                     * @throws IOException if there's a problem writing to the file
    +1205                     */
    +1206                    public void go(File file, boolean append) throws IOException {
    +1207                            ICalWriter icalWriter = new ICalWriter(file, append);
    +1208                            try {
    +1209                                    go(icalWriter);
    +1210                            } finally {
    +1211                                    IOUtils.closeQuietly(icalWriter);
    +1212                            }
    +1213                    }
    +1214    
    +1215                    /**
    +1216                     * Writes the iCalendar objects to a data stream.
    +1217                     * @param writer the writer to write to
    +1218                     * @throws IllegalArgumentException if the marshaller class for a
    +1219                     * component or property object cannot be found (only happens when an
    +1220                     * experimental property/component marshaller is not registered with the
    +1221                     * {@code register} method.)
    +1222                     * @throws IOException if there's a problem writing to the writer
    +1223                     */
    +1224                    public void go(Writer writer) throws IOException {
    +1225                            go(new ICalWriter(writer));
    +1226                    }
    +1227    
    +1228                    private void go(ICalWriter icalWriter) throws IOException {
    +1229                            icalWriter.setRegistrar(registrar);
    +1230                            icalWriter.setCaretEncodingEnabled(caretEncoding);
    +1231    
    +1232                            for (ICalendar ical : icals) {
    +1233                                    icalWriter.write(ical);
    +1234                            }
    +1235                    }
    +1236            }
    +1237    
    +1238            ///////////////////////////////////////////////////////
    +1239            // XML
    +1240            ///////////////////////////////////////////////////////
    +1241    
    +1242            /**
    +1243             * Chainer class for writing xCal documents (XML-encoded iCalendar objects).
    +1244             * @see Biweekly#writeXml(Collection)
    +1245             * @see Biweekly#writeXml(ICalendar...)
    +1246             */
    +1247            public static class WriterChainXml extends WriterChain<WriterChainXml> {
    +1248                    int indent = -1;
    +1249                    final Map<String, ICalDataType> parameterDataTypes = new HashMap<String, ICalDataType>(0);
    +1250    
    +1251                    WriterChainXml(Collection<ICalendar> icals) {
    +1252                            super(icals);
    +1253                    }
    +1254    
    +1255                    @Override
    +1256                    public WriterChainXml register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1257                            return super.register(marshaller);
    +1258                    }
    +1259    
    +1260                    @Override
    +1261                    public WriterChainXml register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1262                            return super.register(marshaller);
    +1263                    }
    +1264    
    +1265                    /**
    +1266                     * Registers the data type of an experimental parameter. Experimental
    +1267                     * parameters use the "unknown" xCal data type by default.
    +1268                     * @param parameterName the parameter name (e.g. "x-foo")
    +1269                     * @param dataType the data type
    +1270                     * @return this
    +1271                     */
    +1272                    public WriterChainXml register(String parameterName, ICalDataType dataType) {
    +1273                            parameterDataTypes.put(parameterName, dataType);
    +1274                            return this_;
    +1275                    }
    +1276    
    +1277                    /**
    +1278                     * Sets the number of indent spaces to use for pretty-printing. If not
    +1279                     * set, then the XML will not be pretty-printed.
    +1280                     * @param indent the number of spaces
    +1281                     * @return this
    +1282                     */
    +1283                    public WriterChainXml indent(int indent) {
    +1284                            this.indent = indent;
    +1285                            return this_;
    +1286                    }
    +1287    
    +1288                    /**
    +1289                     * Writes the xCal document to a string.
    +1290                     * @return the XML string
    +1291                     * @throws IllegalArgumentException if the marshaller class for a
    +1292                     * component or property object cannot be found (only happens when an
    +1293                     * experimental property/component marshaller is not registered with the
    +1294                     * {@code register} method.)
    +1295                     */
    +1296                    public String go() {
    +1297                            StringWriter sw = new StringWriter();
    +1298                            try {
    +1299                                    go(sw);
    +1300                            } catch (TransformerException e) {
    +1301                                    //writing to a string
    +1302                            }
    +1303                            return sw.toString();
    +1304                    }
    +1305    
    +1306                    /**
    +1307                     * Writes the xCal document to an output stream.
    +1308                     * @param out the output stream to write to
    +1309                     * @throws IllegalArgumentException if the marshaller class for a
    +1310                     * component or property object cannot be found (only happens when an
    +1311                     * experimental property/component marshaller is not registered with the
    +1312                     * {@code register} method.)
    +1313                     * @throws TransformerException if there's a problem writing the XML
    +1314                     */
    +1315                    public void go(OutputStream out) throws TransformerException {
    +1316                            XCalDocument document = constructDocument();
    +1317                            document.write(out, indent);
    +1318                    }
    +1319    
    +1320                    /**
    +1321                     * Writes the xCal document to a file.
    +1322                     * @param file the file to write to
    +1323                     * @throws IllegalArgumentException if the marshaller class for a
    +1324                     * component or property object cannot be found (only happens when an
    +1325                     * experimental property/component marshaller is not registered with the
    +1326                     * {@code register} method.)
    +1327                     * @throws TransformerException if there's a problem writing the XML
    +1328                     * @throws IOException if there's a problem writing to the file
    +1329                     */
    +1330                    public void go(File file) throws TransformerException, IOException {
    +1331                            XCalDocument document = constructDocument();
    +1332                            document.write(file, indent);
    +1333                    }
    +1334    
    +1335                    /**
    +1336                     * Writes the xCal document to a writer.
    +1337                     * @param writer the writer to write to
    +1338                     * @throws IllegalArgumentException if the marshaller class for a
    +1339                     * component or property object cannot be found (only happens when an
    +1340                     * experimental property/component marshaller is not registered with the
    +1341                     * {@code register} method.)
    +1342                     * @throws TransformerException if there's a problem writing the XML
    +1343                     */
    +1344                    public void go(Writer writer) throws TransformerException {
    +1345                            XCalDocument document = constructDocument();
    +1346                            document.write(writer, indent);
    +1347                    }
    +1348    
    +1349                    /**
    +1350                     * Writes the xCal document to an XML DOM.
    +1351                     * @return the XML DOM
    +1352                     */
    +1353                    public Document dom() {
    +1354                            XCalDocument document = constructDocument();
    +1355                            return document.getDocument();
    +1356                    }
    +1357    
    +1358                    private XCalDocument constructDocument() {
    +1359                            XCalDocument document = new XCalDocument();
    +1360                            document.setRegistrar(registrar);
    +1361                            for (Map.Entry<String, ICalDataType> entry : parameterDataTypes.entrySet()) {
    +1362                                    document.registerParameterDataType(entry.getKey(), entry.getValue());
    +1363                            }
    +1364    
    +1365                            for (ICalendar ical : icals) {
    +1366                                    document.add(ical);
    +1367                            }
    +1368    
    +1369                            return document;
    +1370                    }
    +1371            }
    +1372    
    +1373            ///////////////////////////////////////////////////////
    +1374            // JSON
    +1375            ///////////////////////////////////////////////////////
    +1376    
    +1377            /**
    +1378             * Chainer class for writing to JSON-encoded iCalendar data streams (jCal).
    +1379             * @see Biweekly#writeJson(Collection)
    +1380             * @see Biweekly#writeJson(ICalendar...)
    +1381             */
    +1382            public static class WriterChainJson extends WriterChain<WriterChainJson> {
    +1383                    private boolean indent = false;
    +1384    
    +1385                    private WriterChainJson(Collection<ICalendar> icals) {
    +1386                            super(icals);
    +1387                    }
    +1388    
    +1389                    /**
    +1390                     * Sets whether or not to pretty-print the JSON.
    +1391                     * @param indent true to pretty-print it, false not to (defaults to
    +1392                     * false)
    +1393                     * @return this
    +1394                     */
    +1395                    public WriterChainJson indent(boolean indent) {
    +1396                            this.indent = indent;
    +1397                            return this_;
    +1398                    }
    +1399    
    +1400                    /**
    +1401                     * Writes the iCalendar objects to a string.
    +1402                     * @return the iCalendar string
    +1403                     * @throws IllegalArgumentException if the marshaller class for a
    +1404                     * component or property object cannot be found (only happens when an
    +1405                     * experimental property/component marshaller is not registered with the
    +1406                     * {@code register} method.)
    +1407                     */
    +1408                    public String go() {
    +1409                            StringWriter sw = new StringWriter();
    +1410                            try {
    +1411                                    go(sw);
    +1412                            } catch (IOException e) {
    +1413                                    //writing to a string
    +1414                            }
    +1415                            return sw.toString();
    +1416                    }
    +1417    
    +1418                    /**
    +1419                     * Writes the iCalendar objects to a data stream.
    +1420                     * @param out the output stream to write to
    +1421                     * @throws IllegalArgumentException if the marshaller class for a
    +1422                     * component or property object cannot be found (only happens when an
    +1423                     * experimental property/component marshaller is not registered with the
    +1424                     * {@code register} method.)
    +1425                     * @throws IOException if there's a problem writing to the output stream
    +1426                     */
    +1427                    public void go(OutputStream out) throws IOException {
    +1428                            go(new JCalWriter(out, icals.size() > 1));
    +1429                    }
    +1430    
    +1431                    /**
    +1432                     * Writes the iCalendar objects to a file.
    +1433                     * @param file the file to write to
    +1434                     * @throws IllegalArgumentException if the marshaller class for a
    +1435                     * component or property object cannot be found (only happens when an
    +1436                     * experimental property/component marshaller is not registered with the
    +1437                     * {@code register} method.)
    +1438                     * @throws IOException if there's a problem writing to the file
    +1439                     */
    +1440                    public void go(File file) throws IOException {
    +1441                            JCalWriter jcalWriter = new JCalWriter(file, icals.size() > 1);
    +1442                            try {
    +1443                                    go(jcalWriter);
    +1444                            } finally {
    +1445                                    IOUtils.closeQuietly(jcalWriter);
    +1446                            }
    +1447                    }
    +1448    
    +1449                    /**
    +1450                     * Writes the iCalendar objects to a data stream.
    +1451                     * @param writer the writer to write to
    +1452                     * @throws IllegalArgumentException if the marshaller class for a
    +1453                     * component or property object cannot be found (only happens when an
    +1454                     * experimental property/component marshaller is not registered with the
    +1455                     * {@code register} method.)
    +1456                     * @throws IOException if there's a problem writing to the writer
    +1457                     */
    +1458                    public void go(Writer writer) throws IOException {
    +1459                            go(new JCalWriter(writer, icals.size() > 1));
    +1460                    }
    +1461    
    +1462                    private void go(JCalWriter jcalWriter) throws IOException {
    +1463                            jcalWriter.setRegistrar(registrar);
    +1464                            jcalWriter.setIndent(indent);
    +1465    
    +1466                            for (ICalendar ical : icals) {
    +1467                                    jcalWriter.write(ical);
    +1468                            }
    +1469                            jcalWriter.closeJsonStream();
    +1470                    }
    +1471            }
    +1472    
    +1473            private Biweekly() {
    +1474                    //hide
    +1475            }
    +1476    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainTextReader.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainTextReader.html new file mode 100644 index 000000000..6e42f0110 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainTextReader.html @@ -0,0 +1,1542 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.io.File;
    +004    import java.io.IOException;
    +005    import java.io.InputStream;
    +006    import java.io.OutputStream;
    +007    import java.io.Reader;
    +008    import java.io.StringWriter;
    +009    import java.io.Writer;
    +010    import java.util.ArrayList;
    +011    import java.util.Arrays;
    +012    import java.util.Collection;
    +013    import java.util.HashMap;
    +014    import java.util.List;
    +015    import java.util.Map;
    +016    import java.util.Properties;
    +017    
    +018    import javax.xml.transform.TransformerException;
    +019    
    +020    import org.w3c.dom.Document;
    +021    import org.xml.sax.SAXException;
    +022    
    +023    import biweekly.component.ICalComponent;
    +024    import biweekly.component.marshaller.ICalComponentMarshaller;
    +025    import biweekly.io.ICalMarshallerRegistrar;
    +026    import biweekly.io.json.JCalParseException;
    +027    import biweekly.io.json.JCalReader;
    +028    import biweekly.io.json.JCalWriter;
    +029    import biweekly.io.text.ICalRawReader;
    +030    import biweekly.io.text.ICalRawWriter;
    +031    import biweekly.io.text.ICalReader;
    +032    import biweekly.io.text.ICalWriter;
    +033    import biweekly.io.xml.XCalDocument;
    +034    import biweekly.property.ICalProperty;
    +035    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +036    import biweekly.util.IOUtils;
    +037    
    +038    import com.fasterxml.jackson.core.JsonParseException;
    +039    
    +040    /*
    +041     Copyright (c) 2013, Michael Angstadt
    +042     All rights reserved.
    +043    
    +044     Redistribution and use in source and binary forms, with or without
    +045     modification, are permitted provided that the following conditions are met: 
    +046    
    +047     1. Redistributions of source code must retain the above copyright notice, this
    +048     list of conditions and the following disclaimer. 
    +049     2. Redistributions in binary form must reproduce the above copyright notice,
    +050     this list of conditions and the following disclaimer in the documentation
    +051     and/or other materials provided with the distribution. 
    +052    
    +053     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +054     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +055     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +056     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +057     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +058     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +059     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +060     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +061     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +062     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +063     */
    +064    
    +065    /**
    +066     * <p>
    +067     * Contains static chaining factory methods for reading/writing iCalendar
    +068     * objects.
    +069     * </p>
    +070     * 
    +071     * <p>
    +072     * <b>Writing an iCalendar object</b>
    +073     * 
    +074     * <pre class="brush:java">
    +075     * ICalendar ical = new ICalendar();
    +076     * 
    +077     * //string
    +078     * String icalString = Biweekly.write(ical).go();
    +079     * 
    +080     * //file
    +081     * File file = new File("meeting.ics");
    +082     * Biweekly.write(ical).go(file);
    +083     * 
    +084     * //output stream
    +085     * OutputStream out = ...
    +086     * Biweekly.write(ical).go(out);
    +087     * out.close();
    +088     * 
    +089     * //writer (should be configured to use UTF-8 encoding)
    +090     * Writer writer = ...
    +091     * Biweekly.write(ical).go(writer);
    +092     * writer.close();
    +093     * </pre>
    +094     * 
    +095     * </p>
    +096     * 
    +097     * <p>
    +098     * <b>Writing multiple iCalendar objects</b>
    +099     * 
    +100     * <pre class="brush:java">
    +101     * ICalendar ical1 = new ICalendar();
    +102     * ICalendar ical2 = new ICalendar();
    +103     * 
    +104     * String icalString = Biweekly.write(ical1, ical2).go();
    +105     * </pre>
    +106     * 
    +107     * </p>
    +108     * 
    +109     * <p>
    +110     * <b>Writing an XML-encoded iCalendar object (xCal)</b><br>
    +111     * 
    +112     * <pre class="brush:java">
    +113     * //Call writeXml() instead of write()
    +114     * ICalendar ical = new ICalendar();
    +115     * String xml = Biweekly.writeXml(ical).indent(2).go();
    +116     * </pre>
    +117     * 
    +118     * </p>
    +119     * 
    +120     * <p>
    +121     * <b>Writing a JSON-encoded iCalendar object (jCal)</b><br>
    +122     * 
    +123     * <pre class="brush:java">
    +124     * //Call writeJson() instead of write()
    +125     * ICalendar ical = new ICalendar();
    +126     * String json = Biweekly.writeJson(ical).go();
    +127     * </pre>
    +128     * 
    +129     * </p>
    +130     * 
    +131     * <p>
    +132     * <b>Reading an iCalendar object</b>
    +133     * 
    +134     * <pre class="brush:java">
    +135     * ICalendar ical;
    +136     * 
    +137     * //string
    +138     * String icalStr = ...
    +139     * ical = Biweekly.parse(icalStr).first();
    +140     * 
    +141     * //file
    +142     * File file = new File("meeting.ics");
    +143     * ical = Biweekly.parse(file).first();
    +144     * 
    +145     * //input stream
    +146     * InputStream in = ...
    +147     * ical = Biweekly.parse(in).first();
    +148     * in.close();  
    +149     * 
    +150     * //reader (should be configured to read UTF-8)
    +151     * Reader reader = ...
    +152     * ical = Biweekly.parse(reader).first();
    +153     * reader.close();
    +154     * </pre>
    +155     * 
    +156     * </p>
    +157     * 
    +158     * <p>
    +159     * <b>Reading multiple iCalendar objects</b>
    +160     * 
    +161     * <pre class="brush:java">
    +162     * String icalStr = ...
    +163     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).all();
    +164     * </pre>
    +165     * 
    +166     * </p>
    +167     * 
    +168     * <p>
    +169     * <b>Reading an XML-encoded iCalendar object (xCal)</b><br>
    +170     * 
    +171     * <pre class="brush:java">
    +172     * //Call parseXml() instead of parse()
    +173     * String xml = ...
    +174     * ICalendar ical = Biweekly.parseXml(xml).first();
    +175     * </pre>
    +176     * 
    +177     * </p>
    +178     * 
    +179     * <p>
    +180     * <b>Reading a JSON-encoded iCalendar object (Cal)</b><br>
    +181     * 
    +182     * <pre class="brush:java">
    +183     * //Call parseJson() instead of parse()
    +184     * String json = ...
    +185     * ICalendar ical = Biweekly.parseJson(json).first();
    +186     * </pre>
    +187     * 
    +188     * </p>
    +189     * 
    +190     * <p>
    +191     * <b>Retrieving parser warnings</b>
    +192     * 
    +193     * <pre class="brush:java">
    +194     * String icalStr = ...
    +195     * List&lt;List&lt;String&gt;&gt; warnings = new ArrayList&lt;List&lt;String&gt;&gt;();
    +196     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).warnings(warnings).all();
    +197     * int i = 0;
    +198     * for (List&lt;String&gt; icalWarnings : warnings){
    +199     *   System.out.println("iCal #" + (i++) + " warnings:");
    +200     *   for (String warning : icalWarnings){
    +201     *     System.out.println(warning);
    +202     *   }
    +203     * }
    +204     * </pre>
    +205     * 
    +206     * </p>
    +207     * 
    +208     * <p>
    +209     * The methods in this class make use of the following classes. These classes
    +210     * can be used if greater control over the read/write operation is required:
    +211     * </p>
    +212     * 
    +213     * <style> table.t td, table.t th {border:1px solid #000;} </style>
    +214     * <table class="t" cellpadding="5" style="border-collapse:collapse;">
    +215     * <tr>
    +216     * <th></th>
    +217     * <th>Classes</th>
    +218     * <th>Supports<br>
    +219     * streaming?</th>
    +220     * </tr>
    +221     * <tr>
    +222     * <th>Text</th>
    +223     * <td>{@link ICalReader} / {@link ICalWriter}</td>
    +224     * <td>yes</td>
    +225     * </tr>
    +226     * <tr>
    +227     * <th>XML</th>
    +228     * <td>{@link XCalDocument}</td>
    +229     * <td>no</td>
    +230     * </tr>
    +231     * <tr>
    +232     * <th>JSON</th>
    +233     * <td>{@link JCalReader} / {@link JCalWriter}</td>
    +234     * <td>yes</td>
    +235     * </tr>
    +236     * </table>
    +237     * @author Michael Angstadt
    +238     */
    +239    public class Biweekly {
    +240            /**
    +241             * The version of the library.
    +242             */
    +243            public static final String VERSION;
    +244    
    +245            /**
    +246             * The project webpage.
    +247             */
    +248            public static final String URL;
    +249    
    +250            static {
    +251                    InputStream in = null;
    +252                    try {
    +253                            in = Biweekly.class.getResourceAsStream("/biweekly.properties");
    +254                            Properties props = new Properties();
    +255                            props.load(in);
    +256    
    +257                            VERSION = props.getProperty("version");
    +258                            URL = props.getProperty("url");
    +259                    } catch (IOException e) {
    +260                            throw new RuntimeException(e);
    +261                    } finally {
    +262                            IOUtils.closeQuietly(in);
    +263                    }
    +264            }
    +265    
    +266            /**
    +267             * Parses an iCalendar object string.
    +268             * @param ical the iCalendar data
    +269             * @return chainer object for completing the parse operation
    +270             */
    +271            public static ParserChainTextString parse(String ical) {
    +272                    return new ParserChainTextString(ical);
    +273            }
    +274    
    +275            /**
    +276             * Parses an iCalendar file.
    +277             * @param file the iCalendar file
    +278             * @return chainer object for completing the parse operation
    +279             */
    +280            public static ParserChainTextReader parse(File file) {
    +281                    return new ParserChainTextReader(file);
    +282            }
    +283    
    +284            /**
    +285             * Parses an iCalendar data stream.
    +286             * @param in the input stream
    +287             * @return chainer object for completing the parse operation
    +288             */
    +289            public static ParserChainTextReader parse(InputStream in) {
    +290                    return new ParserChainTextReader(in);
    +291            }
    +292    
    +293            /**
    +294             * Parses an iCalendar data stream.
    +295             * @param reader the reader
    +296             * @return chainer object for completing the parse operation
    +297             */
    +298            public static ParserChainTextReader parse(Reader reader) {
    +299                    return new ParserChainTextReader(reader);
    +300            }
    +301    
    +302            /**
    +303             * Writes multiple iCalendar objects to a data stream.
    +304             * @param icals the iCalendar objects to write
    +305             * @return chainer object for completing the write operation
    +306             */
    +307            public static WriterChainText write(ICalendar... icals) {
    +308                    return write(Arrays.asList(icals));
    +309            }
    +310    
    +311            /**
    +312             * Writes multiple iCalendar objects to a data stream.
    +313             * @param icals the iCalendar objects to write
    +314             * @return chainer object for completing the write operation
    +315             */
    +316            public static WriterChainText write(Collection<ICalendar> icals) {
    +317                    return new WriterChainText(icals);
    +318            }
    +319    
    +320            /**
    +321             * Parses an xCal document (XML-encoded iCalendar objects) from a string.
    +322             * @param xml the XML string
    +323             * @return chainer object for completing the parse operation
    +324             */
    +325            public static ParserChainXmlString parseXml(String xml) {
    +326                    return new ParserChainXmlString(xml);
    +327            }
    +328    
    +329            /**
    +330             * Parses an xCal document (XML-encoded iCalendar objects) from a file.
    +331             * @param file the XML file
    +332             * @return chainer object for completing the parse operation
    +333             */
    +334            public static ParserChainXmlReader parseXml(File file) {
    +335                    return new ParserChainXmlReader(file);
    +336            }
    +337    
    +338            /**
    +339             * Parses an xCal document (XML-encoded iCalendar objects) from an input
    +340             * stream.
    +341             * @param in the input stream
    +342             * @return chainer object for completing the parse operation
    +343             */
    +344            public static ParserChainXmlReader parseXml(InputStream in) {
    +345                    return new ParserChainXmlReader(in);
    +346            }
    +347    
    +348            /**
    +349             * <p>
    +350             * Parses an xCal document (XML-encoded iCalendar objects) from a reader.
    +351             * </p>
    +352             * <p>
    +353             * Note that use of this method is discouraged. It ignores the character
    +354             * encoding that is defined within the XML document itself, and should only
    +355             * be used if the encoding is undefined or if the encoding needs to be
    +356             * ignored for whatever reason. The {@link #parseXml(InputStream)} method
    +357             * should be used instead, since it takes the XML document's character
    +358             * encoding into account when parsing.
    +359             * </p>
    +360             * @param reader the reader
    +361             * @return chainer object for completing the parse operation
    +362             */
    +363            public static ParserChainXmlReader parseXml(Reader reader) {
    +364                    return new ParserChainXmlReader(reader);
    +365            }
    +366    
    +367            /**
    +368             * Parses an xCal document (XML-encoded iCalendar objects).
    +369             * @param document the XML document
    +370             * @return chainer object for completing the parse operation
    +371             */
    +372            public static ParserChainXmlDocument parseXml(Document document) {
    +373                    return new ParserChainXmlDocument(document);
    +374            }
    +375    
    +376            /**
    +377             * Writes an xCal document (XML-encoded iCalendar objects).
    +378             * @param icals the iCalendar object(s) to write
    +379             * @return chainer object for completing the write operation
    +380             */
    +381            public static WriterChainXml writeXml(ICalendar... icals) {
    +382                    return writeXml(Arrays.asList(icals));
    +383            }
    +384    
    +385            /**
    +386             * Writes an xCal document (XML-encoded iCalendar objects).
    +387             * @param icals the iCalendar objects to write
    +388             * @return chainer object for completing the write operation
    +389             */
    +390            public static WriterChainXml writeXml(Collection<ICalendar> icals) {
    +391                    return new WriterChainXml(icals);
    +392            }
    +393    
    +394            /**
    +395             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +396             * @param json the JSON data
    +397             * @return chainer object for completing the parse operation
    +398             */
    +399            public static ParserChainJsonString parseJson(String json) {
    +400                    return new ParserChainJsonString(json);
    +401            }
    +402    
    +403            /**
    +404             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +405             * @param file the JSON file
    +406             * @return chainer object for completing the parse operation
    +407             */
    +408            public static ParserChainJsonReader parseJson(File file) {
    +409                    return new ParserChainJsonReader(file);
    +410            }
    +411    
    +412            /**
    +413             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +414             * @param in the input stream
    +415             * @return chainer object for completing the parse operation
    +416             */
    +417            public static ParserChainJsonReader parseJson(InputStream in) {
    +418                    return new ParserChainJsonReader(in);
    +419            }
    +420    
    +421            /**
    +422             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +423             * @param reader the reader
    +424             * @return chainer object for completing the parse operation
    +425             */
    +426            public static ParserChainJsonReader parseJson(Reader reader) {
    +427                    return new ParserChainJsonReader(reader);
    +428            }
    +429    
    +430            /**
    +431             * Writes an xCal document (XML-encoded iCalendar objects).
    +432             * @param icals the iCalendar object(s) to write
    +433             * @return chainer object for completing the write operation
    +434             */
    +435            public static WriterChainJson writeJson(ICalendar... icals) {
    +436                    return writeJson(Arrays.asList(icals));
    +437            }
    +438    
    +439            /**
    +440             * Writes an xCal document (XML-encoded iCalendar objects).
    +441             * @param icals the iCalendar objects to write
    +442             * @return chainer object for completing the write operation
    +443             */
    +444            public static WriterChainJson writeJson(Collection<ICalendar> icals) {
    +445                    return new WriterChainJson(icals);
    +446            }
    +447    
    +448            static abstract class ParserChain<T> {
    +449                    //Note: "package" level is used so various fields/methods don't show up in the Javadocs, but are still visible to child classes
    +450                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +451    
    +452                    @SuppressWarnings("unchecked")
    +453                    final T this_ = (T) this;
    +454    
    +455                    List<List<String>> warnings;
    +456    
    +457                    /**
    +458                     * Registers a property marshaller.
    +459                     * @param marshaller the marshaller
    +460                     * @return this
    +461                     */
    +462                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +463                            registrar.register(marshaller);
    +464                            return this_;
    +465                    }
    +466    
    +467                    /**
    +468                     * Registers a component marshaller.
    +469                     * @param marshaller the marshaller
    +470                     * @return this
    +471                     */
    +472                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +473                            registrar.register(marshaller);
    +474                            return this_;
    +475                    }
    +476    
    +477                    /**
    +478                     * Provides a list for putting the parser warnings into.
    +479                     * @param warnings the list object to populate (it is a
    +480                     * "list of lists"--each parsed {@link ICalendar} object has its own
    +481                     * warnings list)
    +482                     * @return this
    +483                     */
    +484                    public T warnings(List<List<String>> warnings) {
    +485                            this.warnings = warnings;
    +486                            return this_;
    +487                    }
    +488    
    +489                    /**
    +490                     * Reads the first iCalendar object from the data stream.
    +491                     * @return the first iCalendar object or null if there are none
    +492                     * @throws IOException if there a problem reading from the data stream
    +493                     * @throws SAXException if there's a problem parsing the XML
    +494                     */
    +495                    public abstract ICalendar first() throws IOException, SAXException;
    +496    
    +497                    /**
    +498                     * Reads all iCalendar objects from the data stream.
    +499                     * @return the parsed iCalendar objects
    +500                     * @throws IOException if there's a problem reading from the data stream
    +501                     * @throws SAXException if there's a problem parsing the XML
    +502                     */
    +503                    public abstract List<ICalendar> all() throws IOException, SAXException;
    +504            }
    +505    
    +506            ///////////////////////////////////////////////////////
    +507            // plain-text
    +508            ///////////////////////////////////////////////////////
    +509    
    +510            static abstract class ParserChainText<T> extends ParserChain<T> {
    +511                    boolean caretDecoding = true;
    +512                    final boolean closeWhenDone;
    +513    
    +514                    private ParserChainText(boolean closeWhenDone) {
    +515                            this.closeWhenDone = closeWhenDone;
    +516                    }
    +517    
    +518                    /**
    +519                     * Sets whether the reader will decode parameter values that use
    +520                     * circumflex accent encoding (enabled by default). This escaping
    +521                     * mechanism allows newlines and double quotes to be included in
    +522                     * parameter values.
    +523                     * @param enable true to use circumflex accent decoding, false not to
    +524                     * @return this
    +525                     * @see ICalRawReader#setCaretDecodingEnabled(boolean)
    +526                     */
    +527                    public T caretDecoding(boolean enable) {
    +528                            caretDecoding = enable;
    +529                            return this_;
    +530                    }
    +531    
    +532                    @Override
    +533                    public ICalendar first() throws IOException {
    +534                            ICalReader parser = constructReader();
    +535    
    +536                            try {
    +537                                    ICalendar ical = parser.readNext();
    +538                                    if (warnings != null) {
    +539                                            warnings.add(parser.getWarnings());
    +540                                    }
    +541                                    return ical;
    +542                            } finally {
    +543                                    if (closeWhenDone) {
    +544                                            IOUtils.closeQuietly(parser);
    +545                                    }
    +546                            }
    +547                    }
    +548    
    +549                    @Override
    +550                    public List<ICalendar> all() throws IOException {
    +551                            ICalReader parser = constructReader();
    +552    
    +553                            try {
    +554                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +555                                    ICalendar ical;
    +556                                    while ((ical = parser.readNext()) != null) {
    +557                                            if (warnings != null) {
    +558                                                    warnings.add(parser.getWarnings());
    +559                                            }
    +560                                            icals.add(ical);
    +561                                    }
    +562                                    return icals;
    +563                            } finally {
    +564                                    if (closeWhenDone) {
    +565                                            IOUtils.closeQuietly(parser);
    +566                                    }
    +567                            }
    +568                    }
    +569    
    +570                    private ICalReader constructReader() throws IOException {
    +571                            ICalReader parser = _constructReader();
    +572                            parser.setRegistrar(registrar);
    +573                            parser.setCaretDecodingEnabled(caretDecoding);
    +574                            return parser;
    +575                    }
    +576    
    +577                    abstract ICalReader _constructReader() throws IOException;
    +578            }
    +579    
    +580            /**
    +581             * Chainer class for parsing plain text iCalendar data streams.
    +582             * @see Biweekly#parse(InputStream)
    +583             * @see Biweekly#parse(File)
    +584             * @see Biweekly#parse(Reader)
    +585             */
    +586            public static class ParserChainTextReader extends ParserChainText<ParserChainTextReader> {
    +587                    private final InputStream in;
    +588                    private final File file;
    +589                    private final Reader reader;
    +590    
    +591                    private ParserChainTextReader(InputStream in) {
    +592                            super(false);
    +593                            this.in = in;
    +594                            this.reader = null;
    +595                            this.file = null;
    +596                    }
    +597    
    +598                    private ParserChainTextReader(File file) {
    +599                            super(true);
    +600                            this.in = null;
    +601                            this.reader = null;
    +602                            this.file = file;
    +603                    }
    +604    
    +605                    private ParserChainTextReader(Reader reader) {
    +606                            super(false);
    +607                            this.in = null;
    +608                            this.reader = reader;
    +609                            this.file = null;
    +610                    }
    +611    
    +612                    @Override
    +613                    public ParserChainTextReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +614                            return super.register(marshaller);
    +615                    }
    +616    
    +617                    @Override
    +618                    public ParserChainTextReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +619                            return super.register(marshaller);
    +620                    }
    +621    
    +622                    @Override
    +623                    public ParserChainTextReader warnings(List<List<String>> warnings) {
    +624                            return super.warnings(warnings);
    +625                    }
    +626    
    +627                    @Override
    +628                    public ParserChainTextReader caretDecoding(boolean enable) {
    +629                            return super.caretDecoding(enable);
    +630                    }
    +631    
    +632                    @Override
    +633                    ICalReader _constructReader() throws IOException {
    +634                            if (in != null) {
    +635                                    return new ICalReader(in);
    +636                            }
    +637                            if (file != null) {
    +638                                    return new ICalReader(file);
    +639                            }
    +640                            return new ICalReader(reader);
    +641                    }
    +642            }
    +643    
    +644            /**
    +645             * Chainer class for parsing plain text iCalendar strings.
    +646             * @see Biweekly#parse(String)
    +647             */
    +648            public static class ParserChainTextString extends ParserChainText<ParserChainTextString> {
    +649                    private final String text;
    +650    
    +651                    private ParserChainTextString(String text) {
    +652                            super(false);
    +653                            this.text = text;
    +654                    }
    +655    
    +656                    @Override
    +657                    public ParserChainTextString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +658                            return super.register(marshaller);
    +659                    }
    +660    
    +661                    @Override
    +662                    public ParserChainTextString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +663                            return super.register(marshaller);
    +664                    }
    +665    
    +666                    @Override
    +667                    public ParserChainTextString warnings(List<List<String>> warnings) {
    +668                            return super.warnings(warnings);
    +669                    }
    +670    
    +671                    @Override
    +672                    public ParserChainTextString caretDecoding(boolean enable) {
    +673                            return super.caretDecoding(enable);
    +674                    }
    +675    
    +676                    @Override
    +677                    ICalReader _constructReader() {
    +678                            return new ICalReader(text);
    +679                    }
    +680    
    +681                    @Override
    +682                    public ICalendar first() {
    +683                            try {
    +684                                    return super.first();
    +685                            } catch (IOException e) {
    +686                                    //should never been thrown because we're reading from a string
    +687                                    throw new RuntimeException(e);
    +688                            }
    +689                    }
    +690    
    +691                    @Override
    +692                    public List<ICalendar> all() {
    +693                            try {
    +694                                    return super.all();
    +695                            } catch (IOException e) {
    +696                                    //should never been thrown because we're reading from a string
    +697                                    throw new RuntimeException(e);
    +698                            }
    +699                    }
    +700            }
    +701    
    +702            ///////////////////////////////////////////////////////
    +703            // XML
    +704            ///////////////////////////////////////////////////////
    +705    
    +706            static abstract class ParserChainXml<T> extends ParserChain<T> {
    +707                    @Override
    +708                    public ICalendar first() throws IOException, SAXException {
    +709                            XCalDocument document = constructDocument();
    +710                            ICalendar ical = document.parseFirst();
    +711                            if (warnings != null) {
    +712                                    warnings.addAll(document.getParseWarnings());
    +713                            }
    +714                            return ical;
    +715                    }
    +716    
    +717                    @Override
    +718                    public List<ICalendar> all() throws IOException, SAXException {
    +719                            XCalDocument document = constructDocument();
    +720                            List<ICalendar> icals = document.parseAll();
    +721                            if (warnings != null) {
    +722                                    warnings.addAll(document.getParseWarnings());
    +723                            }
    +724                            return icals;
    +725                    }
    +726    
    +727                    private XCalDocument constructDocument() throws SAXException, IOException {
    +728                            XCalDocument parser = _constructDocument();
    +729                            parser.setRegistrar(registrar);
    +730                            return parser;
    +731                    }
    +732    
    +733                    abstract XCalDocument _constructDocument() throws IOException, SAXException;
    +734            }
    +735    
    +736            /**
    +737             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +738             * @see Biweekly#parseXml(String)
    +739             */
    +740            public static class ParserChainXmlString extends ParserChainXml<ParserChainXmlString> {
    +741                    private final String xml;
    +742    
    +743                    private ParserChainXmlString(String xml) {
    +744                            this.xml = xml;
    +745                    }
    +746    
    +747                    @Override
    +748                    public ParserChainXmlString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +749                            return super.register(marshaller);
    +750                    }
    +751    
    +752                    @Override
    +753                    public ParserChainXmlString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +754                            return super.register(marshaller);
    +755                    }
    +756    
    +757                    @Override
    +758                    public ParserChainXmlString warnings(List<List<String>> warnings) {
    +759                            return super.warnings(warnings);
    +760                    }
    +761    
    +762                    @Override
    +763                    XCalDocument _constructDocument() throws SAXException {
    +764                            return new XCalDocument(xml);
    +765                    }
    +766    
    +767                    @Override
    +768                    public ICalendar first() throws SAXException {
    +769                            try {
    +770                                    return super.first();
    +771                            } catch (IOException e) {
    +772                                    //should never been thrown because we're reading from a string
    +773                                    throw new RuntimeException(e);
    +774                            }
    +775                    }
    +776    
    +777                    @Override
    +778                    public List<ICalendar> all() throws SAXException {
    +779                            try {
    +780                                    return super.all();
    +781                            } catch (IOException e) {
    +782                                    //should never been thrown because we're reading from a string
    +783                                    throw new RuntimeException(e);
    +784                            }
    +785                    }
    +786            }
    +787    
    +788            /**
    +789             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +790             * @see Biweekly#parseXml(InputStream)
    +791             * @see Biweekly#parseXml(File)
    +792             * @see Biweekly#parseXml(Reader)
    +793             */
    +794            public static class ParserChainXmlReader extends ParserChainXml<ParserChainXmlReader> {
    +795                    private final InputStream in;
    +796                    private final File file;
    +797                    private final Reader reader;
    +798    
    +799                    private ParserChainXmlReader(InputStream in) {
    +800                            this.in = in;
    +801                            this.reader = null;
    +802                            this.file = null;
    +803                    }
    +804    
    +805                    private ParserChainXmlReader(File file) {
    +806                            this.in = null;
    +807                            this.reader = null;
    +808                            this.file = file;
    +809                    }
    +810    
    +811                    private ParserChainXmlReader(Reader reader) {
    +812                            this.in = null;
    +813                            this.reader = reader;
    +814                            this.file = null;
    +815                    }
    +816    
    +817                    @Override
    +818                    public ParserChainXmlReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +819                            return super.register(marshaller);
    +820                    }
    +821    
    +822                    @Override
    +823                    public ParserChainXmlReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +824                            return super.register(marshaller);
    +825                    }
    +826    
    +827                    @Override
    +828                    public ParserChainXmlReader warnings(List<List<String>> warnings) {
    +829                            return super.warnings(warnings);
    +830                    }
    +831    
    +832                    @Override
    +833                    XCalDocument _constructDocument() throws IOException, SAXException {
    +834                            if (in != null) {
    +835                                    return new XCalDocument(in);
    +836                            }
    +837                            if (file != null) {
    +838                                    return new XCalDocument(file);
    +839                            }
    +840                            return new XCalDocument(reader);
    +841                    }
    +842            }
    +843    
    +844            /**
    +845             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +846             * @see Biweekly#parseXml(Document)
    +847             */
    +848            public static class ParserChainXmlDocument extends ParserChainXml<ParserChainXmlDocument> {
    +849                    private final Document document;
    +850    
    +851                    private ParserChainXmlDocument(Document document) {
    +852                            this.document = document;
    +853                    }
    +854    
    +855                    @Override
    +856                    public ParserChainXmlDocument register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +857                            return super.register(marshaller);
    +858                    }
    +859    
    +860                    @Override
    +861                    public ParserChainXmlDocument register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +862                            return super.register(marshaller);
    +863                    }
    +864    
    +865                    @Override
    +866                    public ParserChainXmlDocument warnings(List<List<String>> warnings) {
    +867                            return super.warnings(warnings);
    +868                    }
    +869    
    +870                    @Override
    +871                    XCalDocument _constructDocument() {
    +872                            return new XCalDocument(document);
    +873                    }
    +874    
    +875                    @Override
    +876                    public ICalendar first() {
    +877                            try {
    +878                                    return super.first();
    +879                            } catch (IOException e) {
    +880                                    //should never been thrown because we're reading from a DOM
    +881                                    throw new RuntimeException(e);
    +882                            } catch (SAXException e) {
    +883                                    //should never been thrown because we're reading from a DOM
    +884                                    throw new RuntimeException(e);
    +885                            }
    +886                    }
    +887    
    +888                    @Override
    +889                    public List<ICalendar> all() {
    +890                            try {
    +891                                    return super.all();
    +892                            } catch (IOException e) {
    +893                                    //should never been thrown because we're reading from a DOM
    +894                                    throw new RuntimeException(e);
    +895                            } catch (SAXException e) {
    +896                                    //should never been thrown because we're reading from a DOM
    +897                                    throw new RuntimeException(e);
    +898                            }
    +899                    }
    +900            }
    +901    
    +902            ///////////////////////////////////////////////////////
    +903            // JSON
    +904            ///////////////////////////////////////////////////////
    +905    
    +906            static abstract class ParserChainJson<T> extends ParserChain<T> {
    +907                    final boolean closeWhenDone;
    +908    
    +909                    private ParserChainJson(boolean closeWhenDone) {
    +910                            this.closeWhenDone = closeWhenDone;
    +911                    }
    +912    
    +913                    /**
    +914                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +915                     * syntax may be valid, but it is not in the correct jCal format).
    +916                     * @throws JsonParseException if the JSON syntax is incorrect
    +917                     */
    +918                    @Override
    +919                    public ICalendar first() throws IOException {
    +920                            JCalReader parser = constructReader();
    +921    
    +922                            try {
    +923                                    ICalendar ical = parser.readNext();
    +924                                    if (warnings != null) {
    +925                                            warnings.add(parser.getWarnings());
    +926                                    }
    +927                                    return ical;
    +928                            } finally {
    +929                                    if (closeWhenDone) {
    +930                                            IOUtils.closeQuietly(parser);
    +931                                    }
    +932                            }
    +933                    }
    +934    
    +935                    /**
    +936                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +937                     * syntax may be valid, but it is not in the correct jCal format).
    +938                     * @throws JsonParseException if the JSON syntax is incorrect
    +939                     */
    +940                    @Override
    +941                    public List<ICalendar> all() throws IOException {
    +942                            JCalReader parser = constructReader();
    +943    
    +944                            try {
    +945                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +946                                    ICalendar ical;
    +947                                    while ((ical = parser.readNext()) != null) {
    +948                                            if (warnings != null) {
    +949                                                    warnings.add(parser.getWarnings());
    +950                                            }
    +951                                            icals.add(ical);
    +952                                    }
    +953                                    return icals;
    +954                            } finally {
    +955                                    if (closeWhenDone) {
    +956                                            IOUtils.closeQuietly(parser);
    +957                                    }
    +958                            }
    +959                    }
    +960    
    +961                    private JCalReader constructReader() throws IOException {
    +962                            JCalReader parser = _constructReader();
    +963                            parser.setRegistrar(registrar);
    +964                            return parser;
    +965                    }
    +966    
    +967                    abstract JCalReader _constructReader() throws IOException;
    +968            }
    +969    
    +970            /**
    +971             * Chainer class for parsing JSON-encoded iCalendar data streams (jCal).
    +972             * @see Biweekly#parseJson(InputStream)
    +973             * @see Biweekly#parseJson(File)
    +974             * @see Biweekly#parseJson(Reader)
    +975             */
    +976            public static class ParserChainJsonReader extends ParserChainJson<ParserChainJsonReader> {
    +977                    private final InputStream in;
    +978                    private final File file;
    +979                    private final Reader reader;
    +980    
    +981                    private ParserChainJsonReader(InputStream in) {
    +982                            super(false);
    +983                            this.in = in;
    +984                            this.reader = null;
    +985                            this.file = null;
    +986                    }
    +987    
    +988                    private ParserChainJsonReader(File file) {
    +989                            super(true);
    +990                            this.in = null;
    +991                            this.reader = null;
    +992                            this.file = file;
    +993                    }
    +994    
    +995                    private ParserChainJsonReader(Reader reader) {
    +996                            super(false);
    +997                            this.in = null;
    +998                            this.reader = reader;
    +999                            this.file = null;
    +1000                    }
    +1001    
    +1002                    @Override
    +1003                    public ParserChainJsonReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1004                            return super.register(marshaller);
    +1005                    }
    +1006    
    +1007                    @Override
    +1008                    public ParserChainJsonReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1009                            return super.register(marshaller);
    +1010                    }
    +1011    
    +1012                    @Override
    +1013                    public ParserChainJsonReader warnings(List<List<String>> warnings) {
    +1014                            return super.warnings(warnings);
    +1015                    }
    +1016    
    +1017                    @Override
    +1018                    JCalReader _constructReader() throws IOException {
    +1019                            if (in != null) {
    +1020                                    return new JCalReader(in);
    +1021                            }
    +1022                            if (file != null) {
    +1023                                    return new JCalReader(file);
    +1024                            }
    +1025                            return new JCalReader(reader);
    +1026                    }
    +1027            }
    +1028    
    +1029            /**
    +1030             * Chainer class for parsing JSON-encoded iCalendar strings (jCal).
    +1031             * @see Biweekly#parseJson(String)
    +1032             */
    +1033            public static class ParserChainJsonString extends ParserChainJson<ParserChainJsonString> {
    +1034                    private final String text;
    +1035    
    +1036                    private ParserChainJsonString(String text) {
    +1037                            super(false);
    +1038                            this.text = text;
    +1039                    }
    +1040    
    +1041                    @Override
    +1042                    public ParserChainJsonString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1043                            return super.register(marshaller);
    +1044                    }
    +1045    
    +1046                    @Override
    +1047                    public ParserChainJsonString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1048                            return super.register(marshaller);
    +1049                    }
    +1050    
    +1051                    @Override
    +1052                    public ParserChainJsonString warnings(List<List<String>> warnings) {
    +1053                            return super.warnings(warnings);
    +1054                    }
    +1055    
    +1056                    @Override
    +1057                    JCalReader _constructReader() {
    +1058                            return new JCalReader(text);
    +1059                    }
    +1060    
    +1061                    @Override
    +1062                    public ICalendar first() {
    +1063                            try {
    +1064                                    return super.first();
    +1065                            } catch (IOException e) {
    +1066                                    //should never been thrown because we're reading from a string
    +1067                                    throw new RuntimeException(e);
    +1068                            }
    +1069                    }
    +1070    
    +1071                    @Override
    +1072                    public List<ICalendar> all() {
    +1073                            try {
    +1074                                    return super.all();
    +1075                            } catch (IOException e) {
    +1076                                    //should never been thrown because we're reading from a string
    +1077                                    throw new RuntimeException(e);
    +1078                            }
    +1079                    }
    +1080            }
    +1081    
    +1082            static abstract class WriterChain<T> {
    +1083                    final Collection<ICalendar> icals;
    +1084                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +1085    
    +1086                    @SuppressWarnings("unchecked")
    +1087                    final T this_ = (T) this;
    +1088    
    +1089                    WriterChain(Collection<ICalendar> icals) {
    +1090                            this.icals = icals;
    +1091                    }
    +1092    
    +1093                    /**
    +1094                     * Registers a property marshaller.
    +1095                     * @param marshaller the marshaller
    +1096                     * @return this
    +1097                     */
    +1098                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1099                            registrar.register(marshaller);
    +1100                            return this_;
    +1101                    }
    +1102    
    +1103                    /**
    +1104                     * Registers a component marshaller.
    +1105                     * @param marshaller the marshaller
    +1106                     * @return this
    +1107                     */
    +1108                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1109                            registrar.register(marshaller);
    +1110                            return this_;
    +1111                    }
    +1112            }
    +1113    
    +1114            ///////////////////////////////////////////////////////
    +1115            // plain-text
    +1116            ///////////////////////////////////////////////////////
    +1117    
    +1118            /**
    +1119             * Chainer class for writing to plain text iCalendar data streams.
    +1120             * @see Biweekly#write(Collection)
    +1121             * @see Biweekly#write(ICalendar...)
    +1122             */
    +1123            public static class WriterChainText extends WriterChain<WriterChainText> {
    +1124                    boolean caretEncoding = false;
    +1125    
    +1126                    private WriterChainText(Collection<ICalendar> icals) {
    +1127                            super(icals);
    +1128                    }
    +1129    
    +1130                    /**
    +1131                     * <p>
    +1132                     * Sets whether the writer will apply circumflex accent encoding on
    +1133                     * parameter values (disabled by default). This escaping mechanism
    +1134                     * allows for newlines and double quotes to be included in parameter
    +1135                     * values.
    +1136                     * </p>
    +1137                     * 
    +1138                     * <p>
    +1139                     * When disabled, the writer will replace newlines with spaces and
    +1140                     * double quotes with single quotes.
    +1141                     * </p>
    +1142                     * @param enable true to use circumflex accent encoding, false not to
    +1143                     * @return this
    +1144                     * @see ICalRawWriter#setCaretEncodingEnabled(boolean)
    +1145                     */
    +1146                    public WriterChainText caretEncoding(boolean enable) {
    +1147                            this.caretEncoding = enable;
    +1148                            return this_;
    +1149                    }
    +1150    
    +1151                    /**
    +1152                     * Writes the iCalendar objects to a string.
    +1153                     * @return the iCalendar string
    +1154                     * @throws IllegalArgumentException if the marshaller class for a
    +1155                     * component or property object cannot be found (only happens when an
    +1156                     * experimental property/component marshaller is not registered with the
    +1157                     * {@code register} method.)
    +1158                     */
    +1159                    public String go() {
    +1160                            StringWriter sw = new StringWriter();
    +1161                            try {
    +1162                                    go(sw);
    +1163                            } catch (IOException e) {
    +1164                                    //writing to a string
    +1165                            }
    +1166                            return sw.toString();
    +1167                    }
    +1168    
    +1169                    /**
    +1170                     * Writes the iCalendar objects to a data stream.
    +1171                     * @param out the output stream to write to
    +1172                     * @throws IllegalArgumentException if the marshaller class for a
    +1173                     * component or property object cannot be found (only happens when an
    +1174                     * experimental property/component marshaller is not registered with the
    +1175                     * {@code register} method.)
    +1176                     * @throws IOException if there's a problem writing to the output stream
    +1177                     */
    +1178                    public void go(OutputStream out) throws IOException {
    +1179                            go(new ICalWriter(out));
    +1180                    }
    +1181    
    +1182                    /**
    +1183                     * Writes the iCalendar objects to a file.
    +1184                     * @param file the file to write to
    +1185                     * @throws IllegalArgumentException if the marshaller class for a
    +1186                     * component or property object cannot be found (only happens when an
    +1187                     * experimental property/component marshaller is not registered with the
    +1188                     * {@code register} method.)
    +1189                     * @throws IOException if there's a problem writing to the file
    +1190                     */
    +1191                    public void go(File file) throws IOException {
    +1192                            go(file, false);
    +1193                    }
    +1194    
    +1195                    /**
    +1196                     * Writes the iCalendar objects to a file.
    +1197                     * @param file the file to write to
    +1198                     * @param append true to append to the end of the file, false to
    +1199                     * overwrite it
    +1200                     * @throws IllegalArgumentException if the marshaller class for a
    +1201                     * component or property object cannot be found (only happens when an
    +1202                     * experimental property/component marshaller is not registered with the
    +1203                     * {@code register} method.)
    +1204                     * @throws IOException if there's a problem writing to the file
    +1205                     */
    +1206                    public void go(File file, boolean append) throws IOException {
    +1207                            ICalWriter icalWriter = new ICalWriter(file, append);
    +1208                            try {
    +1209                                    go(icalWriter);
    +1210                            } finally {
    +1211                                    IOUtils.closeQuietly(icalWriter);
    +1212                            }
    +1213                    }
    +1214    
    +1215                    /**
    +1216                     * Writes the iCalendar objects to a data stream.
    +1217                     * @param writer the writer to write to
    +1218                     * @throws IllegalArgumentException if the marshaller class for a
    +1219                     * component or property object cannot be found (only happens when an
    +1220                     * experimental property/component marshaller is not registered with the
    +1221                     * {@code register} method.)
    +1222                     * @throws IOException if there's a problem writing to the writer
    +1223                     */
    +1224                    public void go(Writer writer) throws IOException {
    +1225                            go(new ICalWriter(writer));
    +1226                    }
    +1227    
    +1228                    private void go(ICalWriter icalWriter) throws IOException {
    +1229                            icalWriter.setRegistrar(registrar);
    +1230                            icalWriter.setCaretEncodingEnabled(caretEncoding);
    +1231    
    +1232                            for (ICalendar ical : icals) {
    +1233                                    icalWriter.write(ical);
    +1234                            }
    +1235                    }
    +1236            }
    +1237    
    +1238            ///////////////////////////////////////////////////////
    +1239            // XML
    +1240            ///////////////////////////////////////////////////////
    +1241    
    +1242            /**
    +1243             * Chainer class for writing xCal documents (XML-encoded iCalendar objects).
    +1244             * @see Biweekly#writeXml(Collection)
    +1245             * @see Biweekly#writeXml(ICalendar...)
    +1246             */
    +1247            public static class WriterChainXml extends WriterChain<WriterChainXml> {
    +1248                    int indent = -1;
    +1249                    final Map<String, ICalDataType> parameterDataTypes = new HashMap<String, ICalDataType>(0);
    +1250    
    +1251                    WriterChainXml(Collection<ICalendar> icals) {
    +1252                            super(icals);
    +1253                    }
    +1254    
    +1255                    @Override
    +1256                    public WriterChainXml register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1257                            return super.register(marshaller);
    +1258                    }
    +1259    
    +1260                    @Override
    +1261                    public WriterChainXml register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1262                            return super.register(marshaller);
    +1263                    }
    +1264    
    +1265                    /**
    +1266                     * Registers the data type of an experimental parameter. Experimental
    +1267                     * parameters use the "unknown" xCal data type by default.
    +1268                     * @param parameterName the parameter name (e.g. "x-foo")
    +1269                     * @param dataType the data type
    +1270                     * @return this
    +1271                     */
    +1272                    public WriterChainXml register(String parameterName, ICalDataType dataType) {
    +1273                            parameterDataTypes.put(parameterName, dataType);
    +1274                            return this_;
    +1275                    }
    +1276    
    +1277                    /**
    +1278                     * Sets the number of indent spaces to use for pretty-printing. If not
    +1279                     * set, then the XML will not be pretty-printed.
    +1280                     * @param indent the number of spaces
    +1281                     * @return this
    +1282                     */
    +1283                    public WriterChainXml indent(int indent) {
    +1284                            this.indent = indent;
    +1285                            return this_;
    +1286                    }
    +1287    
    +1288                    /**
    +1289                     * Writes the xCal document to a string.
    +1290                     * @return the XML string
    +1291                     * @throws IllegalArgumentException if the marshaller class for a
    +1292                     * component or property object cannot be found (only happens when an
    +1293                     * experimental property/component marshaller is not registered with the
    +1294                     * {@code register} method.)
    +1295                     */
    +1296                    public String go() {
    +1297                            StringWriter sw = new StringWriter();
    +1298                            try {
    +1299                                    go(sw);
    +1300                            } catch (TransformerException e) {
    +1301                                    //writing to a string
    +1302                            }
    +1303                            return sw.toString();
    +1304                    }
    +1305    
    +1306                    /**
    +1307                     * Writes the xCal document to an output stream.
    +1308                     * @param out the output stream to write to
    +1309                     * @throws IllegalArgumentException if the marshaller class for a
    +1310                     * component or property object cannot be found (only happens when an
    +1311                     * experimental property/component marshaller is not registered with the
    +1312                     * {@code register} method.)
    +1313                     * @throws TransformerException if there's a problem writing the XML
    +1314                     */
    +1315                    public void go(OutputStream out) throws TransformerException {
    +1316                            XCalDocument document = constructDocument();
    +1317                            document.write(out, indent);
    +1318                    }
    +1319    
    +1320                    /**
    +1321                     * Writes the xCal document to a file.
    +1322                     * @param file the file to write to
    +1323                     * @throws IllegalArgumentException if the marshaller class for a
    +1324                     * component or property object cannot be found (only happens when an
    +1325                     * experimental property/component marshaller is not registered with the
    +1326                     * {@code register} method.)
    +1327                     * @throws TransformerException if there's a problem writing the XML
    +1328                     * @throws IOException if there's a problem writing to the file
    +1329                     */
    +1330                    public void go(File file) throws TransformerException, IOException {
    +1331                            XCalDocument document = constructDocument();
    +1332                            document.write(file, indent);
    +1333                    }
    +1334    
    +1335                    /**
    +1336                     * Writes the xCal document to a writer.
    +1337                     * @param writer the writer to write to
    +1338                     * @throws IllegalArgumentException if the marshaller class for a
    +1339                     * component or property object cannot be found (only happens when an
    +1340                     * experimental property/component marshaller is not registered with the
    +1341                     * {@code register} method.)
    +1342                     * @throws TransformerException if there's a problem writing the XML
    +1343                     */
    +1344                    public void go(Writer writer) throws TransformerException {
    +1345                            XCalDocument document = constructDocument();
    +1346                            document.write(writer, indent);
    +1347                    }
    +1348    
    +1349                    /**
    +1350                     * Writes the xCal document to an XML DOM.
    +1351                     * @return the XML DOM
    +1352                     */
    +1353                    public Document dom() {
    +1354                            XCalDocument document = constructDocument();
    +1355                            return document.getDocument();
    +1356                    }
    +1357    
    +1358                    private XCalDocument constructDocument() {
    +1359                            XCalDocument document = new XCalDocument();
    +1360                            document.setRegistrar(registrar);
    +1361                            for (Map.Entry<String, ICalDataType> entry : parameterDataTypes.entrySet()) {
    +1362                                    document.registerParameterDataType(entry.getKey(), entry.getValue());
    +1363                            }
    +1364    
    +1365                            for (ICalendar ical : icals) {
    +1366                                    document.add(ical);
    +1367                            }
    +1368    
    +1369                            return document;
    +1370                    }
    +1371            }
    +1372    
    +1373            ///////////////////////////////////////////////////////
    +1374            // JSON
    +1375            ///////////////////////////////////////////////////////
    +1376    
    +1377            /**
    +1378             * Chainer class for writing to JSON-encoded iCalendar data streams (jCal).
    +1379             * @see Biweekly#writeJson(Collection)
    +1380             * @see Biweekly#writeJson(ICalendar...)
    +1381             */
    +1382            public static class WriterChainJson extends WriterChain<WriterChainJson> {
    +1383                    private boolean indent = false;
    +1384    
    +1385                    private WriterChainJson(Collection<ICalendar> icals) {
    +1386                            super(icals);
    +1387                    }
    +1388    
    +1389                    /**
    +1390                     * Sets whether or not to pretty-print the JSON.
    +1391                     * @param indent true to pretty-print it, false not to (defaults to
    +1392                     * false)
    +1393                     * @return this
    +1394                     */
    +1395                    public WriterChainJson indent(boolean indent) {
    +1396                            this.indent = indent;
    +1397                            return this_;
    +1398                    }
    +1399    
    +1400                    /**
    +1401                     * Writes the iCalendar objects to a string.
    +1402                     * @return the iCalendar string
    +1403                     * @throws IllegalArgumentException if the marshaller class for a
    +1404                     * component or property object cannot be found (only happens when an
    +1405                     * experimental property/component marshaller is not registered with the
    +1406                     * {@code register} method.)
    +1407                     */
    +1408                    public String go() {
    +1409                            StringWriter sw = new StringWriter();
    +1410                            try {
    +1411                                    go(sw);
    +1412                            } catch (IOException e) {
    +1413                                    //writing to a string
    +1414                            }
    +1415                            return sw.toString();
    +1416                    }
    +1417    
    +1418                    /**
    +1419                     * Writes the iCalendar objects to a data stream.
    +1420                     * @param out the output stream to write to
    +1421                     * @throws IllegalArgumentException if the marshaller class for a
    +1422                     * component or property object cannot be found (only happens when an
    +1423                     * experimental property/component marshaller is not registered with the
    +1424                     * {@code register} method.)
    +1425                     * @throws IOException if there's a problem writing to the output stream
    +1426                     */
    +1427                    public void go(OutputStream out) throws IOException {
    +1428                            go(new JCalWriter(out, icals.size() > 1));
    +1429                    }
    +1430    
    +1431                    /**
    +1432                     * Writes the iCalendar objects to a file.
    +1433                     * @param file the file to write to
    +1434                     * @throws IllegalArgumentException if the marshaller class for a
    +1435                     * component or property object cannot be found (only happens when an
    +1436                     * experimental property/component marshaller is not registered with the
    +1437                     * {@code register} method.)
    +1438                     * @throws IOException if there's a problem writing to the file
    +1439                     */
    +1440                    public void go(File file) throws IOException {
    +1441                            JCalWriter jcalWriter = new JCalWriter(file, icals.size() > 1);
    +1442                            try {
    +1443                                    go(jcalWriter);
    +1444                            } finally {
    +1445                                    IOUtils.closeQuietly(jcalWriter);
    +1446                            }
    +1447                    }
    +1448    
    +1449                    /**
    +1450                     * Writes the iCalendar objects to a data stream.
    +1451                     * @param writer the writer to write to
    +1452                     * @throws IllegalArgumentException if the marshaller class for a
    +1453                     * component or property object cannot be found (only happens when an
    +1454                     * experimental property/component marshaller is not registered with the
    +1455                     * {@code register} method.)
    +1456                     * @throws IOException if there's a problem writing to the writer
    +1457                     */
    +1458                    public void go(Writer writer) throws IOException {
    +1459                            go(new JCalWriter(writer, icals.size() > 1));
    +1460                    }
    +1461    
    +1462                    private void go(JCalWriter jcalWriter) throws IOException {
    +1463                            jcalWriter.setRegistrar(registrar);
    +1464                            jcalWriter.setIndent(indent);
    +1465    
    +1466                            for (ICalendar ical : icals) {
    +1467                                    jcalWriter.write(ical);
    +1468                            }
    +1469                            jcalWriter.closeJsonStream();
    +1470                    }
    +1471            }
    +1472    
    +1473            private Biweekly() {
    +1474                    //hide
    +1475            }
    +1476    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainTextString.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainTextString.html new file mode 100644 index 000000000..6e42f0110 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainTextString.html @@ -0,0 +1,1542 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.io.File;
    +004    import java.io.IOException;
    +005    import java.io.InputStream;
    +006    import java.io.OutputStream;
    +007    import java.io.Reader;
    +008    import java.io.StringWriter;
    +009    import java.io.Writer;
    +010    import java.util.ArrayList;
    +011    import java.util.Arrays;
    +012    import java.util.Collection;
    +013    import java.util.HashMap;
    +014    import java.util.List;
    +015    import java.util.Map;
    +016    import java.util.Properties;
    +017    
    +018    import javax.xml.transform.TransformerException;
    +019    
    +020    import org.w3c.dom.Document;
    +021    import org.xml.sax.SAXException;
    +022    
    +023    import biweekly.component.ICalComponent;
    +024    import biweekly.component.marshaller.ICalComponentMarshaller;
    +025    import biweekly.io.ICalMarshallerRegistrar;
    +026    import biweekly.io.json.JCalParseException;
    +027    import biweekly.io.json.JCalReader;
    +028    import biweekly.io.json.JCalWriter;
    +029    import biweekly.io.text.ICalRawReader;
    +030    import biweekly.io.text.ICalRawWriter;
    +031    import biweekly.io.text.ICalReader;
    +032    import biweekly.io.text.ICalWriter;
    +033    import biweekly.io.xml.XCalDocument;
    +034    import biweekly.property.ICalProperty;
    +035    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +036    import biweekly.util.IOUtils;
    +037    
    +038    import com.fasterxml.jackson.core.JsonParseException;
    +039    
    +040    /*
    +041     Copyright (c) 2013, Michael Angstadt
    +042     All rights reserved.
    +043    
    +044     Redistribution and use in source and binary forms, with or without
    +045     modification, are permitted provided that the following conditions are met: 
    +046    
    +047     1. Redistributions of source code must retain the above copyright notice, this
    +048     list of conditions and the following disclaimer. 
    +049     2. Redistributions in binary form must reproduce the above copyright notice,
    +050     this list of conditions and the following disclaimer in the documentation
    +051     and/or other materials provided with the distribution. 
    +052    
    +053     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +054     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +055     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +056     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +057     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +058     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +059     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +060     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +061     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +062     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +063     */
    +064    
    +065    /**
    +066     * <p>
    +067     * Contains static chaining factory methods for reading/writing iCalendar
    +068     * objects.
    +069     * </p>
    +070     * 
    +071     * <p>
    +072     * <b>Writing an iCalendar object</b>
    +073     * 
    +074     * <pre class="brush:java">
    +075     * ICalendar ical = new ICalendar();
    +076     * 
    +077     * //string
    +078     * String icalString = Biweekly.write(ical).go();
    +079     * 
    +080     * //file
    +081     * File file = new File("meeting.ics");
    +082     * Biweekly.write(ical).go(file);
    +083     * 
    +084     * //output stream
    +085     * OutputStream out = ...
    +086     * Biweekly.write(ical).go(out);
    +087     * out.close();
    +088     * 
    +089     * //writer (should be configured to use UTF-8 encoding)
    +090     * Writer writer = ...
    +091     * Biweekly.write(ical).go(writer);
    +092     * writer.close();
    +093     * </pre>
    +094     * 
    +095     * </p>
    +096     * 
    +097     * <p>
    +098     * <b>Writing multiple iCalendar objects</b>
    +099     * 
    +100     * <pre class="brush:java">
    +101     * ICalendar ical1 = new ICalendar();
    +102     * ICalendar ical2 = new ICalendar();
    +103     * 
    +104     * String icalString = Biweekly.write(ical1, ical2).go();
    +105     * </pre>
    +106     * 
    +107     * </p>
    +108     * 
    +109     * <p>
    +110     * <b>Writing an XML-encoded iCalendar object (xCal)</b><br>
    +111     * 
    +112     * <pre class="brush:java">
    +113     * //Call writeXml() instead of write()
    +114     * ICalendar ical = new ICalendar();
    +115     * String xml = Biweekly.writeXml(ical).indent(2).go();
    +116     * </pre>
    +117     * 
    +118     * </p>
    +119     * 
    +120     * <p>
    +121     * <b>Writing a JSON-encoded iCalendar object (jCal)</b><br>
    +122     * 
    +123     * <pre class="brush:java">
    +124     * //Call writeJson() instead of write()
    +125     * ICalendar ical = new ICalendar();
    +126     * String json = Biweekly.writeJson(ical).go();
    +127     * </pre>
    +128     * 
    +129     * </p>
    +130     * 
    +131     * <p>
    +132     * <b>Reading an iCalendar object</b>
    +133     * 
    +134     * <pre class="brush:java">
    +135     * ICalendar ical;
    +136     * 
    +137     * //string
    +138     * String icalStr = ...
    +139     * ical = Biweekly.parse(icalStr).first();
    +140     * 
    +141     * //file
    +142     * File file = new File("meeting.ics");
    +143     * ical = Biweekly.parse(file).first();
    +144     * 
    +145     * //input stream
    +146     * InputStream in = ...
    +147     * ical = Biweekly.parse(in).first();
    +148     * in.close();  
    +149     * 
    +150     * //reader (should be configured to read UTF-8)
    +151     * Reader reader = ...
    +152     * ical = Biweekly.parse(reader).first();
    +153     * reader.close();
    +154     * </pre>
    +155     * 
    +156     * </p>
    +157     * 
    +158     * <p>
    +159     * <b>Reading multiple iCalendar objects</b>
    +160     * 
    +161     * <pre class="brush:java">
    +162     * String icalStr = ...
    +163     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).all();
    +164     * </pre>
    +165     * 
    +166     * </p>
    +167     * 
    +168     * <p>
    +169     * <b>Reading an XML-encoded iCalendar object (xCal)</b><br>
    +170     * 
    +171     * <pre class="brush:java">
    +172     * //Call parseXml() instead of parse()
    +173     * String xml = ...
    +174     * ICalendar ical = Biweekly.parseXml(xml).first();
    +175     * </pre>
    +176     * 
    +177     * </p>
    +178     * 
    +179     * <p>
    +180     * <b>Reading a JSON-encoded iCalendar object (Cal)</b><br>
    +181     * 
    +182     * <pre class="brush:java">
    +183     * //Call parseJson() instead of parse()
    +184     * String json = ...
    +185     * ICalendar ical = Biweekly.parseJson(json).first();
    +186     * </pre>
    +187     * 
    +188     * </p>
    +189     * 
    +190     * <p>
    +191     * <b>Retrieving parser warnings</b>
    +192     * 
    +193     * <pre class="brush:java">
    +194     * String icalStr = ...
    +195     * List&lt;List&lt;String&gt;&gt; warnings = new ArrayList&lt;List&lt;String&gt;&gt;();
    +196     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).warnings(warnings).all();
    +197     * int i = 0;
    +198     * for (List&lt;String&gt; icalWarnings : warnings){
    +199     *   System.out.println("iCal #" + (i++) + " warnings:");
    +200     *   for (String warning : icalWarnings){
    +201     *     System.out.println(warning);
    +202     *   }
    +203     * }
    +204     * </pre>
    +205     * 
    +206     * </p>
    +207     * 
    +208     * <p>
    +209     * The methods in this class make use of the following classes. These classes
    +210     * can be used if greater control over the read/write operation is required:
    +211     * </p>
    +212     * 
    +213     * <style> table.t td, table.t th {border:1px solid #000;} </style>
    +214     * <table class="t" cellpadding="5" style="border-collapse:collapse;">
    +215     * <tr>
    +216     * <th></th>
    +217     * <th>Classes</th>
    +218     * <th>Supports<br>
    +219     * streaming?</th>
    +220     * </tr>
    +221     * <tr>
    +222     * <th>Text</th>
    +223     * <td>{@link ICalReader} / {@link ICalWriter}</td>
    +224     * <td>yes</td>
    +225     * </tr>
    +226     * <tr>
    +227     * <th>XML</th>
    +228     * <td>{@link XCalDocument}</td>
    +229     * <td>no</td>
    +230     * </tr>
    +231     * <tr>
    +232     * <th>JSON</th>
    +233     * <td>{@link JCalReader} / {@link JCalWriter}</td>
    +234     * <td>yes</td>
    +235     * </tr>
    +236     * </table>
    +237     * @author Michael Angstadt
    +238     */
    +239    public class Biweekly {
    +240            /**
    +241             * The version of the library.
    +242             */
    +243            public static final String VERSION;
    +244    
    +245            /**
    +246             * The project webpage.
    +247             */
    +248            public static final String URL;
    +249    
    +250            static {
    +251                    InputStream in = null;
    +252                    try {
    +253                            in = Biweekly.class.getResourceAsStream("/biweekly.properties");
    +254                            Properties props = new Properties();
    +255                            props.load(in);
    +256    
    +257                            VERSION = props.getProperty("version");
    +258                            URL = props.getProperty("url");
    +259                    } catch (IOException e) {
    +260                            throw new RuntimeException(e);
    +261                    } finally {
    +262                            IOUtils.closeQuietly(in);
    +263                    }
    +264            }
    +265    
    +266            /**
    +267             * Parses an iCalendar object string.
    +268             * @param ical the iCalendar data
    +269             * @return chainer object for completing the parse operation
    +270             */
    +271            public static ParserChainTextString parse(String ical) {
    +272                    return new ParserChainTextString(ical);
    +273            }
    +274    
    +275            /**
    +276             * Parses an iCalendar file.
    +277             * @param file the iCalendar file
    +278             * @return chainer object for completing the parse operation
    +279             */
    +280            public static ParserChainTextReader parse(File file) {
    +281                    return new ParserChainTextReader(file);
    +282            }
    +283    
    +284            /**
    +285             * Parses an iCalendar data stream.
    +286             * @param in the input stream
    +287             * @return chainer object for completing the parse operation
    +288             */
    +289            public static ParserChainTextReader parse(InputStream in) {
    +290                    return new ParserChainTextReader(in);
    +291            }
    +292    
    +293            /**
    +294             * Parses an iCalendar data stream.
    +295             * @param reader the reader
    +296             * @return chainer object for completing the parse operation
    +297             */
    +298            public static ParserChainTextReader parse(Reader reader) {
    +299                    return new ParserChainTextReader(reader);
    +300            }
    +301    
    +302            /**
    +303             * Writes multiple iCalendar objects to a data stream.
    +304             * @param icals the iCalendar objects to write
    +305             * @return chainer object for completing the write operation
    +306             */
    +307            public static WriterChainText write(ICalendar... icals) {
    +308                    return write(Arrays.asList(icals));
    +309            }
    +310    
    +311            /**
    +312             * Writes multiple iCalendar objects to a data stream.
    +313             * @param icals the iCalendar objects to write
    +314             * @return chainer object for completing the write operation
    +315             */
    +316            public static WriterChainText write(Collection<ICalendar> icals) {
    +317                    return new WriterChainText(icals);
    +318            }
    +319    
    +320            /**
    +321             * Parses an xCal document (XML-encoded iCalendar objects) from a string.
    +322             * @param xml the XML string
    +323             * @return chainer object for completing the parse operation
    +324             */
    +325            public static ParserChainXmlString parseXml(String xml) {
    +326                    return new ParserChainXmlString(xml);
    +327            }
    +328    
    +329            /**
    +330             * Parses an xCal document (XML-encoded iCalendar objects) from a file.
    +331             * @param file the XML file
    +332             * @return chainer object for completing the parse operation
    +333             */
    +334            public static ParserChainXmlReader parseXml(File file) {
    +335                    return new ParserChainXmlReader(file);
    +336            }
    +337    
    +338            /**
    +339             * Parses an xCal document (XML-encoded iCalendar objects) from an input
    +340             * stream.
    +341             * @param in the input stream
    +342             * @return chainer object for completing the parse operation
    +343             */
    +344            public static ParserChainXmlReader parseXml(InputStream in) {
    +345                    return new ParserChainXmlReader(in);
    +346            }
    +347    
    +348            /**
    +349             * <p>
    +350             * Parses an xCal document (XML-encoded iCalendar objects) from a reader.
    +351             * </p>
    +352             * <p>
    +353             * Note that use of this method is discouraged. It ignores the character
    +354             * encoding that is defined within the XML document itself, and should only
    +355             * be used if the encoding is undefined or if the encoding needs to be
    +356             * ignored for whatever reason. The {@link #parseXml(InputStream)} method
    +357             * should be used instead, since it takes the XML document's character
    +358             * encoding into account when parsing.
    +359             * </p>
    +360             * @param reader the reader
    +361             * @return chainer object for completing the parse operation
    +362             */
    +363            public static ParserChainXmlReader parseXml(Reader reader) {
    +364                    return new ParserChainXmlReader(reader);
    +365            }
    +366    
    +367            /**
    +368             * Parses an xCal document (XML-encoded iCalendar objects).
    +369             * @param document the XML document
    +370             * @return chainer object for completing the parse operation
    +371             */
    +372            public static ParserChainXmlDocument parseXml(Document document) {
    +373                    return new ParserChainXmlDocument(document);
    +374            }
    +375    
    +376            /**
    +377             * Writes an xCal document (XML-encoded iCalendar objects).
    +378             * @param icals the iCalendar object(s) to write
    +379             * @return chainer object for completing the write operation
    +380             */
    +381            public static WriterChainXml writeXml(ICalendar... icals) {
    +382                    return writeXml(Arrays.asList(icals));
    +383            }
    +384    
    +385            /**
    +386             * Writes an xCal document (XML-encoded iCalendar objects).
    +387             * @param icals the iCalendar objects to write
    +388             * @return chainer object for completing the write operation
    +389             */
    +390            public static WriterChainXml writeXml(Collection<ICalendar> icals) {
    +391                    return new WriterChainXml(icals);
    +392            }
    +393    
    +394            /**
    +395             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +396             * @param json the JSON data
    +397             * @return chainer object for completing the parse operation
    +398             */
    +399            public static ParserChainJsonString parseJson(String json) {
    +400                    return new ParserChainJsonString(json);
    +401            }
    +402    
    +403            /**
    +404             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +405             * @param file the JSON file
    +406             * @return chainer object for completing the parse operation
    +407             */
    +408            public static ParserChainJsonReader parseJson(File file) {
    +409                    return new ParserChainJsonReader(file);
    +410            }
    +411    
    +412            /**
    +413             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +414             * @param in the input stream
    +415             * @return chainer object for completing the parse operation
    +416             */
    +417            public static ParserChainJsonReader parseJson(InputStream in) {
    +418                    return new ParserChainJsonReader(in);
    +419            }
    +420    
    +421            /**
    +422             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +423             * @param reader the reader
    +424             * @return chainer object for completing the parse operation
    +425             */
    +426            public static ParserChainJsonReader parseJson(Reader reader) {
    +427                    return new ParserChainJsonReader(reader);
    +428            }
    +429    
    +430            /**
    +431             * Writes an xCal document (XML-encoded iCalendar objects).
    +432             * @param icals the iCalendar object(s) to write
    +433             * @return chainer object for completing the write operation
    +434             */
    +435            public static WriterChainJson writeJson(ICalendar... icals) {
    +436                    return writeJson(Arrays.asList(icals));
    +437            }
    +438    
    +439            /**
    +440             * Writes an xCal document (XML-encoded iCalendar objects).
    +441             * @param icals the iCalendar objects to write
    +442             * @return chainer object for completing the write operation
    +443             */
    +444            public static WriterChainJson writeJson(Collection<ICalendar> icals) {
    +445                    return new WriterChainJson(icals);
    +446            }
    +447    
    +448            static abstract class ParserChain<T> {
    +449                    //Note: "package" level is used so various fields/methods don't show up in the Javadocs, but are still visible to child classes
    +450                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +451    
    +452                    @SuppressWarnings("unchecked")
    +453                    final T this_ = (T) this;
    +454    
    +455                    List<List<String>> warnings;
    +456    
    +457                    /**
    +458                     * Registers a property marshaller.
    +459                     * @param marshaller the marshaller
    +460                     * @return this
    +461                     */
    +462                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +463                            registrar.register(marshaller);
    +464                            return this_;
    +465                    }
    +466    
    +467                    /**
    +468                     * Registers a component marshaller.
    +469                     * @param marshaller the marshaller
    +470                     * @return this
    +471                     */
    +472                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +473                            registrar.register(marshaller);
    +474                            return this_;
    +475                    }
    +476    
    +477                    /**
    +478                     * Provides a list for putting the parser warnings into.
    +479                     * @param warnings the list object to populate (it is a
    +480                     * "list of lists"--each parsed {@link ICalendar} object has its own
    +481                     * warnings list)
    +482                     * @return this
    +483                     */
    +484                    public T warnings(List<List<String>> warnings) {
    +485                            this.warnings = warnings;
    +486                            return this_;
    +487                    }
    +488    
    +489                    /**
    +490                     * Reads the first iCalendar object from the data stream.
    +491                     * @return the first iCalendar object or null if there are none
    +492                     * @throws IOException if there a problem reading from the data stream
    +493                     * @throws SAXException if there's a problem parsing the XML
    +494                     */
    +495                    public abstract ICalendar first() throws IOException, SAXException;
    +496    
    +497                    /**
    +498                     * Reads all iCalendar objects from the data stream.
    +499                     * @return the parsed iCalendar objects
    +500                     * @throws IOException if there's a problem reading from the data stream
    +501                     * @throws SAXException if there's a problem parsing the XML
    +502                     */
    +503                    public abstract List<ICalendar> all() throws IOException, SAXException;
    +504            }
    +505    
    +506            ///////////////////////////////////////////////////////
    +507            // plain-text
    +508            ///////////////////////////////////////////////////////
    +509    
    +510            static abstract class ParserChainText<T> extends ParserChain<T> {
    +511                    boolean caretDecoding = true;
    +512                    final boolean closeWhenDone;
    +513    
    +514                    private ParserChainText(boolean closeWhenDone) {
    +515                            this.closeWhenDone = closeWhenDone;
    +516                    }
    +517    
    +518                    /**
    +519                     * Sets whether the reader will decode parameter values that use
    +520                     * circumflex accent encoding (enabled by default). This escaping
    +521                     * mechanism allows newlines and double quotes to be included in
    +522                     * parameter values.
    +523                     * @param enable true to use circumflex accent decoding, false not to
    +524                     * @return this
    +525                     * @see ICalRawReader#setCaretDecodingEnabled(boolean)
    +526                     */
    +527                    public T caretDecoding(boolean enable) {
    +528                            caretDecoding = enable;
    +529                            return this_;
    +530                    }
    +531    
    +532                    @Override
    +533                    public ICalendar first() throws IOException {
    +534                            ICalReader parser = constructReader();
    +535    
    +536                            try {
    +537                                    ICalendar ical = parser.readNext();
    +538                                    if (warnings != null) {
    +539                                            warnings.add(parser.getWarnings());
    +540                                    }
    +541                                    return ical;
    +542                            } finally {
    +543                                    if (closeWhenDone) {
    +544                                            IOUtils.closeQuietly(parser);
    +545                                    }
    +546                            }
    +547                    }
    +548    
    +549                    @Override
    +550                    public List<ICalendar> all() throws IOException {
    +551                            ICalReader parser = constructReader();
    +552    
    +553                            try {
    +554                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +555                                    ICalendar ical;
    +556                                    while ((ical = parser.readNext()) != null) {
    +557                                            if (warnings != null) {
    +558                                                    warnings.add(parser.getWarnings());
    +559                                            }
    +560                                            icals.add(ical);
    +561                                    }
    +562                                    return icals;
    +563                            } finally {
    +564                                    if (closeWhenDone) {
    +565                                            IOUtils.closeQuietly(parser);
    +566                                    }
    +567                            }
    +568                    }
    +569    
    +570                    private ICalReader constructReader() throws IOException {
    +571                            ICalReader parser = _constructReader();
    +572                            parser.setRegistrar(registrar);
    +573                            parser.setCaretDecodingEnabled(caretDecoding);
    +574                            return parser;
    +575                    }
    +576    
    +577                    abstract ICalReader _constructReader() throws IOException;
    +578            }
    +579    
    +580            /**
    +581             * Chainer class for parsing plain text iCalendar data streams.
    +582             * @see Biweekly#parse(InputStream)
    +583             * @see Biweekly#parse(File)
    +584             * @see Biweekly#parse(Reader)
    +585             */
    +586            public static class ParserChainTextReader extends ParserChainText<ParserChainTextReader> {
    +587                    private final InputStream in;
    +588                    private final File file;
    +589                    private final Reader reader;
    +590    
    +591                    private ParserChainTextReader(InputStream in) {
    +592                            super(false);
    +593                            this.in = in;
    +594                            this.reader = null;
    +595                            this.file = null;
    +596                    }
    +597    
    +598                    private ParserChainTextReader(File file) {
    +599                            super(true);
    +600                            this.in = null;
    +601                            this.reader = null;
    +602                            this.file = file;
    +603                    }
    +604    
    +605                    private ParserChainTextReader(Reader reader) {
    +606                            super(false);
    +607                            this.in = null;
    +608                            this.reader = reader;
    +609                            this.file = null;
    +610                    }
    +611    
    +612                    @Override
    +613                    public ParserChainTextReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +614                            return super.register(marshaller);
    +615                    }
    +616    
    +617                    @Override
    +618                    public ParserChainTextReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +619                            return super.register(marshaller);
    +620                    }
    +621    
    +622                    @Override
    +623                    public ParserChainTextReader warnings(List<List<String>> warnings) {
    +624                            return super.warnings(warnings);
    +625                    }
    +626    
    +627                    @Override
    +628                    public ParserChainTextReader caretDecoding(boolean enable) {
    +629                            return super.caretDecoding(enable);
    +630                    }
    +631    
    +632                    @Override
    +633                    ICalReader _constructReader() throws IOException {
    +634                            if (in != null) {
    +635                                    return new ICalReader(in);
    +636                            }
    +637                            if (file != null) {
    +638                                    return new ICalReader(file);
    +639                            }
    +640                            return new ICalReader(reader);
    +641                    }
    +642            }
    +643    
    +644            /**
    +645             * Chainer class for parsing plain text iCalendar strings.
    +646             * @see Biweekly#parse(String)
    +647             */
    +648            public static class ParserChainTextString extends ParserChainText<ParserChainTextString> {
    +649                    private final String text;
    +650    
    +651                    private ParserChainTextString(String text) {
    +652                            super(false);
    +653                            this.text = text;
    +654                    }
    +655    
    +656                    @Override
    +657                    public ParserChainTextString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +658                            return super.register(marshaller);
    +659                    }
    +660    
    +661                    @Override
    +662                    public ParserChainTextString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +663                            return super.register(marshaller);
    +664                    }
    +665    
    +666                    @Override
    +667                    public ParserChainTextString warnings(List<List<String>> warnings) {
    +668                            return super.warnings(warnings);
    +669                    }
    +670    
    +671                    @Override
    +672                    public ParserChainTextString caretDecoding(boolean enable) {
    +673                            return super.caretDecoding(enable);
    +674                    }
    +675    
    +676                    @Override
    +677                    ICalReader _constructReader() {
    +678                            return new ICalReader(text);
    +679                    }
    +680    
    +681                    @Override
    +682                    public ICalendar first() {
    +683                            try {
    +684                                    return super.first();
    +685                            } catch (IOException e) {
    +686                                    //should never been thrown because we're reading from a string
    +687                                    throw new RuntimeException(e);
    +688                            }
    +689                    }
    +690    
    +691                    @Override
    +692                    public List<ICalendar> all() {
    +693                            try {
    +694                                    return super.all();
    +695                            } catch (IOException e) {
    +696                                    //should never been thrown because we're reading from a string
    +697                                    throw new RuntimeException(e);
    +698                            }
    +699                    }
    +700            }
    +701    
    +702            ///////////////////////////////////////////////////////
    +703            // XML
    +704            ///////////////////////////////////////////////////////
    +705    
    +706            static abstract class ParserChainXml<T> extends ParserChain<T> {
    +707                    @Override
    +708                    public ICalendar first() throws IOException, SAXException {
    +709                            XCalDocument document = constructDocument();
    +710                            ICalendar ical = document.parseFirst();
    +711                            if (warnings != null) {
    +712                                    warnings.addAll(document.getParseWarnings());
    +713                            }
    +714                            return ical;
    +715                    }
    +716    
    +717                    @Override
    +718                    public List<ICalendar> all() throws IOException, SAXException {
    +719                            XCalDocument document = constructDocument();
    +720                            List<ICalendar> icals = document.parseAll();
    +721                            if (warnings != null) {
    +722                                    warnings.addAll(document.getParseWarnings());
    +723                            }
    +724                            return icals;
    +725                    }
    +726    
    +727                    private XCalDocument constructDocument() throws SAXException, IOException {
    +728                            XCalDocument parser = _constructDocument();
    +729                            parser.setRegistrar(registrar);
    +730                            return parser;
    +731                    }
    +732    
    +733                    abstract XCalDocument _constructDocument() throws IOException, SAXException;
    +734            }
    +735    
    +736            /**
    +737             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +738             * @see Biweekly#parseXml(String)
    +739             */
    +740            public static class ParserChainXmlString extends ParserChainXml<ParserChainXmlString> {
    +741                    private final String xml;
    +742    
    +743                    private ParserChainXmlString(String xml) {
    +744                            this.xml = xml;
    +745                    }
    +746    
    +747                    @Override
    +748                    public ParserChainXmlString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +749                            return super.register(marshaller);
    +750                    }
    +751    
    +752                    @Override
    +753                    public ParserChainXmlString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +754                            return super.register(marshaller);
    +755                    }
    +756    
    +757                    @Override
    +758                    public ParserChainXmlString warnings(List<List<String>> warnings) {
    +759                            return super.warnings(warnings);
    +760                    }
    +761    
    +762                    @Override
    +763                    XCalDocument _constructDocument() throws SAXException {
    +764                            return new XCalDocument(xml);
    +765                    }
    +766    
    +767                    @Override
    +768                    public ICalendar first() throws SAXException {
    +769                            try {
    +770                                    return super.first();
    +771                            } catch (IOException e) {
    +772                                    //should never been thrown because we're reading from a string
    +773                                    throw new RuntimeException(e);
    +774                            }
    +775                    }
    +776    
    +777                    @Override
    +778                    public List<ICalendar> all() throws SAXException {
    +779                            try {
    +780                                    return super.all();
    +781                            } catch (IOException e) {
    +782                                    //should never been thrown because we're reading from a string
    +783                                    throw new RuntimeException(e);
    +784                            }
    +785                    }
    +786            }
    +787    
    +788            /**
    +789             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +790             * @see Biweekly#parseXml(InputStream)
    +791             * @see Biweekly#parseXml(File)
    +792             * @see Biweekly#parseXml(Reader)
    +793             */
    +794            public static class ParserChainXmlReader extends ParserChainXml<ParserChainXmlReader> {
    +795                    private final InputStream in;
    +796                    private final File file;
    +797                    private final Reader reader;
    +798    
    +799                    private ParserChainXmlReader(InputStream in) {
    +800                            this.in = in;
    +801                            this.reader = null;
    +802                            this.file = null;
    +803                    }
    +804    
    +805                    private ParserChainXmlReader(File file) {
    +806                            this.in = null;
    +807                            this.reader = null;
    +808                            this.file = file;
    +809                    }
    +810    
    +811                    private ParserChainXmlReader(Reader reader) {
    +812                            this.in = null;
    +813                            this.reader = reader;
    +814                            this.file = null;
    +815                    }
    +816    
    +817                    @Override
    +818                    public ParserChainXmlReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +819                            return super.register(marshaller);
    +820                    }
    +821    
    +822                    @Override
    +823                    public ParserChainXmlReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +824                            return super.register(marshaller);
    +825                    }
    +826    
    +827                    @Override
    +828                    public ParserChainXmlReader warnings(List<List<String>> warnings) {
    +829                            return super.warnings(warnings);
    +830                    }
    +831    
    +832                    @Override
    +833                    XCalDocument _constructDocument() throws IOException, SAXException {
    +834                            if (in != null) {
    +835                                    return new XCalDocument(in);
    +836                            }
    +837                            if (file != null) {
    +838                                    return new XCalDocument(file);
    +839                            }
    +840                            return new XCalDocument(reader);
    +841                    }
    +842            }
    +843    
    +844            /**
    +845             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +846             * @see Biweekly#parseXml(Document)
    +847             */
    +848            public static class ParserChainXmlDocument extends ParserChainXml<ParserChainXmlDocument> {
    +849                    private final Document document;
    +850    
    +851                    private ParserChainXmlDocument(Document document) {
    +852                            this.document = document;
    +853                    }
    +854    
    +855                    @Override
    +856                    public ParserChainXmlDocument register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +857                            return super.register(marshaller);
    +858                    }
    +859    
    +860                    @Override
    +861                    public ParserChainXmlDocument register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +862                            return super.register(marshaller);
    +863                    }
    +864    
    +865                    @Override
    +866                    public ParserChainXmlDocument warnings(List<List<String>> warnings) {
    +867                            return super.warnings(warnings);
    +868                    }
    +869    
    +870                    @Override
    +871                    XCalDocument _constructDocument() {
    +872                            return new XCalDocument(document);
    +873                    }
    +874    
    +875                    @Override
    +876                    public ICalendar first() {
    +877                            try {
    +878                                    return super.first();
    +879                            } catch (IOException e) {
    +880                                    //should never been thrown because we're reading from a DOM
    +881                                    throw new RuntimeException(e);
    +882                            } catch (SAXException e) {
    +883                                    //should never been thrown because we're reading from a DOM
    +884                                    throw new RuntimeException(e);
    +885                            }
    +886                    }
    +887    
    +888                    @Override
    +889                    public List<ICalendar> all() {
    +890                            try {
    +891                                    return super.all();
    +892                            } catch (IOException e) {
    +893                                    //should never been thrown because we're reading from a DOM
    +894                                    throw new RuntimeException(e);
    +895                            } catch (SAXException e) {
    +896                                    //should never been thrown because we're reading from a DOM
    +897                                    throw new RuntimeException(e);
    +898                            }
    +899                    }
    +900            }
    +901    
    +902            ///////////////////////////////////////////////////////
    +903            // JSON
    +904            ///////////////////////////////////////////////////////
    +905    
    +906            static abstract class ParserChainJson<T> extends ParserChain<T> {
    +907                    final boolean closeWhenDone;
    +908    
    +909                    private ParserChainJson(boolean closeWhenDone) {
    +910                            this.closeWhenDone = closeWhenDone;
    +911                    }
    +912    
    +913                    /**
    +914                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +915                     * syntax may be valid, but it is not in the correct jCal format).
    +916                     * @throws JsonParseException if the JSON syntax is incorrect
    +917                     */
    +918                    @Override
    +919                    public ICalendar first() throws IOException {
    +920                            JCalReader parser = constructReader();
    +921    
    +922                            try {
    +923                                    ICalendar ical = parser.readNext();
    +924                                    if (warnings != null) {
    +925                                            warnings.add(parser.getWarnings());
    +926                                    }
    +927                                    return ical;
    +928                            } finally {
    +929                                    if (closeWhenDone) {
    +930                                            IOUtils.closeQuietly(parser);
    +931                                    }
    +932                            }
    +933                    }
    +934    
    +935                    /**
    +936                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +937                     * syntax may be valid, but it is not in the correct jCal format).
    +938                     * @throws JsonParseException if the JSON syntax is incorrect
    +939                     */
    +940                    @Override
    +941                    public List<ICalendar> all() throws IOException {
    +942                            JCalReader parser = constructReader();
    +943    
    +944                            try {
    +945                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +946                                    ICalendar ical;
    +947                                    while ((ical = parser.readNext()) != null) {
    +948                                            if (warnings != null) {
    +949                                                    warnings.add(parser.getWarnings());
    +950                                            }
    +951                                            icals.add(ical);
    +952                                    }
    +953                                    return icals;
    +954                            } finally {
    +955                                    if (closeWhenDone) {
    +956                                            IOUtils.closeQuietly(parser);
    +957                                    }
    +958                            }
    +959                    }
    +960    
    +961                    private JCalReader constructReader() throws IOException {
    +962                            JCalReader parser = _constructReader();
    +963                            parser.setRegistrar(registrar);
    +964                            return parser;
    +965                    }
    +966    
    +967                    abstract JCalReader _constructReader() throws IOException;
    +968            }
    +969    
    +970            /**
    +971             * Chainer class for parsing JSON-encoded iCalendar data streams (jCal).
    +972             * @see Biweekly#parseJson(InputStream)
    +973             * @see Biweekly#parseJson(File)
    +974             * @see Biweekly#parseJson(Reader)
    +975             */
    +976            public static class ParserChainJsonReader extends ParserChainJson<ParserChainJsonReader> {
    +977                    private final InputStream in;
    +978                    private final File file;
    +979                    private final Reader reader;
    +980    
    +981                    private ParserChainJsonReader(InputStream in) {
    +982                            super(false);
    +983                            this.in = in;
    +984                            this.reader = null;
    +985                            this.file = null;
    +986                    }
    +987    
    +988                    private ParserChainJsonReader(File file) {
    +989                            super(true);
    +990                            this.in = null;
    +991                            this.reader = null;
    +992                            this.file = file;
    +993                    }
    +994    
    +995                    private ParserChainJsonReader(Reader reader) {
    +996                            super(false);
    +997                            this.in = null;
    +998                            this.reader = reader;
    +999                            this.file = null;
    +1000                    }
    +1001    
    +1002                    @Override
    +1003                    public ParserChainJsonReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1004                            return super.register(marshaller);
    +1005                    }
    +1006    
    +1007                    @Override
    +1008                    public ParserChainJsonReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1009                            return super.register(marshaller);
    +1010                    }
    +1011    
    +1012                    @Override
    +1013                    public ParserChainJsonReader warnings(List<List<String>> warnings) {
    +1014                            return super.warnings(warnings);
    +1015                    }
    +1016    
    +1017                    @Override
    +1018                    JCalReader _constructReader() throws IOException {
    +1019                            if (in != null) {
    +1020                                    return new JCalReader(in);
    +1021                            }
    +1022                            if (file != null) {
    +1023                                    return new JCalReader(file);
    +1024                            }
    +1025                            return new JCalReader(reader);
    +1026                    }
    +1027            }
    +1028    
    +1029            /**
    +1030             * Chainer class for parsing JSON-encoded iCalendar strings (jCal).
    +1031             * @see Biweekly#parseJson(String)
    +1032             */
    +1033            public static class ParserChainJsonString extends ParserChainJson<ParserChainJsonString> {
    +1034                    private final String text;
    +1035    
    +1036                    private ParserChainJsonString(String text) {
    +1037                            super(false);
    +1038                            this.text = text;
    +1039                    }
    +1040    
    +1041                    @Override
    +1042                    public ParserChainJsonString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1043                            return super.register(marshaller);
    +1044                    }
    +1045    
    +1046                    @Override
    +1047                    public ParserChainJsonString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1048                            return super.register(marshaller);
    +1049                    }
    +1050    
    +1051                    @Override
    +1052                    public ParserChainJsonString warnings(List<List<String>> warnings) {
    +1053                            return super.warnings(warnings);
    +1054                    }
    +1055    
    +1056                    @Override
    +1057                    JCalReader _constructReader() {
    +1058                            return new JCalReader(text);
    +1059                    }
    +1060    
    +1061                    @Override
    +1062                    public ICalendar first() {
    +1063                            try {
    +1064                                    return super.first();
    +1065                            } catch (IOException e) {
    +1066                                    //should never been thrown because we're reading from a string
    +1067                                    throw new RuntimeException(e);
    +1068                            }
    +1069                    }
    +1070    
    +1071                    @Override
    +1072                    public List<ICalendar> all() {
    +1073                            try {
    +1074                                    return super.all();
    +1075                            } catch (IOException e) {
    +1076                                    //should never been thrown because we're reading from a string
    +1077                                    throw new RuntimeException(e);
    +1078                            }
    +1079                    }
    +1080            }
    +1081    
    +1082            static abstract class WriterChain<T> {
    +1083                    final Collection<ICalendar> icals;
    +1084                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +1085    
    +1086                    @SuppressWarnings("unchecked")
    +1087                    final T this_ = (T) this;
    +1088    
    +1089                    WriterChain(Collection<ICalendar> icals) {
    +1090                            this.icals = icals;
    +1091                    }
    +1092    
    +1093                    /**
    +1094                     * Registers a property marshaller.
    +1095                     * @param marshaller the marshaller
    +1096                     * @return this
    +1097                     */
    +1098                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1099                            registrar.register(marshaller);
    +1100                            return this_;
    +1101                    }
    +1102    
    +1103                    /**
    +1104                     * Registers a component marshaller.
    +1105                     * @param marshaller the marshaller
    +1106                     * @return this
    +1107                     */
    +1108                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1109                            registrar.register(marshaller);
    +1110                            return this_;
    +1111                    }
    +1112            }
    +1113    
    +1114            ///////////////////////////////////////////////////////
    +1115            // plain-text
    +1116            ///////////////////////////////////////////////////////
    +1117    
    +1118            /**
    +1119             * Chainer class for writing to plain text iCalendar data streams.
    +1120             * @see Biweekly#write(Collection)
    +1121             * @see Biweekly#write(ICalendar...)
    +1122             */
    +1123            public static class WriterChainText extends WriterChain<WriterChainText> {
    +1124                    boolean caretEncoding = false;
    +1125    
    +1126                    private WriterChainText(Collection<ICalendar> icals) {
    +1127                            super(icals);
    +1128                    }
    +1129    
    +1130                    /**
    +1131                     * <p>
    +1132                     * Sets whether the writer will apply circumflex accent encoding on
    +1133                     * parameter values (disabled by default). This escaping mechanism
    +1134                     * allows for newlines and double quotes to be included in parameter
    +1135                     * values.
    +1136                     * </p>
    +1137                     * 
    +1138                     * <p>
    +1139                     * When disabled, the writer will replace newlines with spaces and
    +1140                     * double quotes with single quotes.
    +1141                     * </p>
    +1142                     * @param enable true to use circumflex accent encoding, false not to
    +1143                     * @return this
    +1144                     * @see ICalRawWriter#setCaretEncodingEnabled(boolean)
    +1145                     */
    +1146                    public WriterChainText caretEncoding(boolean enable) {
    +1147                            this.caretEncoding = enable;
    +1148                            return this_;
    +1149                    }
    +1150    
    +1151                    /**
    +1152                     * Writes the iCalendar objects to a string.
    +1153                     * @return the iCalendar string
    +1154                     * @throws IllegalArgumentException if the marshaller class for a
    +1155                     * component or property object cannot be found (only happens when an
    +1156                     * experimental property/component marshaller is not registered with the
    +1157                     * {@code register} method.)
    +1158                     */
    +1159                    public String go() {
    +1160                            StringWriter sw = new StringWriter();
    +1161                            try {
    +1162                                    go(sw);
    +1163                            } catch (IOException e) {
    +1164                                    //writing to a string
    +1165                            }
    +1166                            return sw.toString();
    +1167                    }
    +1168    
    +1169                    /**
    +1170                     * Writes the iCalendar objects to a data stream.
    +1171                     * @param out the output stream to write to
    +1172                     * @throws IllegalArgumentException if the marshaller class for a
    +1173                     * component or property object cannot be found (only happens when an
    +1174                     * experimental property/component marshaller is not registered with the
    +1175                     * {@code register} method.)
    +1176                     * @throws IOException if there's a problem writing to the output stream
    +1177                     */
    +1178                    public void go(OutputStream out) throws IOException {
    +1179                            go(new ICalWriter(out));
    +1180                    }
    +1181    
    +1182                    /**
    +1183                     * Writes the iCalendar objects to a file.
    +1184                     * @param file the file to write to
    +1185                     * @throws IllegalArgumentException if the marshaller class for a
    +1186                     * component or property object cannot be found (only happens when an
    +1187                     * experimental property/component marshaller is not registered with the
    +1188                     * {@code register} method.)
    +1189                     * @throws IOException if there's a problem writing to the file
    +1190                     */
    +1191                    public void go(File file) throws IOException {
    +1192                            go(file, false);
    +1193                    }
    +1194    
    +1195                    /**
    +1196                     * Writes the iCalendar objects to a file.
    +1197                     * @param file the file to write to
    +1198                     * @param append true to append to the end of the file, false to
    +1199                     * overwrite it
    +1200                     * @throws IllegalArgumentException if the marshaller class for a
    +1201                     * component or property object cannot be found (only happens when an
    +1202                     * experimental property/component marshaller is not registered with the
    +1203                     * {@code register} method.)
    +1204                     * @throws IOException if there's a problem writing to the file
    +1205                     */
    +1206                    public void go(File file, boolean append) throws IOException {
    +1207                            ICalWriter icalWriter = new ICalWriter(file, append);
    +1208                            try {
    +1209                                    go(icalWriter);
    +1210                            } finally {
    +1211                                    IOUtils.closeQuietly(icalWriter);
    +1212                            }
    +1213                    }
    +1214    
    +1215                    /**
    +1216                     * Writes the iCalendar objects to a data stream.
    +1217                     * @param writer the writer to write to
    +1218                     * @throws IllegalArgumentException if the marshaller class for a
    +1219                     * component or property object cannot be found (only happens when an
    +1220                     * experimental property/component marshaller is not registered with the
    +1221                     * {@code register} method.)
    +1222                     * @throws IOException if there's a problem writing to the writer
    +1223                     */
    +1224                    public void go(Writer writer) throws IOException {
    +1225                            go(new ICalWriter(writer));
    +1226                    }
    +1227    
    +1228                    private void go(ICalWriter icalWriter) throws IOException {
    +1229                            icalWriter.setRegistrar(registrar);
    +1230                            icalWriter.setCaretEncodingEnabled(caretEncoding);
    +1231    
    +1232                            for (ICalendar ical : icals) {
    +1233                                    icalWriter.write(ical);
    +1234                            }
    +1235                    }
    +1236            }
    +1237    
    +1238            ///////////////////////////////////////////////////////
    +1239            // XML
    +1240            ///////////////////////////////////////////////////////
    +1241    
    +1242            /**
    +1243             * Chainer class for writing xCal documents (XML-encoded iCalendar objects).
    +1244             * @see Biweekly#writeXml(Collection)
    +1245             * @see Biweekly#writeXml(ICalendar...)
    +1246             */
    +1247            public static class WriterChainXml extends WriterChain<WriterChainXml> {
    +1248                    int indent = -1;
    +1249                    final Map<String, ICalDataType> parameterDataTypes = new HashMap<String, ICalDataType>(0);
    +1250    
    +1251                    WriterChainXml(Collection<ICalendar> icals) {
    +1252                            super(icals);
    +1253                    }
    +1254    
    +1255                    @Override
    +1256                    public WriterChainXml register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1257                            return super.register(marshaller);
    +1258                    }
    +1259    
    +1260                    @Override
    +1261                    public WriterChainXml register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1262                            return super.register(marshaller);
    +1263                    }
    +1264    
    +1265                    /**
    +1266                     * Registers the data type of an experimental parameter. Experimental
    +1267                     * parameters use the "unknown" xCal data type by default.
    +1268                     * @param parameterName the parameter name (e.g. "x-foo")
    +1269                     * @param dataType the data type
    +1270                     * @return this
    +1271                     */
    +1272                    public WriterChainXml register(String parameterName, ICalDataType dataType) {
    +1273                            parameterDataTypes.put(parameterName, dataType);
    +1274                            return this_;
    +1275                    }
    +1276    
    +1277                    /**
    +1278                     * Sets the number of indent spaces to use for pretty-printing. If not
    +1279                     * set, then the XML will not be pretty-printed.
    +1280                     * @param indent the number of spaces
    +1281                     * @return this
    +1282                     */
    +1283                    public WriterChainXml indent(int indent) {
    +1284                            this.indent = indent;
    +1285                            return this_;
    +1286                    }
    +1287    
    +1288                    /**
    +1289                     * Writes the xCal document to a string.
    +1290                     * @return the XML string
    +1291                     * @throws IllegalArgumentException if the marshaller class for a
    +1292                     * component or property object cannot be found (only happens when an
    +1293                     * experimental property/component marshaller is not registered with the
    +1294                     * {@code register} method.)
    +1295                     */
    +1296                    public String go() {
    +1297                            StringWriter sw = new StringWriter();
    +1298                            try {
    +1299                                    go(sw);
    +1300                            } catch (TransformerException e) {
    +1301                                    //writing to a string
    +1302                            }
    +1303                            return sw.toString();
    +1304                    }
    +1305    
    +1306                    /**
    +1307                     * Writes the xCal document to an output stream.
    +1308                     * @param out the output stream to write to
    +1309                     * @throws IllegalArgumentException if the marshaller class for a
    +1310                     * component or property object cannot be found (only happens when an
    +1311                     * experimental property/component marshaller is not registered with the
    +1312                     * {@code register} method.)
    +1313                     * @throws TransformerException if there's a problem writing the XML
    +1314                     */
    +1315                    public void go(OutputStream out) throws TransformerException {
    +1316                            XCalDocument document = constructDocument();
    +1317                            document.write(out, indent);
    +1318                    }
    +1319    
    +1320                    /**
    +1321                     * Writes the xCal document to a file.
    +1322                     * @param file the file to write to
    +1323                     * @throws IllegalArgumentException if the marshaller class for a
    +1324                     * component or property object cannot be found (only happens when an
    +1325                     * experimental property/component marshaller is not registered with the
    +1326                     * {@code register} method.)
    +1327                     * @throws TransformerException if there's a problem writing the XML
    +1328                     * @throws IOException if there's a problem writing to the file
    +1329                     */
    +1330                    public void go(File file) throws TransformerException, IOException {
    +1331                            XCalDocument document = constructDocument();
    +1332                            document.write(file, indent);
    +1333                    }
    +1334    
    +1335                    /**
    +1336                     * Writes the xCal document to a writer.
    +1337                     * @param writer the writer to write to
    +1338                     * @throws IllegalArgumentException if the marshaller class for a
    +1339                     * component or property object cannot be found (only happens when an
    +1340                     * experimental property/component marshaller is not registered with the
    +1341                     * {@code register} method.)
    +1342                     * @throws TransformerException if there's a problem writing the XML
    +1343                     */
    +1344                    public void go(Writer writer) throws TransformerException {
    +1345                            XCalDocument document = constructDocument();
    +1346                            document.write(writer, indent);
    +1347                    }
    +1348    
    +1349                    /**
    +1350                     * Writes the xCal document to an XML DOM.
    +1351                     * @return the XML DOM
    +1352                     */
    +1353                    public Document dom() {
    +1354                            XCalDocument document = constructDocument();
    +1355                            return document.getDocument();
    +1356                    }
    +1357    
    +1358                    private XCalDocument constructDocument() {
    +1359                            XCalDocument document = new XCalDocument();
    +1360                            document.setRegistrar(registrar);
    +1361                            for (Map.Entry<String, ICalDataType> entry : parameterDataTypes.entrySet()) {
    +1362                                    document.registerParameterDataType(entry.getKey(), entry.getValue());
    +1363                            }
    +1364    
    +1365                            for (ICalendar ical : icals) {
    +1366                                    document.add(ical);
    +1367                            }
    +1368    
    +1369                            return document;
    +1370                    }
    +1371            }
    +1372    
    +1373            ///////////////////////////////////////////////////////
    +1374            // JSON
    +1375            ///////////////////////////////////////////////////////
    +1376    
    +1377            /**
    +1378             * Chainer class for writing to JSON-encoded iCalendar data streams (jCal).
    +1379             * @see Biweekly#writeJson(Collection)
    +1380             * @see Biweekly#writeJson(ICalendar...)
    +1381             */
    +1382            public static class WriterChainJson extends WriterChain<WriterChainJson> {
    +1383                    private boolean indent = false;
    +1384    
    +1385                    private WriterChainJson(Collection<ICalendar> icals) {
    +1386                            super(icals);
    +1387                    }
    +1388    
    +1389                    /**
    +1390                     * Sets whether or not to pretty-print the JSON.
    +1391                     * @param indent true to pretty-print it, false not to (defaults to
    +1392                     * false)
    +1393                     * @return this
    +1394                     */
    +1395                    public WriterChainJson indent(boolean indent) {
    +1396                            this.indent = indent;
    +1397                            return this_;
    +1398                    }
    +1399    
    +1400                    /**
    +1401                     * Writes the iCalendar objects to a string.
    +1402                     * @return the iCalendar string
    +1403                     * @throws IllegalArgumentException if the marshaller class for a
    +1404                     * component or property object cannot be found (only happens when an
    +1405                     * experimental property/component marshaller is not registered with the
    +1406                     * {@code register} method.)
    +1407                     */
    +1408                    public String go() {
    +1409                            StringWriter sw = new StringWriter();
    +1410                            try {
    +1411                                    go(sw);
    +1412                            } catch (IOException e) {
    +1413                                    //writing to a string
    +1414                            }
    +1415                            return sw.toString();
    +1416                    }
    +1417    
    +1418                    /**
    +1419                     * Writes the iCalendar objects to a data stream.
    +1420                     * @param out the output stream to write to
    +1421                     * @throws IllegalArgumentException if the marshaller class for a
    +1422                     * component or property object cannot be found (only happens when an
    +1423                     * experimental property/component marshaller is not registered with the
    +1424                     * {@code register} method.)
    +1425                     * @throws IOException if there's a problem writing to the output stream
    +1426                     */
    +1427                    public void go(OutputStream out) throws IOException {
    +1428                            go(new JCalWriter(out, icals.size() > 1));
    +1429                    }
    +1430    
    +1431                    /**
    +1432                     * Writes the iCalendar objects to a file.
    +1433                     * @param file the file to write to
    +1434                     * @throws IllegalArgumentException if the marshaller class for a
    +1435                     * component or property object cannot be found (only happens when an
    +1436                     * experimental property/component marshaller is not registered with the
    +1437                     * {@code register} method.)
    +1438                     * @throws IOException if there's a problem writing to the file
    +1439                     */
    +1440                    public void go(File file) throws IOException {
    +1441                            JCalWriter jcalWriter = new JCalWriter(file, icals.size() > 1);
    +1442                            try {
    +1443                                    go(jcalWriter);
    +1444                            } finally {
    +1445                                    IOUtils.closeQuietly(jcalWriter);
    +1446                            }
    +1447                    }
    +1448    
    +1449                    /**
    +1450                     * Writes the iCalendar objects to a data stream.
    +1451                     * @param writer the writer to write to
    +1452                     * @throws IllegalArgumentException if the marshaller class for a
    +1453                     * component or property object cannot be found (only happens when an
    +1454                     * experimental property/component marshaller is not registered with the
    +1455                     * {@code register} method.)
    +1456                     * @throws IOException if there's a problem writing to the writer
    +1457                     */
    +1458                    public void go(Writer writer) throws IOException {
    +1459                            go(new JCalWriter(writer, icals.size() > 1));
    +1460                    }
    +1461    
    +1462                    private void go(JCalWriter jcalWriter) throws IOException {
    +1463                            jcalWriter.setRegistrar(registrar);
    +1464                            jcalWriter.setIndent(indent);
    +1465    
    +1466                            for (ICalendar ical : icals) {
    +1467                                    jcalWriter.write(ical);
    +1468                            }
    +1469                            jcalWriter.closeJsonStream();
    +1470                    }
    +1471            }
    +1472    
    +1473            private Biweekly() {
    +1474                    //hide
    +1475            }
    +1476    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainXmlDocument.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainXmlDocument.html new file mode 100644 index 000000000..6e42f0110 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainXmlDocument.html @@ -0,0 +1,1542 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.io.File;
    +004    import java.io.IOException;
    +005    import java.io.InputStream;
    +006    import java.io.OutputStream;
    +007    import java.io.Reader;
    +008    import java.io.StringWriter;
    +009    import java.io.Writer;
    +010    import java.util.ArrayList;
    +011    import java.util.Arrays;
    +012    import java.util.Collection;
    +013    import java.util.HashMap;
    +014    import java.util.List;
    +015    import java.util.Map;
    +016    import java.util.Properties;
    +017    
    +018    import javax.xml.transform.TransformerException;
    +019    
    +020    import org.w3c.dom.Document;
    +021    import org.xml.sax.SAXException;
    +022    
    +023    import biweekly.component.ICalComponent;
    +024    import biweekly.component.marshaller.ICalComponentMarshaller;
    +025    import biweekly.io.ICalMarshallerRegistrar;
    +026    import biweekly.io.json.JCalParseException;
    +027    import biweekly.io.json.JCalReader;
    +028    import biweekly.io.json.JCalWriter;
    +029    import biweekly.io.text.ICalRawReader;
    +030    import biweekly.io.text.ICalRawWriter;
    +031    import biweekly.io.text.ICalReader;
    +032    import biweekly.io.text.ICalWriter;
    +033    import biweekly.io.xml.XCalDocument;
    +034    import biweekly.property.ICalProperty;
    +035    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +036    import biweekly.util.IOUtils;
    +037    
    +038    import com.fasterxml.jackson.core.JsonParseException;
    +039    
    +040    /*
    +041     Copyright (c) 2013, Michael Angstadt
    +042     All rights reserved.
    +043    
    +044     Redistribution and use in source and binary forms, with or without
    +045     modification, are permitted provided that the following conditions are met: 
    +046    
    +047     1. Redistributions of source code must retain the above copyright notice, this
    +048     list of conditions and the following disclaimer. 
    +049     2. Redistributions in binary form must reproduce the above copyright notice,
    +050     this list of conditions and the following disclaimer in the documentation
    +051     and/or other materials provided with the distribution. 
    +052    
    +053     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +054     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +055     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +056     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +057     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +058     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +059     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +060     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +061     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +062     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +063     */
    +064    
    +065    /**
    +066     * <p>
    +067     * Contains static chaining factory methods for reading/writing iCalendar
    +068     * objects.
    +069     * </p>
    +070     * 
    +071     * <p>
    +072     * <b>Writing an iCalendar object</b>
    +073     * 
    +074     * <pre class="brush:java">
    +075     * ICalendar ical = new ICalendar();
    +076     * 
    +077     * //string
    +078     * String icalString = Biweekly.write(ical).go();
    +079     * 
    +080     * //file
    +081     * File file = new File("meeting.ics");
    +082     * Biweekly.write(ical).go(file);
    +083     * 
    +084     * //output stream
    +085     * OutputStream out = ...
    +086     * Biweekly.write(ical).go(out);
    +087     * out.close();
    +088     * 
    +089     * //writer (should be configured to use UTF-8 encoding)
    +090     * Writer writer = ...
    +091     * Biweekly.write(ical).go(writer);
    +092     * writer.close();
    +093     * </pre>
    +094     * 
    +095     * </p>
    +096     * 
    +097     * <p>
    +098     * <b>Writing multiple iCalendar objects</b>
    +099     * 
    +100     * <pre class="brush:java">
    +101     * ICalendar ical1 = new ICalendar();
    +102     * ICalendar ical2 = new ICalendar();
    +103     * 
    +104     * String icalString = Biweekly.write(ical1, ical2).go();
    +105     * </pre>
    +106     * 
    +107     * </p>
    +108     * 
    +109     * <p>
    +110     * <b>Writing an XML-encoded iCalendar object (xCal)</b><br>
    +111     * 
    +112     * <pre class="brush:java">
    +113     * //Call writeXml() instead of write()
    +114     * ICalendar ical = new ICalendar();
    +115     * String xml = Biweekly.writeXml(ical).indent(2).go();
    +116     * </pre>
    +117     * 
    +118     * </p>
    +119     * 
    +120     * <p>
    +121     * <b>Writing a JSON-encoded iCalendar object (jCal)</b><br>
    +122     * 
    +123     * <pre class="brush:java">
    +124     * //Call writeJson() instead of write()
    +125     * ICalendar ical = new ICalendar();
    +126     * String json = Biweekly.writeJson(ical).go();
    +127     * </pre>
    +128     * 
    +129     * </p>
    +130     * 
    +131     * <p>
    +132     * <b>Reading an iCalendar object</b>
    +133     * 
    +134     * <pre class="brush:java">
    +135     * ICalendar ical;
    +136     * 
    +137     * //string
    +138     * String icalStr = ...
    +139     * ical = Biweekly.parse(icalStr).first();
    +140     * 
    +141     * //file
    +142     * File file = new File("meeting.ics");
    +143     * ical = Biweekly.parse(file).first();
    +144     * 
    +145     * //input stream
    +146     * InputStream in = ...
    +147     * ical = Biweekly.parse(in).first();
    +148     * in.close();  
    +149     * 
    +150     * //reader (should be configured to read UTF-8)
    +151     * Reader reader = ...
    +152     * ical = Biweekly.parse(reader).first();
    +153     * reader.close();
    +154     * </pre>
    +155     * 
    +156     * </p>
    +157     * 
    +158     * <p>
    +159     * <b>Reading multiple iCalendar objects</b>
    +160     * 
    +161     * <pre class="brush:java">
    +162     * String icalStr = ...
    +163     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).all();
    +164     * </pre>
    +165     * 
    +166     * </p>
    +167     * 
    +168     * <p>
    +169     * <b>Reading an XML-encoded iCalendar object (xCal)</b><br>
    +170     * 
    +171     * <pre class="brush:java">
    +172     * //Call parseXml() instead of parse()
    +173     * String xml = ...
    +174     * ICalendar ical = Biweekly.parseXml(xml).first();
    +175     * </pre>
    +176     * 
    +177     * </p>
    +178     * 
    +179     * <p>
    +180     * <b>Reading a JSON-encoded iCalendar object (Cal)</b><br>
    +181     * 
    +182     * <pre class="brush:java">
    +183     * //Call parseJson() instead of parse()
    +184     * String json = ...
    +185     * ICalendar ical = Biweekly.parseJson(json).first();
    +186     * </pre>
    +187     * 
    +188     * </p>
    +189     * 
    +190     * <p>
    +191     * <b>Retrieving parser warnings</b>
    +192     * 
    +193     * <pre class="brush:java">
    +194     * String icalStr = ...
    +195     * List&lt;List&lt;String&gt;&gt; warnings = new ArrayList&lt;List&lt;String&gt;&gt;();
    +196     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).warnings(warnings).all();
    +197     * int i = 0;
    +198     * for (List&lt;String&gt; icalWarnings : warnings){
    +199     *   System.out.println("iCal #" + (i++) + " warnings:");
    +200     *   for (String warning : icalWarnings){
    +201     *     System.out.println(warning);
    +202     *   }
    +203     * }
    +204     * </pre>
    +205     * 
    +206     * </p>
    +207     * 
    +208     * <p>
    +209     * The methods in this class make use of the following classes. These classes
    +210     * can be used if greater control over the read/write operation is required:
    +211     * </p>
    +212     * 
    +213     * <style> table.t td, table.t th {border:1px solid #000;} </style>
    +214     * <table class="t" cellpadding="5" style="border-collapse:collapse;">
    +215     * <tr>
    +216     * <th></th>
    +217     * <th>Classes</th>
    +218     * <th>Supports<br>
    +219     * streaming?</th>
    +220     * </tr>
    +221     * <tr>
    +222     * <th>Text</th>
    +223     * <td>{@link ICalReader} / {@link ICalWriter}</td>
    +224     * <td>yes</td>
    +225     * </tr>
    +226     * <tr>
    +227     * <th>XML</th>
    +228     * <td>{@link XCalDocument}</td>
    +229     * <td>no</td>
    +230     * </tr>
    +231     * <tr>
    +232     * <th>JSON</th>
    +233     * <td>{@link JCalReader} / {@link JCalWriter}</td>
    +234     * <td>yes</td>
    +235     * </tr>
    +236     * </table>
    +237     * @author Michael Angstadt
    +238     */
    +239    public class Biweekly {
    +240            /**
    +241             * The version of the library.
    +242             */
    +243            public static final String VERSION;
    +244    
    +245            /**
    +246             * The project webpage.
    +247             */
    +248            public static final String URL;
    +249    
    +250            static {
    +251                    InputStream in = null;
    +252                    try {
    +253                            in = Biweekly.class.getResourceAsStream("/biweekly.properties");
    +254                            Properties props = new Properties();
    +255                            props.load(in);
    +256    
    +257                            VERSION = props.getProperty("version");
    +258                            URL = props.getProperty("url");
    +259                    } catch (IOException e) {
    +260                            throw new RuntimeException(e);
    +261                    } finally {
    +262                            IOUtils.closeQuietly(in);
    +263                    }
    +264            }
    +265    
    +266            /**
    +267             * Parses an iCalendar object string.
    +268             * @param ical the iCalendar data
    +269             * @return chainer object for completing the parse operation
    +270             */
    +271            public static ParserChainTextString parse(String ical) {
    +272                    return new ParserChainTextString(ical);
    +273            }
    +274    
    +275            /**
    +276             * Parses an iCalendar file.
    +277             * @param file the iCalendar file
    +278             * @return chainer object for completing the parse operation
    +279             */
    +280            public static ParserChainTextReader parse(File file) {
    +281                    return new ParserChainTextReader(file);
    +282            }
    +283    
    +284            /**
    +285             * Parses an iCalendar data stream.
    +286             * @param in the input stream
    +287             * @return chainer object for completing the parse operation
    +288             */
    +289            public static ParserChainTextReader parse(InputStream in) {
    +290                    return new ParserChainTextReader(in);
    +291            }
    +292    
    +293            /**
    +294             * Parses an iCalendar data stream.
    +295             * @param reader the reader
    +296             * @return chainer object for completing the parse operation
    +297             */
    +298            public static ParserChainTextReader parse(Reader reader) {
    +299                    return new ParserChainTextReader(reader);
    +300            }
    +301    
    +302            /**
    +303             * Writes multiple iCalendar objects to a data stream.
    +304             * @param icals the iCalendar objects to write
    +305             * @return chainer object for completing the write operation
    +306             */
    +307            public static WriterChainText write(ICalendar... icals) {
    +308                    return write(Arrays.asList(icals));
    +309            }
    +310    
    +311            /**
    +312             * Writes multiple iCalendar objects to a data stream.
    +313             * @param icals the iCalendar objects to write
    +314             * @return chainer object for completing the write operation
    +315             */
    +316            public static WriterChainText write(Collection<ICalendar> icals) {
    +317                    return new WriterChainText(icals);
    +318            }
    +319    
    +320            /**
    +321             * Parses an xCal document (XML-encoded iCalendar objects) from a string.
    +322             * @param xml the XML string
    +323             * @return chainer object for completing the parse operation
    +324             */
    +325            public static ParserChainXmlString parseXml(String xml) {
    +326                    return new ParserChainXmlString(xml);
    +327            }
    +328    
    +329            /**
    +330             * Parses an xCal document (XML-encoded iCalendar objects) from a file.
    +331             * @param file the XML file
    +332             * @return chainer object for completing the parse operation
    +333             */
    +334            public static ParserChainXmlReader parseXml(File file) {
    +335                    return new ParserChainXmlReader(file);
    +336            }
    +337    
    +338            /**
    +339             * Parses an xCal document (XML-encoded iCalendar objects) from an input
    +340             * stream.
    +341             * @param in the input stream
    +342             * @return chainer object for completing the parse operation
    +343             */
    +344            public static ParserChainXmlReader parseXml(InputStream in) {
    +345                    return new ParserChainXmlReader(in);
    +346            }
    +347    
    +348            /**
    +349             * <p>
    +350             * Parses an xCal document (XML-encoded iCalendar objects) from a reader.
    +351             * </p>
    +352             * <p>
    +353             * Note that use of this method is discouraged. It ignores the character
    +354             * encoding that is defined within the XML document itself, and should only
    +355             * be used if the encoding is undefined or if the encoding needs to be
    +356             * ignored for whatever reason. The {@link #parseXml(InputStream)} method
    +357             * should be used instead, since it takes the XML document's character
    +358             * encoding into account when parsing.
    +359             * </p>
    +360             * @param reader the reader
    +361             * @return chainer object for completing the parse operation
    +362             */
    +363            public static ParserChainXmlReader parseXml(Reader reader) {
    +364                    return new ParserChainXmlReader(reader);
    +365            }
    +366    
    +367            /**
    +368             * Parses an xCal document (XML-encoded iCalendar objects).
    +369             * @param document the XML document
    +370             * @return chainer object for completing the parse operation
    +371             */
    +372            public static ParserChainXmlDocument parseXml(Document document) {
    +373                    return new ParserChainXmlDocument(document);
    +374            }
    +375    
    +376            /**
    +377             * Writes an xCal document (XML-encoded iCalendar objects).
    +378             * @param icals the iCalendar object(s) to write
    +379             * @return chainer object for completing the write operation
    +380             */
    +381            public static WriterChainXml writeXml(ICalendar... icals) {
    +382                    return writeXml(Arrays.asList(icals));
    +383            }
    +384    
    +385            /**
    +386             * Writes an xCal document (XML-encoded iCalendar objects).
    +387             * @param icals the iCalendar objects to write
    +388             * @return chainer object for completing the write operation
    +389             */
    +390            public static WriterChainXml writeXml(Collection<ICalendar> icals) {
    +391                    return new WriterChainXml(icals);
    +392            }
    +393    
    +394            /**
    +395             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +396             * @param json the JSON data
    +397             * @return chainer object for completing the parse operation
    +398             */
    +399            public static ParserChainJsonString parseJson(String json) {
    +400                    return new ParserChainJsonString(json);
    +401            }
    +402    
    +403            /**
    +404             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +405             * @param file the JSON file
    +406             * @return chainer object for completing the parse operation
    +407             */
    +408            public static ParserChainJsonReader parseJson(File file) {
    +409                    return new ParserChainJsonReader(file);
    +410            }
    +411    
    +412            /**
    +413             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +414             * @param in the input stream
    +415             * @return chainer object for completing the parse operation
    +416             */
    +417            public static ParserChainJsonReader parseJson(InputStream in) {
    +418                    return new ParserChainJsonReader(in);
    +419            }
    +420    
    +421            /**
    +422             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +423             * @param reader the reader
    +424             * @return chainer object for completing the parse operation
    +425             */
    +426            public static ParserChainJsonReader parseJson(Reader reader) {
    +427                    return new ParserChainJsonReader(reader);
    +428            }
    +429    
    +430            /**
    +431             * Writes an xCal document (XML-encoded iCalendar objects).
    +432             * @param icals the iCalendar object(s) to write
    +433             * @return chainer object for completing the write operation
    +434             */
    +435            public static WriterChainJson writeJson(ICalendar... icals) {
    +436                    return writeJson(Arrays.asList(icals));
    +437            }
    +438    
    +439            /**
    +440             * Writes an xCal document (XML-encoded iCalendar objects).
    +441             * @param icals the iCalendar objects to write
    +442             * @return chainer object for completing the write operation
    +443             */
    +444            public static WriterChainJson writeJson(Collection<ICalendar> icals) {
    +445                    return new WriterChainJson(icals);
    +446            }
    +447    
    +448            static abstract class ParserChain<T> {
    +449                    //Note: "package" level is used so various fields/methods don't show up in the Javadocs, but are still visible to child classes
    +450                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +451    
    +452                    @SuppressWarnings("unchecked")
    +453                    final T this_ = (T) this;
    +454    
    +455                    List<List<String>> warnings;
    +456    
    +457                    /**
    +458                     * Registers a property marshaller.
    +459                     * @param marshaller the marshaller
    +460                     * @return this
    +461                     */
    +462                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +463                            registrar.register(marshaller);
    +464                            return this_;
    +465                    }
    +466    
    +467                    /**
    +468                     * Registers a component marshaller.
    +469                     * @param marshaller the marshaller
    +470                     * @return this
    +471                     */
    +472                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +473                            registrar.register(marshaller);
    +474                            return this_;
    +475                    }
    +476    
    +477                    /**
    +478                     * Provides a list for putting the parser warnings into.
    +479                     * @param warnings the list object to populate (it is a
    +480                     * "list of lists"--each parsed {@link ICalendar} object has its own
    +481                     * warnings list)
    +482                     * @return this
    +483                     */
    +484                    public T warnings(List<List<String>> warnings) {
    +485                            this.warnings = warnings;
    +486                            return this_;
    +487                    }
    +488    
    +489                    /**
    +490                     * Reads the first iCalendar object from the data stream.
    +491                     * @return the first iCalendar object or null if there are none
    +492                     * @throws IOException if there a problem reading from the data stream
    +493                     * @throws SAXException if there's a problem parsing the XML
    +494                     */
    +495                    public abstract ICalendar first() throws IOException, SAXException;
    +496    
    +497                    /**
    +498                     * Reads all iCalendar objects from the data stream.
    +499                     * @return the parsed iCalendar objects
    +500                     * @throws IOException if there's a problem reading from the data stream
    +501                     * @throws SAXException if there's a problem parsing the XML
    +502                     */
    +503                    public abstract List<ICalendar> all() throws IOException, SAXException;
    +504            }
    +505    
    +506            ///////////////////////////////////////////////////////
    +507            // plain-text
    +508            ///////////////////////////////////////////////////////
    +509    
    +510            static abstract class ParserChainText<T> extends ParserChain<T> {
    +511                    boolean caretDecoding = true;
    +512                    final boolean closeWhenDone;
    +513    
    +514                    private ParserChainText(boolean closeWhenDone) {
    +515                            this.closeWhenDone = closeWhenDone;
    +516                    }
    +517    
    +518                    /**
    +519                     * Sets whether the reader will decode parameter values that use
    +520                     * circumflex accent encoding (enabled by default). This escaping
    +521                     * mechanism allows newlines and double quotes to be included in
    +522                     * parameter values.
    +523                     * @param enable true to use circumflex accent decoding, false not to
    +524                     * @return this
    +525                     * @see ICalRawReader#setCaretDecodingEnabled(boolean)
    +526                     */
    +527                    public T caretDecoding(boolean enable) {
    +528                            caretDecoding = enable;
    +529                            return this_;
    +530                    }
    +531    
    +532                    @Override
    +533                    public ICalendar first() throws IOException {
    +534                            ICalReader parser = constructReader();
    +535    
    +536                            try {
    +537                                    ICalendar ical = parser.readNext();
    +538                                    if (warnings != null) {
    +539                                            warnings.add(parser.getWarnings());
    +540                                    }
    +541                                    return ical;
    +542                            } finally {
    +543                                    if (closeWhenDone) {
    +544                                            IOUtils.closeQuietly(parser);
    +545                                    }
    +546                            }
    +547                    }
    +548    
    +549                    @Override
    +550                    public List<ICalendar> all() throws IOException {
    +551                            ICalReader parser = constructReader();
    +552    
    +553                            try {
    +554                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +555                                    ICalendar ical;
    +556                                    while ((ical = parser.readNext()) != null) {
    +557                                            if (warnings != null) {
    +558                                                    warnings.add(parser.getWarnings());
    +559                                            }
    +560                                            icals.add(ical);
    +561                                    }
    +562                                    return icals;
    +563                            } finally {
    +564                                    if (closeWhenDone) {
    +565                                            IOUtils.closeQuietly(parser);
    +566                                    }
    +567                            }
    +568                    }
    +569    
    +570                    private ICalReader constructReader() throws IOException {
    +571                            ICalReader parser = _constructReader();
    +572                            parser.setRegistrar(registrar);
    +573                            parser.setCaretDecodingEnabled(caretDecoding);
    +574                            return parser;
    +575                    }
    +576    
    +577                    abstract ICalReader _constructReader() throws IOException;
    +578            }
    +579    
    +580            /**
    +581             * Chainer class for parsing plain text iCalendar data streams.
    +582             * @see Biweekly#parse(InputStream)
    +583             * @see Biweekly#parse(File)
    +584             * @see Biweekly#parse(Reader)
    +585             */
    +586            public static class ParserChainTextReader extends ParserChainText<ParserChainTextReader> {
    +587                    private final InputStream in;
    +588                    private final File file;
    +589                    private final Reader reader;
    +590    
    +591                    private ParserChainTextReader(InputStream in) {
    +592                            super(false);
    +593                            this.in = in;
    +594                            this.reader = null;
    +595                            this.file = null;
    +596                    }
    +597    
    +598                    private ParserChainTextReader(File file) {
    +599                            super(true);
    +600                            this.in = null;
    +601                            this.reader = null;
    +602                            this.file = file;
    +603                    }
    +604    
    +605                    private ParserChainTextReader(Reader reader) {
    +606                            super(false);
    +607                            this.in = null;
    +608                            this.reader = reader;
    +609                            this.file = null;
    +610                    }
    +611    
    +612                    @Override
    +613                    public ParserChainTextReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +614                            return super.register(marshaller);
    +615                    }
    +616    
    +617                    @Override
    +618                    public ParserChainTextReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +619                            return super.register(marshaller);
    +620                    }
    +621    
    +622                    @Override
    +623                    public ParserChainTextReader warnings(List<List<String>> warnings) {
    +624                            return super.warnings(warnings);
    +625                    }
    +626    
    +627                    @Override
    +628                    public ParserChainTextReader caretDecoding(boolean enable) {
    +629                            return super.caretDecoding(enable);
    +630                    }
    +631    
    +632                    @Override
    +633                    ICalReader _constructReader() throws IOException {
    +634                            if (in != null) {
    +635                                    return new ICalReader(in);
    +636                            }
    +637                            if (file != null) {
    +638                                    return new ICalReader(file);
    +639                            }
    +640                            return new ICalReader(reader);
    +641                    }
    +642            }
    +643    
    +644            /**
    +645             * Chainer class for parsing plain text iCalendar strings.
    +646             * @see Biweekly#parse(String)
    +647             */
    +648            public static class ParserChainTextString extends ParserChainText<ParserChainTextString> {
    +649                    private final String text;
    +650    
    +651                    private ParserChainTextString(String text) {
    +652                            super(false);
    +653                            this.text = text;
    +654                    }
    +655    
    +656                    @Override
    +657                    public ParserChainTextString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +658                            return super.register(marshaller);
    +659                    }
    +660    
    +661                    @Override
    +662                    public ParserChainTextString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +663                            return super.register(marshaller);
    +664                    }
    +665    
    +666                    @Override
    +667                    public ParserChainTextString warnings(List<List<String>> warnings) {
    +668                            return super.warnings(warnings);
    +669                    }
    +670    
    +671                    @Override
    +672                    public ParserChainTextString caretDecoding(boolean enable) {
    +673                            return super.caretDecoding(enable);
    +674                    }
    +675    
    +676                    @Override
    +677                    ICalReader _constructReader() {
    +678                            return new ICalReader(text);
    +679                    }
    +680    
    +681                    @Override
    +682                    public ICalendar first() {
    +683                            try {
    +684                                    return super.first();
    +685                            } catch (IOException e) {
    +686                                    //should never been thrown because we're reading from a string
    +687                                    throw new RuntimeException(e);
    +688                            }
    +689                    }
    +690    
    +691                    @Override
    +692                    public List<ICalendar> all() {
    +693                            try {
    +694                                    return super.all();
    +695                            } catch (IOException e) {
    +696                                    //should never been thrown because we're reading from a string
    +697                                    throw new RuntimeException(e);
    +698                            }
    +699                    }
    +700            }
    +701    
    +702            ///////////////////////////////////////////////////////
    +703            // XML
    +704            ///////////////////////////////////////////////////////
    +705    
    +706            static abstract class ParserChainXml<T> extends ParserChain<T> {
    +707                    @Override
    +708                    public ICalendar first() throws IOException, SAXException {
    +709                            XCalDocument document = constructDocument();
    +710                            ICalendar ical = document.parseFirst();
    +711                            if (warnings != null) {
    +712                                    warnings.addAll(document.getParseWarnings());
    +713                            }
    +714                            return ical;
    +715                    }
    +716    
    +717                    @Override
    +718                    public List<ICalendar> all() throws IOException, SAXException {
    +719                            XCalDocument document = constructDocument();
    +720                            List<ICalendar> icals = document.parseAll();
    +721                            if (warnings != null) {
    +722                                    warnings.addAll(document.getParseWarnings());
    +723                            }
    +724                            return icals;
    +725                    }
    +726    
    +727                    private XCalDocument constructDocument() throws SAXException, IOException {
    +728                            XCalDocument parser = _constructDocument();
    +729                            parser.setRegistrar(registrar);
    +730                            return parser;
    +731                    }
    +732    
    +733                    abstract XCalDocument _constructDocument() throws IOException, SAXException;
    +734            }
    +735    
    +736            /**
    +737             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +738             * @see Biweekly#parseXml(String)
    +739             */
    +740            public static class ParserChainXmlString extends ParserChainXml<ParserChainXmlString> {
    +741                    private final String xml;
    +742    
    +743                    private ParserChainXmlString(String xml) {
    +744                            this.xml = xml;
    +745                    }
    +746    
    +747                    @Override
    +748                    public ParserChainXmlString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +749                            return super.register(marshaller);
    +750                    }
    +751    
    +752                    @Override
    +753                    public ParserChainXmlString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +754                            return super.register(marshaller);
    +755                    }
    +756    
    +757                    @Override
    +758                    public ParserChainXmlString warnings(List<List<String>> warnings) {
    +759                            return super.warnings(warnings);
    +760                    }
    +761    
    +762                    @Override
    +763                    XCalDocument _constructDocument() throws SAXException {
    +764                            return new XCalDocument(xml);
    +765                    }
    +766    
    +767                    @Override
    +768                    public ICalendar first() throws SAXException {
    +769                            try {
    +770                                    return super.first();
    +771                            } catch (IOException e) {
    +772                                    //should never been thrown because we're reading from a string
    +773                                    throw new RuntimeException(e);
    +774                            }
    +775                    }
    +776    
    +777                    @Override
    +778                    public List<ICalendar> all() throws SAXException {
    +779                            try {
    +780                                    return super.all();
    +781                            } catch (IOException e) {
    +782                                    //should never been thrown because we're reading from a string
    +783                                    throw new RuntimeException(e);
    +784                            }
    +785                    }
    +786            }
    +787    
    +788            /**
    +789             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +790             * @see Biweekly#parseXml(InputStream)
    +791             * @see Biweekly#parseXml(File)
    +792             * @see Biweekly#parseXml(Reader)
    +793             */
    +794            public static class ParserChainXmlReader extends ParserChainXml<ParserChainXmlReader> {
    +795                    private final InputStream in;
    +796                    private final File file;
    +797                    private final Reader reader;
    +798    
    +799                    private ParserChainXmlReader(InputStream in) {
    +800                            this.in = in;
    +801                            this.reader = null;
    +802                            this.file = null;
    +803                    }
    +804    
    +805                    private ParserChainXmlReader(File file) {
    +806                            this.in = null;
    +807                            this.reader = null;
    +808                            this.file = file;
    +809                    }
    +810    
    +811                    private ParserChainXmlReader(Reader reader) {
    +812                            this.in = null;
    +813                            this.reader = reader;
    +814                            this.file = null;
    +815                    }
    +816    
    +817                    @Override
    +818                    public ParserChainXmlReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +819                            return super.register(marshaller);
    +820                    }
    +821    
    +822                    @Override
    +823                    public ParserChainXmlReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +824                            return super.register(marshaller);
    +825                    }
    +826    
    +827                    @Override
    +828                    public ParserChainXmlReader warnings(List<List<String>> warnings) {
    +829                            return super.warnings(warnings);
    +830                    }
    +831    
    +832                    @Override
    +833                    XCalDocument _constructDocument() throws IOException, SAXException {
    +834                            if (in != null) {
    +835                                    return new XCalDocument(in);
    +836                            }
    +837                            if (file != null) {
    +838                                    return new XCalDocument(file);
    +839                            }
    +840                            return new XCalDocument(reader);
    +841                    }
    +842            }
    +843    
    +844            /**
    +845             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +846             * @see Biweekly#parseXml(Document)
    +847             */
    +848            public static class ParserChainXmlDocument extends ParserChainXml<ParserChainXmlDocument> {
    +849                    private final Document document;
    +850    
    +851                    private ParserChainXmlDocument(Document document) {
    +852                            this.document = document;
    +853                    }
    +854    
    +855                    @Override
    +856                    public ParserChainXmlDocument register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +857                            return super.register(marshaller);
    +858                    }
    +859    
    +860                    @Override
    +861                    public ParserChainXmlDocument register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +862                            return super.register(marshaller);
    +863                    }
    +864    
    +865                    @Override
    +866                    public ParserChainXmlDocument warnings(List<List<String>> warnings) {
    +867                            return super.warnings(warnings);
    +868                    }
    +869    
    +870                    @Override
    +871                    XCalDocument _constructDocument() {
    +872                            return new XCalDocument(document);
    +873                    }
    +874    
    +875                    @Override
    +876                    public ICalendar first() {
    +877                            try {
    +878                                    return super.first();
    +879                            } catch (IOException e) {
    +880                                    //should never been thrown because we're reading from a DOM
    +881                                    throw new RuntimeException(e);
    +882                            } catch (SAXException e) {
    +883                                    //should never been thrown because we're reading from a DOM
    +884                                    throw new RuntimeException(e);
    +885                            }
    +886                    }
    +887    
    +888                    @Override
    +889                    public List<ICalendar> all() {
    +890                            try {
    +891                                    return super.all();
    +892                            } catch (IOException e) {
    +893                                    //should never been thrown because we're reading from a DOM
    +894                                    throw new RuntimeException(e);
    +895                            } catch (SAXException e) {
    +896                                    //should never been thrown because we're reading from a DOM
    +897                                    throw new RuntimeException(e);
    +898                            }
    +899                    }
    +900            }
    +901    
    +902            ///////////////////////////////////////////////////////
    +903            // JSON
    +904            ///////////////////////////////////////////////////////
    +905    
    +906            static abstract class ParserChainJson<T> extends ParserChain<T> {
    +907                    final boolean closeWhenDone;
    +908    
    +909                    private ParserChainJson(boolean closeWhenDone) {
    +910                            this.closeWhenDone = closeWhenDone;
    +911                    }
    +912    
    +913                    /**
    +914                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +915                     * syntax may be valid, but it is not in the correct jCal format).
    +916                     * @throws JsonParseException if the JSON syntax is incorrect
    +917                     */
    +918                    @Override
    +919                    public ICalendar first() throws IOException {
    +920                            JCalReader parser = constructReader();
    +921    
    +922                            try {
    +923                                    ICalendar ical = parser.readNext();
    +924                                    if (warnings != null) {
    +925                                            warnings.add(parser.getWarnings());
    +926                                    }
    +927                                    return ical;
    +928                            } finally {
    +929                                    if (closeWhenDone) {
    +930                                            IOUtils.closeQuietly(parser);
    +931                                    }
    +932                            }
    +933                    }
    +934    
    +935                    /**
    +936                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +937                     * syntax may be valid, but it is not in the correct jCal format).
    +938                     * @throws JsonParseException if the JSON syntax is incorrect
    +939                     */
    +940                    @Override
    +941                    public List<ICalendar> all() throws IOException {
    +942                            JCalReader parser = constructReader();
    +943    
    +944                            try {
    +945                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +946                                    ICalendar ical;
    +947                                    while ((ical = parser.readNext()) != null) {
    +948                                            if (warnings != null) {
    +949                                                    warnings.add(parser.getWarnings());
    +950                                            }
    +951                                            icals.add(ical);
    +952                                    }
    +953                                    return icals;
    +954                            } finally {
    +955                                    if (closeWhenDone) {
    +956                                            IOUtils.closeQuietly(parser);
    +957                                    }
    +958                            }
    +959                    }
    +960    
    +961                    private JCalReader constructReader() throws IOException {
    +962                            JCalReader parser = _constructReader();
    +963                            parser.setRegistrar(registrar);
    +964                            return parser;
    +965                    }
    +966    
    +967                    abstract JCalReader _constructReader() throws IOException;
    +968            }
    +969    
    +970            /**
    +971             * Chainer class for parsing JSON-encoded iCalendar data streams (jCal).
    +972             * @see Biweekly#parseJson(InputStream)
    +973             * @see Biweekly#parseJson(File)
    +974             * @see Biweekly#parseJson(Reader)
    +975             */
    +976            public static class ParserChainJsonReader extends ParserChainJson<ParserChainJsonReader> {
    +977                    private final InputStream in;
    +978                    private final File file;
    +979                    private final Reader reader;
    +980    
    +981                    private ParserChainJsonReader(InputStream in) {
    +982                            super(false);
    +983                            this.in = in;
    +984                            this.reader = null;
    +985                            this.file = null;
    +986                    }
    +987    
    +988                    private ParserChainJsonReader(File file) {
    +989                            super(true);
    +990                            this.in = null;
    +991                            this.reader = null;
    +992                            this.file = file;
    +993                    }
    +994    
    +995                    private ParserChainJsonReader(Reader reader) {
    +996                            super(false);
    +997                            this.in = null;
    +998                            this.reader = reader;
    +999                            this.file = null;
    +1000                    }
    +1001    
    +1002                    @Override
    +1003                    public ParserChainJsonReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1004                            return super.register(marshaller);
    +1005                    }
    +1006    
    +1007                    @Override
    +1008                    public ParserChainJsonReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1009                            return super.register(marshaller);
    +1010                    }
    +1011    
    +1012                    @Override
    +1013                    public ParserChainJsonReader warnings(List<List<String>> warnings) {
    +1014                            return super.warnings(warnings);
    +1015                    }
    +1016    
    +1017                    @Override
    +1018                    JCalReader _constructReader() throws IOException {
    +1019                            if (in != null) {
    +1020                                    return new JCalReader(in);
    +1021                            }
    +1022                            if (file != null) {
    +1023                                    return new JCalReader(file);
    +1024                            }
    +1025                            return new JCalReader(reader);
    +1026                    }
    +1027            }
    +1028    
    +1029            /**
    +1030             * Chainer class for parsing JSON-encoded iCalendar strings (jCal).
    +1031             * @see Biweekly#parseJson(String)
    +1032             */
    +1033            public static class ParserChainJsonString extends ParserChainJson<ParserChainJsonString> {
    +1034                    private final String text;
    +1035    
    +1036                    private ParserChainJsonString(String text) {
    +1037                            super(false);
    +1038                            this.text = text;
    +1039                    }
    +1040    
    +1041                    @Override
    +1042                    public ParserChainJsonString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1043                            return super.register(marshaller);
    +1044                    }
    +1045    
    +1046                    @Override
    +1047                    public ParserChainJsonString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1048                            return super.register(marshaller);
    +1049                    }
    +1050    
    +1051                    @Override
    +1052                    public ParserChainJsonString warnings(List<List<String>> warnings) {
    +1053                            return super.warnings(warnings);
    +1054                    }
    +1055    
    +1056                    @Override
    +1057                    JCalReader _constructReader() {
    +1058                            return new JCalReader(text);
    +1059                    }
    +1060    
    +1061                    @Override
    +1062                    public ICalendar first() {
    +1063                            try {
    +1064                                    return super.first();
    +1065                            } catch (IOException e) {
    +1066                                    //should never been thrown because we're reading from a string
    +1067                                    throw new RuntimeException(e);
    +1068                            }
    +1069                    }
    +1070    
    +1071                    @Override
    +1072                    public List<ICalendar> all() {
    +1073                            try {
    +1074                                    return super.all();
    +1075                            } catch (IOException e) {
    +1076                                    //should never been thrown because we're reading from a string
    +1077                                    throw new RuntimeException(e);
    +1078                            }
    +1079                    }
    +1080            }
    +1081    
    +1082            static abstract class WriterChain<T> {
    +1083                    final Collection<ICalendar> icals;
    +1084                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +1085    
    +1086                    @SuppressWarnings("unchecked")
    +1087                    final T this_ = (T) this;
    +1088    
    +1089                    WriterChain(Collection<ICalendar> icals) {
    +1090                            this.icals = icals;
    +1091                    }
    +1092    
    +1093                    /**
    +1094                     * Registers a property marshaller.
    +1095                     * @param marshaller the marshaller
    +1096                     * @return this
    +1097                     */
    +1098                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1099                            registrar.register(marshaller);
    +1100                            return this_;
    +1101                    }
    +1102    
    +1103                    /**
    +1104                     * Registers a component marshaller.
    +1105                     * @param marshaller the marshaller
    +1106                     * @return this
    +1107                     */
    +1108                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1109                            registrar.register(marshaller);
    +1110                            return this_;
    +1111                    }
    +1112            }
    +1113    
    +1114            ///////////////////////////////////////////////////////
    +1115            // plain-text
    +1116            ///////////////////////////////////////////////////////
    +1117    
    +1118            /**
    +1119             * Chainer class for writing to plain text iCalendar data streams.
    +1120             * @see Biweekly#write(Collection)
    +1121             * @see Biweekly#write(ICalendar...)
    +1122             */
    +1123            public static class WriterChainText extends WriterChain<WriterChainText> {
    +1124                    boolean caretEncoding = false;
    +1125    
    +1126                    private WriterChainText(Collection<ICalendar> icals) {
    +1127                            super(icals);
    +1128                    }
    +1129    
    +1130                    /**
    +1131                     * <p>
    +1132                     * Sets whether the writer will apply circumflex accent encoding on
    +1133                     * parameter values (disabled by default). This escaping mechanism
    +1134                     * allows for newlines and double quotes to be included in parameter
    +1135                     * values.
    +1136                     * </p>
    +1137                     * 
    +1138                     * <p>
    +1139                     * When disabled, the writer will replace newlines with spaces and
    +1140                     * double quotes with single quotes.
    +1141                     * </p>
    +1142                     * @param enable true to use circumflex accent encoding, false not to
    +1143                     * @return this
    +1144                     * @see ICalRawWriter#setCaretEncodingEnabled(boolean)
    +1145                     */
    +1146                    public WriterChainText caretEncoding(boolean enable) {
    +1147                            this.caretEncoding = enable;
    +1148                            return this_;
    +1149                    }
    +1150    
    +1151                    /**
    +1152                     * Writes the iCalendar objects to a string.
    +1153                     * @return the iCalendar string
    +1154                     * @throws IllegalArgumentException if the marshaller class for a
    +1155                     * component or property object cannot be found (only happens when an
    +1156                     * experimental property/component marshaller is not registered with the
    +1157                     * {@code register} method.)
    +1158                     */
    +1159                    public String go() {
    +1160                            StringWriter sw = new StringWriter();
    +1161                            try {
    +1162                                    go(sw);
    +1163                            } catch (IOException e) {
    +1164                                    //writing to a string
    +1165                            }
    +1166                            return sw.toString();
    +1167                    }
    +1168    
    +1169                    /**
    +1170                     * Writes the iCalendar objects to a data stream.
    +1171                     * @param out the output stream to write to
    +1172                     * @throws IllegalArgumentException if the marshaller class for a
    +1173                     * component or property object cannot be found (only happens when an
    +1174                     * experimental property/component marshaller is not registered with the
    +1175                     * {@code register} method.)
    +1176                     * @throws IOException if there's a problem writing to the output stream
    +1177                     */
    +1178                    public void go(OutputStream out) throws IOException {
    +1179                            go(new ICalWriter(out));
    +1180                    }
    +1181    
    +1182                    /**
    +1183                     * Writes the iCalendar objects to a file.
    +1184                     * @param file the file to write to
    +1185                     * @throws IllegalArgumentException if the marshaller class for a
    +1186                     * component or property object cannot be found (only happens when an
    +1187                     * experimental property/component marshaller is not registered with the
    +1188                     * {@code register} method.)
    +1189                     * @throws IOException if there's a problem writing to the file
    +1190                     */
    +1191                    public void go(File file) throws IOException {
    +1192                            go(file, false);
    +1193                    }
    +1194    
    +1195                    /**
    +1196                     * Writes the iCalendar objects to a file.
    +1197                     * @param file the file to write to
    +1198                     * @param append true to append to the end of the file, false to
    +1199                     * overwrite it
    +1200                     * @throws IllegalArgumentException if the marshaller class for a
    +1201                     * component or property object cannot be found (only happens when an
    +1202                     * experimental property/component marshaller is not registered with the
    +1203                     * {@code register} method.)
    +1204                     * @throws IOException if there's a problem writing to the file
    +1205                     */
    +1206                    public void go(File file, boolean append) throws IOException {
    +1207                            ICalWriter icalWriter = new ICalWriter(file, append);
    +1208                            try {
    +1209                                    go(icalWriter);
    +1210                            } finally {
    +1211                                    IOUtils.closeQuietly(icalWriter);
    +1212                            }
    +1213                    }
    +1214    
    +1215                    /**
    +1216                     * Writes the iCalendar objects to a data stream.
    +1217                     * @param writer the writer to write to
    +1218                     * @throws IllegalArgumentException if the marshaller class for a
    +1219                     * component or property object cannot be found (only happens when an
    +1220                     * experimental property/component marshaller is not registered with the
    +1221                     * {@code register} method.)
    +1222                     * @throws IOException if there's a problem writing to the writer
    +1223                     */
    +1224                    public void go(Writer writer) throws IOException {
    +1225                            go(new ICalWriter(writer));
    +1226                    }
    +1227    
    +1228                    private void go(ICalWriter icalWriter) throws IOException {
    +1229                            icalWriter.setRegistrar(registrar);
    +1230                            icalWriter.setCaretEncodingEnabled(caretEncoding);
    +1231    
    +1232                            for (ICalendar ical : icals) {
    +1233                                    icalWriter.write(ical);
    +1234                            }
    +1235                    }
    +1236            }
    +1237    
    +1238            ///////////////////////////////////////////////////////
    +1239            // XML
    +1240            ///////////////////////////////////////////////////////
    +1241    
    +1242            /**
    +1243             * Chainer class for writing xCal documents (XML-encoded iCalendar objects).
    +1244             * @see Biweekly#writeXml(Collection)
    +1245             * @see Biweekly#writeXml(ICalendar...)
    +1246             */
    +1247            public static class WriterChainXml extends WriterChain<WriterChainXml> {
    +1248                    int indent = -1;
    +1249                    final Map<String, ICalDataType> parameterDataTypes = new HashMap<String, ICalDataType>(0);
    +1250    
    +1251                    WriterChainXml(Collection<ICalendar> icals) {
    +1252                            super(icals);
    +1253                    }
    +1254    
    +1255                    @Override
    +1256                    public WriterChainXml register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1257                            return super.register(marshaller);
    +1258                    }
    +1259    
    +1260                    @Override
    +1261                    public WriterChainXml register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1262                            return super.register(marshaller);
    +1263                    }
    +1264    
    +1265                    /**
    +1266                     * Registers the data type of an experimental parameter. Experimental
    +1267                     * parameters use the "unknown" xCal data type by default.
    +1268                     * @param parameterName the parameter name (e.g. "x-foo")
    +1269                     * @param dataType the data type
    +1270                     * @return this
    +1271                     */
    +1272                    public WriterChainXml register(String parameterName, ICalDataType dataType) {
    +1273                            parameterDataTypes.put(parameterName, dataType);
    +1274                            return this_;
    +1275                    }
    +1276    
    +1277                    /**
    +1278                     * Sets the number of indent spaces to use for pretty-printing. If not
    +1279                     * set, then the XML will not be pretty-printed.
    +1280                     * @param indent the number of spaces
    +1281                     * @return this
    +1282                     */
    +1283                    public WriterChainXml indent(int indent) {
    +1284                            this.indent = indent;
    +1285                            return this_;
    +1286                    }
    +1287    
    +1288                    /**
    +1289                     * Writes the xCal document to a string.
    +1290                     * @return the XML string
    +1291                     * @throws IllegalArgumentException if the marshaller class for a
    +1292                     * component or property object cannot be found (only happens when an
    +1293                     * experimental property/component marshaller is not registered with the
    +1294                     * {@code register} method.)
    +1295                     */
    +1296                    public String go() {
    +1297                            StringWriter sw = new StringWriter();
    +1298                            try {
    +1299                                    go(sw);
    +1300                            } catch (TransformerException e) {
    +1301                                    //writing to a string
    +1302                            }
    +1303                            return sw.toString();
    +1304                    }
    +1305    
    +1306                    /**
    +1307                     * Writes the xCal document to an output stream.
    +1308                     * @param out the output stream to write to
    +1309                     * @throws IllegalArgumentException if the marshaller class for a
    +1310                     * component or property object cannot be found (only happens when an
    +1311                     * experimental property/component marshaller is not registered with the
    +1312                     * {@code register} method.)
    +1313                     * @throws TransformerException if there's a problem writing the XML
    +1314                     */
    +1315                    public void go(OutputStream out) throws TransformerException {
    +1316                            XCalDocument document = constructDocument();
    +1317                            document.write(out, indent);
    +1318                    }
    +1319    
    +1320                    /**
    +1321                     * Writes the xCal document to a file.
    +1322                     * @param file the file to write to
    +1323                     * @throws IllegalArgumentException if the marshaller class for a
    +1324                     * component or property object cannot be found (only happens when an
    +1325                     * experimental property/component marshaller is not registered with the
    +1326                     * {@code register} method.)
    +1327                     * @throws TransformerException if there's a problem writing the XML
    +1328                     * @throws IOException if there's a problem writing to the file
    +1329                     */
    +1330                    public void go(File file) throws TransformerException, IOException {
    +1331                            XCalDocument document = constructDocument();
    +1332                            document.write(file, indent);
    +1333                    }
    +1334    
    +1335                    /**
    +1336                     * Writes the xCal document to a writer.
    +1337                     * @param writer the writer to write to
    +1338                     * @throws IllegalArgumentException if the marshaller class for a
    +1339                     * component or property object cannot be found (only happens when an
    +1340                     * experimental property/component marshaller is not registered with the
    +1341                     * {@code register} method.)
    +1342                     * @throws TransformerException if there's a problem writing the XML
    +1343                     */
    +1344                    public void go(Writer writer) throws TransformerException {
    +1345                            XCalDocument document = constructDocument();
    +1346                            document.write(writer, indent);
    +1347                    }
    +1348    
    +1349                    /**
    +1350                     * Writes the xCal document to an XML DOM.
    +1351                     * @return the XML DOM
    +1352                     */
    +1353                    public Document dom() {
    +1354                            XCalDocument document = constructDocument();
    +1355                            return document.getDocument();
    +1356                    }
    +1357    
    +1358                    private XCalDocument constructDocument() {
    +1359                            XCalDocument document = new XCalDocument();
    +1360                            document.setRegistrar(registrar);
    +1361                            for (Map.Entry<String, ICalDataType> entry : parameterDataTypes.entrySet()) {
    +1362                                    document.registerParameterDataType(entry.getKey(), entry.getValue());
    +1363                            }
    +1364    
    +1365                            for (ICalendar ical : icals) {
    +1366                                    document.add(ical);
    +1367                            }
    +1368    
    +1369                            return document;
    +1370                    }
    +1371            }
    +1372    
    +1373            ///////////////////////////////////////////////////////
    +1374            // JSON
    +1375            ///////////////////////////////////////////////////////
    +1376    
    +1377            /**
    +1378             * Chainer class for writing to JSON-encoded iCalendar data streams (jCal).
    +1379             * @see Biweekly#writeJson(Collection)
    +1380             * @see Biweekly#writeJson(ICalendar...)
    +1381             */
    +1382            public static class WriterChainJson extends WriterChain<WriterChainJson> {
    +1383                    private boolean indent = false;
    +1384    
    +1385                    private WriterChainJson(Collection<ICalendar> icals) {
    +1386                            super(icals);
    +1387                    }
    +1388    
    +1389                    /**
    +1390                     * Sets whether or not to pretty-print the JSON.
    +1391                     * @param indent true to pretty-print it, false not to (defaults to
    +1392                     * false)
    +1393                     * @return this
    +1394                     */
    +1395                    public WriterChainJson indent(boolean indent) {
    +1396                            this.indent = indent;
    +1397                            return this_;
    +1398                    }
    +1399    
    +1400                    /**
    +1401                     * Writes the iCalendar objects to a string.
    +1402                     * @return the iCalendar string
    +1403                     * @throws IllegalArgumentException if the marshaller class for a
    +1404                     * component or property object cannot be found (only happens when an
    +1405                     * experimental property/component marshaller is not registered with the
    +1406                     * {@code register} method.)
    +1407                     */
    +1408                    public String go() {
    +1409                            StringWriter sw = new StringWriter();
    +1410                            try {
    +1411                                    go(sw);
    +1412                            } catch (IOException e) {
    +1413                                    //writing to a string
    +1414                            }
    +1415                            return sw.toString();
    +1416                    }
    +1417    
    +1418                    /**
    +1419                     * Writes the iCalendar objects to a data stream.
    +1420                     * @param out the output stream to write to
    +1421                     * @throws IllegalArgumentException if the marshaller class for a
    +1422                     * component or property object cannot be found (only happens when an
    +1423                     * experimental property/component marshaller is not registered with the
    +1424                     * {@code register} method.)
    +1425                     * @throws IOException if there's a problem writing to the output stream
    +1426                     */
    +1427                    public void go(OutputStream out) throws IOException {
    +1428                            go(new JCalWriter(out, icals.size() > 1));
    +1429                    }
    +1430    
    +1431                    /**
    +1432                     * Writes the iCalendar objects to a file.
    +1433                     * @param file the file to write to
    +1434                     * @throws IllegalArgumentException if the marshaller class for a
    +1435                     * component or property object cannot be found (only happens when an
    +1436                     * experimental property/component marshaller is not registered with the
    +1437                     * {@code register} method.)
    +1438                     * @throws IOException if there's a problem writing to the file
    +1439                     */
    +1440                    public void go(File file) throws IOException {
    +1441                            JCalWriter jcalWriter = new JCalWriter(file, icals.size() > 1);
    +1442                            try {
    +1443                                    go(jcalWriter);
    +1444                            } finally {
    +1445                                    IOUtils.closeQuietly(jcalWriter);
    +1446                            }
    +1447                    }
    +1448    
    +1449                    /**
    +1450                     * Writes the iCalendar objects to a data stream.
    +1451                     * @param writer the writer to write to
    +1452                     * @throws IllegalArgumentException if the marshaller class for a
    +1453                     * component or property object cannot be found (only happens when an
    +1454                     * experimental property/component marshaller is not registered with the
    +1455                     * {@code register} method.)
    +1456                     * @throws IOException if there's a problem writing to the writer
    +1457                     */
    +1458                    public void go(Writer writer) throws IOException {
    +1459                            go(new JCalWriter(writer, icals.size() > 1));
    +1460                    }
    +1461    
    +1462                    private void go(JCalWriter jcalWriter) throws IOException {
    +1463                            jcalWriter.setRegistrar(registrar);
    +1464                            jcalWriter.setIndent(indent);
    +1465    
    +1466                            for (ICalendar ical : icals) {
    +1467                                    jcalWriter.write(ical);
    +1468                            }
    +1469                            jcalWriter.closeJsonStream();
    +1470                    }
    +1471            }
    +1472    
    +1473            private Biweekly() {
    +1474                    //hide
    +1475            }
    +1476    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainXmlReader.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainXmlReader.html new file mode 100644 index 000000000..6e42f0110 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainXmlReader.html @@ -0,0 +1,1542 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.io.File;
    +004    import java.io.IOException;
    +005    import java.io.InputStream;
    +006    import java.io.OutputStream;
    +007    import java.io.Reader;
    +008    import java.io.StringWriter;
    +009    import java.io.Writer;
    +010    import java.util.ArrayList;
    +011    import java.util.Arrays;
    +012    import java.util.Collection;
    +013    import java.util.HashMap;
    +014    import java.util.List;
    +015    import java.util.Map;
    +016    import java.util.Properties;
    +017    
    +018    import javax.xml.transform.TransformerException;
    +019    
    +020    import org.w3c.dom.Document;
    +021    import org.xml.sax.SAXException;
    +022    
    +023    import biweekly.component.ICalComponent;
    +024    import biweekly.component.marshaller.ICalComponentMarshaller;
    +025    import biweekly.io.ICalMarshallerRegistrar;
    +026    import biweekly.io.json.JCalParseException;
    +027    import biweekly.io.json.JCalReader;
    +028    import biweekly.io.json.JCalWriter;
    +029    import biweekly.io.text.ICalRawReader;
    +030    import biweekly.io.text.ICalRawWriter;
    +031    import biweekly.io.text.ICalReader;
    +032    import biweekly.io.text.ICalWriter;
    +033    import biweekly.io.xml.XCalDocument;
    +034    import biweekly.property.ICalProperty;
    +035    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +036    import biweekly.util.IOUtils;
    +037    
    +038    import com.fasterxml.jackson.core.JsonParseException;
    +039    
    +040    /*
    +041     Copyright (c) 2013, Michael Angstadt
    +042     All rights reserved.
    +043    
    +044     Redistribution and use in source and binary forms, with or without
    +045     modification, are permitted provided that the following conditions are met: 
    +046    
    +047     1. Redistributions of source code must retain the above copyright notice, this
    +048     list of conditions and the following disclaimer. 
    +049     2. Redistributions in binary form must reproduce the above copyright notice,
    +050     this list of conditions and the following disclaimer in the documentation
    +051     and/or other materials provided with the distribution. 
    +052    
    +053     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +054     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +055     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +056     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +057     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +058     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +059     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +060     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +061     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +062     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +063     */
    +064    
    +065    /**
    +066     * <p>
    +067     * Contains static chaining factory methods for reading/writing iCalendar
    +068     * objects.
    +069     * </p>
    +070     * 
    +071     * <p>
    +072     * <b>Writing an iCalendar object</b>
    +073     * 
    +074     * <pre class="brush:java">
    +075     * ICalendar ical = new ICalendar();
    +076     * 
    +077     * //string
    +078     * String icalString = Biweekly.write(ical).go();
    +079     * 
    +080     * //file
    +081     * File file = new File("meeting.ics");
    +082     * Biweekly.write(ical).go(file);
    +083     * 
    +084     * //output stream
    +085     * OutputStream out = ...
    +086     * Biweekly.write(ical).go(out);
    +087     * out.close();
    +088     * 
    +089     * //writer (should be configured to use UTF-8 encoding)
    +090     * Writer writer = ...
    +091     * Biweekly.write(ical).go(writer);
    +092     * writer.close();
    +093     * </pre>
    +094     * 
    +095     * </p>
    +096     * 
    +097     * <p>
    +098     * <b>Writing multiple iCalendar objects</b>
    +099     * 
    +100     * <pre class="brush:java">
    +101     * ICalendar ical1 = new ICalendar();
    +102     * ICalendar ical2 = new ICalendar();
    +103     * 
    +104     * String icalString = Biweekly.write(ical1, ical2).go();
    +105     * </pre>
    +106     * 
    +107     * </p>
    +108     * 
    +109     * <p>
    +110     * <b>Writing an XML-encoded iCalendar object (xCal)</b><br>
    +111     * 
    +112     * <pre class="brush:java">
    +113     * //Call writeXml() instead of write()
    +114     * ICalendar ical = new ICalendar();
    +115     * String xml = Biweekly.writeXml(ical).indent(2).go();
    +116     * </pre>
    +117     * 
    +118     * </p>
    +119     * 
    +120     * <p>
    +121     * <b>Writing a JSON-encoded iCalendar object (jCal)</b><br>
    +122     * 
    +123     * <pre class="brush:java">
    +124     * //Call writeJson() instead of write()
    +125     * ICalendar ical = new ICalendar();
    +126     * String json = Biweekly.writeJson(ical).go();
    +127     * </pre>
    +128     * 
    +129     * </p>
    +130     * 
    +131     * <p>
    +132     * <b>Reading an iCalendar object</b>
    +133     * 
    +134     * <pre class="brush:java">
    +135     * ICalendar ical;
    +136     * 
    +137     * //string
    +138     * String icalStr = ...
    +139     * ical = Biweekly.parse(icalStr).first();
    +140     * 
    +141     * //file
    +142     * File file = new File("meeting.ics");
    +143     * ical = Biweekly.parse(file).first();
    +144     * 
    +145     * //input stream
    +146     * InputStream in = ...
    +147     * ical = Biweekly.parse(in).first();
    +148     * in.close();  
    +149     * 
    +150     * //reader (should be configured to read UTF-8)
    +151     * Reader reader = ...
    +152     * ical = Biweekly.parse(reader).first();
    +153     * reader.close();
    +154     * </pre>
    +155     * 
    +156     * </p>
    +157     * 
    +158     * <p>
    +159     * <b>Reading multiple iCalendar objects</b>
    +160     * 
    +161     * <pre class="brush:java">
    +162     * String icalStr = ...
    +163     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).all();
    +164     * </pre>
    +165     * 
    +166     * </p>
    +167     * 
    +168     * <p>
    +169     * <b>Reading an XML-encoded iCalendar object (xCal)</b><br>
    +170     * 
    +171     * <pre class="brush:java">
    +172     * //Call parseXml() instead of parse()
    +173     * String xml = ...
    +174     * ICalendar ical = Biweekly.parseXml(xml).first();
    +175     * </pre>
    +176     * 
    +177     * </p>
    +178     * 
    +179     * <p>
    +180     * <b>Reading a JSON-encoded iCalendar object (Cal)</b><br>
    +181     * 
    +182     * <pre class="brush:java">
    +183     * //Call parseJson() instead of parse()
    +184     * String json = ...
    +185     * ICalendar ical = Biweekly.parseJson(json).first();
    +186     * </pre>
    +187     * 
    +188     * </p>
    +189     * 
    +190     * <p>
    +191     * <b>Retrieving parser warnings</b>
    +192     * 
    +193     * <pre class="brush:java">
    +194     * String icalStr = ...
    +195     * List&lt;List&lt;String&gt;&gt; warnings = new ArrayList&lt;List&lt;String&gt;&gt;();
    +196     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).warnings(warnings).all();
    +197     * int i = 0;
    +198     * for (List&lt;String&gt; icalWarnings : warnings){
    +199     *   System.out.println("iCal #" + (i++) + " warnings:");
    +200     *   for (String warning : icalWarnings){
    +201     *     System.out.println(warning);
    +202     *   }
    +203     * }
    +204     * </pre>
    +205     * 
    +206     * </p>
    +207     * 
    +208     * <p>
    +209     * The methods in this class make use of the following classes. These classes
    +210     * can be used if greater control over the read/write operation is required:
    +211     * </p>
    +212     * 
    +213     * <style> table.t td, table.t th {border:1px solid #000;} </style>
    +214     * <table class="t" cellpadding="5" style="border-collapse:collapse;">
    +215     * <tr>
    +216     * <th></th>
    +217     * <th>Classes</th>
    +218     * <th>Supports<br>
    +219     * streaming?</th>
    +220     * </tr>
    +221     * <tr>
    +222     * <th>Text</th>
    +223     * <td>{@link ICalReader} / {@link ICalWriter}</td>
    +224     * <td>yes</td>
    +225     * </tr>
    +226     * <tr>
    +227     * <th>XML</th>
    +228     * <td>{@link XCalDocument}</td>
    +229     * <td>no</td>
    +230     * </tr>
    +231     * <tr>
    +232     * <th>JSON</th>
    +233     * <td>{@link JCalReader} / {@link JCalWriter}</td>
    +234     * <td>yes</td>
    +235     * </tr>
    +236     * </table>
    +237     * @author Michael Angstadt
    +238     */
    +239    public class Biweekly {
    +240            /**
    +241             * The version of the library.
    +242             */
    +243            public static final String VERSION;
    +244    
    +245            /**
    +246             * The project webpage.
    +247             */
    +248            public static final String URL;
    +249    
    +250            static {
    +251                    InputStream in = null;
    +252                    try {
    +253                            in = Biweekly.class.getResourceAsStream("/biweekly.properties");
    +254                            Properties props = new Properties();
    +255                            props.load(in);
    +256    
    +257                            VERSION = props.getProperty("version");
    +258                            URL = props.getProperty("url");
    +259                    } catch (IOException e) {
    +260                            throw new RuntimeException(e);
    +261                    } finally {
    +262                            IOUtils.closeQuietly(in);
    +263                    }
    +264            }
    +265    
    +266            /**
    +267             * Parses an iCalendar object string.
    +268             * @param ical the iCalendar data
    +269             * @return chainer object for completing the parse operation
    +270             */
    +271            public static ParserChainTextString parse(String ical) {
    +272                    return new ParserChainTextString(ical);
    +273            }
    +274    
    +275            /**
    +276             * Parses an iCalendar file.
    +277             * @param file the iCalendar file
    +278             * @return chainer object for completing the parse operation
    +279             */
    +280            public static ParserChainTextReader parse(File file) {
    +281                    return new ParserChainTextReader(file);
    +282            }
    +283    
    +284            /**
    +285             * Parses an iCalendar data stream.
    +286             * @param in the input stream
    +287             * @return chainer object for completing the parse operation
    +288             */
    +289            public static ParserChainTextReader parse(InputStream in) {
    +290                    return new ParserChainTextReader(in);
    +291            }
    +292    
    +293            /**
    +294             * Parses an iCalendar data stream.
    +295             * @param reader the reader
    +296             * @return chainer object for completing the parse operation
    +297             */
    +298            public static ParserChainTextReader parse(Reader reader) {
    +299                    return new ParserChainTextReader(reader);
    +300            }
    +301    
    +302            /**
    +303             * Writes multiple iCalendar objects to a data stream.
    +304             * @param icals the iCalendar objects to write
    +305             * @return chainer object for completing the write operation
    +306             */
    +307            public static WriterChainText write(ICalendar... icals) {
    +308                    return write(Arrays.asList(icals));
    +309            }
    +310    
    +311            /**
    +312             * Writes multiple iCalendar objects to a data stream.
    +313             * @param icals the iCalendar objects to write
    +314             * @return chainer object for completing the write operation
    +315             */
    +316            public static WriterChainText write(Collection<ICalendar> icals) {
    +317                    return new WriterChainText(icals);
    +318            }
    +319    
    +320            /**
    +321             * Parses an xCal document (XML-encoded iCalendar objects) from a string.
    +322             * @param xml the XML string
    +323             * @return chainer object for completing the parse operation
    +324             */
    +325            public static ParserChainXmlString parseXml(String xml) {
    +326                    return new ParserChainXmlString(xml);
    +327            }
    +328    
    +329            /**
    +330             * Parses an xCal document (XML-encoded iCalendar objects) from a file.
    +331             * @param file the XML file
    +332             * @return chainer object for completing the parse operation
    +333             */
    +334            public static ParserChainXmlReader parseXml(File file) {
    +335                    return new ParserChainXmlReader(file);
    +336            }
    +337    
    +338            /**
    +339             * Parses an xCal document (XML-encoded iCalendar objects) from an input
    +340             * stream.
    +341             * @param in the input stream
    +342             * @return chainer object for completing the parse operation
    +343             */
    +344            public static ParserChainXmlReader parseXml(InputStream in) {
    +345                    return new ParserChainXmlReader(in);
    +346            }
    +347    
    +348            /**
    +349             * <p>
    +350             * Parses an xCal document (XML-encoded iCalendar objects) from a reader.
    +351             * </p>
    +352             * <p>
    +353             * Note that use of this method is discouraged. It ignores the character
    +354             * encoding that is defined within the XML document itself, and should only
    +355             * be used if the encoding is undefined or if the encoding needs to be
    +356             * ignored for whatever reason. The {@link #parseXml(InputStream)} method
    +357             * should be used instead, since it takes the XML document's character
    +358             * encoding into account when parsing.
    +359             * </p>
    +360             * @param reader the reader
    +361             * @return chainer object for completing the parse operation
    +362             */
    +363            public static ParserChainXmlReader parseXml(Reader reader) {
    +364                    return new ParserChainXmlReader(reader);
    +365            }
    +366    
    +367            /**
    +368             * Parses an xCal document (XML-encoded iCalendar objects).
    +369             * @param document the XML document
    +370             * @return chainer object for completing the parse operation
    +371             */
    +372            public static ParserChainXmlDocument parseXml(Document document) {
    +373                    return new ParserChainXmlDocument(document);
    +374            }
    +375    
    +376            /**
    +377             * Writes an xCal document (XML-encoded iCalendar objects).
    +378             * @param icals the iCalendar object(s) to write
    +379             * @return chainer object for completing the write operation
    +380             */
    +381            public static WriterChainXml writeXml(ICalendar... icals) {
    +382                    return writeXml(Arrays.asList(icals));
    +383            }
    +384    
    +385            /**
    +386             * Writes an xCal document (XML-encoded iCalendar objects).
    +387             * @param icals the iCalendar objects to write
    +388             * @return chainer object for completing the write operation
    +389             */
    +390            public static WriterChainXml writeXml(Collection<ICalendar> icals) {
    +391                    return new WriterChainXml(icals);
    +392            }
    +393    
    +394            /**
    +395             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +396             * @param json the JSON data
    +397             * @return chainer object for completing the parse operation
    +398             */
    +399            public static ParserChainJsonString parseJson(String json) {
    +400                    return new ParserChainJsonString(json);
    +401            }
    +402    
    +403            /**
    +404             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +405             * @param file the JSON file
    +406             * @return chainer object for completing the parse operation
    +407             */
    +408            public static ParserChainJsonReader parseJson(File file) {
    +409                    return new ParserChainJsonReader(file);
    +410            }
    +411    
    +412            /**
    +413             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +414             * @param in the input stream
    +415             * @return chainer object for completing the parse operation
    +416             */
    +417            public static ParserChainJsonReader parseJson(InputStream in) {
    +418                    return new ParserChainJsonReader(in);
    +419            }
    +420    
    +421            /**
    +422             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +423             * @param reader the reader
    +424             * @return chainer object for completing the parse operation
    +425             */
    +426            public static ParserChainJsonReader parseJson(Reader reader) {
    +427                    return new ParserChainJsonReader(reader);
    +428            }
    +429    
    +430            /**
    +431             * Writes an xCal document (XML-encoded iCalendar objects).
    +432             * @param icals the iCalendar object(s) to write
    +433             * @return chainer object for completing the write operation
    +434             */
    +435            public static WriterChainJson writeJson(ICalendar... icals) {
    +436                    return writeJson(Arrays.asList(icals));
    +437            }
    +438    
    +439            /**
    +440             * Writes an xCal document (XML-encoded iCalendar objects).
    +441             * @param icals the iCalendar objects to write
    +442             * @return chainer object for completing the write operation
    +443             */
    +444            public static WriterChainJson writeJson(Collection<ICalendar> icals) {
    +445                    return new WriterChainJson(icals);
    +446            }
    +447    
    +448            static abstract class ParserChain<T> {
    +449                    //Note: "package" level is used so various fields/methods don't show up in the Javadocs, but are still visible to child classes
    +450                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +451    
    +452                    @SuppressWarnings("unchecked")
    +453                    final T this_ = (T) this;
    +454    
    +455                    List<List<String>> warnings;
    +456    
    +457                    /**
    +458                     * Registers a property marshaller.
    +459                     * @param marshaller the marshaller
    +460                     * @return this
    +461                     */
    +462                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +463                            registrar.register(marshaller);
    +464                            return this_;
    +465                    }
    +466    
    +467                    /**
    +468                     * Registers a component marshaller.
    +469                     * @param marshaller the marshaller
    +470                     * @return this
    +471                     */
    +472                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +473                            registrar.register(marshaller);
    +474                            return this_;
    +475                    }
    +476    
    +477                    /**
    +478                     * Provides a list for putting the parser warnings into.
    +479                     * @param warnings the list object to populate (it is a
    +480                     * "list of lists"--each parsed {@link ICalendar} object has its own
    +481                     * warnings list)
    +482                     * @return this
    +483                     */
    +484                    public T warnings(List<List<String>> warnings) {
    +485                            this.warnings = warnings;
    +486                            return this_;
    +487                    }
    +488    
    +489                    /**
    +490                     * Reads the first iCalendar object from the data stream.
    +491                     * @return the first iCalendar object or null if there are none
    +492                     * @throws IOException if there a problem reading from the data stream
    +493                     * @throws SAXException if there's a problem parsing the XML
    +494                     */
    +495                    public abstract ICalendar first() throws IOException, SAXException;
    +496    
    +497                    /**
    +498                     * Reads all iCalendar objects from the data stream.
    +499                     * @return the parsed iCalendar objects
    +500                     * @throws IOException if there's a problem reading from the data stream
    +501                     * @throws SAXException if there's a problem parsing the XML
    +502                     */
    +503                    public abstract List<ICalendar> all() throws IOException, SAXException;
    +504            }
    +505    
    +506            ///////////////////////////////////////////////////////
    +507            // plain-text
    +508            ///////////////////////////////////////////////////////
    +509    
    +510            static abstract class ParserChainText<T> extends ParserChain<T> {
    +511                    boolean caretDecoding = true;
    +512                    final boolean closeWhenDone;
    +513    
    +514                    private ParserChainText(boolean closeWhenDone) {
    +515                            this.closeWhenDone = closeWhenDone;
    +516                    }
    +517    
    +518                    /**
    +519                     * Sets whether the reader will decode parameter values that use
    +520                     * circumflex accent encoding (enabled by default). This escaping
    +521                     * mechanism allows newlines and double quotes to be included in
    +522                     * parameter values.
    +523                     * @param enable true to use circumflex accent decoding, false not to
    +524                     * @return this
    +525                     * @see ICalRawReader#setCaretDecodingEnabled(boolean)
    +526                     */
    +527                    public T caretDecoding(boolean enable) {
    +528                            caretDecoding = enable;
    +529                            return this_;
    +530                    }
    +531    
    +532                    @Override
    +533                    public ICalendar first() throws IOException {
    +534                            ICalReader parser = constructReader();
    +535    
    +536                            try {
    +537                                    ICalendar ical = parser.readNext();
    +538                                    if (warnings != null) {
    +539                                            warnings.add(parser.getWarnings());
    +540                                    }
    +541                                    return ical;
    +542                            } finally {
    +543                                    if (closeWhenDone) {
    +544                                            IOUtils.closeQuietly(parser);
    +545                                    }
    +546                            }
    +547                    }
    +548    
    +549                    @Override
    +550                    public List<ICalendar> all() throws IOException {
    +551                            ICalReader parser = constructReader();
    +552    
    +553                            try {
    +554                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +555                                    ICalendar ical;
    +556                                    while ((ical = parser.readNext()) != null) {
    +557                                            if (warnings != null) {
    +558                                                    warnings.add(parser.getWarnings());
    +559                                            }
    +560                                            icals.add(ical);
    +561                                    }
    +562                                    return icals;
    +563                            } finally {
    +564                                    if (closeWhenDone) {
    +565                                            IOUtils.closeQuietly(parser);
    +566                                    }
    +567                            }
    +568                    }
    +569    
    +570                    private ICalReader constructReader() throws IOException {
    +571                            ICalReader parser = _constructReader();
    +572                            parser.setRegistrar(registrar);
    +573                            parser.setCaretDecodingEnabled(caretDecoding);
    +574                            return parser;
    +575                    }
    +576    
    +577                    abstract ICalReader _constructReader() throws IOException;
    +578            }
    +579    
    +580            /**
    +581             * Chainer class for parsing plain text iCalendar data streams.
    +582             * @see Biweekly#parse(InputStream)
    +583             * @see Biweekly#parse(File)
    +584             * @see Biweekly#parse(Reader)
    +585             */
    +586            public static class ParserChainTextReader extends ParserChainText<ParserChainTextReader> {
    +587                    private final InputStream in;
    +588                    private final File file;
    +589                    private final Reader reader;
    +590    
    +591                    private ParserChainTextReader(InputStream in) {
    +592                            super(false);
    +593                            this.in = in;
    +594                            this.reader = null;
    +595                            this.file = null;
    +596                    }
    +597    
    +598                    private ParserChainTextReader(File file) {
    +599                            super(true);
    +600                            this.in = null;
    +601                            this.reader = null;
    +602                            this.file = file;
    +603                    }
    +604    
    +605                    private ParserChainTextReader(Reader reader) {
    +606                            super(false);
    +607                            this.in = null;
    +608                            this.reader = reader;
    +609                            this.file = null;
    +610                    }
    +611    
    +612                    @Override
    +613                    public ParserChainTextReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +614                            return super.register(marshaller);
    +615                    }
    +616    
    +617                    @Override
    +618                    public ParserChainTextReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +619                            return super.register(marshaller);
    +620                    }
    +621    
    +622                    @Override
    +623                    public ParserChainTextReader warnings(List<List<String>> warnings) {
    +624                            return super.warnings(warnings);
    +625                    }
    +626    
    +627                    @Override
    +628                    public ParserChainTextReader caretDecoding(boolean enable) {
    +629                            return super.caretDecoding(enable);
    +630                    }
    +631    
    +632                    @Override
    +633                    ICalReader _constructReader() throws IOException {
    +634                            if (in != null) {
    +635                                    return new ICalReader(in);
    +636                            }
    +637                            if (file != null) {
    +638                                    return new ICalReader(file);
    +639                            }
    +640                            return new ICalReader(reader);
    +641                    }
    +642            }
    +643    
    +644            /**
    +645             * Chainer class for parsing plain text iCalendar strings.
    +646             * @see Biweekly#parse(String)
    +647             */
    +648            public static class ParserChainTextString extends ParserChainText<ParserChainTextString> {
    +649                    private final String text;
    +650    
    +651                    private ParserChainTextString(String text) {
    +652                            super(false);
    +653                            this.text = text;
    +654                    }
    +655    
    +656                    @Override
    +657                    public ParserChainTextString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +658                            return super.register(marshaller);
    +659                    }
    +660    
    +661                    @Override
    +662                    public ParserChainTextString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +663                            return super.register(marshaller);
    +664                    }
    +665    
    +666                    @Override
    +667                    public ParserChainTextString warnings(List<List<String>> warnings) {
    +668                            return super.warnings(warnings);
    +669                    }
    +670    
    +671                    @Override
    +672                    public ParserChainTextString caretDecoding(boolean enable) {
    +673                            return super.caretDecoding(enable);
    +674                    }
    +675    
    +676                    @Override
    +677                    ICalReader _constructReader() {
    +678                            return new ICalReader(text);
    +679                    }
    +680    
    +681                    @Override
    +682                    public ICalendar first() {
    +683                            try {
    +684                                    return super.first();
    +685                            } catch (IOException e) {
    +686                                    //should never been thrown because we're reading from a string
    +687                                    throw new RuntimeException(e);
    +688                            }
    +689                    }
    +690    
    +691                    @Override
    +692                    public List<ICalendar> all() {
    +693                            try {
    +694                                    return super.all();
    +695                            } catch (IOException e) {
    +696                                    //should never been thrown because we're reading from a string
    +697                                    throw new RuntimeException(e);
    +698                            }
    +699                    }
    +700            }
    +701    
    +702            ///////////////////////////////////////////////////////
    +703            // XML
    +704            ///////////////////////////////////////////////////////
    +705    
    +706            static abstract class ParserChainXml<T> extends ParserChain<T> {
    +707                    @Override
    +708                    public ICalendar first() throws IOException, SAXException {
    +709                            XCalDocument document = constructDocument();
    +710                            ICalendar ical = document.parseFirst();
    +711                            if (warnings != null) {
    +712                                    warnings.addAll(document.getParseWarnings());
    +713                            }
    +714                            return ical;
    +715                    }
    +716    
    +717                    @Override
    +718                    public List<ICalendar> all() throws IOException, SAXException {
    +719                            XCalDocument document = constructDocument();
    +720                            List<ICalendar> icals = document.parseAll();
    +721                            if (warnings != null) {
    +722                                    warnings.addAll(document.getParseWarnings());
    +723                            }
    +724                            return icals;
    +725                    }
    +726    
    +727                    private XCalDocument constructDocument() throws SAXException, IOException {
    +728                            XCalDocument parser = _constructDocument();
    +729                            parser.setRegistrar(registrar);
    +730                            return parser;
    +731                    }
    +732    
    +733                    abstract XCalDocument _constructDocument() throws IOException, SAXException;
    +734            }
    +735    
    +736            /**
    +737             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +738             * @see Biweekly#parseXml(String)
    +739             */
    +740            public static class ParserChainXmlString extends ParserChainXml<ParserChainXmlString> {
    +741                    private final String xml;
    +742    
    +743                    private ParserChainXmlString(String xml) {
    +744                            this.xml = xml;
    +745                    }
    +746    
    +747                    @Override
    +748                    public ParserChainXmlString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +749                            return super.register(marshaller);
    +750                    }
    +751    
    +752                    @Override
    +753                    public ParserChainXmlString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +754                            return super.register(marshaller);
    +755                    }
    +756    
    +757                    @Override
    +758                    public ParserChainXmlString warnings(List<List<String>> warnings) {
    +759                            return super.warnings(warnings);
    +760                    }
    +761    
    +762                    @Override
    +763                    XCalDocument _constructDocument() throws SAXException {
    +764                            return new XCalDocument(xml);
    +765                    }
    +766    
    +767                    @Override
    +768                    public ICalendar first() throws SAXException {
    +769                            try {
    +770                                    return super.first();
    +771                            } catch (IOException e) {
    +772                                    //should never been thrown because we're reading from a string
    +773                                    throw new RuntimeException(e);
    +774                            }
    +775                    }
    +776    
    +777                    @Override
    +778                    public List<ICalendar> all() throws SAXException {
    +779                            try {
    +780                                    return super.all();
    +781                            } catch (IOException e) {
    +782                                    //should never been thrown because we're reading from a string
    +783                                    throw new RuntimeException(e);
    +784                            }
    +785                    }
    +786            }
    +787    
    +788            /**
    +789             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +790             * @see Biweekly#parseXml(InputStream)
    +791             * @see Biweekly#parseXml(File)
    +792             * @see Biweekly#parseXml(Reader)
    +793             */
    +794            public static class ParserChainXmlReader extends ParserChainXml<ParserChainXmlReader> {
    +795                    private final InputStream in;
    +796                    private final File file;
    +797                    private final Reader reader;
    +798    
    +799                    private ParserChainXmlReader(InputStream in) {
    +800                            this.in = in;
    +801                            this.reader = null;
    +802                            this.file = null;
    +803                    }
    +804    
    +805                    private ParserChainXmlReader(File file) {
    +806                            this.in = null;
    +807                            this.reader = null;
    +808                            this.file = file;
    +809                    }
    +810    
    +811                    private ParserChainXmlReader(Reader reader) {
    +812                            this.in = null;
    +813                            this.reader = reader;
    +814                            this.file = null;
    +815                    }
    +816    
    +817                    @Override
    +818                    public ParserChainXmlReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +819                            return super.register(marshaller);
    +820                    }
    +821    
    +822                    @Override
    +823                    public ParserChainXmlReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +824                            return super.register(marshaller);
    +825                    }
    +826    
    +827                    @Override
    +828                    public ParserChainXmlReader warnings(List<List<String>> warnings) {
    +829                            return super.warnings(warnings);
    +830                    }
    +831    
    +832                    @Override
    +833                    XCalDocument _constructDocument() throws IOException, SAXException {
    +834                            if (in != null) {
    +835                                    return new XCalDocument(in);
    +836                            }
    +837                            if (file != null) {
    +838                                    return new XCalDocument(file);
    +839                            }
    +840                            return new XCalDocument(reader);
    +841                    }
    +842            }
    +843    
    +844            /**
    +845             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +846             * @see Biweekly#parseXml(Document)
    +847             */
    +848            public static class ParserChainXmlDocument extends ParserChainXml<ParserChainXmlDocument> {
    +849                    private final Document document;
    +850    
    +851                    private ParserChainXmlDocument(Document document) {
    +852                            this.document = document;
    +853                    }
    +854    
    +855                    @Override
    +856                    public ParserChainXmlDocument register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +857                            return super.register(marshaller);
    +858                    }
    +859    
    +860                    @Override
    +861                    public ParserChainXmlDocument register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +862                            return super.register(marshaller);
    +863                    }
    +864    
    +865                    @Override
    +866                    public ParserChainXmlDocument warnings(List<List<String>> warnings) {
    +867                            return super.warnings(warnings);
    +868                    }
    +869    
    +870                    @Override
    +871                    XCalDocument _constructDocument() {
    +872                            return new XCalDocument(document);
    +873                    }
    +874    
    +875                    @Override
    +876                    public ICalendar first() {
    +877                            try {
    +878                                    return super.first();
    +879                            } catch (IOException e) {
    +880                                    //should never been thrown because we're reading from a DOM
    +881                                    throw new RuntimeException(e);
    +882                            } catch (SAXException e) {
    +883                                    //should never been thrown because we're reading from a DOM
    +884                                    throw new RuntimeException(e);
    +885                            }
    +886                    }
    +887    
    +888                    @Override
    +889                    public List<ICalendar> all() {
    +890                            try {
    +891                                    return super.all();
    +892                            } catch (IOException e) {
    +893                                    //should never been thrown because we're reading from a DOM
    +894                                    throw new RuntimeException(e);
    +895                            } catch (SAXException e) {
    +896                                    //should never been thrown because we're reading from a DOM
    +897                                    throw new RuntimeException(e);
    +898                            }
    +899                    }
    +900            }
    +901    
    +902            ///////////////////////////////////////////////////////
    +903            // JSON
    +904            ///////////////////////////////////////////////////////
    +905    
    +906            static abstract class ParserChainJson<T> extends ParserChain<T> {
    +907                    final boolean closeWhenDone;
    +908    
    +909                    private ParserChainJson(boolean closeWhenDone) {
    +910                            this.closeWhenDone = closeWhenDone;
    +911                    }
    +912    
    +913                    /**
    +914                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +915                     * syntax may be valid, but it is not in the correct jCal format).
    +916                     * @throws JsonParseException if the JSON syntax is incorrect
    +917                     */
    +918                    @Override
    +919                    public ICalendar first() throws IOException {
    +920                            JCalReader parser = constructReader();
    +921    
    +922                            try {
    +923                                    ICalendar ical = parser.readNext();
    +924                                    if (warnings != null) {
    +925                                            warnings.add(parser.getWarnings());
    +926                                    }
    +927                                    return ical;
    +928                            } finally {
    +929                                    if (closeWhenDone) {
    +930                                            IOUtils.closeQuietly(parser);
    +931                                    }
    +932                            }
    +933                    }
    +934    
    +935                    /**
    +936                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +937                     * syntax may be valid, but it is not in the correct jCal format).
    +938                     * @throws JsonParseException if the JSON syntax is incorrect
    +939                     */
    +940                    @Override
    +941                    public List<ICalendar> all() throws IOException {
    +942                            JCalReader parser = constructReader();
    +943    
    +944                            try {
    +945                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +946                                    ICalendar ical;
    +947                                    while ((ical = parser.readNext()) != null) {
    +948                                            if (warnings != null) {
    +949                                                    warnings.add(parser.getWarnings());
    +950                                            }
    +951                                            icals.add(ical);
    +952                                    }
    +953                                    return icals;
    +954                            } finally {
    +955                                    if (closeWhenDone) {
    +956                                            IOUtils.closeQuietly(parser);
    +957                                    }
    +958                            }
    +959                    }
    +960    
    +961                    private JCalReader constructReader() throws IOException {
    +962                            JCalReader parser = _constructReader();
    +963                            parser.setRegistrar(registrar);
    +964                            return parser;
    +965                    }
    +966    
    +967                    abstract JCalReader _constructReader() throws IOException;
    +968            }
    +969    
    +970            /**
    +971             * Chainer class for parsing JSON-encoded iCalendar data streams (jCal).
    +972             * @see Biweekly#parseJson(InputStream)
    +973             * @see Biweekly#parseJson(File)
    +974             * @see Biweekly#parseJson(Reader)
    +975             */
    +976            public static class ParserChainJsonReader extends ParserChainJson<ParserChainJsonReader> {
    +977                    private final InputStream in;
    +978                    private final File file;
    +979                    private final Reader reader;
    +980    
    +981                    private ParserChainJsonReader(InputStream in) {
    +982                            super(false);
    +983                            this.in = in;
    +984                            this.reader = null;
    +985                            this.file = null;
    +986                    }
    +987    
    +988                    private ParserChainJsonReader(File file) {
    +989                            super(true);
    +990                            this.in = null;
    +991                            this.reader = null;
    +992                            this.file = file;
    +993                    }
    +994    
    +995                    private ParserChainJsonReader(Reader reader) {
    +996                            super(false);
    +997                            this.in = null;
    +998                            this.reader = reader;
    +999                            this.file = null;
    +1000                    }
    +1001    
    +1002                    @Override
    +1003                    public ParserChainJsonReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1004                            return super.register(marshaller);
    +1005                    }
    +1006    
    +1007                    @Override
    +1008                    public ParserChainJsonReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1009                            return super.register(marshaller);
    +1010                    }
    +1011    
    +1012                    @Override
    +1013                    public ParserChainJsonReader warnings(List<List<String>> warnings) {
    +1014                            return super.warnings(warnings);
    +1015                    }
    +1016    
    +1017                    @Override
    +1018                    JCalReader _constructReader() throws IOException {
    +1019                            if (in != null) {
    +1020                                    return new JCalReader(in);
    +1021                            }
    +1022                            if (file != null) {
    +1023                                    return new JCalReader(file);
    +1024                            }
    +1025                            return new JCalReader(reader);
    +1026                    }
    +1027            }
    +1028    
    +1029            /**
    +1030             * Chainer class for parsing JSON-encoded iCalendar strings (jCal).
    +1031             * @see Biweekly#parseJson(String)
    +1032             */
    +1033            public static class ParserChainJsonString extends ParserChainJson<ParserChainJsonString> {
    +1034                    private final String text;
    +1035    
    +1036                    private ParserChainJsonString(String text) {
    +1037                            super(false);
    +1038                            this.text = text;
    +1039                    }
    +1040    
    +1041                    @Override
    +1042                    public ParserChainJsonString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1043                            return super.register(marshaller);
    +1044                    }
    +1045    
    +1046                    @Override
    +1047                    public ParserChainJsonString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1048                            return super.register(marshaller);
    +1049                    }
    +1050    
    +1051                    @Override
    +1052                    public ParserChainJsonString warnings(List<List<String>> warnings) {
    +1053                            return super.warnings(warnings);
    +1054                    }
    +1055    
    +1056                    @Override
    +1057                    JCalReader _constructReader() {
    +1058                            return new JCalReader(text);
    +1059                    }
    +1060    
    +1061                    @Override
    +1062                    public ICalendar first() {
    +1063                            try {
    +1064                                    return super.first();
    +1065                            } catch (IOException e) {
    +1066                                    //should never been thrown because we're reading from a string
    +1067                                    throw new RuntimeException(e);
    +1068                            }
    +1069                    }
    +1070    
    +1071                    @Override
    +1072                    public List<ICalendar> all() {
    +1073                            try {
    +1074                                    return super.all();
    +1075                            } catch (IOException e) {
    +1076                                    //should never been thrown because we're reading from a string
    +1077                                    throw new RuntimeException(e);
    +1078                            }
    +1079                    }
    +1080            }
    +1081    
    +1082            static abstract class WriterChain<T> {
    +1083                    final Collection<ICalendar> icals;
    +1084                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +1085    
    +1086                    @SuppressWarnings("unchecked")
    +1087                    final T this_ = (T) this;
    +1088    
    +1089                    WriterChain(Collection<ICalendar> icals) {
    +1090                            this.icals = icals;
    +1091                    }
    +1092    
    +1093                    /**
    +1094                     * Registers a property marshaller.
    +1095                     * @param marshaller the marshaller
    +1096                     * @return this
    +1097                     */
    +1098                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1099                            registrar.register(marshaller);
    +1100                            return this_;
    +1101                    }
    +1102    
    +1103                    /**
    +1104                     * Registers a component marshaller.
    +1105                     * @param marshaller the marshaller
    +1106                     * @return this
    +1107                     */
    +1108                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1109                            registrar.register(marshaller);
    +1110                            return this_;
    +1111                    }
    +1112            }
    +1113    
    +1114            ///////////////////////////////////////////////////////
    +1115            // plain-text
    +1116            ///////////////////////////////////////////////////////
    +1117    
    +1118            /**
    +1119             * Chainer class for writing to plain text iCalendar data streams.
    +1120             * @see Biweekly#write(Collection)
    +1121             * @see Biweekly#write(ICalendar...)
    +1122             */
    +1123            public static class WriterChainText extends WriterChain<WriterChainText> {
    +1124                    boolean caretEncoding = false;
    +1125    
    +1126                    private WriterChainText(Collection<ICalendar> icals) {
    +1127                            super(icals);
    +1128                    }
    +1129    
    +1130                    /**
    +1131                     * <p>
    +1132                     * Sets whether the writer will apply circumflex accent encoding on
    +1133                     * parameter values (disabled by default). This escaping mechanism
    +1134                     * allows for newlines and double quotes to be included in parameter
    +1135                     * values.
    +1136                     * </p>
    +1137                     * 
    +1138                     * <p>
    +1139                     * When disabled, the writer will replace newlines with spaces and
    +1140                     * double quotes with single quotes.
    +1141                     * </p>
    +1142                     * @param enable true to use circumflex accent encoding, false not to
    +1143                     * @return this
    +1144                     * @see ICalRawWriter#setCaretEncodingEnabled(boolean)
    +1145                     */
    +1146                    public WriterChainText caretEncoding(boolean enable) {
    +1147                            this.caretEncoding = enable;
    +1148                            return this_;
    +1149                    }
    +1150    
    +1151                    /**
    +1152                     * Writes the iCalendar objects to a string.
    +1153                     * @return the iCalendar string
    +1154                     * @throws IllegalArgumentException if the marshaller class for a
    +1155                     * component or property object cannot be found (only happens when an
    +1156                     * experimental property/component marshaller is not registered with the
    +1157                     * {@code register} method.)
    +1158                     */
    +1159                    public String go() {
    +1160                            StringWriter sw = new StringWriter();
    +1161                            try {
    +1162                                    go(sw);
    +1163                            } catch (IOException e) {
    +1164                                    //writing to a string
    +1165                            }
    +1166                            return sw.toString();
    +1167                    }
    +1168    
    +1169                    /**
    +1170                     * Writes the iCalendar objects to a data stream.
    +1171                     * @param out the output stream to write to
    +1172                     * @throws IllegalArgumentException if the marshaller class for a
    +1173                     * component or property object cannot be found (only happens when an
    +1174                     * experimental property/component marshaller is not registered with the
    +1175                     * {@code register} method.)
    +1176                     * @throws IOException if there's a problem writing to the output stream
    +1177                     */
    +1178                    public void go(OutputStream out) throws IOException {
    +1179                            go(new ICalWriter(out));
    +1180                    }
    +1181    
    +1182                    /**
    +1183                     * Writes the iCalendar objects to a file.
    +1184                     * @param file the file to write to
    +1185                     * @throws IllegalArgumentException if the marshaller class for a
    +1186                     * component or property object cannot be found (only happens when an
    +1187                     * experimental property/component marshaller is not registered with the
    +1188                     * {@code register} method.)
    +1189                     * @throws IOException if there's a problem writing to the file
    +1190                     */
    +1191                    public void go(File file) throws IOException {
    +1192                            go(file, false);
    +1193                    }
    +1194    
    +1195                    /**
    +1196                     * Writes the iCalendar objects to a file.
    +1197                     * @param file the file to write to
    +1198                     * @param append true to append to the end of the file, false to
    +1199                     * overwrite it
    +1200                     * @throws IllegalArgumentException if the marshaller class for a
    +1201                     * component or property object cannot be found (only happens when an
    +1202                     * experimental property/component marshaller is not registered with the
    +1203                     * {@code register} method.)
    +1204                     * @throws IOException if there's a problem writing to the file
    +1205                     */
    +1206                    public void go(File file, boolean append) throws IOException {
    +1207                            ICalWriter icalWriter = new ICalWriter(file, append);
    +1208                            try {
    +1209                                    go(icalWriter);
    +1210                            } finally {
    +1211                                    IOUtils.closeQuietly(icalWriter);
    +1212                            }
    +1213                    }
    +1214    
    +1215                    /**
    +1216                     * Writes the iCalendar objects to a data stream.
    +1217                     * @param writer the writer to write to
    +1218                     * @throws IllegalArgumentException if the marshaller class for a
    +1219                     * component or property object cannot be found (only happens when an
    +1220                     * experimental property/component marshaller is not registered with the
    +1221                     * {@code register} method.)
    +1222                     * @throws IOException if there's a problem writing to the writer
    +1223                     */
    +1224                    public void go(Writer writer) throws IOException {
    +1225                            go(new ICalWriter(writer));
    +1226                    }
    +1227    
    +1228                    private void go(ICalWriter icalWriter) throws IOException {
    +1229                            icalWriter.setRegistrar(registrar);
    +1230                            icalWriter.setCaretEncodingEnabled(caretEncoding);
    +1231    
    +1232                            for (ICalendar ical : icals) {
    +1233                                    icalWriter.write(ical);
    +1234                            }
    +1235                    }
    +1236            }
    +1237    
    +1238            ///////////////////////////////////////////////////////
    +1239            // XML
    +1240            ///////////////////////////////////////////////////////
    +1241    
    +1242            /**
    +1243             * Chainer class for writing xCal documents (XML-encoded iCalendar objects).
    +1244             * @see Biweekly#writeXml(Collection)
    +1245             * @see Biweekly#writeXml(ICalendar...)
    +1246             */
    +1247            public static class WriterChainXml extends WriterChain<WriterChainXml> {
    +1248                    int indent = -1;
    +1249                    final Map<String, ICalDataType> parameterDataTypes = new HashMap<String, ICalDataType>(0);
    +1250    
    +1251                    WriterChainXml(Collection<ICalendar> icals) {
    +1252                            super(icals);
    +1253                    }
    +1254    
    +1255                    @Override
    +1256                    public WriterChainXml register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1257                            return super.register(marshaller);
    +1258                    }
    +1259    
    +1260                    @Override
    +1261                    public WriterChainXml register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1262                            return super.register(marshaller);
    +1263                    }
    +1264    
    +1265                    /**
    +1266                     * Registers the data type of an experimental parameter. Experimental
    +1267                     * parameters use the "unknown" xCal data type by default.
    +1268                     * @param parameterName the parameter name (e.g. "x-foo")
    +1269                     * @param dataType the data type
    +1270                     * @return this
    +1271                     */
    +1272                    public WriterChainXml register(String parameterName, ICalDataType dataType) {
    +1273                            parameterDataTypes.put(parameterName, dataType);
    +1274                            return this_;
    +1275                    }
    +1276    
    +1277                    /**
    +1278                     * Sets the number of indent spaces to use for pretty-printing. If not
    +1279                     * set, then the XML will not be pretty-printed.
    +1280                     * @param indent the number of spaces
    +1281                     * @return this
    +1282                     */
    +1283                    public WriterChainXml indent(int indent) {
    +1284                            this.indent = indent;
    +1285                            return this_;
    +1286                    }
    +1287    
    +1288                    /**
    +1289                     * Writes the xCal document to a string.
    +1290                     * @return the XML string
    +1291                     * @throws IllegalArgumentException if the marshaller class for a
    +1292                     * component or property object cannot be found (only happens when an
    +1293                     * experimental property/component marshaller is not registered with the
    +1294                     * {@code register} method.)
    +1295                     */
    +1296                    public String go() {
    +1297                            StringWriter sw = new StringWriter();
    +1298                            try {
    +1299                                    go(sw);
    +1300                            } catch (TransformerException e) {
    +1301                                    //writing to a string
    +1302                            }
    +1303                            return sw.toString();
    +1304                    }
    +1305    
    +1306                    /**
    +1307                     * Writes the xCal document to an output stream.
    +1308                     * @param out the output stream to write to
    +1309                     * @throws IllegalArgumentException if the marshaller class for a
    +1310                     * component or property object cannot be found (only happens when an
    +1311                     * experimental property/component marshaller is not registered with the
    +1312                     * {@code register} method.)
    +1313                     * @throws TransformerException if there's a problem writing the XML
    +1314                     */
    +1315                    public void go(OutputStream out) throws TransformerException {
    +1316                            XCalDocument document = constructDocument();
    +1317                            document.write(out, indent);
    +1318                    }
    +1319    
    +1320                    /**
    +1321                     * Writes the xCal document to a file.
    +1322                     * @param file the file to write to
    +1323                     * @throws IllegalArgumentException if the marshaller class for a
    +1324                     * component or property object cannot be found (only happens when an
    +1325                     * experimental property/component marshaller is not registered with the
    +1326                     * {@code register} method.)
    +1327                     * @throws TransformerException if there's a problem writing the XML
    +1328                     * @throws IOException if there's a problem writing to the file
    +1329                     */
    +1330                    public void go(File file) throws TransformerException, IOException {
    +1331                            XCalDocument document = constructDocument();
    +1332                            document.write(file, indent);
    +1333                    }
    +1334    
    +1335                    /**
    +1336                     * Writes the xCal document to a writer.
    +1337                     * @param writer the writer to write to
    +1338                     * @throws IllegalArgumentException if the marshaller class for a
    +1339                     * component or property object cannot be found (only happens when an
    +1340                     * experimental property/component marshaller is not registered with the
    +1341                     * {@code register} method.)
    +1342                     * @throws TransformerException if there's a problem writing the XML
    +1343                     */
    +1344                    public void go(Writer writer) throws TransformerException {
    +1345                            XCalDocument document = constructDocument();
    +1346                            document.write(writer, indent);
    +1347                    }
    +1348    
    +1349                    /**
    +1350                     * Writes the xCal document to an XML DOM.
    +1351                     * @return the XML DOM
    +1352                     */
    +1353                    public Document dom() {
    +1354                            XCalDocument document = constructDocument();
    +1355                            return document.getDocument();
    +1356                    }
    +1357    
    +1358                    private XCalDocument constructDocument() {
    +1359                            XCalDocument document = new XCalDocument();
    +1360                            document.setRegistrar(registrar);
    +1361                            for (Map.Entry<String, ICalDataType> entry : parameterDataTypes.entrySet()) {
    +1362                                    document.registerParameterDataType(entry.getKey(), entry.getValue());
    +1363                            }
    +1364    
    +1365                            for (ICalendar ical : icals) {
    +1366                                    document.add(ical);
    +1367                            }
    +1368    
    +1369                            return document;
    +1370                    }
    +1371            }
    +1372    
    +1373            ///////////////////////////////////////////////////////
    +1374            // JSON
    +1375            ///////////////////////////////////////////////////////
    +1376    
    +1377            /**
    +1378             * Chainer class for writing to JSON-encoded iCalendar data streams (jCal).
    +1379             * @see Biweekly#writeJson(Collection)
    +1380             * @see Biweekly#writeJson(ICalendar...)
    +1381             */
    +1382            public static class WriterChainJson extends WriterChain<WriterChainJson> {
    +1383                    private boolean indent = false;
    +1384    
    +1385                    private WriterChainJson(Collection<ICalendar> icals) {
    +1386                            super(icals);
    +1387                    }
    +1388    
    +1389                    /**
    +1390                     * Sets whether or not to pretty-print the JSON.
    +1391                     * @param indent true to pretty-print it, false not to (defaults to
    +1392                     * false)
    +1393                     * @return this
    +1394                     */
    +1395                    public WriterChainJson indent(boolean indent) {
    +1396                            this.indent = indent;
    +1397                            return this_;
    +1398                    }
    +1399    
    +1400                    /**
    +1401                     * Writes the iCalendar objects to a string.
    +1402                     * @return the iCalendar string
    +1403                     * @throws IllegalArgumentException if the marshaller class for a
    +1404                     * component or property object cannot be found (only happens when an
    +1405                     * experimental property/component marshaller is not registered with the
    +1406                     * {@code register} method.)
    +1407                     */
    +1408                    public String go() {
    +1409                            StringWriter sw = new StringWriter();
    +1410                            try {
    +1411                                    go(sw);
    +1412                            } catch (IOException e) {
    +1413                                    //writing to a string
    +1414                            }
    +1415                            return sw.toString();
    +1416                    }
    +1417    
    +1418                    /**
    +1419                     * Writes the iCalendar objects to a data stream.
    +1420                     * @param out the output stream to write to
    +1421                     * @throws IllegalArgumentException if the marshaller class for a
    +1422                     * component or property object cannot be found (only happens when an
    +1423                     * experimental property/component marshaller is not registered with the
    +1424                     * {@code register} method.)
    +1425                     * @throws IOException if there's a problem writing to the output stream
    +1426                     */
    +1427                    public void go(OutputStream out) throws IOException {
    +1428                            go(new JCalWriter(out, icals.size() > 1));
    +1429                    }
    +1430    
    +1431                    /**
    +1432                     * Writes the iCalendar objects to a file.
    +1433                     * @param file the file to write to
    +1434                     * @throws IllegalArgumentException if the marshaller class for a
    +1435                     * component or property object cannot be found (only happens when an
    +1436                     * experimental property/component marshaller is not registered with the
    +1437                     * {@code register} method.)
    +1438                     * @throws IOException if there's a problem writing to the file
    +1439                     */
    +1440                    public void go(File file) throws IOException {
    +1441                            JCalWriter jcalWriter = new JCalWriter(file, icals.size() > 1);
    +1442                            try {
    +1443                                    go(jcalWriter);
    +1444                            } finally {
    +1445                                    IOUtils.closeQuietly(jcalWriter);
    +1446                            }
    +1447                    }
    +1448    
    +1449                    /**
    +1450                     * Writes the iCalendar objects to a data stream.
    +1451                     * @param writer the writer to write to
    +1452                     * @throws IllegalArgumentException if the marshaller class for a
    +1453                     * component or property object cannot be found (only happens when an
    +1454                     * experimental property/component marshaller is not registered with the
    +1455                     * {@code register} method.)
    +1456                     * @throws IOException if there's a problem writing to the writer
    +1457                     */
    +1458                    public void go(Writer writer) throws IOException {
    +1459                            go(new JCalWriter(writer, icals.size() > 1));
    +1460                    }
    +1461    
    +1462                    private void go(JCalWriter jcalWriter) throws IOException {
    +1463                            jcalWriter.setRegistrar(registrar);
    +1464                            jcalWriter.setIndent(indent);
    +1465    
    +1466                            for (ICalendar ical : icals) {
    +1467                                    jcalWriter.write(ical);
    +1468                            }
    +1469                            jcalWriter.closeJsonStream();
    +1470                    }
    +1471            }
    +1472    
    +1473            private Biweekly() {
    +1474                    //hide
    +1475            }
    +1476    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainXmlString.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainXmlString.html new file mode 100644 index 000000000..6e42f0110 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.ParserChainXmlString.html @@ -0,0 +1,1542 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.io.File;
    +004    import java.io.IOException;
    +005    import java.io.InputStream;
    +006    import java.io.OutputStream;
    +007    import java.io.Reader;
    +008    import java.io.StringWriter;
    +009    import java.io.Writer;
    +010    import java.util.ArrayList;
    +011    import java.util.Arrays;
    +012    import java.util.Collection;
    +013    import java.util.HashMap;
    +014    import java.util.List;
    +015    import java.util.Map;
    +016    import java.util.Properties;
    +017    
    +018    import javax.xml.transform.TransformerException;
    +019    
    +020    import org.w3c.dom.Document;
    +021    import org.xml.sax.SAXException;
    +022    
    +023    import biweekly.component.ICalComponent;
    +024    import biweekly.component.marshaller.ICalComponentMarshaller;
    +025    import biweekly.io.ICalMarshallerRegistrar;
    +026    import biweekly.io.json.JCalParseException;
    +027    import biweekly.io.json.JCalReader;
    +028    import biweekly.io.json.JCalWriter;
    +029    import biweekly.io.text.ICalRawReader;
    +030    import biweekly.io.text.ICalRawWriter;
    +031    import biweekly.io.text.ICalReader;
    +032    import biweekly.io.text.ICalWriter;
    +033    import biweekly.io.xml.XCalDocument;
    +034    import biweekly.property.ICalProperty;
    +035    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +036    import biweekly.util.IOUtils;
    +037    
    +038    import com.fasterxml.jackson.core.JsonParseException;
    +039    
    +040    /*
    +041     Copyright (c) 2013, Michael Angstadt
    +042     All rights reserved.
    +043    
    +044     Redistribution and use in source and binary forms, with or without
    +045     modification, are permitted provided that the following conditions are met: 
    +046    
    +047     1. Redistributions of source code must retain the above copyright notice, this
    +048     list of conditions and the following disclaimer. 
    +049     2. Redistributions in binary form must reproduce the above copyright notice,
    +050     this list of conditions and the following disclaimer in the documentation
    +051     and/or other materials provided with the distribution. 
    +052    
    +053     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +054     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +055     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +056     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +057     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +058     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +059     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +060     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +061     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +062     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +063     */
    +064    
    +065    /**
    +066     * <p>
    +067     * Contains static chaining factory methods for reading/writing iCalendar
    +068     * objects.
    +069     * </p>
    +070     * 
    +071     * <p>
    +072     * <b>Writing an iCalendar object</b>
    +073     * 
    +074     * <pre class="brush:java">
    +075     * ICalendar ical = new ICalendar();
    +076     * 
    +077     * //string
    +078     * String icalString = Biweekly.write(ical).go();
    +079     * 
    +080     * //file
    +081     * File file = new File("meeting.ics");
    +082     * Biweekly.write(ical).go(file);
    +083     * 
    +084     * //output stream
    +085     * OutputStream out = ...
    +086     * Biweekly.write(ical).go(out);
    +087     * out.close();
    +088     * 
    +089     * //writer (should be configured to use UTF-8 encoding)
    +090     * Writer writer = ...
    +091     * Biweekly.write(ical).go(writer);
    +092     * writer.close();
    +093     * </pre>
    +094     * 
    +095     * </p>
    +096     * 
    +097     * <p>
    +098     * <b>Writing multiple iCalendar objects</b>
    +099     * 
    +100     * <pre class="brush:java">
    +101     * ICalendar ical1 = new ICalendar();
    +102     * ICalendar ical2 = new ICalendar();
    +103     * 
    +104     * String icalString = Biweekly.write(ical1, ical2).go();
    +105     * </pre>
    +106     * 
    +107     * </p>
    +108     * 
    +109     * <p>
    +110     * <b>Writing an XML-encoded iCalendar object (xCal)</b><br>
    +111     * 
    +112     * <pre class="brush:java">
    +113     * //Call writeXml() instead of write()
    +114     * ICalendar ical = new ICalendar();
    +115     * String xml = Biweekly.writeXml(ical).indent(2).go();
    +116     * </pre>
    +117     * 
    +118     * </p>
    +119     * 
    +120     * <p>
    +121     * <b>Writing a JSON-encoded iCalendar object (jCal)</b><br>
    +122     * 
    +123     * <pre class="brush:java">
    +124     * //Call writeJson() instead of write()
    +125     * ICalendar ical = new ICalendar();
    +126     * String json = Biweekly.writeJson(ical).go();
    +127     * </pre>
    +128     * 
    +129     * </p>
    +130     * 
    +131     * <p>
    +132     * <b>Reading an iCalendar object</b>
    +133     * 
    +134     * <pre class="brush:java">
    +135     * ICalendar ical;
    +136     * 
    +137     * //string
    +138     * String icalStr = ...
    +139     * ical = Biweekly.parse(icalStr).first();
    +140     * 
    +141     * //file
    +142     * File file = new File("meeting.ics");
    +143     * ical = Biweekly.parse(file).first();
    +144     * 
    +145     * //input stream
    +146     * InputStream in = ...
    +147     * ical = Biweekly.parse(in).first();
    +148     * in.close();  
    +149     * 
    +150     * //reader (should be configured to read UTF-8)
    +151     * Reader reader = ...
    +152     * ical = Biweekly.parse(reader).first();
    +153     * reader.close();
    +154     * </pre>
    +155     * 
    +156     * </p>
    +157     * 
    +158     * <p>
    +159     * <b>Reading multiple iCalendar objects</b>
    +160     * 
    +161     * <pre class="brush:java">
    +162     * String icalStr = ...
    +163     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).all();
    +164     * </pre>
    +165     * 
    +166     * </p>
    +167     * 
    +168     * <p>
    +169     * <b>Reading an XML-encoded iCalendar object (xCal)</b><br>
    +170     * 
    +171     * <pre class="brush:java">
    +172     * //Call parseXml() instead of parse()
    +173     * String xml = ...
    +174     * ICalendar ical = Biweekly.parseXml(xml).first();
    +175     * </pre>
    +176     * 
    +177     * </p>
    +178     * 
    +179     * <p>
    +180     * <b>Reading a JSON-encoded iCalendar object (Cal)</b><br>
    +181     * 
    +182     * <pre class="brush:java">
    +183     * //Call parseJson() instead of parse()
    +184     * String json = ...
    +185     * ICalendar ical = Biweekly.parseJson(json).first();
    +186     * </pre>
    +187     * 
    +188     * </p>
    +189     * 
    +190     * <p>
    +191     * <b>Retrieving parser warnings</b>
    +192     * 
    +193     * <pre class="brush:java">
    +194     * String icalStr = ...
    +195     * List&lt;List&lt;String&gt;&gt; warnings = new ArrayList&lt;List&lt;String&gt;&gt;();
    +196     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).warnings(warnings).all();
    +197     * int i = 0;
    +198     * for (List&lt;String&gt; icalWarnings : warnings){
    +199     *   System.out.println("iCal #" + (i++) + " warnings:");
    +200     *   for (String warning : icalWarnings){
    +201     *     System.out.println(warning);
    +202     *   }
    +203     * }
    +204     * </pre>
    +205     * 
    +206     * </p>
    +207     * 
    +208     * <p>
    +209     * The methods in this class make use of the following classes. These classes
    +210     * can be used if greater control over the read/write operation is required:
    +211     * </p>
    +212     * 
    +213     * <style> table.t td, table.t th {border:1px solid #000;} </style>
    +214     * <table class="t" cellpadding="5" style="border-collapse:collapse;">
    +215     * <tr>
    +216     * <th></th>
    +217     * <th>Classes</th>
    +218     * <th>Supports<br>
    +219     * streaming?</th>
    +220     * </tr>
    +221     * <tr>
    +222     * <th>Text</th>
    +223     * <td>{@link ICalReader} / {@link ICalWriter}</td>
    +224     * <td>yes</td>
    +225     * </tr>
    +226     * <tr>
    +227     * <th>XML</th>
    +228     * <td>{@link XCalDocument}</td>
    +229     * <td>no</td>
    +230     * </tr>
    +231     * <tr>
    +232     * <th>JSON</th>
    +233     * <td>{@link JCalReader} / {@link JCalWriter}</td>
    +234     * <td>yes</td>
    +235     * </tr>
    +236     * </table>
    +237     * @author Michael Angstadt
    +238     */
    +239    public class Biweekly {
    +240            /**
    +241             * The version of the library.
    +242             */
    +243            public static final String VERSION;
    +244    
    +245            /**
    +246             * The project webpage.
    +247             */
    +248            public static final String URL;
    +249    
    +250            static {
    +251                    InputStream in = null;
    +252                    try {
    +253                            in = Biweekly.class.getResourceAsStream("/biweekly.properties");
    +254                            Properties props = new Properties();
    +255                            props.load(in);
    +256    
    +257                            VERSION = props.getProperty("version");
    +258                            URL = props.getProperty("url");
    +259                    } catch (IOException e) {
    +260                            throw new RuntimeException(e);
    +261                    } finally {
    +262                            IOUtils.closeQuietly(in);
    +263                    }
    +264            }
    +265    
    +266            /**
    +267             * Parses an iCalendar object string.
    +268             * @param ical the iCalendar data
    +269             * @return chainer object for completing the parse operation
    +270             */
    +271            public static ParserChainTextString parse(String ical) {
    +272                    return new ParserChainTextString(ical);
    +273            }
    +274    
    +275            /**
    +276             * Parses an iCalendar file.
    +277             * @param file the iCalendar file
    +278             * @return chainer object for completing the parse operation
    +279             */
    +280            public static ParserChainTextReader parse(File file) {
    +281                    return new ParserChainTextReader(file);
    +282            }
    +283    
    +284            /**
    +285             * Parses an iCalendar data stream.
    +286             * @param in the input stream
    +287             * @return chainer object for completing the parse operation
    +288             */
    +289            public static ParserChainTextReader parse(InputStream in) {
    +290                    return new ParserChainTextReader(in);
    +291            }
    +292    
    +293            /**
    +294             * Parses an iCalendar data stream.
    +295             * @param reader the reader
    +296             * @return chainer object for completing the parse operation
    +297             */
    +298            public static ParserChainTextReader parse(Reader reader) {
    +299                    return new ParserChainTextReader(reader);
    +300            }
    +301    
    +302            /**
    +303             * Writes multiple iCalendar objects to a data stream.
    +304             * @param icals the iCalendar objects to write
    +305             * @return chainer object for completing the write operation
    +306             */
    +307            public static WriterChainText write(ICalendar... icals) {
    +308                    return write(Arrays.asList(icals));
    +309            }
    +310    
    +311            /**
    +312             * Writes multiple iCalendar objects to a data stream.
    +313             * @param icals the iCalendar objects to write
    +314             * @return chainer object for completing the write operation
    +315             */
    +316            public static WriterChainText write(Collection<ICalendar> icals) {
    +317                    return new WriterChainText(icals);
    +318            }
    +319    
    +320            /**
    +321             * Parses an xCal document (XML-encoded iCalendar objects) from a string.
    +322             * @param xml the XML string
    +323             * @return chainer object for completing the parse operation
    +324             */
    +325            public static ParserChainXmlString parseXml(String xml) {
    +326                    return new ParserChainXmlString(xml);
    +327            }
    +328    
    +329            /**
    +330             * Parses an xCal document (XML-encoded iCalendar objects) from a file.
    +331             * @param file the XML file
    +332             * @return chainer object for completing the parse operation
    +333             */
    +334            public static ParserChainXmlReader parseXml(File file) {
    +335                    return new ParserChainXmlReader(file);
    +336            }
    +337    
    +338            /**
    +339             * Parses an xCal document (XML-encoded iCalendar objects) from an input
    +340             * stream.
    +341             * @param in the input stream
    +342             * @return chainer object for completing the parse operation
    +343             */
    +344            public static ParserChainXmlReader parseXml(InputStream in) {
    +345                    return new ParserChainXmlReader(in);
    +346            }
    +347    
    +348            /**
    +349             * <p>
    +350             * Parses an xCal document (XML-encoded iCalendar objects) from a reader.
    +351             * </p>
    +352             * <p>
    +353             * Note that use of this method is discouraged. It ignores the character
    +354             * encoding that is defined within the XML document itself, and should only
    +355             * be used if the encoding is undefined or if the encoding needs to be
    +356             * ignored for whatever reason. The {@link #parseXml(InputStream)} method
    +357             * should be used instead, since it takes the XML document's character
    +358             * encoding into account when parsing.
    +359             * </p>
    +360             * @param reader the reader
    +361             * @return chainer object for completing the parse operation
    +362             */
    +363            public static ParserChainXmlReader parseXml(Reader reader) {
    +364                    return new ParserChainXmlReader(reader);
    +365            }
    +366    
    +367            /**
    +368             * Parses an xCal document (XML-encoded iCalendar objects).
    +369             * @param document the XML document
    +370             * @return chainer object for completing the parse operation
    +371             */
    +372            public static ParserChainXmlDocument parseXml(Document document) {
    +373                    return new ParserChainXmlDocument(document);
    +374            }
    +375    
    +376            /**
    +377             * Writes an xCal document (XML-encoded iCalendar objects).
    +378             * @param icals the iCalendar object(s) to write
    +379             * @return chainer object for completing the write operation
    +380             */
    +381            public static WriterChainXml writeXml(ICalendar... icals) {
    +382                    return writeXml(Arrays.asList(icals));
    +383            }
    +384    
    +385            /**
    +386             * Writes an xCal document (XML-encoded iCalendar objects).
    +387             * @param icals the iCalendar objects to write
    +388             * @return chainer object for completing the write operation
    +389             */
    +390            public static WriterChainXml writeXml(Collection<ICalendar> icals) {
    +391                    return new WriterChainXml(icals);
    +392            }
    +393    
    +394            /**
    +395             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +396             * @param json the JSON data
    +397             * @return chainer object for completing the parse operation
    +398             */
    +399            public static ParserChainJsonString parseJson(String json) {
    +400                    return new ParserChainJsonString(json);
    +401            }
    +402    
    +403            /**
    +404             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +405             * @param file the JSON file
    +406             * @return chainer object for completing the parse operation
    +407             */
    +408            public static ParserChainJsonReader parseJson(File file) {
    +409                    return new ParserChainJsonReader(file);
    +410            }
    +411    
    +412            /**
    +413             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +414             * @param in the input stream
    +415             * @return chainer object for completing the parse operation
    +416             */
    +417            public static ParserChainJsonReader parseJson(InputStream in) {
    +418                    return new ParserChainJsonReader(in);
    +419            }
    +420    
    +421            /**
    +422             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +423             * @param reader the reader
    +424             * @return chainer object for completing the parse operation
    +425             */
    +426            public static ParserChainJsonReader parseJson(Reader reader) {
    +427                    return new ParserChainJsonReader(reader);
    +428            }
    +429    
    +430            /**
    +431             * Writes an xCal document (XML-encoded iCalendar objects).
    +432             * @param icals the iCalendar object(s) to write
    +433             * @return chainer object for completing the write operation
    +434             */
    +435            public static WriterChainJson writeJson(ICalendar... icals) {
    +436                    return writeJson(Arrays.asList(icals));
    +437            }
    +438    
    +439            /**
    +440             * Writes an xCal document (XML-encoded iCalendar objects).
    +441             * @param icals the iCalendar objects to write
    +442             * @return chainer object for completing the write operation
    +443             */
    +444            public static WriterChainJson writeJson(Collection<ICalendar> icals) {
    +445                    return new WriterChainJson(icals);
    +446            }
    +447    
    +448            static abstract class ParserChain<T> {
    +449                    //Note: "package" level is used so various fields/methods don't show up in the Javadocs, but are still visible to child classes
    +450                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +451    
    +452                    @SuppressWarnings("unchecked")
    +453                    final T this_ = (T) this;
    +454    
    +455                    List<List<String>> warnings;
    +456    
    +457                    /**
    +458                     * Registers a property marshaller.
    +459                     * @param marshaller the marshaller
    +460                     * @return this
    +461                     */
    +462                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +463                            registrar.register(marshaller);
    +464                            return this_;
    +465                    }
    +466    
    +467                    /**
    +468                     * Registers a component marshaller.
    +469                     * @param marshaller the marshaller
    +470                     * @return this
    +471                     */
    +472                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +473                            registrar.register(marshaller);
    +474                            return this_;
    +475                    }
    +476    
    +477                    /**
    +478                     * Provides a list for putting the parser warnings into.
    +479                     * @param warnings the list object to populate (it is a
    +480                     * "list of lists"--each parsed {@link ICalendar} object has its own
    +481                     * warnings list)
    +482                     * @return this
    +483                     */
    +484                    public T warnings(List<List<String>> warnings) {
    +485                            this.warnings = warnings;
    +486                            return this_;
    +487                    }
    +488    
    +489                    /**
    +490                     * Reads the first iCalendar object from the data stream.
    +491                     * @return the first iCalendar object or null if there are none
    +492                     * @throws IOException if there a problem reading from the data stream
    +493                     * @throws SAXException if there's a problem parsing the XML
    +494                     */
    +495                    public abstract ICalendar first() throws IOException, SAXException;
    +496    
    +497                    /**
    +498                     * Reads all iCalendar objects from the data stream.
    +499                     * @return the parsed iCalendar objects
    +500                     * @throws IOException if there's a problem reading from the data stream
    +501                     * @throws SAXException if there's a problem parsing the XML
    +502                     */
    +503                    public abstract List<ICalendar> all() throws IOException, SAXException;
    +504            }
    +505    
    +506            ///////////////////////////////////////////////////////
    +507            // plain-text
    +508            ///////////////////////////////////////////////////////
    +509    
    +510            static abstract class ParserChainText<T> extends ParserChain<T> {
    +511                    boolean caretDecoding = true;
    +512                    final boolean closeWhenDone;
    +513    
    +514                    private ParserChainText(boolean closeWhenDone) {
    +515                            this.closeWhenDone = closeWhenDone;
    +516                    }
    +517    
    +518                    /**
    +519                     * Sets whether the reader will decode parameter values that use
    +520                     * circumflex accent encoding (enabled by default). This escaping
    +521                     * mechanism allows newlines and double quotes to be included in
    +522                     * parameter values.
    +523                     * @param enable true to use circumflex accent decoding, false not to
    +524                     * @return this
    +525                     * @see ICalRawReader#setCaretDecodingEnabled(boolean)
    +526                     */
    +527                    public T caretDecoding(boolean enable) {
    +528                            caretDecoding = enable;
    +529                            return this_;
    +530                    }
    +531    
    +532                    @Override
    +533                    public ICalendar first() throws IOException {
    +534                            ICalReader parser = constructReader();
    +535    
    +536                            try {
    +537                                    ICalendar ical = parser.readNext();
    +538                                    if (warnings != null) {
    +539                                            warnings.add(parser.getWarnings());
    +540                                    }
    +541                                    return ical;
    +542                            } finally {
    +543                                    if (closeWhenDone) {
    +544                                            IOUtils.closeQuietly(parser);
    +545                                    }
    +546                            }
    +547                    }
    +548    
    +549                    @Override
    +550                    public List<ICalendar> all() throws IOException {
    +551                            ICalReader parser = constructReader();
    +552    
    +553                            try {
    +554                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +555                                    ICalendar ical;
    +556                                    while ((ical = parser.readNext()) != null) {
    +557                                            if (warnings != null) {
    +558                                                    warnings.add(parser.getWarnings());
    +559                                            }
    +560                                            icals.add(ical);
    +561                                    }
    +562                                    return icals;
    +563                            } finally {
    +564                                    if (closeWhenDone) {
    +565                                            IOUtils.closeQuietly(parser);
    +566                                    }
    +567                            }
    +568                    }
    +569    
    +570                    private ICalReader constructReader() throws IOException {
    +571                            ICalReader parser = _constructReader();
    +572                            parser.setRegistrar(registrar);
    +573                            parser.setCaretDecodingEnabled(caretDecoding);
    +574                            return parser;
    +575                    }
    +576    
    +577                    abstract ICalReader _constructReader() throws IOException;
    +578            }
    +579    
    +580            /**
    +581             * Chainer class for parsing plain text iCalendar data streams.
    +582             * @see Biweekly#parse(InputStream)
    +583             * @see Biweekly#parse(File)
    +584             * @see Biweekly#parse(Reader)
    +585             */
    +586            public static class ParserChainTextReader extends ParserChainText<ParserChainTextReader> {
    +587                    private final InputStream in;
    +588                    private final File file;
    +589                    private final Reader reader;
    +590    
    +591                    private ParserChainTextReader(InputStream in) {
    +592                            super(false);
    +593                            this.in = in;
    +594                            this.reader = null;
    +595                            this.file = null;
    +596                    }
    +597    
    +598                    private ParserChainTextReader(File file) {
    +599                            super(true);
    +600                            this.in = null;
    +601                            this.reader = null;
    +602                            this.file = file;
    +603                    }
    +604    
    +605                    private ParserChainTextReader(Reader reader) {
    +606                            super(false);
    +607                            this.in = null;
    +608                            this.reader = reader;
    +609                            this.file = null;
    +610                    }
    +611    
    +612                    @Override
    +613                    public ParserChainTextReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +614                            return super.register(marshaller);
    +615                    }
    +616    
    +617                    @Override
    +618                    public ParserChainTextReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +619                            return super.register(marshaller);
    +620                    }
    +621    
    +622                    @Override
    +623                    public ParserChainTextReader warnings(List<List<String>> warnings) {
    +624                            return super.warnings(warnings);
    +625                    }
    +626    
    +627                    @Override
    +628                    public ParserChainTextReader caretDecoding(boolean enable) {
    +629                            return super.caretDecoding(enable);
    +630                    }
    +631    
    +632                    @Override
    +633                    ICalReader _constructReader() throws IOException {
    +634                            if (in != null) {
    +635                                    return new ICalReader(in);
    +636                            }
    +637                            if (file != null) {
    +638                                    return new ICalReader(file);
    +639                            }
    +640                            return new ICalReader(reader);
    +641                    }
    +642            }
    +643    
    +644            /**
    +645             * Chainer class for parsing plain text iCalendar strings.
    +646             * @see Biweekly#parse(String)
    +647             */
    +648            public static class ParserChainTextString extends ParserChainText<ParserChainTextString> {
    +649                    private final String text;
    +650    
    +651                    private ParserChainTextString(String text) {
    +652                            super(false);
    +653                            this.text = text;
    +654                    }
    +655    
    +656                    @Override
    +657                    public ParserChainTextString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +658                            return super.register(marshaller);
    +659                    }
    +660    
    +661                    @Override
    +662                    public ParserChainTextString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +663                            return super.register(marshaller);
    +664                    }
    +665    
    +666                    @Override
    +667                    public ParserChainTextString warnings(List<List<String>> warnings) {
    +668                            return super.warnings(warnings);
    +669                    }
    +670    
    +671                    @Override
    +672                    public ParserChainTextString caretDecoding(boolean enable) {
    +673                            return super.caretDecoding(enable);
    +674                    }
    +675    
    +676                    @Override
    +677                    ICalReader _constructReader() {
    +678                            return new ICalReader(text);
    +679                    }
    +680    
    +681                    @Override
    +682                    public ICalendar first() {
    +683                            try {
    +684                                    return super.first();
    +685                            } catch (IOException e) {
    +686                                    //should never been thrown because we're reading from a string
    +687                                    throw new RuntimeException(e);
    +688                            }
    +689                    }
    +690    
    +691                    @Override
    +692                    public List<ICalendar> all() {
    +693                            try {
    +694                                    return super.all();
    +695                            } catch (IOException e) {
    +696                                    //should never been thrown because we're reading from a string
    +697                                    throw new RuntimeException(e);
    +698                            }
    +699                    }
    +700            }
    +701    
    +702            ///////////////////////////////////////////////////////
    +703            // XML
    +704            ///////////////////////////////////////////////////////
    +705    
    +706            static abstract class ParserChainXml<T> extends ParserChain<T> {
    +707                    @Override
    +708                    public ICalendar first() throws IOException, SAXException {
    +709                            XCalDocument document = constructDocument();
    +710                            ICalendar ical = document.parseFirst();
    +711                            if (warnings != null) {
    +712                                    warnings.addAll(document.getParseWarnings());
    +713                            }
    +714                            return ical;
    +715                    }
    +716    
    +717                    @Override
    +718                    public List<ICalendar> all() throws IOException, SAXException {
    +719                            XCalDocument document = constructDocument();
    +720                            List<ICalendar> icals = document.parseAll();
    +721                            if (warnings != null) {
    +722                                    warnings.addAll(document.getParseWarnings());
    +723                            }
    +724                            return icals;
    +725                    }
    +726    
    +727                    private XCalDocument constructDocument() throws SAXException, IOException {
    +728                            XCalDocument parser = _constructDocument();
    +729                            parser.setRegistrar(registrar);
    +730                            return parser;
    +731                    }
    +732    
    +733                    abstract XCalDocument _constructDocument() throws IOException, SAXException;
    +734            }
    +735    
    +736            /**
    +737             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +738             * @see Biweekly#parseXml(String)
    +739             */
    +740            public static class ParserChainXmlString extends ParserChainXml<ParserChainXmlString> {
    +741                    private final String xml;
    +742    
    +743                    private ParserChainXmlString(String xml) {
    +744                            this.xml = xml;
    +745                    }
    +746    
    +747                    @Override
    +748                    public ParserChainXmlString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +749                            return super.register(marshaller);
    +750                    }
    +751    
    +752                    @Override
    +753                    public ParserChainXmlString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +754                            return super.register(marshaller);
    +755                    }
    +756    
    +757                    @Override
    +758                    public ParserChainXmlString warnings(List<List<String>> warnings) {
    +759                            return super.warnings(warnings);
    +760                    }
    +761    
    +762                    @Override
    +763                    XCalDocument _constructDocument() throws SAXException {
    +764                            return new XCalDocument(xml);
    +765                    }
    +766    
    +767                    @Override
    +768                    public ICalendar first() throws SAXException {
    +769                            try {
    +770                                    return super.first();
    +771                            } catch (IOException e) {
    +772                                    //should never been thrown because we're reading from a string
    +773                                    throw new RuntimeException(e);
    +774                            }
    +775                    }
    +776    
    +777                    @Override
    +778                    public List<ICalendar> all() throws SAXException {
    +779                            try {
    +780                                    return super.all();
    +781                            } catch (IOException e) {
    +782                                    //should never been thrown because we're reading from a string
    +783                                    throw new RuntimeException(e);
    +784                            }
    +785                    }
    +786            }
    +787    
    +788            /**
    +789             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +790             * @see Biweekly#parseXml(InputStream)
    +791             * @see Biweekly#parseXml(File)
    +792             * @see Biweekly#parseXml(Reader)
    +793             */
    +794            public static class ParserChainXmlReader extends ParserChainXml<ParserChainXmlReader> {
    +795                    private final InputStream in;
    +796                    private final File file;
    +797                    private final Reader reader;
    +798    
    +799                    private ParserChainXmlReader(InputStream in) {
    +800                            this.in = in;
    +801                            this.reader = null;
    +802                            this.file = null;
    +803                    }
    +804    
    +805                    private ParserChainXmlReader(File file) {
    +806                            this.in = null;
    +807                            this.reader = null;
    +808                            this.file = file;
    +809                    }
    +810    
    +811                    private ParserChainXmlReader(Reader reader) {
    +812                            this.in = null;
    +813                            this.reader = reader;
    +814                            this.file = null;
    +815                    }
    +816    
    +817                    @Override
    +818                    public ParserChainXmlReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +819                            return super.register(marshaller);
    +820                    }
    +821    
    +822                    @Override
    +823                    public ParserChainXmlReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +824                            return super.register(marshaller);
    +825                    }
    +826    
    +827                    @Override
    +828                    public ParserChainXmlReader warnings(List<List<String>> warnings) {
    +829                            return super.warnings(warnings);
    +830                    }
    +831    
    +832                    @Override
    +833                    XCalDocument _constructDocument() throws IOException, SAXException {
    +834                            if (in != null) {
    +835                                    return new XCalDocument(in);
    +836                            }
    +837                            if (file != null) {
    +838                                    return new XCalDocument(file);
    +839                            }
    +840                            return new XCalDocument(reader);
    +841                    }
    +842            }
    +843    
    +844            /**
    +845             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +846             * @see Biweekly#parseXml(Document)
    +847             */
    +848            public static class ParserChainXmlDocument extends ParserChainXml<ParserChainXmlDocument> {
    +849                    private final Document document;
    +850    
    +851                    private ParserChainXmlDocument(Document document) {
    +852                            this.document = document;
    +853                    }
    +854    
    +855                    @Override
    +856                    public ParserChainXmlDocument register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +857                            return super.register(marshaller);
    +858                    }
    +859    
    +860                    @Override
    +861                    public ParserChainXmlDocument register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +862                            return super.register(marshaller);
    +863                    }
    +864    
    +865                    @Override
    +866                    public ParserChainXmlDocument warnings(List<List<String>> warnings) {
    +867                            return super.warnings(warnings);
    +868                    }
    +869    
    +870                    @Override
    +871                    XCalDocument _constructDocument() {
    +872                            return new XCalDocument(document);
    +873                    }
    +874    
    +875                    @Override
    +876                    public ICalendar first() {
    +877                            try {
    +878                                    return super.first();
    +879                            } catch (IOException e) {
    +880                                    //should never been thrown because we're reading from a DOM
    +881                                    throw new RuntimeException(e);
    +882                            } catch (SAXException e) {
    +883                                    //should never been thrown because we're reading from a DOM
    +884                                    throw new RuntimeException(e);
    +885                            }
    +886                    }
    +887    
    +888                    @Override
    +889                    public List<ICalendar> all() {
    +890                            try {
    +891                                    return super.all();
    +892                            } catch (IOException e) {
    +893                                    //should never been thrown because we're reading from a DOM
    +894                                    throw new RuntimeException(e);
    +895                            } catch (SAXException e) {
    +896                                    //should never been thrown because we're reading from a DOM
    +897                                    throw new RuntimeException(e);
    +898                            }
    +899                    }
    +900            }
    +901    
    +902            ///////////////////////////////////////////////////////
    +903            // JSON
    +904            ///////////////////////////////////////////////////////
    +905    
    +906            static abstract class ParserChainJson<T> extends ParserChain<T> {
    +907                    final boolean closeWhenDone;
    +908    
    +909                    private ParserChainJson(boolean closeWhenDone) {
    +910                            this.closeWhenDone = closeWhenDone;
    +911                    }
    +912    
    +913                    /**
    +914                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +915                     * syntax may be valid, but it is not in the correct jCal format).
    +916                     * @throws JsonParseException if the JSON syntax is incorrect
    +917                     */
    +918                    @Override
    +919                    public ICalendar first() throws IOException {
    +920                            JCalReader parser = constructReader();
    +921    
    +922                            try {
    +923                                    ICalendar ical = parser.readNext();
    +924                                    if (warnings != null) {
    +925                                            warnings.add(parser.getWarnings());
    +926                                    }
    +927                                    return ical;
    +928                            } finally {
    +929                                    if (closeWhenDone) {
    +930                                            IOUtils.closeQuietly(parser);
    +931                                    }
    +932                            }
    +933                    }
    +934    
    +935                    /**
    +936                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +937                     * syntax may be valid, but it is not in the correct jCal format).
    +938                     * @throws JsonParseException if the JSON syntax is incorrect
    +939                     */
    +940                    @Override
    +941                    public List<ICalendar> all() throws IOException {
    +942                            JCalReader parser = constructReader();
    +943    
    +944                            try {
    +945                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +946                                    ICalendar ical;
    +947                                    while ((ical = parser.readNext()) != null) {
    +948                                            if (warnings != null) {
    +949                                                    warnings.add(parser.getWarnings());
    +950                                            }
    +951                                            icals.add(ical);
    +952                                    }
    +953                                    return icals;
    +954                            } finally {
    +955                                    if (closeWhenDone) {
    +956                                            IOUtils.closeQuietly(parser);
    +957                                    }
    +958                            }
    +959                    }
    +960    
    +961                    private JCalReader constructReader() throws IOException {
    +962                            JCalReader parser = _constructReader();
    +963                            parser.setRegistrar(registrar);
    +964                            return parser;
    +965                    }
    +966    
    +967                    abstract JCalReader _constructReader() throws IOException;
    +968            }
    +969    
    +970            /**
    +971             * Chainer class for parsing JSON-encoded iCalendar data streams (jCal).
    +972             * @see Biweekly#parseJson(InputStream)
    +973             * @see Biweekly#parseJson(File)
    +974             * @see Biweekly#parseJson(Reader)
    +975             */
    +976            public static class ParserChainJsonReader extends ParserChainJson<ParserChainJsonReader> {
    +977                    private final InputStream in;
    +978                    private final File file;
    +979                    private final Reader reader;
    +980    
    +981                    private ParserChainJsonReader(InputStream in) {
    +982                            super(false);
    +983                            this.in = in;
    +984                            this.reader = null;
    +985                            this.file = null;
    +986                    }
    +987    
    +988                    private ParserChainJsonReader(File file) {
    +989                            super(true);
    +990                            this.in = null;
    +991                            this.reader = null;
    +992                            this.file = file;
    +993                    }
    +994    
    +995                    private ParserChainJsonReader(Reader reader) {
    +996                            super(false);
    +997                            this.in = null;
    +998                            this.reader = reader;
    +999                            this.file = null;
    +1000                    }
    +1001    
    +1002                    @Override
    +1003                    public ParserChainJsonReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1004                            return super.register(marshaller);
    +1005                    }
    +1006    
    +1007                    @Override
    +1008                    public ParserChainJsonReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1009                            return super.register(marshaller);
    +1010                    }
    +1011    
    +1012                    @Override
    +1013                    public ParserChainJsonReader warnings(List<List<String>> warnings) {
    +1014                            return super.warnings(warnings);
    +1015                    }
    +1016    
    +1017                    @Override
    +1018                    JCalReader _constructReader() throws IOException {
    +1019                            if (in != null) {
    +1020                                    return new JCalReader(in);
    +1021                            }
    +1022                            if (file != null) {
    +1023                                    return new JCalReader(file);
    +1024                            }
    +1025                            return new JCalReader(reader);
    +1026                    }
    +1027            }
    +1028    
    +1029            /**
    +1030             * Chainer class for parsing JSON-encoded iCalendar strings (jCal).
    +1031             * @see Biweekly#parseJson(String)
    +1032             */
    +1033            public static class ParserChainJsonString extends ParserChainJson<ParserChainJsonString> {
    +1034                    private final String text;
    +1035    
    +1036                    private ParserChainJsonString(String text) {
    +1037                            super(false);
    +1038                            this.text = text;
    +1039                    }
    +1040    
    +1041                    @Override
    +1042                    public ParserChainJsonString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1043                            return super.register(marshaller);
    +1044                    }
    +1045    
    +1046                    @Override
    +1047                    public ParserChainJsonString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1048                            return super.register(marshaller);
    +1049                    }
    +1050    
    +1051                    @Override
    +1052                    public ParserChainJsonString warnings(List<List<String>> warnings) {
    +1053                            return super.warnings(warnings);
    +1054                    }
    +1055    
    +1056                    @Override
    +1057                    JCalReader _constructReader() {
    +1058                            return new JCalReader(text);
    +1059                    }
    +1060    
    +1061                    @Override
    +1062                    public ICalendar first() {
    +1063                            try {
    +1064                                    return super.first();
    +1065                            } catch (IOException e) {
    +1066                                    //should never been thrown because we're reading from a string
    +1067                                    throw new RuntimeException(e);
    +1068                            }
    +1069                    }
    +1070    
    +1071                    @Override
    +1072                    public List<ICalendar> all() {
    +1073                            try {
    +1074                                    return super.all();
    +1075                            } catch (IOException e) {
    +1076                                    //should never been thrown because we're reading from a string
    +1077                                    throw new RuntimeException(e);
    +1078                            }
    +1079                    }
    +1080            }
    +1081    
    +1082            static abstract class WriterChain<T> {
    +1083                    final Collection<ICalendar> icals;
    +1084                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +1085    
    +1086                    @SuppressWarnings("unchecked")
    +1087                    final T this_ = (T) this;
    +1088    
    +1089                    WriterChain(Collection<ICalendar> icals) {
    +1090                            this.icals = icals;
    +1091                    }
    +1092    
    +1093                    /**
    +1094                     * Registers a property marshaller.
    +1095                     * @param marshaller the marshaller
    +1096                     * @return this
    +1097                     */
    +1098                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1099                            registrar.register(marshaller);
    +1100                            return this_;
    +1101                    }
    +1102    
    +1103                    /**
    +1104                     * Registers a component marshaller.
    +1105                     * @param marshaller the marshaller
    +1106                     * @return this
    +1107                     */
    +1108                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1109                            registrar.register(marshaller);
    +1110                            return this_;
    +1111                    }
    +1112            }
    +1113    
    +1114            ///////////////////////////////////////////////////////
    +1115            // plain-text
    +1116            ///////////////////////////////////////////////////////
    +1117    
    +1118            /**
    +1119             * Chainer class for writing to plain text iCalendar data streams.
    +1120             * @see Biweekly#write(Collection)
    +1121             * @see Biweekly#write(ICalendar...)
    +1122             */
    +1123            public static class WriterChainText extends WriterChain<WriterChainText> {
    +1124                    boolean caretEncoding = false;
    +1125    
    +1126                    private WriterChainText(Collection<ICalendar> icals) {
    +1127                            super(icals);
    +1128                    }
    +1129    
    +1130                    /**
    +1131                     * <p>
    +1132                     * Sets whether the writer will apply circumflex accent encoding on
    +1133                     * parameter values (disabled by default). This escaping mechanism
    +1134                     * allows for newlines and double quotes to be included in parameter
    +1135                     * values.
    +1136                     * </p>
    +1137                     * 
    +1138                     * <p>
    +1139                     * When disabled, the writer will replace newlines with spaces and
    +1140                     * double quotes with single quotes.
    +1141                     * </p>
    +1142                     * @param enable true to use circumflex accent encoding, false not to
    +1143                     * @return this
    +1144                     * @see ICalRawWriter#setCaretEncodingEnabled(boolean)
    +1145                     */
    +1146                    public WriterChainText caretEncoding(boolean enable) {
    +1147                            this.caretEncoding = enable;
    +1148                            return this_;
    +1149                    }
    +1150    
    +1151                    /**
    +1152                     * Writes the iCalendar objects to a string.
    +1153                     * @return the iCalendar string
    +1154                     * @throws IllegalArgumentException if the marshaller class for a
    +1155                     * component or property object cannot be found (only happens when an
    +1156                     * experimental property/component marshaller is not registered with the
    +1157                     * {@code register} method.)
    +1158                     */
    +1159                    public String go() {
    +1160                            StringWriter sw = new StringWriter();
    +1161                            try {
    +1162                                    go(sw);
    +1163                            } catch (IOException e) {
    +1164                                    //writing to a string
    +1165                            }
    +1166                            return sw.toString();
    +1167                    }
    +1168    
    +1169                    /**
    +1170                     * Writes the iCalendar objects to a data stream.
    +1171                     * @param out the output stream to write to
    +1172                     * @throws IllegalArgumentException if the marshaller class for a
    +1173                     * component or property object cannot be found (only happens when an
    +1174                     * experimental property/component marshaller is not registered with the
    +1175                     * {@code register} method.)
    +1176                     * @throws IOException if there's a problem writing to the output stream
    +1177                     */
    +1178                    public void go(OutputStream out) throws IOException {
    +1179                            go(new ICalWriter(out));
    +1180                    }
    +1181    
    +1182                    /**
    +1183                     * Writes the iCalendar objects to a file.
    +1184                     * @param file the file to write to
    +1185                     * @throws IllegalArgumentException if the marshaller class for a
    +1186                     * component or property object cannot be found (only happens when an
    +1187                     * experimental property/component marshaller is not registered with the
    +1188                     * {@code register} method.)
    +1189                     * @throws IOException if there's a problem writing to the file
    +1190                     */
    +1191                    public void go(File file) throws IOException {
    +1192                            go(file, false);
    +1193                    }
    +1194    
    +1195                    /**
    +1196                     * Writes the iCalendar objects to a file.
    +1197                     * @param file the file to write to
    +1198                     * @param append true to append to the end of the file, false to
    +1199                     * overwrite it
    +1200                     * @throws IllegalArgumentException if the marshaller class for a
    +1201                     * component or property object cannot be found (only happens when an
    +1202                     * experimental property/component marshaller is not registered with the
    +1203                     * {@code register} method.)
    +1204                     * @throws IOException if there's a problem writing to the file
    +1205                     */
    +1206                    public void go(File file, boolean append) throws IOException {
    +1207                            ICalWriter icalWriter = new ICalWriter(file, append);
    +1208                            try {
    +1209                                    go(icalWriter);
    +1210                            } finally {
    +1211                                    IOUtils.closeQuietly(icalWriter);
    +1212                            }
    +1213                    }
    +1214    
    +1215                    /**
    +1216                     * Writes the iCalendar objects to a data stream.
    +1217                     * @param writer the writer to write to
    +1218                     * @throws IllegalArgumentException if the marshaller class for a
    +1219                     * component or property object cannot be found (only happens when an
    +1220                     * experimental property/component marshaller is not registered with the
    +1221                     * {@code register} method.)
    +1222                     * @throws IOException if there's a problem writing to the writer
    +1223                     */
    +1224                    public void go(Writer writer) throws IOException {
    +1225                            go(new ICalWriter(writer));
    +1226                    }
    +1227    
    +1228                    private void go(ICalWriter icalWriter) throws IOException {
    +1229                            icalWriter.setRegistrar(registrar);
    +1230                            icalWriter.setCaretEncodingEnabled(caretEncoding);
    +1231    
    +1232                            for (ICalendar ical : icals) {
    +1233                                    icalWriter.write(ical);
    +1234                            }
    +1235                    }
    +1236            }
    +1237    
    +1238            ///////////////////////////////////////////////////////
    +1239            // XML
    +1240            ///////////////////////////////////////////////////////
    +1241    
    +1242            /**
    +1243             * Chainer class for writing xCal documents (XML-encoded iCalendar objects).
    +1244             * @see Biweekly#writeXml(Collection)
    +1245             * @see Biweekly#writeXml(ICalendar...)
    +1246             */
    +1247            public static class WriterChainXml extends WriterChain<WriterChainXml> {
    +1248                    int indent = -1;
    +1249                    final Map<String, ICalDataType> parameterDataTypes = new HashMap<String, ICalDataType>(0);
    +1250    
    +1251                    WriterChainXml(Collection<ICalendar> icals) {
    +1252                            super(icals);
    +1253                    }
    +1254    
    +1255                    @Override
    +1256                    public WriterChainXml register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1257                            return super.register(marshaller);
    +1258                    }
    +1259    
    +1260                    @Override
    +1261                    public WriterChainXml register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1262                            return super.register(marshaller);
    +1263                    }
    +1264    
    +1265                    /**
    +1266                     * Registers the data type of an experimental parameter. Experimental
    +1267                     * parameters use the "unknown" xCal data type by default.
    +1268                     * @param parameterName the parameter name (e.g. "x-foo")
    +1269                     * @param dataType the data type
    +1270                     * @return this
    +1271                     */
    +1272                    public WriterChainXml register(String parameterName, ICalDataType dataType) {
    +1273                            parameterDataTypes.put(parameterName, dataType);
    +1274                            return this_;
    +1275                    }
    +1276    
    +1277                    /**
    +1278                     * Sets the number of indent spaces to use for pretty-printing. If not
    +1279                     * set, then the XML will not be pretty-printed.
    +1280                     * @param indent the number of spaces
    +1281                     * @return this
    +1282                     */
    +1283                    public WriterChainXml indent(int indent) {
    +1284                            this.indent = indent;
    +1285                            return this_;
    +1286                    }
    +1287    
    +1288                    /**
    +1289                     * Writes the xCal document to a string.
    +1290                     * @return the XML string
    +1291                     * @throws IllegalArgumentException if the marshaller class for a
    +1292                     * component or property object cannot be found (only happens when an
    +1293                     * experimental property/component marshaller is not registered with the
    +1294                     * {@code register} method.)
    +1295                     */
    +1296                    public String go() {
    +1297                            StringWriter sw = new StringWriter();
    +1298                            try {
    +1299                                    go(sw);
    +1300                            } catch (TransformerException e) {
    +1301                                    //writing to a string
    +1302                            }
    +1303                            return sw.toString();
    +1304                    }
    +1305    
    +1306                    /**
    +1307                     * Writes the xCal document to an output stream.
    +1308                     * @param out the output stream to write to
    +1309                     * @throws IllegalArgumentException if the marshaller class for a
    +1310                     * component or property object cannot be found (only happens when an
    +1311                     * experimental property/component marshaller is not registered with the
    +1312                     * {@code register} method.)
    +1313                     * @throws TransformerException if there's a problem writing the XML
    +1314                     */
    +1315                    public void go(OutputStream out) throws TransformerException {
    +1316                            XCalDocument document = constructDocument();
    +1317                            document.write(out, indent);
    +1318                    }
    +1319    
    +1320                    /**
    +1321                     * Writes the xCal document to a file.
    +1322                     * @param file the file to write to
    +1323                     * @throws IllegalArgumentException if the marshaller class for a
    +1324                     * component or property object cannot be found (only happens when an
    +1325                     * experimental property/component marshaller is not registered with the
    +1326                     * {@code register} method.)
    +1327                     * @throws TransformerException if there's a problem writing the XML
    +1328                     * @throws IOException if there's a problem writing to the file
    +1329                     */
    +1330                    public void go(File file) throws TransformerException, IOException {
    +1331                            XCalDocument document = constructDocument();
    +1332                            document.write(file, indent);
    +1333                    }
    +1334    
    +1335                    /**
    +1336                     * Writes the xCal document to a writer.
    +1337                     * @param writer the writer to write to
    +1338                     * @throws IllegalArgumentException if the marshaller class for a
    +1339                     * component or property object cannot be found (only happens when an
    +1340                     * experimental property/component marshaller is not registered with the
    +1341                     * {@code register} method.)
    +1342                     * @throws TransformerException if there's a problem writing the XML
    +1343                     */
    +1344                    public void go(Writer writer) throws TransformerException {
    +1345                            XCalDocument document = constructDocument();
    +1346                            document.write(writer, indent);
    +1347                    }
    +1348    
    +1349                    /**
    +1350                     * Writes the xCal document to an XML DOM.
    +1351                     * @return the XML DOM
    +1352                     */
    +1353                    public Document dom() {
    +1354                            XCalDocument document = constructDocument();
    +1355                            return document.getDocument();
    +1356                    }
    +1357    
    +1358                    private XCalDocument constructDocument() {
    +1359                            XCalDocument document = new XCalDocument();
    +1360                            document.setRegistrar(registrar);
    +1361                            for (Map.Entry<String, ICalDataType> entry : parameterDataTypes.entrySet()) {
    +1362                                    document.registerParameterDataType(entry.getKey(), entry.getValue());
    +1363                            }
    +1364    
    +1365                            for (ICalendar ical : icals) {
    +1366                                    document.add(ical);
    +1367                            }
    +1368    
    +1369                            return document;
    +1370                    }
    +1371            }
    +1372    
    +1373            ///////////////////////////////////////////////////////
    +1374            // JSON
    +1375            ///////////////////////////////////////////////////////
    +1376    
    +1377            /**
    +1378             * Chainer class for writing to JSON-encoded iCalendar data streams (jCal).
    +1379             * @see Biweekly#writeJson(Collection)
    +1380             * @see Biweekly#writeJson(ICalendar...)
    +1381             */
    +1382            public static class WriterChainJson extends WriterChain<WriterChainJson> {
    +1383                    private boolean indent = false;
    +1384    
    +1385                    private WriterChainJson(Collection<ICalendar> icals) {
    +1386                            super(icals);
    +1387                    }
    +1388    
    +1389                    /**
    +1390                     * Sets whether or not to pretty-print the JSON.
    +1391                     * @param indent true to pretty-print it, false not to (defaults to
    +1392                     * false)
    +1393                     * @return this
    +1394                     */
    +1395                    public WriterChainJson indent(boolean indent) {
    +1396                            this.indent = indent;
    +1397                            return this_;
    +1398                    }
    +1399    
    +1400                    /**
    +1401                     * Writes the iCalendar objects to a string.
    +1402                     * @return the iCalendar string
    +1403                     * @throws IllegalArgumentException if the marshaller class for a
    +1404                     * component or property object cannot be found (only happens when an
    +1405                     * experimental property/component marshaller is not registered with the
    +1406                     * {@code register} method.)
    +1407                     */
    +1408                    public String go() {
    +1409                            StringWriter sw = new StringWriter();
    +1410                            try {
    +1411                                    go(sw);
    +1412                            } catch (IOException e) {
    +1413                                    //writing to a string
    +1414                            }
    +1415                            return sw.toString();
    +1416                    }
    +1417    
    +1418                    /**
    +1419                     * Writes the iCalendar objects to a data stream.
    +1420                     * @param out the output stream to write to
    +1421                     * @throws IllegalArgumentException if the marshaller class for a
    +1422                     * component or property object cannot be found (only happens when an
    +1423                     * experimental property/component marshaller is not registered with the
    +1424                     * {@code register} method.)
    +1425                     * @throws IOException if there's a problem writing to the output stream
    +1426                     */
    +1427                    public void go(OutputStream out) throws IOException {
    +1428                            go(new JCalWriter(out, icals.size() > 1));
    +1429                    }
    +1430    
    +1431                    /**
    +1432                     * Writes the iCalendar objects to a file.
    +1433                     * @param file the file to write to
    +1434                     * @throws IllegalArgumentException if the marshaller class for a
    +1435                     * component or property object cannot be found (only happens when an
    +1436                     * experimental property/component marshaller is not registered with the
    +1437                     * {@code register} method.)
    +1438                     * @throws IOException if there's a problem writing to the file
    +1439                     */
    +1440                    public void go(File file) throws IOException {
    +1441                            JCalWriter jcalWriter = new JCalWriter(file, icals.size() > 1);
    +1442                            try {
    +1443                                    go(jcalWriter);
    +1444                            } finally {
    +1445                                    IOUtils.closeQuietly(jcalWriter);
    +1446                            }
    +1447                    }
    +1448    
    +1449                    /**
    +1450                     * Writes the iCalendar objects to a data stream.
    +1451                     * @param writer the writer to write to
    +1452                     * @throws IllegalArgumentException if the marshaller class for a
    +1453                     * component or property object cannot be found (only happens when an
    +1454                     * experimental property/component marshaller is not registered with the
    +1455                     * {@code register} method.)
    +1456                     * @throws IOException if there's a problem writing to the writer
    +1457                     */
    +1458                    public void go(Writer writer) throws IOException {
    +1459                            go(new JCalWriter(writer, icals.size() > 1));
    +1460                    }
    +1461    
    +1462                    private void go(JCalWriter jcalWriter) throws IOException {
    +1463                            jcalWriter.setRegistrar(registrar);
    +1464                            jcalWriter.setIndent(indent);
    +1465    
    +1466                            for (ICalendar ical : icals) {
    +1467                                    jcalWriter.write(ical);
    +1468                            }
    +1469                            jcalWriter.closeJsonStream();
    +1470                    }
    +1471            }
    +1472    
    +1473            private Biweekly() {
    +1474                    //hide
    +1475            }
    +1476    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.WriterChainJson.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.WriterChainJson.html new file mode 100644 index 000000000..6e42f0110 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.WriterChainJson.html @@ -0,0 +1,1542 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.io.File;
    +004    import java.io.IOException;
    +005    import java.io.InputStream;
    +006    import java.io.OutputStream;
    +007    import java.io.Reader;
    +008    import java.io.StringWriter;
    +009    import java.io.Writer;
    +010    import java.util.ArrayList;
    +011    import java.util.Arrays;
    +012    import java.util.Collection;
    +013    import java.util.HashMap;
    +014    import java.util.List;
    +015    import java.util.Map;
    +016    import java.util.Properties;
    +017    
    +018    import javax.xml.transform.TransformerException;
    +019    
    +020    import org.w3c.dom.Document;
    +021    import org.xml.sax.SAXException;
    +022    
    +023    import biweekly.component.ICalComponent;
    +024    import biweekly.component.marshaller.ICalComponentMarshaller;
    +025    import biweekly.io.ICalMarshallerRegistrar;
    +026    import biweekly.io.json.JCalParseException;
    +027    import biweekly.io.json.JCalReader;
    +028    import biweekly.io.json.JCalWriter;
    +029    import biweekly.io.text.ICalRawReader;
    +030    import biweekly.io.text.ICalRawWriter;
    +031    import biweekly.io.text.ICalReader;
    +032    import biweekly.io.text.ICalWriter;
    +033    import biweekly.io.xml.XCalDocument;
    +034    import biweekly.property.ICalProperty;
    +035    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +036    import biweekly.util.IOUtils;
    +037    
    +038    import com.fasterxml.jackson.core.JsonParseException;
    +039    
    +040    /*
    +041     Copyright (c) 2013, Michael Angstadt
    +042     All rights reserved.
    +043    
    +044     Redistribution and use in source and binary forms, with or without
    +045     modification, are permitted provided that the following conditions are met: 
    +046    
    +047     1. Redistributions of source code must retain the above copyright notice, this
    +048     list of conditions and the following disclaimer. 
    +049     2. Redistributions in binary form must reproduce the above copyright notice,
    +050     this list of conditions and the following disclaimer in the documentation
    +051     and/or other materials provided with the distribution. 
    +052    
    +053     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +054     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +055     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +056     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +057     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +058     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +059     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +060     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +061     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +062     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +063     */
    +064    
    +065    /**
    +066     * <p>
    +067     * Contains static chaining factory methods for reading/writing iCalendar
    +068     * objects.
    +069     * </p>
    +070     * 
    +071     * <p>
    +072     * <b>Writing an iCalendar object</b>
    +073     * 
    +074     * <pre class="brush:java">
    +075     * ICalendar ical = new ICalendar();
    +076     * 
    +077     * //string
    +078     * String icalString = Biweekly.write(ical).go();
    +079     * 
    +080     * //file
    +081     * File file = new File("meeting.ics");
    +082     * Biweekly.write(ical).go(file);
    +083     * 
    +084     * //output stream
    +085     * OutputStream out = ...
    +086     * Biweekly.write(ical).go(out);
    +087     * out.close();
    +088     * 
    +089     * //writer (should be configured to use UTF-8 encoding)
    +090     * Writer writer = ...
    +091     * Biweekly.write(ical).go(writer);
    +092     * writer.close();
    +093     * </pre>
    +094     * 
    +095     * </p>
    +096     * 
    +097     * <p>
    +098     * <b>Writing multiple iCalendar objects</b>
    +099     * 
    +100     * <pre class="brush:java">
    +101     * ICalendar ical1 = new ICalendar();
    +102     * ICalendar ical2 = new ICalendar();
    +103     * 
    +104     * String icalString = Biweekly.write(ical1, ical2).go();
    +105     * </pre>
    +106     * 
    +107     * </p>
    +108     * 
    +109     * <p>
    +110     * <b>Writing an XML-encoded iCalendar object (xCal)</b><br>
    +111     * 
    +112     * <pre class="brush:java">
    +113     * //Call writeXml() instead of write()
    +114     * ICalendar ical = new ICalendar();
    +115     * String xml = Biweekly.writeXml(ical).indent(2).go();
    +116     * </pre>
    +117     * 
    +118     * </p>
    +119     * 
    +120     * <p>
    +121     * <b>Writing a JSON-encoded iCalendar object (jCal)</b><br>
    +122     * 
    +123     * <pre class="brush:java">
    +124     * //Call writeJson() instead of write()
    +125     * ICalendar ical = new ICalendar();
    +126     * String json = Biweekly.writeJson(ical).go();
    +127     * </pre>
    +128     * 
    +129     * </p>
    +130     * 
    +131     * <p>
    +132     * <b>Reading an iCalendar object</b>
    +133     * 
    +134     * <pre class="brush:java">
    +135     * ICalendar ical;
    +136     * 
    +137     * //string
    +138     * String icalStr = ...
    +139     * ical = Biweekly.parse(icalStr).first();
    +140     * 
    +141     * //file
    +142     * File file = new File("meeting.ics");
    +143     * ical = Biweekly.parse(file).first();
    +144     * 
    +145     * //input stream
    +146     * InputStream in = ...
    +147     * ical = Biweekly.parse(in).first();
    +148     * in.close();  
    +149     * 
    +150     * //reader (should be configured to read UTF-8)
    +151     * Reader reader = ...
    +152     * ical = Biweekly.parse(reader).first();
    +153     * reader.close();
    +154     * </pre>
    +155     * 
    +156     * </p>
    +157     * 
    +158     * <p>
    +159     * <b>Reading multiple iCalendar objects</b>
    +160     * 
    +161     * <pre class="brush:java">
    +162     * String icalStr = ...
    +163     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).all();
    +164     * </pre>
    +165     * 
    +166     * </p>
    +167     * 
    +168     * <p>
    +169     * <b>Reading an XML-encoded iCalendar object (xCal)</b><br>
    +170     * 
    +171     * <pre class="brush:java">
    +172     * //Call parseXml() instead of parse()
    +173     * String xml = ...
    +174     * ICalendar ical = Biweekly.parseXml(xml).first();
    +175     * </pre>
    +176     * 
    +177     * </p>
    +178     * 
    +179     * <p>
    +180     * <b>Reading a JSON-encoded iCalendar object (Cal)</b><br>
    +181     * 
    +182     * <pre class="brush:java">
    +183     * //Call parseJson() instead of parse()
    +184     * String json = ...
    +185     * ICalendar ical = Biweekly.parseJson(json).first();
    +186     * </pre>
    +187     * 
    +188     * </p>
    +189     * 
    +190     * <p>
    +191     * <b>Retrieving parser warnings</b>
    +192     * 
    +193     * <pre class="brush:java">
    +194     * String icalStr = ...
    +195     * List&lt;List&lt;String&gt;&gt; warnings = new ArrayList&lt;List&lt;String&gt;&gt;();
    +196     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).warnings(warnings).all();
    +197     * int i = 0;
    +198     * for (List&lt;String&gt; icalWarnings : warnings){
    +199     *   System.out.println("iCal #" + (i++) + " warnings:");
    +200     *   for (String warning : icalWarnings){
    +201     *     System.out.println(warning);
    +202     *   }
    +203     * }
    +204     * </pre>
    +205     * 
    +206     * </p>
    +207     * 
    +208     * <p>
    +209     * The methods in this class make use of the following classes. These classes
    +210     * can be used if greater control over the read/write operation is required:
    +211     * </p>
    +212     * 
    +213     * <style> table.t td, table.t th {border:1px solid #000;} </style>
    +214     * <table class="t" cellpadding="5" style="border-collapse:collapse;">
    +215     * <tr>
    +216     * <th></th>
    +217     * <th>Classes</th>
    +218     * <th>Supports<br>
    +219     * streaming?</th>
    +220     * </tr>
    +221     * <tr>
    +222     * <th>Text</th>
    +223     * <td>{@link ICalReader} / {@link ICalWriter}</td>
    +224     * <td>yes</td>
    +225     * </tr>
    +226     * <tr>
    +227     * <th>XML</th>
    +228     * <td>{@link XCalDocument}</td>
    +229     * <td>no</td>
    +230     * </tr>
    +231     * <tr>
    +232     * <th>JSON</th>
    +233     * <td>{@link JCalReader} / {@link JCalWriter}</td>
    +234     * <td>yes</td>
    +235     * </tr>
    +236     * </table>
    +237     * @author Michael Angstadt
    +238     */
    +239    public class Biweekly {
    +240            /**
    +241             * The version of the library.
    +242             */
    +243            public static final String VERSION;
    +244    
    +245            /**
    +246             * The project webpage.
    +247             */
    +248            public static final String URL;
    +249    
    +250            static {
    +251                    InputStream in = null;
    +252                    try {
    +253                            in = Biweekly.class.getResourceAsStream("/biweekly.properties");
    +254                            Properties props = new Properties();
    +255                            props.load(in);
    +256    
    +257                            VERSION = props.getProperty("version");
    +258                            URL = props.getProperty("url");
    +259                    } catch (IOException e) {
    +260                            throw new RuntimeException(e);
    +261                    } finally {
    +262                            IOUtils.closeQuietly(in);
    +263                    }
    +264            }
    +265    
    +266            /**
    +267             * Parses an iCalendar object string.
    +268             * @param ical the iCalendar data
    +269             * @return chainer object for completing the parse operation
    +270             */
    +271            public static ParserChainTextString parse(String ical) {
    +272                    return new ParserChainTextString(ical);
    +273            }
    +274    
    +275            /**
    +276             * Parses an iCalendar file.
    +277             * @param file the iCalendar file
    +278             * @return chainer object for completing the parse operation
    +279             */
    +280            public static ParserChainTextReader parse(File file) {
    +281                    return new ParserChainTextReader(file);
    +282            }
    +283    
    +284            /**
    +285             * Parses an iCalendar data stream.
    +286             * @param in the input stream
    +287             * @return chainer object for completing the parse operation
    +288             */
    +289            public static ParserChainTextReader parse(InputStream in) {
    +290                    return new ParserChainTextReader(in);
    +291            }
    +292    
    +293            /**
    +294             * Parses an iCalendar data stream.
    +295             * @param reader the reader
    +296             * @return chainer object for completing the parse operation
    +297             */
    +298            public static ParserChainTextReader parse(Reader reader) {
    +299                    return new ParserChainTextReader(reader);
    +300            }
    +301    
    +302            /**
    +303             * Writes multiple iCalendar objects to a data stream.
    +304             * @param icals the iCalendar objects to write
    +305             * @return chainer object for completing the write operation
    +306             */
    +307            public static WriterChainText write(ICalendar... icals) {
    +308                    return write(Arrays.asList(icals));
    +309            }
    +310    
    +311            /**
    +312             * Writes multiple iCalendar objects to a data stream.
    +313             * @param icals the iCalendar objects to write
    +314             * @return chainer object for completing the write operation
    +315             */
    +316            public static WriterChainText write(Collection<ICalendar> icals) {
    +317                    return new WriterChainText(icals);
    +318            }
    +319    
    +320            /**
    +321             * Parses an xCal document (XML-encoded iCalendar objects) from a string.
    +322             * @param xml the XML string
    +323             * @return chainer object for completing the parse operation
    +324             */
    +325            public static ParserChainXmlString parseXml(String xml) {
    +326                    return new ParserChainXmlString(xml);
    +327            }
    +328    
    +329            /**
    +330             * Parses an xCal document (XML-encoded iCalendar objects) from a file.
    +331             * @param file the XML file
    +332             * @return chainer object for completing the parse operation
    +333             */
    +334            public static ParserChainXmlReader parseXml(File file) {
    +335                    return new ParserChainXmlReader(file);
    +336            }
    +337    
    +338            /**
    +339             * Parses an xCal document (XML-encoded iCalendar objects) from an input
    +340             * stream.
    +341             * @param in the input stream
    +342             * @return chainer object for completing the parse operation
    +343             */
    +344            public static ParserChainXmlReader parseXml(InputStream in) {
    +345                    return new ParserChainXmlReader(in);
    +346            }
    +347    
    +348            /**
    +349             * <p>
    +350             * Parses an xCal document (XML-encoded iCalendar objects) from a reader.
    +351             * </p>
    +352             * <p>
    +353             * Note that use of this method is discouraged. It ignores the character
    +354             * encoding that is defined within the XML document itself, and should only
    +355             * be used if the encoding is undefined or if the encoding needs to be
    +356             * ignored for whatever reason. The {@link #parseXml(InputStream)} method
    +357             * should be used instead, since it takes the XML document's character
    +358             * encoding into account when parsing.
    +359             * </p>
    +360             * @param reader the reader
    +361             * @return chainer object for completing the parse operation
    +362             */
    +363            public static ParserChainXmlReader parseXml(Reader reader) {
    +364                    return new ParserChainXmlReader(reader);
    +365            }
    +366    
    +367            /**
    +368             * Parses an xCal document (XML-encoded iCalendar objects).
    +369             * @param document the XML document
    +370             * @return chainer object for completing the parse operation
    +371             */
    +372            public static ParserChainXmlDocument parseXml(Document document) {
    +373                    return new ParserChainXmlDocument(document);
    +374            }
    +375    
    +376            /**
    +377             * Writes an xCal document (XML-encoded iCalendar objects).
    +378             * @param icals the iCalendar object(s) to write
    +379             * @return chainer object for completing the write operation
    +380             */
    +381            public static WriterChainXml writeXml(ICalendar... icals) {
    +382                    return writeXml(Arrays.asList(icals));
    +383            }
    +384    
    +385            /**
    +386             * Writes an xCal document (XML-encoded iCalendar objects).
    +387             * @param icals the iCalendar objects to write
    +388             * @return chainer object for completing the write operation
    +389             */
    +390            public static WriterChainXml writeXml(Collection<ICalendar> icals) {
    +391                    return new WriterChainXml(icals);
    +392            }
    +393    
    +394            /**
    +395             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +396             * @param json the JSON data
    +397             * @return chainer object for completing the parse operation
    +398             */
    +399            public static ParserChainJsonString parseJson(String json) {
    +400                    return new ParserChainJsonString(json);
    +401            }
    +402    
    +403            /**
    +404             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +405             * @param file the JSON file
    +406             * @return chainer object for completing the parse operation
    +407             */
    +408            public static ParserChainJsonReader parseJson(File file) {
    +409                    return new ParserChainJsonReader(file);
    +410            }
    +411    
    +412            /**
    +413             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +414             * @param in the input stream
    +415             * @return chainer object for completing the parse operation
    +416             */
    +417            public static ParserChainJsonReader parseJson(InputStream in) {
    +418                    return new ParserChainJsonReader(in);
    +419            }
    +420    
    +421            /**
    +422             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +423             * @param reader the reader
    +424             * @return chainer object for completing the parse operation
    +425             */
    +426            public static ParserChainJsonReader parseJson(Reader reader) {
    +427                    return new ParserChainJsonReader(reader);
    +428            }
    +429    
    +430            /**
    +431             * Writes an xCal document (XML-encoded iCalendar objects).
    +432             * @param icals the iCalendar object(s) to write
    +433             * @return chainer object for completing the write operation
    +434             */
    +435            public static WriterChainJson writeJson(ICalendar... icals) {
    +436                    return writeJson(Arrays.asList(icals));
    +437            }
    +438    
    +439            /**
    +440             * Writes an xCal document (XML-encoded iCalendar objects).
    +441             * @param icals the iCalendar objects to write
    +442             * @return chainer object for completing the write operation
    +443             */
    +444            public static WriterChainJson writeJson(Collection<ICalendar> icals) {
    +445                    return new WriterChainJson(icals);
    +446            }
    +447    
    +448            static abstract class ParserChain<T> {
    +449                    //Note: "package" level is used so various fields/methods don't show up in the Javadocs, but are still visible to child classes
    +450                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +451    
    +452                    @SuppressWarnings("unchecked")
    +453                    final T this_ = (T) this;
    +454    
    +455                    List<List<String>> warnings;
    +456    
    +457                    /**
    +458                     * Registers a property marshaller.
    +459                     * @param marshaller the marshaller
    +460                     * @return this
    +461                     */
    +462                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +463                            registrar.register(marshaller);
    +464                            return this_;
    +465                    }
    +466    
    +467                    /**
    +468                     * Registers a component marshaller.
    +469                     * @param marshaller the marshaller
    +470                     * @return this
    +471                     */
    +472                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +473                            registrar.register(marshaller);
    +474                            return this_;
    +475                    }
    +476    
    +477                    /**
    +478                     * Provides a list for putting the parser warnings into.
    +479                     * @param warnings the list object to populate (it is a
    +480                     * "list of lists"--each parsed {@link ICalendar} object has its own
    +481                     * warnings list)
    +482                     * @return this
    +483                     */
    +484                    public T warnings(List<List<String>> warnings) {
    +485                            this.warnings = warnings;
    +486                            return this_;
    +487                    }
    +488    
    +489                    /**
    +490                     * Reads the first iCalendar object from the data stream.
    +491                     * @return the first iCalendar object or null if there are none
    +492                     * @throws IOException if there a problem reading from the data stream
    +493                     * @throws SAXException if there's a problem parsing the XML
    +494                     */
    +495                    public abstract ICalendar first() throws IOException, SAXException;
    +496    
    +497                    /**
    +498                     * Reads all iCalendar objects from the data stream.
    +499                     * @return the parsed iCalendar objects
    +500                     * @throws IOException if there's a problem reading from the data stream
    +501                     * @throws SAXException if there's a problem parsing the XML
    +502                     */
    +503                    public abstract List<ICalendar> all() throws IOException, SAXException;
    +504            }
    +505    
    +506            ///////////////////////////////////////////////////////
    +507            // plain-text
    +508            ///////////////////////////////////////////////////////
    +509    
    +510            static abstract class ParserChainText<T> extends ParserChain<T> {
    +511                    boolean caretDecoding = true;
    +512                    final boolean closeWhenDone;
    +513    
    +514                    private ParserChainText(boolean closeWhenDone) {
    +515                            this.closeWhenDone = closeWhenDone;
    +516                    }
    +517    
    +518                    /**
    +519                     * Sets whether the reader will decode parameter values that use
    +520                     * circumflex accent encoding (enabled by default). This escaping
    +521                     * mechanism allows newlines and double quotes to be included in
    +522                     * parameter values.
    +523                     * @param enable true to use circumflex accent decoding, false not to
    +524                     * @return this
    +525                     * @see ICalRawReader#setCaretDecodingEnabled(boolean)
    +526                     */
    +527                    public T caretDecoding(boolean enable) {
    +528                            caretDecoding = enable;
    +529                            return this_;
    +530                    }
    +531    
    +532                    @Override
    +533                    public ICalendar first() throws IOException {
    +534                            ICalReader parser = constructReader();
    +535    
    +536                            try {
    +537                                    ICalendar ical = parser.readNext();
    +538                                    if (warnings != null) {
    +539                                            warnings.add(parser.getWarnings());
    +540                                    }
    +541                                    return ical;
    +542                            } finally {
    +543                                    if (closeWhenDone) {
    +544                                            IOUtils.closeQuietly(parser);
    +545                                    }
    +546                            }
    +547                    }
    +548    
    +549                    @Override
    +550                    public List<ICalendar> all() throws IOException {
    +551                            ICalReader parser = constructReader();
    +552    
    +553                            try {
    +554                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +555                                    ICalendar ical;
    +556                                    while ((ical = parser.readNext()) != null) {
    +557                                            if (warnings != null) {
    +558                                                    warnings.add(parser.getWarnings());
    +559                                            }
    +560                                            icals.add(ical);
    +561                                    }
    +562                                    return icals;
    +563                            } finally {
    +564                                    if (closeWhenDone) {
    +565                                            IOUtils.closeQuietly(parser);
    +566                                    }
    +567                            }
    +568                    }
    +569    
    +570                    private ICalReader constructReader() throws IOException {
    +571                            ICalReader parser = _constructReader();
    +572                            parser.setRegistrar(registrar);
    +573                            parser.setCaretDecodingEnabled(caretDecoding);
    +574                            return parser;
    +575                    }
    +576    
    +577                    abstract ICalReader _constructReader() throws IOException;
    +578            }
    +579    
    +580            /**
    +581             * Chainer class for parsing plain text iCalendar data streams.
    +582             * @see Biweekly#parse(InputStream)
    +583             * @see Biweekly#parse(File)
    +584             * @see Biweekly#parse(Reader)
    +585             */
    +586            public static class ParserChainTextReader extends ParserChainText<ParserChainTextReader> {
    +587                    private final InputStream in;
    +588                    private final File file;
    +589                    private final Reader reader;
    +590    
    +591                    private ParserChainTextReader(InputStream in) {
    +592                            super(false);
    +593                            this.in = in;
    +594                            this.reader = null;
    +595                            this.file = null;
    +596                    }
    +597    
    +598                    private ParserChainTextReader(File file) {
    +599                            super(true);
    +600                            this.in = null;
    +601                            this.reader = null;
    +602                            this.file = file;
    +603                    }
    +604    
    +605                    private ParserChainTextReader(Reader reader) {
    +606                            super(false);
    +607                            this.in = null;
    +608                            this.reader = reader;
    +609                            this.file = null;
    +610                    }
    +611    
    +612                    @Override
    +613                    public ParserChainTextReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +614                            return super.register(marshaller);
    +615                    }
    +616    
    +617                    @Override
    +618                    public ParserChainTextReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +619                            return super.register(marshaller);
    +620                    }
    +621    
    +622                    @Override
    +623                    public ParserChainTextReader warnings(List<List<String>> warnings) {
    +624                            return super.warnings(warnings);
    +625                    }
    +626    
    +627                    @Override
    +628                    public ParserChainTextReader caretDecoding(boolean enable) {
    +629                            return super.caretDecoding(enable);
    +630                    }
    +631    
    +632                    @Override
    +633                    ICalReader _constructReader() throws IOException {
    +634                            if (in != null) {
    +635                                    return new ICalReader(in);
    +636                            }
    +637                            if (file != null) {
    +638                                    return new ICalReader(file);
    +639                            }
    +640                            return new ICalReader(reader);
    +641                    }
    +642            }
    +643    
    +644            /**
    +645             * Chainer class for parsing plain text iCalendar strings.
    +646             * @see Biweekly#parse(String)
    +647             */
    +648            public static class ParserChainTextString extends ParserChainText<ParserChainTextString> {
    +649                    private final String text;
    +650    
    +651                    private ParserChainTextString(String text) {
    +652                            super(false);
    +653                            this.text = text;
    +654                    }
    +655    
    +656                    @Override
    +657                    public ParserChainTextString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +658                            return super.register(marshaller);
    +659                    }
    +660    
    +661                    @Override
    +662                    public ParserChainTextString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +663                            return super.register(marshaller);
    +664                    }
    +665    
    +666                    @Override
    +667                    public ParserChainTextString warnings(List<List<String>> warnings) {
    +668                            return super.warnings(warnings);
    +669                    }
    +670    
    +671                    @Override
    +672                    public ParserChainTextString caretDecoding(boolean enable) {
    +673                            return super.caretDecoding(enable);
    +674                    }
    +675    
    +676                    @Override
    +677                    ICalReader _constructReader() {
    +678                            return new ICalReader(text);
    +679                    }
    +680    
    +681                    @Override
    +682                    public ICalendar first() {
    +683                            try {
    +684                                    return super.first();
    +685                            } catch (IOException e) {
    +686                                    //should never been thrown because we're reading from a string
    +687                                    throw new RuntimeException(e);
    +688                            }
    +689                    }
    +690    
    +691                    @Override
    +692                    public List<ICalendar> all() {
    +693                            try {
    +694                                    return super.all();
    +695                            } catch (IOException e) {
    +696                                    //should never been thrown because we're reading from a string
    +697                                    throw new RuntimeException(e);
    +698                            }
    +699                    }
    +700            }
    +701    
    +702            ///////////////////////////////////////////////////////
    +703            // XML
    +704            ///////////////////////////////////////////////////////
    +705    
    +706            static abstract class ParserChainXml<T> extends ParserChain<T> {
    +707                    @Override
    +708                    public ICalendar first() throws IOException, SAXException {
    +709                            XCalDocument document = constructDocument();
    +710                            ICalendar ical = document.parseFirst();
    +711                            if (warnings != null) {
    +712                                    warnings.addAll(document.getParseWarnings());
    +713                            }
    +714                            return ical;
    +715                    }
    +716    
    +717                    @Override
    +718                    public List<ICalendar> all() throws IOException, SAXException {
    +719                            XCalDocument document = constructDocument();
    +720                            List<ICalendar> icals = document.parseAll();
    +721                            if (warnings != null) {
    +722                                    warnings.addAll(document.getParseWarnings());
    +723                            }
    +724                            return icals;
    +725                    }
    +726    
    +727                    private XCalDocument constructDocument() throws SAXException, IOException {
    +728                            XCalDocument parser = _constructDocument();
    +729                            parser.setRegistrar(registrar);
    +730                            return parser;
    +731                    }
    +732    
    +733                    abstract XCalDocument _constructDocument() throws IOException, SAXException;
    +734            }
    +735    
    +736            /**
    +737             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +738             * @see Biweekly#parseXml(String)
    +739             */
    +740            public static class ParserChainXmlString extends ParserChainXml<ParserChainXmlString> {
    +741                    private final String xml;
    +742    
    +743                    private ParserChainXmlString(String xml) {
    +744                            this.xml = xml;
    +745                    }
    +746    
    +747                    @Override
    +748                    public ParserChainXmlString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +749                            return super.register(marshaller);
    +750                    }
    +751    
    +752                    @Override
    +753                    public ParserChainXmlString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +754                            return super.register(marshaller);
    +755                    }
    +756    
    +757                    @Override
    +758                    public ParserChainXmlString warnings(List<List<String>> warnings) {
    +759                            return super.warnings(warnings);
    +760                    }
    +761    
    +762                    @Override
    +763                    XCalDocument _constructDocument() throws SAXException {
    +764                            return new XCalDocument(xml);
    +765                    }
    +766    
    +767                    @Override
    +768                    public ICalendar first() throws SAXException {
    +769                            try {
    +770                                    return super.first();
    +771                            } catch (IOException e) {
    +772                                    //should never been thrown because we're reading from a string
    +773                                    throw new RuntimeException(e);
    +774                            }
    +775                    }
    +776    
    +777                    @Override
    +778                    public List<ICalendar> all() throws SAXException {
    +779                            try {
    +780                                    return super.all();
    +781                            } catch (IOException e) {
    +782                                    //should never been thrown because we're reading from a string
    +783                                    throw new RuntimeException(e);
    +784                            }
    +785                    }
    +786            }
    +787    
    +788            /**
    +789             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +790             * @see Biweekly#parseXml(InputStream)
    +791             * @see Biweekly#parseXml(File)
    +792             * @see Biweekly#parseXml(Reader)
    +793             */
    +794            public static class ParserChainXmlReader extends ParserChainXml<ParserChainXmlReader> {
    +795                    private final InputStream in;
    +796                    private final File file;
    +797                    private final Reader reader;
    +798    
    +799                    private ParserChainXmlReader(InputStream in) {
    +800                            this.in = in;
    +801                            this.reader = null;
    +802                            this.file = null;
    +803                    }
    +804    
    +805                    private ParserChainXmlReader(File file) {
    +806                            this.in = null;
    +807                            this.reader = null;
    +808                            this.file = file;
    +809                    }
    +810    
    +811                    private ParserChainXmlReader(Reader reader) {
    +812                            this.in = null;
    +813                            this.reader = reader;
    +814                            this.file = null;
    +815                    }
    +816    
    +817                    @Override
    +818                    public ParserChainXmlReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +819                            return super.register(marshaller);
    +820                    }
    +821    
    +822                    @Override
    +823                    public ParserChainXmlReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +824                            return super.register(marshaller);
    +825                    }
    +826    
    +827                    @Override
    +828                    public ParserChainXmlReader warnings(List<List<String>> warnings) {
    +829                            return super.warnings(warnings);
    +830                    }
    +831    
    +832                    @Override
    +833                    XCalDocument _constructDocument() throws IOException, SAXException {
    +834                            if (in != null) {
    +835                                    return new XCalDocument(in);
    +836                            }
    +837                            if (file != null) {
    +838                                    return new XCalDocument(file);
    +839                            }
    +840                            return new XCalDocument(reader);
    +841                    }
    +842            }
    +843    
    +844            /**
    +845             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +846             * @see Biweekly#parseXml(Document)
    +847             */
    +848            public static class ParserChainXmlDocument extends ParserChainXml<ParserChainXmlDocument> {
    +849                    private final Document document;
    +850    
    +851                    private ParserChainXmlDocument(Document document) {
    +852                            this.document = document;
    +853                    }
    +854    
    +855                    @Override
    +856                    public ParserChainXmlDocument register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +857                            return super.register(marshaller);
    +858                    }
    +859    
    +860                    @Override
    +861                    public ParserChainXmlDocument register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +862                            return super.register(marshaller);
    +863                    }
    +864    
    +865                    @Override
    +866                    public ParserChainXmlDocument warnings(List<List<String>> warnings) {
    +867                            return super.warnings(warnings);
    +868                    }
    +869    
    +870                    @Override
    +871                    XCalDocument _constructDocument() {
    +872                            return new XCalDocument(document);
    +873                    }
    +874    
    +875                    @Override
    +876                    public ICalendar first() {
    +877                            try {
    +878                                    return super.first();
    +879                            } catch (IOException e) {
    +880                                    //should never been thrown because we're reading from a DOM
    +881                                    throw new RuntimeException(e);
    +882                            } catch (SAXException e) {
    +883                                    //should never been thrown because we're reading from a DOM
    +884                                    throw new RuntimeException(e);
    +885                            }
    +886                    }
    +887    
    +888                    @Override
    +889                    public List<ICalendar> all() {
    +890                            try {
    +891                                    return super.all();
    +892                            } catch (IOException e) {
    +893                                    //should never been thrown because we're reading from a DOM
    +894                                    throw new RuntimeException(e);
    +895                            } catch (SAXException e) {
    +896                                    //should never been thrown because we're reading from a DOM
    +897                                    throw new RuntimeException(e);
    +898                            }
    +899                    }
    +900            }
    +901    
    +902            ///////////////////////////////////////////////////////
    +903            // JSON
    +904            ///////////////////////////////////////////////////////
    +905    
    +906            static abstract class ParserChainJson<T> extends ParserChain<T> {
    +907                    final boolean closeWhenDone;
    +908    
    +909                    private ParserChainJson(boolean closeWhenDone) {
    +910                            this.closeWhenDone = closeWhenDone;
    +911                    }
    +912    
    +913                    /**
    +914                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +915                     * syntax may be valid, but it is not in the correct jCal format).
    +916                     * @throws JsonParseException if the JSON syntax is incorrect
    +917                     */
    +918                    @Override
    +919                    public ICalendar first() throws IOException {
    +920                            JCalReader parser = constructReader();
    +921    
    +922                            try {
    +923                                    ICalendar ical = parser.readNext();
    +924                                    if (warnings != null) {
    +925                                            warnings.add(parser.getWarnings());
    +926                                    }
    +927                                    return ical;
    +928                            } finally {
    +929                                    if (closeWhenDone) {
    +930                                            IOUtils.closeQuietly(parser);
    +931                                    }
    +932                            }
    +933                    }
    +934    
    +935                    /**
    +936                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +937                     * syntax may be valid, but it is not in the correct jCal format).
    +938                     * @throws JsonParseException if the JSON syntax is incorrect
    +939                     */
    +940                    @Override
    +941                    public List<ICalendar> all() throws IOException {
    +942                            JCalReader parser = constructReader();
    +943    
    +944                            try {
    +945                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +946                                    ICalendar ical;
    +947                                    while ((ical = parser.readNext()) != null) {
    +948                                            if (warnings != null) {
    +949                                                    warnings.add(parser.getWarnings());
    +950                                            }
    +951                                            icals.add(ical);
    +952                                    }
    +953                                    return icals;
    +954                            } finally {
    +955                                    if (closeWhenDone) {
    +956                                            IOUtils.closeQuietly(parser);
    +957                                    }
    +958                            }
    +959                    }
    +960    
    +961                    private JCalReader constructReader() throws IOException {
    +962                            JCalReader parser = _constructReader();
    +963                            parser.setRegistrar(registrar);
    +964                            return parser;
    +965                    }
    +966    
    +967                    abstract JCalReader _constructReader() throws IOException;
    +968            }
    +969    
    +970            /**
    +971             * Chainer class for parsing JSON-encoded iCalendar data streams (jCal).
    +972             * @see Biweekly#parseJson(InputStream)
    +973             * @see Biweekly#parseJson(File)
    +974             * @see Biweekly#parseJson(Reader)
    +975             */
    +976            public static class ParserChainJsonReader extends ParserChainJson<ParserChainJsonReader> {
    +977                    private final InputStream in;
    +978                    private final File file;
    +979                    private final Reader reader;
    +980    
    +981                    private ParserChainJsonReader(InputStream in) {
    +982                            super(false);
    +983                            this.in = in;
    +984                            this.reader = null;
    +985                            this.file = null;
    +986                    }
    +987    
    +988                    private ParserChainJsonReader(File file) {
    +989                            super(true);
    +990                            this.in = null;
    +991                            this.reader = null;
    +992                            this.file = file;
    +993                    }
    +994    
    +995                    private ParserChainJsonReader(Reader reader) {
    +996                            super(false);
    +997                            this.in = null;
    +998                            this.reader = reader;
    +999                            this.file = null;
    +1000                    }
    +1001    
    +1002                    @Override
    +1003                    public ParserChainJsonReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1004                            return super.register(marshaller);
    +1005                    }
    +1006    
    +1007                    @Override
    +1008                    public ParserChainJsonReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1009                            return super.register(marshaller);
    +1010                    }
    +1011    
    +1012                    @Override
    +1013                    public ParserChainJsonReader warnings(List<List<String>> warnings) {
    +1014                            return super.warnings(warnings);
    +1015                    }
    +1016    
    +1017                    @Override
    +1018                    JCalReader _constructReader() throws IOException {
    +1019                            if (in != null) {
    +1020                                    return new JCalReader(in);
    +1021                            }
    +1022                            if (file != null) {
    +1023                                    return new JCalReader(file);
    +1024                            }
    +1025                            return new JCalReader(reader);
    +1026                    }
    +1027            }
    +1028    
    +1029            /**
    +1030             * Chainer class for parsing JSON-encoded iCalendar strings (jCal).
    +1031             * @see Biweekly#parseJson(String)
    +1032             */
    +1033            public static class ParserChainJsonString extends ParserChainJson<ParserChainJsonString> {
    +1034                    private final String text;
    +1035    
    +1036                    private ParserChainJsonString(String text) {
    +1037                            super(false);
    +1038                            this.text = text;
    +1039                    }
    +1040    
    +1041                    @Override
    +1042                    public ParserChainJsonString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1043                            return super.register(marshaller);
    +1044                    }
    +1045    
    +1046                    @Override
    +1047                    public ParserChainJsonString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1048                            return super.register(marshaller);
    +1049                    }
    +1050    
    +1051                    @Override
    +1052                    public ParserChainJsonString warnings(List<List<String>> warnings) {
    +1053                            return super.warnings(warnings);
    +1054                    }
    +1055    
    +1056                    @Override
    +1057                    JCalReader _constructReader() {
    +1058                            return new JCalReader(text);
    +1059                    }
    +1060    
    +1061                    @Override
    +1062                    public ICalendar first() {
    +1063                            try {
    +1064                                    return super.first();
    +1065                            } catch (IOException e) {
    +1066                                    //should never been thrown because we're reading from a string
    +1067                                    throw new RuntimeException(e);
    +1068                            }
    +1069                    }
    +1070    
    +1071                    @Override
    +1072                    public List<ICalendar> all() {
    +1073                            try {
    +1074                                    return super.all();
    +1075                            } catch (IOException e) {
    +1076                                    //should never been thrown because we're reading from a string
    +1077                                    throw new RuntimeException(e);
    +1078                            }
    +1079                    }
    +1080            }
    +1081    
    +1082            static abstract class WriterChain<T> {
    +1083                    final Collection<ICalendar> icals;
    +1084                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +1085    
    +1086                    @SuppressWarnings("unchecked")
    +1087                    final T this_ = (T) this;
    +1088    
    +1089                    WriterChain(Collection<ICalendar> icals) {
    +1090                            this.icals = icals;
    +1091                    }
    +1092    
    +1093                    /**
    +1094                     * Registers a property marshaller.
    +1095                     * @param marshaller the marshaller
    +1096                     * @return this
    +1097                     */
    +1098                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1099                            registrar.register(marshaller);
    +1100                            return this_;
    +1101                    }
    +1102    
    +1103                    /**
    +1104                     * Registers a component marshaller.
    +1105                     * @param marshaller the marshaller
    +1106                     * @return this
    +1107                     */
    +1108                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1109                            registrar.register(marshaller);
    +1110                            return this_;
    +1111                    }
    +1112            }
    +1113    
    +1114            ///////////////////////////////////////////////////////
    +1115            // plain-text
    +1116            ///////////////////////////////////////////////////////
    +1117    
    +1118            /**
    +1119             * Chainer class for writing to plain text iCalendar data streams.
    +1120             * @see Biweekly#write(Collection)
    +1121             * @see Biweekly#write(ICalendar...)
    +1122             */
    +1123            public static class WriterChainText extends WriterChain<WriterChainText> {
    +1124                    boolean caretEncoding = false;
    +1125    
    +1126                    private WriterChainText(Collection<ICalendar> icals) {
    +1127                            super(icals);
    +1128                    }
    +1129    
    +1130                    /**
    +1131                     * <p>
    +1132                     * Sets whether the writer will apply circumflex accent encoding on
    +1133                     * parameter values (disabled by default). This escaping mechanism
    +1134                     * allows for newlines and double quotes to be included in parameter
    +1135                     * values.
    +1136                     * </p>
    +1137                     * 
    +1138                     * <p>
    +1139                     * When disabled, the writer will replace newlines with spaces and
    +1140                     * double quotes with single quotes.
    +1141                     * </p>
    +1142                     * @param enable true to use circumflex accent encoding, false not to
    +1143                     * @return this
    +1144                     * @see ICalRawWriter#setCaretEncodingEnabled(boolean)
    +1145                     */
    +1146                    public WriterChainText caretEncoding(boolean enable) {
    +1147                            this.caretEncoding = enable;
    +1148                            return this_;
    +1149                    }
    +1150    
    +1151                    /**
    +1152                     * Writes the iCalendar objects to a string.
    +1153                     * @return the iCalendar string
    +1154                     * @throws IllegalArgumentException if the marshaller class for a
    +1155                     * component or property object cannot be found (only happens when an
    +1156                     * experimental property/component marshaller is not registered with the
    +1157                     * {@code register} method.)
    +1158                     */
    +1159                    public String go() {
    +1160                            StringWriter sw = new StringWriter();
    +1161                            try {
    +1162                                    go(sw);
    +1163                            } catch (IOException e) {
    +1164                                    //writing to a string
    +1165                            }
    +1166                            return sw.toString();
    +1167                    }
    +1168    
    +1169                    /**
    +1170                     * Writes the iCalendar objects to a data stream.
    +1171                     * @param out the output stream to write to
    +1172                     * @throws IllegalArgumentException if the marshaller class for a
    +1173                     * component or property object cannot be found (only happens when an
    +1174                     * experimental property/component marshaller is not registered with the
    +1175                     * {@code register} method.)
    +1176                     * @throws IOException if there's a problem writing to the output stream
    +1177                     */
    +1178                    public void go(OutputStream out) throws IOException {
    +1179                            go(new ICalWriter(out));
    +1180                    }
    +1181    
    +1182                    /**
    +1183                     * Writes the iCalendar objects to a file.
    +1184                     * @param file the file to write to
    +1185                     * @throws IllegalArgumentException if the marshaller class for a
    +1186                     * component or property object cannot be found (only happens when an
    +1187                     * experimental property/component marshaller is not registered with the
    +1188                     * {@code register} method.)
    +1189                     * @throws IOException if there's a problem writing to the file
    +1190                     */
    +1191                    public void go(File file) throws IOException {
    +1192                            go(file, false);
    +1193                    }
    +1194    
    +1195                    /**
    +1196                     * Writes the iCalendar objects to a file.
    +1197                     * @param file the file to write to
    +1198                     * @param append true to append to the end of the file, false to
    +1199                     * overwrite it
    +1200                     * @throws IllegalArgumentException if the marshaller class for a
    +1201                     * component or property object cannot be found (only happens when an
    +1202                     * experimental property/component marshaller is not registered with the
    +1203                     * {@code register} method.)
    +1204                     * @throws IOException if there's a problem writing to the file
    +1205                     */
    +1206                    public void go(File file, boolean append) throws IOException {
    +1207                            ICalWriter icalWriter = new ICalWriter(file, append);
    +1208                            try {
    +1209                                    go(icalWriter);
    +1210                            } finally {
    +1211                                    IOUtils.closeQuietly(icalWriter);
    +1212                            }
    +1213                    }
    +1214    
    +1215                    /**
    +1216                     * Writes the iCalendar objects to a data stream.
    +1217                     * @param writer the writer to write to
    +1218                     * @throws IllegalArgumentException if the marshaller class for a
    +1219                     * component or property object cannot be found (only happens when an
    +1220                     * experimental property/component marshaller is not registered with the
    +1221                     * {@code register} method.)
    +1222                     * @throws IOException if there's a problem writing to the writer
    +1223                     */
    +1224                    public void go(Writer writer) throws IOException {
    +1225                            go(new ICalWriter(writer));
    +1226                    }
    +1227    
    +1228                    private void go(ICalWriter icalWriter) throws IOException {
    +1229                            icalWriter.setRegistrar(registrar);
    +1230                            icalWriter.setCaretEncodingEnabled(caretEncoding);
    +1231    
    +1232                            for (ICalendar ical : icals) {
    +1233                                    icalWriter.write(ical);
    +1234                            }
    +1235                    }
    +1236            }
    +1237    
    +1238            ///////////////////////////////////////////////////////
    +1239            // XML
    +1240            ///////////////////////////////////////////////////////
    +1241    
    +1242            /**
    +1243             * Chainer class for writing xCal documents (XML-encoded iCalendar objects).
    +1244             * @see Biweekly#writeXml(Collection)
    +1245             * @see Biweekly#writeXml(ICalendar...)
    +1246             */
    +1247            public static class WriterChainXml extends WriterChain<WriterChainXml> {
    +1248                    int indent = -1;
    +1249                    final Map<String, ICalDataType> parameterDataTypes = new HashMap<String, ICalDataType>(0);
    +1250    
    +1251                    WriterChainXml(Collection<ICalendar> icals) {
    +1252                            super(icals);
    +1253                    }
    +1254    
    +1255                    @Override
    +1256                    public WriterChainXml register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1257                            return super.register(marshaller);
    +1258                    }
    +1259    
    +1260                    @Override
    +1261                    public WriterChainXml register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1262                            return super.register(marshaller);
    +1263                    }
    +1264    
    +1265                    /**
    +1266                     * Registers the data type of an experimental parameter. Experimental
    +1267                     * parameters use the "unknown" xCal data type by default.
    +1268                     * @param parameterName the parameter name (e.g. "x-foo")
    +1269                     * @param dataType the data type
    +1270                     * @return this
    +1271                     */
    +1272                    public WriterChainXml register(String parameterName, ICalDataType dataType) {
    +1273                            parameterDataTypes.put(parameterName, dataType);
    +1274                            return this_;
    +1275                    }
    +1276    
    +1277                    /**
    +1278                     * Sets the number of indent spaces to use for pretty-printing. If not
    +1279                     * set, then the XML will not be pretty-printed.
    +1280                     * @param indent the number of spaces
    +1281                     * @return this
    +1282                     */
    +1283                    public WriterChainXml indent(int indent) {
    +1284                            this.indent = indent;
    +1285                            return this_;
    +1286                    }
    +1287    
    +1288                    /**
    +1289                     * Writes the xCal document to a string.
    +1290                     * @return the XML string
    +1291                     * @throws IllegalArgumentException if the marshaller class for a
    +1292                     * component or property object cannot be found (only happens when an
    +1293                     * experimental property/component marshaller is not registered with the
    +1294                     * {@code register} method.)
    +1295                     */
    +1296                    public String go() {
    +1297                            StringWriter sw = new StringWriter();
    +1298                            try {
    +1299                                    go(sw);
    +1300                            } catch (TransformerException e) {
    +1301                                    //writing to a string
    +1302                            }
    +1303                            return sw.toString();
    +1304                    }
    +1305    
    +1306                    /**
    +1307                     * Writes the xCal document to an output stream.
    +1308                     * @param out the output stream to write to
    +1309                     * @throws IllegalArgumentException if the marshaller class for a
    +1310                     * component or property object cannot be found (only happens when an
    +1311                     * experimental property/component marshaller is not registered with the
    +1312                     * {@code register} method.)
    +1313                     * @throws TransformerException if there's a problem writing the XML
    +1314                     */
    +1315                    public void go(OutputStream out) throws TransformerException {
    +1316                            XCalDocument document = constructDocument();
    +1317                            document.write(out, indent);
    +1318                    }
    +1319    
    +1320                    /**
    +1321                     * Writes the xCal document to a file.
    +1322                     * @param file the file to write to
    +1323                     * @throws IllegalArgumentException if the marshaller class for a
    +1324                     * component or property object cannot be found (only happens when an
    +1325                     * experimental property/component marshaller is not registered with the
    +1326                     * {@code register} method.)
    +1327                     * @throws TransformerException if there's a problem writing the XML
    +1328                     * @throws IOException if there's a problem writing to the file
    +1329                     */
    +1330                    public void go(File file) throws TransformerException, IOException {
    +1331                            XCalDocument document = constructDocument();
    +1332                            document.write(file, indent);
    +1333                    }
    +1334    
    +1335                    /**
    +1336                     * Writes the xCal document to a writer.
    +1337                     * @param writer the writer to write to
    +1338                     * @throws IllegalArgumentException if the marshaller class for a
    +1339                     * component or property object cannot be found (only happens when an
    +1340                     * experimental property/component marshaller is not registered with the
    +1341                     * {@code register} method.)
    +1342                     * @throws TransformerException if there's a problem writing the XML
    +1343                     */
    +1344                    public void go(Writer writer) throws TransformerException {
    +1345                            XCalDocument document = constructDocument();
    +1346                            document.write(writer, indent);
    +1347                    }
    +1348    
    +1349                    /**
    +1350                     * Writes the xCal document to an XML DOM.
    +1351                     * @return the XML DOM
    +1352                     */
    +1353                    public Document dom() {
    +1354                            XCalDocument document = constructDocument();
    +1355                            return document.getDocument();
    +1356                    }
    +1357    
    +1358                    private XCalDocument constructDocument() {
    +1359                            XCalDocument document = new XCalDocument();
    +1360                            document.setRegistrar(registrar);
    +1361                            for (Map.Entry<String, ICalDataType> entry : parameterDataTypes.entrySet()) {
    +1362                                    document.registerParameterDataType(entry.getKey(), entry.getValue());
    +1363                            }
    +1364    
    +1365                            for (ICalendar ical : icals) {
    +1366                                    document.add(ical);
    +1367                            }
    +1368    
    +1369                            return document;
    +1370                    }
    +1371            }
    +1372    
    +1373            ///////////////////////////////////////////////////////
    +1374            // JSON
    +1375            ///////////////////////////////////////////////////////
    +1376    
    +1377            /**
    +1378             * Chainer class for writing to JSON-encoded iCalendar data streams (jCal).
    +1379             * @see Biweekly#writeJson(Collection)
    +1380             * @see Biweekly#writeJson(ICalendar...)
    +1381             */
    +1382            public static class WriterChainJson extends WriterChain<WriterChainJson> {
    +1383                    private boolean indent = false;
    +1384    
    +1385                    private WriterChainJson(Collection<ICalendar> icals) {
    +1386                            super(icals);
    +1387                    }
    +1388    
    +1389                    /**
    +1390                     * Sets whether or not to pretty-print the JSON.
    +1391                     * @param indent true to pretty-print it, false not to (defaults to
    +1392                     * false)
    +1393                     * @return this
    +1394                     */
    +1395                    public WriterChainJson indent(boolean indent) {
    +1396                            this.indent = indent;
    +1397                            return this_;
    +1398                    }
    +1399    
    +1400                    /**
    +1401                     * Writes the iCalendar objects to a string.
    +1402                     * @return the iCalendar string
    +1403                     * @throws IllegalArgumentException if the marshaller class for a
    +1404                     * component or property object cannot be found (only happens when an
    +1405                     * experimental property/component marshaller is not registered with the
    +1406                     * {@code register} method.)
    +1407                     */
    +1408                    public String go() {
    +1409                            StringWriter sw = new StringWriter();
    +1410                            try {
    +1411                                    go(sw);
    +1412                            } catch (IOException e) {
    +1413                                    //writing to a string
    +1414                            }
    +1415                            return sw.toString();
    +1416                    }
    +1417    
    +1418                    /**
    +1419                     * Writes the iCalendar objects to a data stream.
    +1420                     * @param out the output stream to write to
    +1421                     * @throws IllegalArgumentException if the marshaller class for a
    +1422                     * component or property object cannot be found (only happens when an
    +1423                     * experimental property/component marshaller is not registered with the
    +1424                     * {@code register} method.)
    +1425                     * @throws IOException if there's a problem writing to the output stream
    +1426                     */
    +1427                    public void go(OutputStream out) throws IOException {
    +1428                            go(new JCalWriter(out, icals.size() > 1));
    +1429                    }
    +1430    
    +1431                    /**
    +1432                     * Writes the iCalendar objects to a file.
    +1433                     * @param file the file to write to
    +1434                     * @throws IllegalArgumentException if the marshaller class for a
    +1435                     * component or property object cannot be found (only happens when an
    +1436                     * experimental property/component marshaller is not registered with the
    +1437                     * {@code register} method.)
    +1438                     * @throws IOException if there's a problem writing to the file
    +1439                     */
    +1440                    public void go(File file) throws IOException {
    +1441                            JCalWriter jcalWriter = new JCalWriter(file, icals.size() > 1);
    +1442                            try {
    +1443                                    go(jcalWriter);
    +1444                            } finally {
    +1445                                    IOUtils.closeQuietly(jcalWriter);
    +1446                            }
    +1447                    }
    +1448    
    +1449                    /**
    +1450                     * Writes the iCalendar objects to a data stream.
    +1451                     * @param writer the writer to write to
    +1452                     * @throws IllegalArgumentException if the marshaller class for a
    +1453                     * component or property object cannot be found (only happens when an
    +1454                     * experimental property/component marshaller is not registered with the
    +1455                     * {@code register} method.)
    +1456                     * @throws IOException if there's a problem writing to the writer
    +1457                     */
    +1458                    public void go(Writer writer) throws IOException {
    +1459                            go(new JCalWriter(writer, icals.size() > 1));
    +1460                    }
    +1461    
    +1462                    private void go(JCalWriter jcalWriter) throws IOException {
    +1463                            jcalWriter.setRegistrar(registrar);
    +1464                            jcalWriter.setIndent(indent);
    +1465    
    +1466                            for (ICalendar ical : icals) {
    +1467                                    jcalWriter.write(ical);
    +1468                            }
    +1469                            jcalWriter.closeJsonStream();
    +1470                    }
    +1471            }
    +1472    
    +1473            private Biweekly() {
    +1474                    //hide
    +1475            }
    +1476    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.WriterChainText.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.WriterChainText.html new file mode 100644 index 000000000..6e42f0110 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.WriterChainText.html @@ -0,0 +1,1542 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.io.File;
    +004    import java.io.IOException;
    +005    import java.io.InputStream;
    +006    import java.io.OutputStream;
    +007    import java.io.Reader;
    +008    import java.io.StringWriter;
    +009    import java.io.Writer;
    +010    import java.util.ArrayList;
    +011    import java.util.Arrays;
    +012    import java.util.Collection;
    +013    import java.util.HashMap;
    +014    import java.util.List;
    +015    import java.util.Map;
    +016    import java.util.Properties;
    +017    
    +018    import javax.xml.transform.TransformerException;
    +019    
    +020    import org.w3c.dom.Document;
    +021    import org.xml.sax.SAXException;
    +022    
    +023    import biweekly.component.ICalComponent;
    +024    import biweekly.component.marshaller.ICalComponentMarshaller;
    +025    import biweekly.io.ICalMarshallerRegistrar;
    +026    import biweekly.io.json.JCalParseException;
    +027    import biweekly.io.json.JCalReader;
    +028    import biweekly.io.json.JCalWriter;
    +029    import biweekly.io.text.ICalRawReader;
    +030    import biweekly.io.text.ICalRawWriter;
    +031    import biweekly.io.text.ICalReader;
    +032    import biweekly.io.text.ICalWriter;
    +033    import biweekly.io.xml.XCalDocument;
    +034    import biweekly.property.ICalProperty;
    +035    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +036    import biweekly.util.IOUtils;
    +037    
    +038    import com.fasterxml.jackson.core.JsonParseException;
    +039    
    +040    /*
    +041     Copyright (c) 2013, Michael Angstadt
    +042     All rights reserved.
    +043    
    +044     Redistribution and use in source and binary forms, with or without
    +045     modification, are permitted provided that the following conditions are met: 
    +046    
    +047     1. Redistributions of source code must retain the above copyright notice, this
    +048     list of conditions and the following disclaimer. 
    +049     2. Redistributions in binary form must reproduce the above copyright notice,
    +050     this list of conditions and the following disclaimer in the documentation
    +051     and/or other materials provided with the distribution. 
    +052    
    +053     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +054     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +055     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +056     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +057     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +058     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +059     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +060     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +061     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +062     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +063     */
    +064    
    +065    /**
    +066     * <p>
    +067     * Contains static chaining factory methods for reading/writing iCalendar
    +068     * objects.
    +069     * </p>
    +070     * 
    +071     * <p>
    +072     * <b>Writing an iCalendar object</b>
    +073     * 
    +074     * <pre class="brush:java">
    +075     * ICalendar ical = new ICalendar();
    +076     * 
    +077     * //string
    +078     * String icalString = Biweekly.write(ical).go();
    +079     * 
    +080     * //file
    +081     * File file = new File("meeting.ics");
    +082     * Biweekly.write(ical).go(file);
    +083     * 
    +084     * //output stream
    +085     * OutputStream out = ...
    +086     * Biweekly.write(ical).go(out);
    +087     * out.close();
    +088     * 
    +089     * //writer (should be configured to use UTF-8 encoding)
    +090     * Writer writer = ...
    +091     * Biweekly.write(ical).go(writer);
    +092     * writer.close();
    +093     * </pre>
    +094     * 
    +095     * </p>
    +096     * 
    +097     * <p>
    +098     * <b>Writing multiple iCalendar objects</b>
    +099     * 
    +100     * <pre class="brush:java">
    +101     * ICalendar ical1 = new ICalendar();
    +102     * ICalendar ical2 = new ICalendar();
    +103     * 
    +104     * String icalString = Biweekly.write(ical1, ical2).go();
    +105     * </pre>
    +106     * 
    +107     * </p>
    +108     * 
    +109     * <p>
    +110     * <b>Writing an XML-encoded iCalendar object (xCal)</b><br>
    +111     * 
    +112     * <pre class="brush:java">
    +113     * //Call writeXml() instead of write()
    +114     * ICalendar ical = new ICalendar();
    +115     * String xml = Biweekly.writeXml(ical).indent(2).go();
    +116     * </pre>
    +117     * 
    +118     * </p>
    +119     * 
    +120     * <p>
    +121     * <b>Writing a JSON-encoded iCalendar object (jCal)</b><br>
    +122     * 
    +123     * <pre class="brush:java">
    +124     * //Call writeJson() instead of write()
    +125     * ICalendar ical = new ICalendar();
    +126     * String json = Biweekly.writeJson(ical).go();
    +127     * </pre>
    +128     * 
    +129     * </p>
    +130     * 
    +131     * <p>
    +132     * <b>Reading an iCalendar object</b>
    +133     * 
    +134     * <pre class="brush:java">
    +135     * ICalendar ical;
    +136     * 
    +137     * //string
    +138     * String icalStr = ...
    +139     * ical = Biweekly.parse(icalStr).first();
    +140     * 
    +141     * //file
    +142     * File file = new File("meeting.ics");
    +143     * ical = Biweekly.parse(file).first();
    +144     * 
    +145     * //input stream
    +146     * InputStream in = ...
    +147     * ical = Biweekly.parse(in).first();
    +148     * in.close();  
    +149     * 
    +150     * //reader (should be configured to read UTF-8)
    +151     * Reader reader = ...
    +152     * ical = Biweekly.parse(reader).first();
    +153     * reader.close();
    +154     * </pre>
    +155     * 
    +156     * </p>
    +157     * 
    +158     * <p>
    +159     * <b>Reading multiple iCalendar objects</b>
    +160     * 
    +161     * <pre class="brush:java">
    +162     * String icalStr = ...
    +163     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).all();
    +164     * </pre>
    +165     * 
    +166     * </p>
    +167     * 
    +168     * <p>
    +169     * <b>Reading an XML-encoded iCalendar object (xCal)</b><br>
    +170     * 
    +171     * <pre class="brush:java">
    +172     * //Call parseXml() instead of parse()
    +173     * String xml = ...
    +174     * ICalendar ical = Biweekly.parseXml(xml).first();
    +175     * </pre>
    +176     * 
    +177     * </p>
    +178     * 
    +179     * <p>
    +180     * <b>Reading a JSON-encoded iCalendar object (Cal)</b><br>
    +181     * 
    +182     * <pre class="brush:java">
    +183     * //Call parseJson() instead of parse()
    +184     * String json = ...
    +185     * ICalendar ical = Biweekly.parseJson(json).first();
    +186     * </pre>
    +187     * 
    +188     * </p>
    +189     * 
    +190     * <p>
    +191     * <b>Retrieving parser warnings</b>
    +192     * 
    +193     * <pre class="brush:java">
    +194     * String icalStr = ...
    +195     * List&lt;List&lt;String&gt;&gt; warnings = new ArrayList&lt;List&lt;String&gt;&gt;();
    +196     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).warnings(warnings).all();
    +197     * int i = 0;
    +198     * for (List&lt;String&gt; icalWarnings : warnings){
    +199     *   System.out.println("iCal #" + (i++) + " warnings:");
    +200     *   for (String warning : icalWarnings){
    +201     *     System.out.println(warning);
    +202     *   }
    +203     * }
    +204     * </pre>
    +205     * 
    +206     * </p>
    +207     * 
    +208     * <p>
    +209     * The methods in this class make use of the following classes. These classes
    +210     * can be used if greater control over the read/write operation is required:
    +211     * </p>
    +212     * 
    +213     * <style> table.t td, table.t th {border:1px solid #000;} </style>
    +214     * <table class="t" cellpadding="5" style="border-collapse:collapse;">
    +215     * <tr>
    +216     * <th></th>
    +217     * <th>Classes</th>
    +218     * <th>Supports<br>
    +219     * streaming?</th>
    +220     * </tr>
    +221     * <tr>
    +222     * <th>Text</th>
    +223     * <td>{@link ICalReader} / {@link ICalWriter}</td>
    +224     * <td>yes</td>
    +225     * </tr>
    +226     * <tr>
    +227     * <th>XML</th>
    +228     * <td>{@link XCalDocument}</td>
    +229     * <td>no</td>
    +230     * </tr>
    +231     * <tr>
    +232     * <th>JSON</th>
    +233     * <td>{@link JCalReader} / {@link JCalWriter}</td>
    +234     * <td>yes</td>
    +235     * </tr>
    +236     * </table>
    +237     * @author Michael Angstadt
    +238     */
    +239    public class Biweekly {
    +240            /**
    +241             * The version of the library.
    +242             */
    +243            public static final String VERSION;
    +244    
    +245            /**
    +246             * The project webpage.
    +247             */
    +248            public static final String URL;
    +249    
    +250            static {
    +251                    InputStream in = null;
    +252                    try {
    +253                            in = Biweekly.class.getResourceAsStream("/biweekly.properties");
    +254                            Properties props = new Properties();
    +255                            props.load(in);
    +256    
    +257                            VERSION = props.getProperty("version");
    +258                            URL = props.getProperty("url");
    +259                    } catch (IOException e) {
    +260                            throw new RuntimeException(e);
    +261                    } finally {
    +262                            IOUtils.closeQuietly(in);
    +263                    }
    +264            }
    +265    
    +266            /**
    +267             * Parses an iCalendar object string.
    +268             * @param ical the iCalendar data
    +269             * @return chainer object for completing the parse operation
    +270             */
    +271            public static ParserChainTextString parse(String ical) {
    +272                    return new ParserChainTextString(ical);
    +273            }
    +274    
    +275            /**
    +276             * Parses an iCalendar file.
    +277             * @param file the iCalendar file
    +278             * @return chainer object for completing the parse operation
    +279             */
    +280            public static ParserChainTextReader parse(File file) {
    +281                    return new ParserChainTextReader(file);
    +282            }
    +283    
    +284            /**
    +285             * Parses an iCalendar data stream.
    +286             * @param in the input stream
    +287             * @return chainer object for completing the parse operation
    +288             */
    +289            public static ParserChainTextReader parse(InputStream in) {
    +290                    return new ParserChainTextReader(in);
    +291            }
    +292    
    +293            /**
    +294             * Parses an iCalendar data stream.
    +295             * @param reader the reader
    +296             * @return chainer object for completing the parse operation
    +297             */
    +298            public static ParserChainTextReader parse(Reader reader) {
    +299                    return new ParserChainTextReader(reader);
    +300            }
    +301    
    +302            /**
    +303             * Writes multiple iCalendar objects to a data stream.
    +304             * @param icals the iCalendar objects to write
    +305             * @return chainer object for completing the write operation
    +306             */
    +307            public static WriterChainText write(ICalendar... icals) {
    +308                    return write(Arrays.asList(icals));
    +309            }
    +310    
    +311            /**
    +312             * Writes multiple iCalendar objects to a data stream.
    +313             * @param icals the iCalendar objects to write
    +314             * @return chainer object for completing the write operation
    +315             */
    +316            public static WriterChainText write(Collection<ICalendar> icals) {
    +317                    return new WriterChainText(icals);
    +318            }
    +319    
    +320            /**
    +321             * Parses an xCal document (XML-encoded iCalendar objects) from a string.
    +322             * @param xml the XML string
    +323             * @return chainer object for completing the parse operation
    +324             */
    +325            public static ParserChainXmlString parseXml(String xml) {
    +326                    return new ParserChainXmlString(xml);
    +327            }
    +328    
    +329            /**
    +330             * Parses an xCal document (XML-encoded iCalendar objects) from a file.
    +331             * @param file the XML file
    +332             * @return chainer object for completing the parse operation
    +333             */
    +334            public static ParserChainXmlReader parseXml(File file) {
    +335                    return new ParserChainXmlReader(file);
    +336            }
    +337    
    +338            /**
    +339             * Parses an xCal document (XML-encoded iCalendar objects) from an input
    +340             * stream.
    +341             * @param in the input stream
    +342             * @return chainer object for completing the parse operation
    +343             */
    +344            public static ParserChainXmlReader parseXml(InputStream in) {
    +345                    return new ParserChainXmlReader(in);
    +346            }
    +347    
    +348            /**
    +349             * <p>
    +350             * Parses an xCal document (XML-encoded iCalendar objects) from a reader.
    +351             * </p>
    +352             * <p>
    +353             * Note that use of this method is discouraged. It ignores the character
    +354             * encoding that is defined within the XML document itself, and should only
    +355             * be used if the encoding is undefined or if the encoding needs to be
    +356             * ignored for whatever reason. The {@link #parseXml(InputStream)} method
    +357             * should be used instead, since it takes the XML document's character
    +358             * encoding into account when parsing.
    +359             * </p>
    +360             * @param reader the reader
    +361             * @return chainer object for completing the parse operation
    +362             */
    +363            public static ParserChainXmlReader parseXml(Reader reader) {
    +364                    return new ParserChainXmlReader(reader);
    +365            }
    +366    
    +367            /**
    +368             * Parses an xCal document (XML-encoded iCalendar objects).
    +369             * @param document the XML document
    +370             * @return chainer object for completing the parse operation
    +371             */
    +372            public static ParserChainXmlDocument parseXml(Document document) {
    +373                    return new ParserChainXmlDocument(document);
    +374            }
    +375    
    +376            /**
    +377             * Writes an xCal document (XML-encoded iCalendar objects).
    +378             * @param icals the iCalendar object(s) to write
    +379             * @return chainer object for completing the write operation
    +380             */
    +381            public static WriterChainXml writeXml(ICalendar... icals) {
    +382                    return writeXml(Arrays.asList(icals));
    +383            }
    +384    
    +385            /**
    +386             * Writes an xCal document (XML-encoded iCalendar objects).
    +387             * @param icals the iCalendar objects to write
    +388             * @return chainer object for completing the write operation
    +389             */
    +390            public static WriterChainXml writeXml(Collection<ICalendar> icals) {
    +391                    return new WriterChainXml(icals);
    +392            }
    +393    
    +394            /**
    +395             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +396             * @param json the JSON data
    +397             * @return chainer object for completing the parse operation
    +398             */
    +399            public static ParserChainJsonString parseJson(String json) {
    +400                    return new ParserChainJsonString(json);
    +401            }
    +402    
    +403            /**
    +404             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +405             * @param file the JSON file
    +406             * @return chainer object for completing the parse operation
    +407             */
    +408            public static ParserChainJsonReader parseJson(File file) {
    +409                    return new ParserChainJsonReader(file);
    +410            }
    +411    
    +412            /**
    +413             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +414             * @param in the input stream
    +415             * @return chainer object for completing the parse operation
    +416             */
    +417            public static ParserChainJsonReader parseJson(InputStream in) {
    +418                    return new ParserChainJsonReader(in);
    +419            }
    +420    
    +421            /**
    +422             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +423             * @param reader the reader
    +424             * @return chainer object for completing the parse operation
    +425             */
    +426            public static ParserChainJsonReader parseJson(Reader reader) {
    +427                    return new ParserChainJsonReader(reader);
    +428            }
    +429    
    +430            /**
    +431             * Writes an xCal document (XML-encoded iCalendar objects).
    +432             * @param icals the iCalendar object(s) to write
    +433             * @return chainer object for completing the write operation
    +434             */
    +435            public static WriterChainJson writeJson(ICalendar... icals) {
    +436                    return writeJson(Arrays.asList(icals));
    +437            }
    +438    
    +439            /**
    +440             * Writes an xCal document (XML-encoded iCalendar objects).
    +441             * @param icals the iCalendar objects to write
    +442             * @return chainer object for completing the write operation
    +443             */
    +444            public static WriterChainJson writeJson(Collection<ICalendar> icals) {
    +445                    return new WriterChainJson(icals);
    +446            }
    +447    
    +448            static abstract class ParserChain<T> {
    +449                    //Note: "package" level is used so various fields/methods don't show up in the Javadocs, but are still visible to child classes
    +450                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +451    
    +452                    @SuppressWarnings("unchecked")
    +453                    final T this_ = (T) this;
    +454    
    +455                    List<List<String>> warnings;
    +456    
    +457                    /**
    +458                     * Registers a property marshaller.
    +459                     * @param marshaller the marshaller
    +460                     * @return this
    +461                     */
    +462                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +463                            registrar.register(marshaller);
    +464                            return this_;
    +465                    }
    +466    
    +467                    /**
    +468                     * Registers a component marshaller.
    +469                     * @param marshaller the marshaller
    +470                     * @return this
    +471                     */
    +472                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +473                            registrar.register(marshaller);
    +474                            return this_;
    +475                    }
    +476    
    +477                    /**
    +478                     * Provides a list for putting the parser warnings into.
    +479                     * @param warnings the list object to populate (it is a
    +480                     * "list of lists"--each parsed {@link ICalendar} object has its own
    +481                     * warnings list)
    +482                     * @return this
    +483                     */
    +484                    public T warnings(List<List<String>> warnings) {
    +485                            this.warnings = warnings;
    +486                            return this_;
    +487                    }
    +488    
    +489                    /**
    +490                     * Reads the first iCalendar object from the data stream.
    +491                     * @return the first iCalendar object or null if there are none
    +492                     * @throws IOException if there a problem reading from the data stream
    +493                     * @throws SAXException if there's a problem parsing the XML
    +494                     */
    +495                    public abstract ICalendar first() throws IOException, SAXException;
    +496    
    +497                    /**
    +498                     * Reads all iCalendar objects from the data stream.
    +499                     * @return the parsed iCalendar objects
    +500                     * @throws IOException if there's a problem reading from the data stream
    +501                     * @throws SAXException if there's a problem parsing the XML
    +502                     */
    +503                    public abstract List<ICalendar> all() throws IOException, SAXException;
    +504            }
    +505    
    +506            ///////////////////////////////////////////////////////
    +507            // plain-text
    +508            ///////////////////////////////////////////////////////
    +509    
    +510            static abstract class ParserChainText<T> extends ParserChain<T> {
    +511                    boolean caretDecoding = true;
    +512                    final boolean closeWhenDone;
    +513    
    +514                    private ParserChainText(boolean closeWhenDone) {
    +515                            this.closeWhenDone = closeWhenDone;
    +516                    }
    +517    
    +518                    /**
    +519                     * Sets whether the reader will decode parameter values that use
    +520                     * circumflex accent encoding (enabled by default). This escaping
    +521                     * mechanism allows newlines and double quotes to be included in
    +522                     * parameter values.
    +523                     * @param enable true to use circumflex accent decoding, false not to
    +524                     * @return this
    +525                     * @see ICalRawReader#setCaretDecodingEnabled(boolean)
    +526                     */
    +527                    public T caretDecoding(boolean enable) {
    +528                            caretDecoding = enable;
    +529                            return this_;
    +530                    }
    +531    
    +532                    @Override
    +533                    public ICalendar first() throws IOException {
    +534                            ICalReader parser = constructReader();
    +535    
    +536                            try {
    +537                                    ICalendar ical = parser.readNext();
    +538                                    if (warnings != null) {
    +539                                            warnings.add(parser.getWarnings());
    +540                                    }
    +541                                    return ical;
    +542                            } finally {
    +543                                    if (closeWhenDone) {
    +544                                            IOUtils.closeQuietly(parser);
    +545                                    }
    +546                            }
    +547                    }
    +548    
    +549                    @Override
    +550                    public List<ICalendar> all() throws IOException {
    +551                            ICalReader parser = constructReader();
    +552    
    +553                            try {
    +554                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +555                                    ICalendar ical;
    +556                                    while ((ical = parser.readNext()) != null) {
    +557                                            if (warnings != null) {
    +558                                                    warnings.add(parser.getWarnings());
    +559                                            }
    +560                                            icals.add(ical);
    +561                                    }
    +562                                    return icals;
    +563                            } finally {
    +564                                    if (closeWhenDone) {
    +565                                            IOUtils.closeQuietly(parser);
    +566                                    }
    +567                            }
    +568                    }
    +569    
    +570                    private ICalReader constructReader() throws IOException {
    +571                            ICalReader parser = _constructReader();
    +572                            parser.setRegistrar(registrar);
    +573                            parser.setCaretDecodingEnabled(caretDecoding);
    +574                            return parser;
    +575                    }
    +576    
    +577                    abstract ICalReader _constructReader() throws IOException;
    +578            }
    +579    
    +580            /**
    +581             * Chainer class for parsing plain text iCalendar data streams.
    +582             * @see Biweekly#parse(InputStream)
    +583             * @see Biweekly#parse(File)
    +584             * @see Biweekly#parse(Reader)
    +585             */
    +586            public static class ParserChainTextReader extends ParserChainText<ParserChainTextReader> {
    +587                    private final InputStream in;
    +588                    private final File file;
    +589                    private final Reader reader;
    +590    
    +591                    private ParserChainTextReader(InputStream in) {
    +592                            super(false);
    +593                            this.in = in;
    +594                            this.reader = null;
    +595                            this.file = null;
    +596                    }
    +597    
    +598                    private ParserChainTextReader(File file) {
    +599                            super(true);
    +600                            this.in = null;
    +601                            this.reader = null;
    +602                            this.file = file;
    +603                    }
    +604    
    +605                    private ParserChainTextReader(Reader reader) {
    +606                            super(false);
    +607                            this.in = null;
    +608                            this.reader = reader;
    +609                            this.file = null;
    +610                    }
    +611    
    +612                    @Override
    +613                    public ParserChainTextReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +614                            return super.register(marshaller);
    +615                    }
    +616    
    +617                    @Override
    +618                    public ParserChainTextReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +619                            return super.register(marshaller);
    +620                    }
    +621    
    +622                    @Override
    +623                    public ParserChainTextReader warnings(List<List<String>> warnings) {
    +624                            return super.warnings(warnings);
    +625                    }
    +626    
    +627                    @Override
    +628                    public ParserChainTextReader caretDecoding(boolean enable) {
    +629                            return super.caretDecoding(enable);
    +630                    }
    +631    
    +632                    @Override
    +633                    ICalReader _constructReader() throws IOException {
    +634                            if (in != null) {
    +635                                    return new ICalReader(in);
    +636                            }
    +637                            if (file != null) {
    +638                                    return new ICalReader(file);
    +639                            }
    +640                            return new ICalReader(reader);
    +641                    }
    +642            }
    +643    
    +644            /**
    +645             * Chainer class for parsing plain text iCalendar strings.
    +646             * @see Biweekly#parse(String)
    +647             */
    +648            public static class ParserChainTextString extends ParserChainText<ParserChainTextString> {
    +649                    private final String text;
    +650    
    +651                    private ParserChainTextString(String text) {
    +652                            super(false);
    +653                            this.text = text;
    +654                    }
    +655    
    +656                    @Override
    +657                    public ParserChainTextString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +658                            return super.register(marshaller);
    +659                    }
    +660    
    +661                    @Override
    +662                    public ParserChainTextString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +663                            return super.register(marshaller);
    +664                    }
    +665    
    +666                    @Override
    +667                    public ParserChainTextString warnings(List<List<String>> warnings) {
    +668                            return super.warnings(warnings);
    +669                    }
    +670    
    +671                    @Override
    +672                    public ParserChainTextString caretDecoding(boolean enable) {
    +673                            return super.caretDecoding(enable);
    +674                    }
    +675    
    +676                    @Override
    +677                    ICalReader _constructReader() {
    +678                            return new ICalReader(text);
    +679                    }
    +680    
    +681                    @Override
    +682                    public ICalendar first() {
    +683                            try {
    +684                                    return super.first();
    +685                            } catch (IOException e) {
    +686                                    //should never been thrown because we're reading from a string
    +687                                    throw new RuntimeException(e);
    +688                            }
    +689                    }
    +690    
    +691                    @Override
    +692                    public List<ICalendar> all() {
    +693                            try {
    +694                                    return super.all();
    +695                            } catch (IOException e) {
    +696                                    //should never been thrown because we're reading from a string
    +697                                    throw new RuntimeException(e);
    +698                            }
    +699                    }
    +700            }
    +701    
    +702            ///////////////////////////////////////////////////////
    +703            // XML
    +704            ///////////////////////////////////////////////////////
    +705    
    +706            static abstract class ParserChainXml<T> extends ParserChain<T> {
    +707                    @Override
    +708                    public ICalendar first() throws IOException, SAXException {
    +709                            XCalDocument document = constructDocument();
    +710                            ICalendar ical = document.parseFirst();
    +711                            if (warnings != null) {
    +712                                    warnings.addAll(document.getParseWarnings());
    +713                            }
    +714                            return ical;
    +715                    }
    +716    
    +717                    @Override
    +718                    public List<ICalendar> all() throws IOException, SAXException {
    +719                            XCalDocument document = constructDocument();
    +720                            List<ICalendar> icals = document.parseAll();
    +721                            if (warnings != null) {
    +722                                    warnings.addAll(document.getParseWarnings());
    +723                            }
    +724                            return icals;
    +725                    }
    +726    
    +727                    private XCalDocument constructDocument() throws SAXException, IOException {
    +728                            XCalDocument parser = _constructDocument();
    +729                            parser.setRegistrar(registrar);
    +730                            return parser;
    +731                    }
    +732    
    +733                    abstract XCalDocument _constructDocument() throws IOException, SAXException;
    +734            }
    +735    
    +736            /**
    +737             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +738             * @see Biweekly#parseXml(String)
    +739             */
    +740            public static class ParserChainXmlString extends ParserChainXml<ParserChainXmlString> {
    +741                    private final String xml;
    +742    
    +743                    private ParserChainXmlString(String xml) {
    +744                            this.xml = xml;
    +745                    }
    +746    
    +747                    @Override
    +748                    public ParserChainXmlString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +749                            return super.register(marshaller);
    +750                    }
    +751    
    +752                    @Override
    +753                    public ParserChainXmlString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +754                            return super.register(marshaller);
    +755                    }
    +756    
    +757                    @Override
    +758                    public ParserChainXmlString warnings(List<List<String>> warnings) {
    +759                            return super.warnings(warnings);
    +760                    }
    +761    
    +762                    @Override
    +763                    XCalDocument _constructDocument() throws SAXException {
    +764                            return new XCalDocument(xml);
    +765                    }
    +766    
    +767                    @Override
    +768                    public ICalendar first() throws SAXException {
    +769                            try {
    +770                                    return super.first();
    +771                            } catch (IOException e) {
    +772                                    //should never been thrown because we're reading from a string
    +773                                    throw new RuntimeException(e);
    +774                            }
    +775                    }
    +776    
    +777                    @Override
    +778                    public List<ICalendar> all() throws SAXException {
    +779                            try {
    +780                                    return super.all();
    +781                            } catch (IOException e) {
    +782                                    //should never been thrown because we're reading from a string
    +783                                    throw new RuntimeException(e);
    +784                            }
    +785                    }
    +786            }
    +787    
    +788            /**
    +789             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +790             * @see Biweekly#parseXml(InputStream)
    +791             * @see Biweekly#parseXml(File)
    +792             * @see Biweekly#parseXml(Reader)
    +793             */
    +794            public static class ParserChainXmlReader extends ParserChainXml<ParserChainXmlReader> {
    +795                    private final InputStream in;
    +796                    private final File file;
    +797                    private final Reader reader;
    +798    
    +799                    private ParserChainXmlReader(InputStream in) {
    +800                            this.in = in;
    +801                            this.reader = null;
    +802                            this.file = null;
    +803                    }
    +804    
    +805                    private ParserChainXmlReader(File file) {
    +806                            this.in = null;
    +807                            this.reader = null;
    +808                            this.file = file;
    +809                    }
    +810    
    +811                    private ParserChainXmlReader(Reader reader) {
    +812                            this.in = null;
    +813                            this.reader = reader;
    +814                            this.file = null;
    +815                    }
    +816    
    +817                    @Override
    +818                    public ParserChainXmlReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +819                            return super.register(marshaller);
    +820                    }
    +821    
    +822                    @Override
    +823                    public ParserChainXmlReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +824                            return super.register(marshaller);
    +825                    }
    +826    
    +827                    @Override
    +828                    public ParserChainXmlReader warnings(List<List<String>> warnings) {
    +829                            return super.warnings(warnings);
    +830                    }
    +831    
    +832                    @Override
    +833                    XCalDocument _constructDocument() throws IOException, SAXException {
    +834                            if (in != null) {
    +835                                    return new XCalDocument(in);
    +836                            }
    +837                            if (file != null) {
    +838                                    return new XCalDocument(file);
    +839                            }
    +840                            return new XCalDocument(reader);
    +841                    }
    +842            }
    +843    
    +844            /**
    +845             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +846             * @see Biweekly#parseXml(Document)
    +847             */
    +848            public static class ParserChainXmlDocument extends ParserChainXml<ParserChainXmlDocument> {
    +849                    private final Document document;
    +850    
    +851                    private ParserChainXmlDocument(Document document) {
    +852                            this.document = document;
    +853                    }
    +854    
    +855                    @Override
    +856                    public ParserChainXmlDocument register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +857                            return super.register(marshaller);
    +858                    }
    +859    
    +860                    @Override
    +861                    public ParserChainXmlDocument register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +862                            return super.register(marshaller);
    +863                    }
    +864    
    +865                    @Override
    +866                    public ParserChainXmlDocument warnings(List<List<String>> warnings) {
    +867                            return super.warnings(warnings);
    +868                    }
    +869    
    +870                    @Override
    +871                    XCalDocument _constructDocument() {
    +872                            return new XCalDocument(document);
    +873                    }
    +874    
    +875                    @Override
    +876                    public ICalendar first() {
    +877                            try {
    +878                                    return super.first();
    +879                            } catch (IOException e) {
    +880                                    //should never been thrown because we're reading from a DOM
    +881                                    throw new RuntimeException(e);
    +882                            } catch (SAXException e) {
    +883                                    //should never been thrown because we're reading from a DOM
    +884                                    throw new RuntimeException(e);
    +885                            }
    +886                    }
    +887    
    +888                    @Override
    +889                    public List<ICalendar> all() {
    +890                            try {
    +891                                    return super.all();
    +892                            } catch (IOException e) {
    +893                                    //should never been thrown because we're reading from a DOM
    +894                                    throw new RuntimeException(e);
    +895                            } catch (SAXException e) {
    +896                                    //should never been thrown because we're reading from a DOM
    +897                                    throw new RuntimeException(e);
    +898                            }
    +899                    }
    +900            }
    +901    
    +902            ///////////////////////////////////////////////////////
    +903            // JSON
    +904            ///////////////////////////////////////////////////////
    +905    
    +906            static abstract class ParserChainJson<T> extends ParserChain<T> {
    +907                    final boolean closeWhenDone;
    +908    
    +909                    private ParserChainJson(boolean closeWhenDone) {
    +910                            this.closeWhenDone = closeWhenDone;
    +911                    }
    +912    
    +913                    /**
    +914                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +915                     * syntax may be valid, but it is not in the correct jCal format).
    +916                     * @throws JsonParseException if the JSON syntax is incorrect
    +917                     */
    +918                    @Override
    +919                    public ICalendar first() throws IOException {
    +920                            JCalReader parser = constructReader();
    +921    
    +922                            try {
    +923                                    ICalendar ical = parser.readNext();
    +924                                    if (warnings != null) {
    +925                                            warnings.add(parser.getWarnings());
    +926                                    }
    +927                                    return ical;
    +928                            } finally {
    +929                                    if (closeWhenDone) {
    +930                                            IOUtils.closeQuietly(parser);
    +931                                    }
    +932                            }
    +933                    }
    +934    
    +935                    /**
    +936                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +937                     * syntax may be valid, but it is not in the correct jCal format).
    +938                     * @throws JsonParseException if the JSON syntax is incorrect
    +939                     */
    +940                    @Override
    +941                    public List<ICalendar> all() throws IOException {
    +942                            JCalReader parser = constructReader();
    +943    
    +944                            try {
    +945                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +946                                    ICalendar ical;
    +947                                    while ((ical = parser.readNext()) != null) {
    +948                                            if (warnings != null) {
    +949                                                    warnings.add(parser.getWarnings());
    +950                                            }
    +951                                            icals.add(ical);
    +952                                    }
    +953                                    return icals;
    +954                            } finally {
    +955                                    if (closeWhenDone) {
    +956                                            IOUtils.closeQuietly(parser);
    +957                                    }
    +958                            }
    +959                    }
    +960    
    +961                    private JCalReader constructReader() throws IOException {
    +962                            JCalReader parser = _constructReader();
    +963                            parser.setRegistrar(registrar);
    +964                            return parser;
    +965                    }
    +966    
    +967                    abstract JCalReader _constructReader() throws IOException;
    +968            }
    +969    
    +970            /**
    +971             * Chainer class for parsing JSON-encoded iCalendar data streams (jCal).
    +972             * @see Biweekly#parseJson(InputStream)
    +973             * @see Biweekly#parseJson(File)
    +974             * @see Biweekly#parseJson(Reader)
    +975             */
    +976            public static class ParserChainJsonReader extends ParserChainJson<ParserChainJsonReader> {
    +977                    private final InputStream in;
    +978                    private final File file;
    +979                    private final Reader reader;
    +980    
    +981                    private ParserChainJsonReader(InputStream in) {
    +982                            super(false);
    +983                            this.in = in;
    +984                            this.reader = null;
    +985                            this.file = null;
    +986                    }
    +987    
    +988                    private ParserChainJsonReader(File file) {
    +989                            super(true);
    +990                            this.in = null;
    +991                            this.reader = null;
    +992                            this.file = file;
    +993                    }
    +994    
    +995                    private ParserChainJsonReader(Reader reader) {
    +996                            super(false);
    +997                            this.in = null;
    +998                            this.reader = reader;
    +999                            this.file = null;
    +1000                    }
    +1001    
    +1002                    @Override
    +1003                    public ParserChainJsonReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1004                            return super.register(marshaller);
    +1005                    }
    +1006    
    +1007                    @Override
    +1008                    public ParserChainJsonReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1009                            return super.register(marshaller);
    +1010                    }
    +1011    
    +1012                    @Override
    +1013                    public ParserChainJsonReader warnings(List<List<String>> warnings) {
    +1014                            return super.warnings(warnings);
    +1015                    }
    +1016    
    +1017                    @Override
    +1018                    JCalReader _constructReader() throws IOException {
    +1019                            if (in != null) {
    +1020                                    return new JCalReader(in);
    +1021                            }
    +1022                            if (file != null) {
    +1023                                    return new JCalReader(file);
    +1024                            }
    +1025                            return new JCalReader(reader);
    +1026                    }
    +1027            }
    +1028    
    +1029            /**
    +1030             * Chainer class for parsing JSON-encoded iCalendar strings (jCal).
    +1031             * @see Biweekly#parseJson(String)
    +1032             */
    +1033            public static class ParserChainJsonString extends ParserChainJson<ParserChainJsonString> {
    +1034                    private final String text;
    +1035    
    +1036                    private ParserChainJsonString(String text) {
    +1037                            super(false);
    +1038                            this.text = text;
    +1039                    }
    +1040    
    +1041                    @Override
    +1042                    public ParserChainJsonString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1043                            return super.register(marshaller);
    +1044                    }
    +1045    
    +1046                    @Override
    +1047                    public ParserChainJsonString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1048                            return super.register(marshaller);
    +1049                    }
    +1050    
    +1051                    @Override
    +1052                    public ParserChainJsonString warnings(List<List<String>> warnings) {
    +1053                            return super.warnings(warnings);
    +1054                    }
    +1055    
    +1056                    @Override
    +1057                    JCalReader _constructReader() {
    +1058                            return new JCalReader(text);
    +1059                    }
    +1060    
    +1061                    @Override
    +1062                    public ICalendar first() {
    +1063                            try {
    +1064                                    return super.first();
    +1065                            } catch (IOException e) {
    +1066                                    //should never been thrown because we're reading from a string
    +1067                                    throw new RuntimeException(e);
    +1068                            }
    +1069                    }
    +1070    
    +1071                    @Override
    +1072                    public List<ICalendar> all() {
    +1073                            try {
    +1074                                    return super.all();
    +1075                            } catch (IOException e) {
    +1076                                    //should never been thrown because we're reading from a string
    +1077                                    throw new RuntimeException(e);
    +1078                            }
    +1079                    }
    +1080            }
    +1081    
    +1082            static abstract class WriterChain<T> {
    +1083                    final Collection<ICalendar> icals;
    +1084                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +1085    
    +1086                    @SuppressWarnings("unchecked")
    +1087                    final T this_ = (T) this;
    +1088    
    +1089                    WriterChain(Collection<ICalendar> icals) {
    +1090                            this.icals = icals;
    +1091                    }
    +1092    
    +1093                    /**
    +1094                     * Registers a property marshaller.
    +1095                     * @param marshaller the marshaller
    +1096                     * @return this
    +1097                     */
    +1098                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1099                            registrar.register(marshaller);
    +1100                            return this_;
    +1101                    }
    +1102    
    +1103                    /**
    +1104                     * Registers a component marshaller.
    +1105                     * @param marshaller the marshaller
    +1106                     * @return this
    +1107                     */
    +1108                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1109                            registrar.register(marshaller);
    +1110                            return this_;
    +1111                    }
    +1112            }
    +1113    
    +1114            ///////////////////////////////////////////////////////
    +1115            // plain-text
    +1116            ///////////////////////////////////////////////////////
    +1117    
    +1118            /**
    +1119             * Chainer class for writing to plain text iCalendar data streams.
    +1120             * @see Biweekly#write(Collection)
    +1121             * @see Biweekly#write(ICalendar...)
    +1122             */
    +1123            public static class WriterChainText extends WriterChain<WriterChainText> {
    +1124                    boolean caretEncoding = false;
    +1125    
    +1126                    private WriterChainText(Collection<ICalendar> icals) {
    +1127                            super(icals);
    +1128                    }
    +1129    
    +1130                    /**
    +1131                     * <p>
    +1132                     * Sets whether the writer will apply circumflex accent encoding on
    +1133                     * parameter values (disabled by default). This escaping mechanism
    +1134                     * allows for newlines and double quotes to be included in parameter
    +1135                     * values.
    +1136                     * </p>
    +1137                     * 
    +1138                     * <p>
    +1139                     * When disabled, the writer will replace newlines with spaces and
    +1140                     * double quotes with single quotes.
    +1141                     * </p>
    +1142                     * @param enable true to use circumflex accent encoding, false not to
    +1143                     * @return this
    +1144                     * @see ICalRawWriter#setCaretEncodingEnabled(boolean)
    +1145                     */
    +1146                    public WriterChainText caretEncoding(boolean enable) {
    +1147                            this.caretEncoding = enable;
    +1148                            return this_;
    +1149                    }
    +1150    
    +1151                    /**
    +1152                     * Writes the iCalendar objects to a string.
    +1153                     * @return the iCalendar string
    +1154                     * @throws IllegalArgumentException if the marshaller class for a
    +1155                     * component or property object cannot be found (only happens when an
    +1156                     * experimental property/component marshaller is not registered with the
    +1157                     * {@code register} method.)
    +1158                     */
    +1159                    public String go() {
    +1160                            StringWriter sw = new StringWriter();
    +1161                            try {
    +1162                                    go(sw);
    +1163                            } catch (IOException e) {
    +1164                                    //writing to a string
    +1165                            }
    +1166                            return sw.toString();
    +1167                    }
    +1168    
    +1169                    /**
    +1170                     * Writes the iCalendar objects to a data stream.
    +1171                     * @param out the output stream to write to
    +1172                     * @throws IllegalArgumentException if the marshaller class for a
    +1173                     * component or property object cannot be found (only happens when an
    +1174                     * experimental property/component marshaller is not registered with the
    +1175                     * {@code register} method.)
    +1176                     * @throws IOException if there's a problem writing to the output stream
    +1177                     */
    +1178                    public void go(OutputStream out) throws IOException {
    +1179                            go(new ICalWriter(out));
    +1180                    }
    +1181    
    +1182                    /**
    +1183                     * Writes the iCalendar objects to a file.
    +1184                     * @param file the file to write to
    +1185                     * @throws IllegalArgumentException if the marshaller class for a
    +1186                     * component or property object cannot be found (only happens when an
    +1187                     * experimental property/component marshaller is not registered with the
    +1188                     * {@code register} method.)
    +1189                     * @throws IOException if there's a problem writing to the file
    +1190                     */
    +1191                    public void go(File file) throws IOException {
    +1192                            go(file, false);
    +1193                    }
    +1194    
    +1195                    /**
    +1196                     * Writes the iCalendar objects to a file.
    +1197                     * @param file the file to write to
    +1198                     * @param append true to append to the end of the file, false to
    +1199                     * overwrite it
    +1200                     * @throws IllegalArgumentException if the marshaller class for a
    +1201                     * component or property object cannot be found (only happens when an
    +1202                     * experimental property/component marshaller is not registered with the
    +1203                     * {@code register} method.)
    +1204                     * @throws IOException if there's a problem writing to the file
    +1205                     */
    +1206                    public void go(File file, boolean append) throws IOException {
    +1207                            ICalWriter icalWriter = new ICalWriter(file, append);
    +1208                            try {
    +1209                                    go(icalWriter);
    +1210                            } finally {
    +1211                                    IOUtils.closeQuietly(icalWriter);
    +1212                            }
    +1213                    }
    +1214    
    +1215                    /**
    +1216                     * Writes the iCalendar objects to a data stream.
    +1217                     * @param writer the writer to write to
    +1218                     * @throws IllegalArgumentException if the marshaller class for a
    +1219                     * component or property object cannot be found (only happens when an
    +1220                     * experimental property/component marshaller is not registered with the
    +1221                     * {@code register} method.)
    +1222                     * @throws IOException if there's a problem writing to the writer
    +1223                     */
    +1224                    public void go(Writer writer) throws IOException {
    +1225                            go(new ICalWriter(writer));
    +1226                    }
    +1227    
    +1228                    private void go(ICalWriter icalWriter) throws IOException {
    +1229                            icalWriter.setRegistrar(registrar);
    +1230                            icalWriter.setCaretEncodingEnabled(caretEncoding);
    +1231    
    +1232                            for (ICalendar ical : icals) {
    +1233                                    icalWriter.write(ical);
    +1234                            }
    +1235                    }
    +1236            }
    +1237    
    +1238            ///////////////////////////////////////////////////////
    +1239            // XML
    +1240            ///////////////////////////////////////////////////////
    +1241    
    +1242            /**
    +1243             * Chainer class for writing xCal documents (XML-encoded iCalendar objects).
    +1244             * @see Biweekly#writeXml(Collection)
    +1245             * @see Biweekly#writeXml(ICalendar...)
    +1246             */
    +1247            public static class WriterChainXml extends WriterChain<WriterChainXml> {
    +1248                    int indent = -1;
    +1249                    final Map<String, ICalDataType> parameterDataTypes = new HashMap<String, ICalDataType>(0);
    +1250    
    +1251                    WriterChainXml(Collection<ICalendar> icals) {
    +1252                            super(icals);
    +1253                    }
    +1254    
    +1255                    @Override
    +1256                    public WriterChainXml register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1257                            return super.register(marshaller);
    +1258                    }
    +1259    
    +1260                    @Override
    +1261                    public WriterChainXml register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1262                            return super.register(marshaller);
    +1263                    }
    +1264    
    +1265                    /**
    +1266                     * Registers the data type of an experimental parameter. Experimental
    +1267                     * parameters use the "unknown" xCal data type by default.
    +1268                     * @param parameterName the parameter name (e.g. "x-foo")
    +1269                     * @param dataType the data type
    +1270                     * @return this
    +1271                     */
    +1272                    public WriterChainXml register(String parameterName, ICalDataType dataType) {
    +1273                            parameterDataTypes.put(parameterName, dataType);
    +1274                            return this_;
    +1275                    }
    +1276    
    +1277                    /**
    +1278                     * Sets the number of indent spaces to use for pretty-printing. If not
    +1279                     * set, then the XML will not be pretty-printed.
    +1280                     * @param indent the number of spaces
    +1281                     * @return this
    +1282                     */
    +1283                    public WriterChainXml indent(int indent) {
    +1284                            this.indent = indent;
    +1285                            return this_;
    +1286                    }
    +1287    
    +1288                    /**
    +1289                     * Writes the xCal document to a string.
    +1290                     * @return the XML string
    +1291                     * @throws IllegalArgumentException if the marshaller class for a
    +1292                     * component or property object cannot be found (only happens when an
    +1293                     * experimental property/component marshaller is not registered with the
    +1294                     * {@code register} method.)
    +1295                     */
    +1296                    public String go() {
    +1297                            StringWriter sw = new StringWriter();
    +1298                            try {
    +1299                                    go(sw);
    +1300                            } catch (TransformerException e) {
    +1301                                    //writing to a string
    +1302                            }
    +1303                            return sw.toString();
    +1304                    }
    +1305    
    +1306                    /**
    +1307                     * Writes the xCal document to an output stream.
    +1308                     * @param out the output stream to write to
    +1309                     * @throws IllegalArgumentException if the marshaller class for a
    +1310                     * component or property object cannot be found (only happens when an
    +1311                     * experimental property/component marshaller is not registered with the
    +1312                     * {@code register} method.)
    +1313                     * @throws TransformerException if there's a problem writing the XML
    +1314                     */
    +1315                    public void go(OutputStream out) throws TransformerException {
    +1316                            XCalDocument document = constructDocument();
    +1317                            document.write(out, indent);
    +1318                    }
    +1319    
    +1320                    /**
    +1321                     * Writes the xCal document to a file.
    +1322                     * @param file the file to write to
    +1323                     * @throws IllegalArgumentException if the marshaller class for a
    +1324                     * component or property object cannot be found (only happens when an
    +1325                     * experimental property/component marshaller is not registered with the
    +1326                     * {@code register} method.)
    +1327                     * @throws TransformerException if there's a problem writing the XML
    +1328                     * @throws IOException if there's a problem writing to the file
    +1329                     */
    +1330                    public void go(File file) throws TransformerException, IOException {
    +1331                            XCalDocument document = constructDocument();
    +1332                            document.write(file, indent);
    +1333                    }
    +1334    
    +1335                    /**
    +1336                     * Writes the xCal document to a writer.
    +1337                     * @param writer the writer to write to
    +1338                     * @throws IllegalArgumentException if the marshaller class for a
    +1339                     * component or property object cannot be found (only happens when an
    +1340                     * experimental property/component marshaller is not registered with the
    +1341                     * {@code register} method.)
    +1342                     * @throws TransformerException if there's a problem writing the XML
    +1343                     */
    +1344                    public void go(Writer writer) throws TransformerException {
    +1345                            XCalDocument document = constructDocument();
    +1346                            document.write(writer, indent);
    +1347                    }
    +1348    
    +1349                    /**
    +1350                     * Writes the xCal document to an XML DOM.
    +1351                     * @return the XML DOM
    +1352                     */
    +1353                    public Document dom() {
    +1354                            XCalDocument document = constructDocument();
    +1355                            return document.getDocument();
    +1356                    }
    +1357    
    +1358                    private XCalDocument constructDocument() {
    +1359                            XCalDocument document = new XCalDocument();
    +1360                            document.setRegistrar(registrar);
    +1361                            for (Map.Entry<String, ICalDataType> entry : parameterDataTypes.entrySet()) {
    +1362                                    document.registerParameterDataType(entry.getKey(), entry.getValue());
    +1363                            }
    +1364    
    +1365                            for (ICalendar ical : icals) {
    +1366                                    document.add(ical);
    +1367                            }
    +1368    
    +1369                            return document;
    +1370                    }
    +1371            }
    +1372    
    +1373            ///////////////////////////////////////////////////////
    +1374            // JSON
    +1375            ///////////////////////////////////////////////////////
    +1376    
    +1377            /**
    +1378             * Chainer class for writing to JSON-encoded iCalendar data streams (jCal).
    +1379             * @see Biweekly#writeJson(Collection)
    +1380             * @see Biweekly#writeJson(ICalendar...)
    +1381             */
    +1382            public static class WriterChainJson extends WriterChain<WriterChainJson> {
    +1383                    private boolean indent = false;
    +1384    
    +1385                    private WriterChainJson(Collection<ICalendar> icals) {
    +1386                            super(icals);
    +1387                    }
    +1388    
    +1389                    /**
    +1390                     * Sets whether or not to pretty-print the JSON.
    +1391                     * @param indent true to pretty-print it, false not to (defaults to
    +1392                     * false)
    +1393                     * @return this
    +1394                     */
    +1395                    public WriterChainJson indent(boolean indent) {
    +1396                            this.indent = indent;
    +1397                            return this_;
    +1398                    }
    +1399    
    +1400                    /**
    +1401                     * Writes the iCalendar objects to a string.
    +1402                     * @return the iCalendar string
    +1403                     * @throws IllegalArgumentException if the marshaller class for a
    +1404                     * component or property object cannot be found (only happens when an
    +1405                     * experimental property/component marshaller is not registered with the
    +1406                     * {@code register} method.)
    +1407                     */
    +1408                    public String go() {
    +1409                            StringWriter sw = new StringWriter();
    +1410                            try {
    +1411                                    go(sw);
    +1412                            } catch (IOException e) {
    +1413                                    //writing to a string
    +1414                            }
    +1415                            return sw.toString();
    +1416                    }
    +1417    
    +1418                    /**
    +1419                     * Writes the iCalendar objects to a data stream.
    +1420                     * @param out the output stream to write to
    +1421                     * @throws IllegalArgumentException if the marshaller class for a
    +1422                     * component or property object cannot be found (only happens when an
    +1423                     * experimental property/component marshaller is not registered with the
    +1424                     * {@code register} method.)
    +1425                     * @throws IOException if there's a problem writing to the output stream
    +1426                     */
    +1427                    public void go(OutputStream out) throws IOException {
    +1428                            go(new JCalWriter(out, icals.size() > 1));
    +1429                    }
    +1430    
    +1431                    /**
    +1432                     * Writes the iCalendar objects to a file.
    +1433                     * @param file the file to write to
    +1434                     * @throws IllegalArgumentException if the marshaller class for a
    +1435                     * component or property object cannot be found (only happens when an
    +1436                     * experimental property/component marshaller is not registered with the
    +1437                     * {@code register} method.)
    +1438                     * @throws IOException if there's a problem writing to the file
    +1439                     */
    +1440                    public void go(File file) throws IOException {
    +1441                            JCalWriter jcalWriter = new JCalWriter(file, icals.size() > 1);
    +1442                            try {
    +1443                                    go(jcalWriter);
    +1444                            } finally {
    +1445                                    IOUtils.closeQuietly(jcalWriter);
    +1446                            }
    +1447                    }
    +1448    
    +1449                    /**
    +1450                     * Writes the iCalendar objects to a data stream.
    +1451                     * @param writer the writer to write to
    +1452                     * @throws IllegalArgumentException if the marshaller class for a
    +1453                     * component or property object cannot be found (only happens when an
    +1454                     * experimental property/component marshaller is not registered with the
    +1455                     * {@code register} method.)
    +1456                     * @throws IOException if there's a problem writing to the writer
    +1457                     */
    +1458                    public void go(Writer writer) throws IOException {
    +1459                            go(new JCalWriter(writer, icals.size() > 1));
    +1460                    }
    +1461    
    +1462                    private void go(JCalWriter jcalWriter) throws IOException {
    +1463                            jcalWriter.setRegistrar(registrar);
    +1464                            jcalWriter.setIndent(indent);
    +1465    
    +1466                            for (ICalendar ical : icals) {
    +1467                                    jcalWriter.write(ical);
    +1468                            }
    +1469                            jcalWriter.closeJsonStream();
    +1470                    }
    +1471            }
    +1472    
    +1473            private Biweekly() {
    +1474                    //hide
    +1475            }
    +1476    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.WriterChainXml.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.WriterChainXml.html new file mode 100644 index 000000000..6e42f0110 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.WriterChainXml.html @@ -0,0 +1,1542 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.io.File;
    +004    import java.io.IOException;
    +005    import java.io.InputStream;
    +006    import java.io.OutputStream;
    +007    import java.io.Reader;
    +008    import java.io.StringWriter;
    +009    import java.io.Writer;
    +010    import java.util.ArrayList;
    +011    import java.util.Arrays;
    +012    import java.util.Collection;
    +013    import java.util.HashMap;
    +014    import java.util.List;
    +015    import java.util.Map;
    +016    import java.util.Properties;
    +017    
    +018    import javax.xml.transform.TransformerException;
    +019    
    +020    import org.w3c.dom.Document;
    +021    import org.xml.sax.SAXException;
    +022    
    +023    import biweekly.component.ICalComponent;
    +024    import biweekly.component.marshaller.ICalComponentMarshaller;
    +025    import biweekly.io.ICalMarshallerRegistrar;
    +026    import biweekly.io.json.JCalParseException;
    +027    import biweekly.io.json.JCalReader;
    +028    import biweekly.io.json.JCalWriter;
    +029    import biweekly.io.text.ICalRawReader;
    +030    import biweekly.io.text.ICalRawWriter;
    +031    import biweekly.io.text.ICalReader;
    +032    import biweekly.io.text.ICalWriter;
    +033    import biweekly.io.xml.XCalDocument;
    +034    import biweekly.property.ICalProperty;
    +035    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +036    import biweekly.util.IOUtils;
    +037    
    +038    import com.fasterxml.jackson.core.JsonParseException;
    +039    
    +040    /*
    +041     Copyright (c) 2013, Michael Angstadt
    +042     All rights reserved.
    +043    
    +044     Redistribution and use in source and binary forms, with or without
    +045     modification, are permitted provided that the following conditions are met: 
    +046    
    +047     1. Redistributions of source code must retain the above copyright notice, this
    +048     list of conditions and the following disclaimer. 
    +049     2. Redistributions in binary form must reproduce the above copyright notice,
    +050     this list of conditions and the following disclaimer in the documentation
    +051     and/or other materials provided with the distribution. 
    +052    
    +053     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +054     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +055     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +056     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +057     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +058     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +059     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +060     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +061     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +062     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +063     */
    +064    
    +065    /**
    +066     * <p>
    +067     * Contains static chaining factory methods for reading/writing iCalendar
    +068     * objects.
    +069     * </p>
    +070     * 
    +071     * <p>
    +072     * <b>Writing an iCalendar object</b>
    +073     * 
    +074     * <pre class="brush:java">
    +075     * ICalendar ical = new ICalendar();
    +076     * 
    +077     * //string
    +078     * String icalString = Biweekly.write(ical).go();
    +079     * 
    +080     * //file
    +081     * File file = new File("meeting.ics");
    +082     * Biweekly.write(ical).go(file);
    +083     * 
    +084     * //output stream
    +085     * OutputStream out = ...
    +086     * Biweekly.write(ical).go(out);
    +087     * out.close();
    +088     * 
    +089     * //writer (should be configured to use UTF-8 encoding)
    +090     * Writer writer = ...
    +091     * Biweekly.write(ical).go(writer);
    +092     * writer.close();
    +093     * </pre>
    +094     * 
    +095     * </p>
    +096     * 
    +097     * <p>
    +098     * <b>Writing multiple iCalendar objects</b>
    +099     * 
    +100     * <pre class="brush:java">
    +101     * ICalendar ical1 = new ICalendar();
    +102     * ICalendar ical2 = new ICalendar();
    +103     * 
    +104     * String icalString = Biweekly.write(ical1, ical2).go();
    +105     * </pre>
    +106     * 
    +107     * </p>
    +108     * 
    +109     * <p>
    +110     * <b>Writing an XML-encoded iCalendar object (xCal)</b><br>
    +111     * 
    +112     * <pre class="brush:java">
    +113     * //Call writeXml() instead of write()
    +114     * ICalendar ical = new ICalendar();
    +115     * String xml = Biweekly.writeXml(ical).indent(2).go();
    +116     * </pre>
    +117     * 
    +118     * </p>
    +119     * 
    +120     * <p>
    +121     * <b>Writing a JSON-encoded iCalendar object (jCal)</b><br>
    +122     * 
    +123     * <pre class="brush:java">
    +124     * //Call writeJson() instead of write()
    +125     * ICalendar ical = new ICalendar();
    +126     * String json = Biweekly.writeJson(ical).go();
    +127     * </pre>
    +128     * 
    +129     * </p>
    +130     * 
    +131     * <p>
    +132     * <b>Reading an iCalendar object</b>
    +133     * 
    +134     * <pre class="brush:java">
    +135     * ICalendar ical;
    +136     * 
    +137     * //string
    +138     * String icalStr = ...
    +139     * ical = Biweekly.parse(icalStr).first();
    +140     * 
    +141     * //file
    +142     * File file = new File("meeting.ics");
    +143     * ical = Biweekly.parse(file).first();
    +144     * 
    +145     * //input stream
    +146     * InputStream in = ...
    +147     * ical = Biweekly.parse(in).first();
    +148     * in.close();  
    +149     * 
    +150     * //reader (should be configured to read UTF-8)
    +151     * Reader reader = ...
    +152     * ical = Biweekly.parse(reader).first();
    +153     * reader.close();
    +154     * </pre>
    +155     * 
    +156     * </p>
    +157     * 
    +158     * <p>
    +159     * <b>Reading multiple iCalendar objects</b>
    +160     * 
    +161     * <pre class="brush:java">
    +162     * String icalStr = ...
    +163     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).all();
    +164     * </pre>
    +165     * 
    +166     * </p>
    +167     * 
    +168     * <p>
    +169     * <b>Reading an XML-encoded iCalendar object (xCal)</b><br>
    +170     * 
    +171     * <pre class="brush:java">
    +172     * //Call parseXml() instead of parse()
    +173     * String xml = ...
    +174     * ICalendar ical = Biweekly.parseXml(xml).first();
    +175     * </pre>
    +176     * 
    +177     * </p>
    +178     * 
    +179     * <p>
    +180     * <b>Reading a JSON-encoded iCalendar object (Cal)</b><br>
    +181     * 
    +182     * <pre class="brush:java">
    +183     * //Call parseJson() instead of parse()
    +184     * String json = ...
    +185     * ICalendar ical = Biweekly.parseJson(json).first();
    +186     * </pre>
    +187     * 
    +188     * </p>
    +189     * 
    +190     * <p>
    +191     * <b>Retrieving parser warnings</b>
    +192     * 
    +193     * <pre class="brush:java">
    +194     * String icalStr = ...
    +195     * List&lt;List&lt;String&gt;&gt; warnings = new ArrayList&lt;List&lt;String&gt;&gt;();
    +196     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).warnings(warnings).all();
    +197     * int i = 0;
    +198     * for (List&lt;String&gt; icalWarnings : warnings){
    +199     *   System.out.println("iCal #" + (i++) + " warnings:");
    +200     *   for (String warning : icalWarnings){
    +201     *     System.out.println(warning);
    +202     *   }
    +203     * }
    +204     * </pre>
    +205     * 
    +206     * </p>
    +207     * 
    +208     * <p>
    +209     * The methods in this class make use of the following classes. These classes
    +210     * can be used if greater control over the read/write operation is required:
    +211     * </p>
    +212     * 
    +213     * <style> table.t td, table.t th {border:1px solid #000;} </style>
    +214     * <table class="t" cellpadding="5" style="border-collapse:collapse;">
    +215     * <tr>
    +216     * <th></th>
    +217     * <th>Classes</th>
    +218     * <th>Supports<br>
    +219     * streaming?</th>
    +220     * </tr>
    +221     * <tr>
    +222     * <th>Text</th>
    +223     * <td>{@link ICalReader} / {@link ICalWriter}</td>
    +224     * <td>yes</td>
    +225     * </tr>
    +226     * <tr>
    +227     * <th>XML</th>
    +228     * <td>{@link XCalDocument}</td>
    +229     * <td>no</td>
    +230     * </tr>
    +231     * <tr>
    +232     * <th>JSON</th>
    +233     * <td>{@link JCalReader} / {@link JCalWriter}</td>
    +234     * <td>yes</td>
    +235     * </tr>
    +236     * </table>
    +237     * @author Michael Angstadt
    +238     */
    +239    public class Biweekly {
    +240            /**
    +241             * The version of the library.
    +242             */
    +243            public static final String VERSION;
    +244    
    +245            /**
    +246             * The project webpage.
    +247             */
    +248            public static final String URL;
    +249    
    +250            static {
    +251                    InputStream in = null;
    +252                    try {
    +253                            in = Biweekly.class.getResourceAsStream("/biweekly.properties");
    +254                            Properties props = new Properties();
    +255                            props.load(in);
    +256    
    +257                            VERSION = props.getProperty("version");
    +258                            URL = props.getProperty("url");
    +259                    } catch (IOException e) {
    +260                            throw new RuntimeException(e);
    +261                    } finally {
    +262                            IOUtils.closeQuietly(in);
    +263                    }
    +264            }
    +265    
    +266            /**
    +267             * Parses an iCalendar object string.
    +268             * @param ical the iCalendar data
    +269             * @return chainer object for completing the parse operation
    +270             */
    +271            public static ParserChainTextString parse(String ical) {
    +272                    return new ParserChainTextString(ical);
    +273            }
    +274    
    +275            /**
    +276             * Parses an iCalendar file.
    +277             * @param file the iCalendar file
    +278             * @return chainer object for completing the parse operation
    +279             */
    +280            public static ParserChainTextReader parse(File file) {
    +281                    return new ParserChainTextReader(file);
    +282            }
    +283    
    +284            /**
    +285             * Parses an iCalendar data stream.
    +286             * @param in the input stream
    +287             * @return chainer object for completing the parse operation
    +288             */
    +289            public static ParserChainTextReader parse(InputStream in) {
    +290                    return new ParserChainTextReader(in);
    +291            }
    +292    
    +293            /**
    +294             * Parses an iCalendar data stream.
    +295             * @param reader the reader
    +296             * @return chainer object for completing the parse operation
    +297             */
    +298            public static ParserChainTextReader parse(Reader reader) {
    +299                    return new ParserChainTextReader(reader);
    +300            }
    +301    
    +302            /**
    +303             * Writes multiple iCalendar objects to a data stream.
    +304             * @param icals the iCalendar objects to write
    +305             * @return chainer object for completing the write operation
    +306             */
    +307            public static WriterChainText write(ICalendar... icals) {
    +308                    return write(Arrays.asList(icals));
    +309            }
    +310    
    +311            /**
    +312             * Writes multiple iCalendar objects to a data stream.
    +313             * @param icals the iCalendar objects to write
    +314             * @return chainer object for completing the write operation
    +315             */
    +316            public static WriterChainText write(Collection<ICalendar> icals) {
    +317                    return new WriterChainText(icals);
    +318            }
    +319    
    +320            /**
    +321             * Parses an xCal document (XML-encoded iCalendar objects) from a string.
    +322             * @param xml the XML string
    +323             * @return chainer object for completing the parse operation
    +324             */
    +325            public static ParserChainXmlString parseXml(String xml) {
    +326                    return new ParserChainXmlString(xml);
    +327            }
    +328    
    +329            /**
    +330             * Parses an xCal document (XML-encoded iCalendar objects) from a file.
    +331             * @param file the XML file
    +332             * @return chainer object for completing the parse operation
    +333             */
    +334            public static ParserChainXmlReader parseXml(File file) {
    +335                    return new ParserChainXmlReader(file);
    +336            }
    +337    
    +338            /**
    +339             * Parses an xCal document (XML-encoded iCalendar objects) from an input
    +340             * stream.
    +341             * @param in the input stream
    +342             * @return chainer object for completing the parse operation
    +343             */
    +344            public static ParserChainXmlReader parseXml(InputStream in) {
    +345                    return new ParserChainXmlReader(in);
    +346            }
    +347    
    +348            /**
    +349             * <p>
    +350             * Parses an xCal document (XML-encoded iCalendar objects) from a reader.
    +351             * </p>
    +352             * <p>
    +353             * Note that use of this method is discouraged. It ignores the character
    +354             * encoding that is defined within the XML document itself, and should only
    +355             * be used if the encoding is undefined or if the encoding needs to be
    +356             * ignored for whatever reason. The {@link #parseXml(InputStream)} method
    +357             * should be used instead, since it takes the XML document's character
    +358             * encoding into account when parsing.
    +359             * </p>
    +360             * @param reader the reader
    +361             * @return chainer object for completing the parse operation
    +362             */
    +363            public static ParserChainXmlReader parseXml(Reader reader) {
    +364                    return new ParserChainXmlReader(reader);
    +365            }
    +366    
    +367            /**
    +368             * Parses an xCal document (XML-encoded iCalendar objects).
    +369             * @param document the XML document
    +370             * @return chainer object for completing the parse operation
    +371             */
    +372            public static ParserChainXmlDocument parseXml(Document document) {
    +373                    return new ParserChainXmlDocument(document);
    +374            }
    +375    
    +376            /**
    +377             * Writes an xCal document (XML-encoded iCalendar objects).
    +378             * @param icals the iCalendar object(s) to write
    +379             * @return chainer object for completing the write operation
    +380             */
    +381            public static WriterChainXml writeXml(ICalendar... icals) {
    +382                    return writeXml(Arrays.asList(icals));
    +383            }
    +384    
    +385            /**
    +386             * Writes an xCal document (XML-encoded iCalendar objects).
    +387             * @param icals the iCalendar objects to write
    +388             * @return chainer object for completing the write operation
    +389             */
    +390            public static WriterChainXml writeXml(Collection<ICalendar> icals) {
    +391                    return new WriterChainXml(icals);
    +392            }
    +393    
    +394            /**
    +395             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +396             * @param json the JSON data
    +397             * @return chainer object for completing the parse operation
    +398             */
    +399            public static ParserChainJsonString parseJson(String json) {
    +400                    return new ParserChainJsonString(json);
    +401            }
    +402    
    +403            /**
    +404             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +405             * @param file the JSON file
    +406             * @return chainer object for completing the parse operation
    +407             */
    +408            public static ParserChainJsonReader parseJson(File file) {
    +409                    return new ParserChainJsonReader(file);
    +410            }
    +411    
    +412            /**
    +413             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +414             * @param in the input stream
    +415             * @return chainer object for completing the parse operation
    +416             */
    +417            public static ParserChainJsonReader parseJson(InputStream in) {
    +418                    return new ParserChainJsonReader(in);
    +419            }
    +420    
    +421            /**
    +422             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +423             * @param reader the reader
    +424             * @return chainer object for completing the parse operation
    +425             */
    +426            public static ParserChainJsonReader parseJson(Reader reader) {
    +427                    return new ParserChainJsonReader(reader);
    +428            }
    +429    
    +430            /**
    +431             * Writes an xCal document (XML-encoded iCalendar objects).
    +432             * @param icals the iCalendar object(s) to write
    +433             * @return chainer object for completing the write operation
    +434             */
    +435            public static WriterChainJson writeJson(ICalendar... icals) {
    +436                    return writeJson(Arrays.asList(icals));
    +437            }
    +438    
    +439            /**
    +440             * Writes an xCal document (XML-encoded iCalendar objects).
    +441             * @param icals the iCalendar objects to write
    +442             * @return chainer object for completing the write operation
    +443             */
    +444            public static WriterChainJson writeJson(Collection<ICalendar> icals) {
    +445                    return new WriterChainJson(icals);
    +446            }
    +447    
    +448            static abstract class ParserChain<T> {
    +449                    //Note: "package" level is used so various fields/methods don't show up in the Javadocs, but are still visible to child classes
    +450                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +451    
    +452                    @SuppressWarnings("unchecked")
    +453                    final T this_ = (T) this;
    +454    
    +455                    List<List<String>> warnings;
    +456    
    +457                    /**
    +458                     * Registers a property marshaller.
    +459                     * @param marshaller the marshaller
    +460                     * @return this
    +461                     */
    +462                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +463                            registrar.register(marshaller);
    +464                            return this_;
    +465                    }
    +466    
    +467                    /**
    +468                     * Registers a component marshaller.
    +469                     * @param marshaller the marshaller
    +470                     * @return this
    +471                     */
    +472                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +473                            registrar.register(marshaller);
    +474                            return this_;
    +475                    }
    +476    
    +477                    /**
    +478                     * Provides a list for putting the parser warnings into.
    +479                     * @param warnings the list object to populate (it is a
    +480                     * "list of lists"--each parsed {@link ICalendar} object has its own
    +481                     * warnings list)
    +482                     * @return this
    +483                     */
    +484                    public T warnings(List<List<String>> warnings) {
    +485                            this.warnings = warnings;
    +486                            return this_;
    +487                    }
    +488    
    +489                    /**
    +490                     * Reads the first iCalendar object from the data stream.
    +491                     * @return the first iCalendar object or null if there are none
    +492                     * @throws IOException if there a problem reading from the data stream
    +493                     * @throws SAXException if there's a problem parsing the XML
    +494                     */
    +495                    public abstract ICalendar first() throws IOException, SAXException;
    +496    
    +497                    /**
    +498                     * Reads all iCalendar objects from the data stream.
    +499                     * @return the parsed iCalendar objects
    +500                     * @throws IOException if there's a problem reading from the data stream
    +501                     * @throws SAXException if there's a problem parsing the XML
    +502                     */
    +503                    public abstract List<ICalendar> all() throws IOException, SAXException;
    +504            }
    +505    
    +506            ///////////////////////////////////////////////////////
    +507            // plain-text
    +508            ///////////////////////////////////////////////////////
    +509    
    +510            static abstract class ParserChainText<T> extends ParserChain<T> {
    +511                    boolean caretDecoding = true;
    +512                    final boolean closeWhenDone;
    +513    
    +514                    private ParserChainText(boolean closeWhenDone) {
    +515                            this.closeWhenDone = closeWhenDone;
    +516                    }
    +517    
    +518                    /**
    +519                     * Sets whether the reader will decode parameter values that use
    +520                     * circumflex accent encoding (enabled by default). This escaping
    +521                     * mechanism allows newlines and double quotes to be included in
    +522                     * parameter values.
    +523                     * @param enable true to use circumflex accent decoding, false not to
    +524                     * @return this
    +525                     * @see ICalRawReader#setCaretDecodingEnabled(boolean)
    +526                     */
    +527                    public T caretDecoding(boolean enable) {
    +528                            caretDecoding = enable;
    +529                            return this_;
    +530                    }
    +531    
    +532                    @Override
    +533                    public ICalendar first() throws IOException {
    +534                            ICalReader parser = constructReader();
    +535    
    +536                            try {
    +537                                    ICalendar ical = parser.readNext();
    +538                                    if (warnings != null) {
    +539                                            warnings.add(parser.getWarnings());
    +540                                    }
    +541                                    return ical;
    +542                            } finally {
    +543                                    if (closeWhenDone) {
    +544                                            IOUtils.closeQuietly(parser);
    +545                                    }
    +546                            }
    +547                    }
    +548    
    +549                    @Override
    +550                    public List<ICalendar> all() throws IOException {
    +551                            ICalReader parser = constructReader();
    +552    
    +553                            try {
    +554                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +555                                    ICalendar ical;
    +556                                    while ((ical = parser.readNext()) != null) {
    +557                                            if (warnings != null) {
    +558                                                    warnings.add(parser.getWarnings());
    +559                                            }
    +560                                            icals.add(ical);
    +561                                    }
    +562                                    return icals;
    +563                            } finally {
    +564                                    if (closeWhenDone) {
    +565                                            IOUtils.closeQuietly(parser);
    +566                                    }
    +567                            }
    +568                    }
    +569    
    +570                    private ICalReader constructReader() throws IOException {
    +571                            ICalReader parser = _constructReader();
    +572                            parser.setRegistrar(registrar);
    +573                            parser.setCaretDecodingEnabled(caretDecoding);
    +574                            return parser;
    +575                    }
    +576    
    +577                    abstract ICalReader _constructReader() throws IOException;
    +578            }
    +579    
    +580            /**
    +581             * Chainer class for parsing plain text iCalendar data streams.
    +582             * @see Biweekly#parse(InputStream)
    +583             * @see Biweekly#parse(File)
    +584             * @see Biweekly#parse(Reader)
    +585             */
    +586            public static class ParserChainTextReader extends ParserChainText<ParserChainTextReader> {
    +587                    private final InputStream in;
    +588                    private final File file;
    +589                    private final Reader reader;
    +590    
    +591                    private ParserChainTextReader(InputStream in) {
    +592                            super(false);
    +593                            this.in = in;
    +594                            this.reader = null;
    +595                            this.file = null;
    +596                    }
    +597    
    +598                    private ParserChainTextReader(File file) {
    +599                            super(true);
    +600                            this.in = null;
    +601                            this.reader = null;
    +602                            this.file = file;
    +603                    }
    +604    
    +605                    private ParserChainTextReader(Reader reader) {
    +606                            super(false);
    +607                            this.in = null;
    +608                            this.reader = reader;
    +609                            this.file = null;
    +610                    }
    +611    
    +612                    @Override
    +613                    public ParserChainTextReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +614                            return super.register(marshaller);
    +615                    }
    +616    
    +617                    @Override
    +618                    public ParserChainTextReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +619                            return super.register(marshaller);
    +620                    }
    +621    
    +622                    @Override
    +623                    public ParserChainTextReader warnings(List<List<String>> warnings) {
    +624                            return super.warnings(warnings);
    +625                    }
    +626    
    +627                    @Override
    +628                    public ParserChainTextReader caretDecoding(boolean enable) {
    +629                            return super.caretDecoding(enable);
    +630                    }
    +631    
    +632                    @Override
    +633                    ICalReader _constructReader() throws IOException {
    +634                            if (in != null) {
    +635                                    return new ICalReader(in);
    +636                            }
    +637                            if (file != null) {
    +638                                    return new ICalReader(file);
    +639                            }
    +640                            return new ICalReader(reader);
    +641                    }
    +642            }
    +643    
    +644            /**
    +645             * Chainer class for parsing plain text iCalendar strings.
    +646             * @see Biweekly#parse(String)
    +647             */
    +648            public static class ParserChainTextString extends ParserChainText<ParserChainTextString> {
    +649                    private final String text;
    +650    
    +651                    private ParserChainTextString(String text) {
    +652                            super(false);
    +653                            this.text = text;
    +654                    }
    +655    
    +656                    @Override
    +657                    public ParserChainTextString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +658                            return super.register(marshaller);
    +659                    }
    +660    
    +661                    @Override
    +662                    public ParserChainTextString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +663                            return super.register(marshaller);
    +664                    }
    +665    
    +666                    @Override
    +667                    public ParserChainTextString warnings(List<List<String>> warnings) {
    +668                            return super.warnings(warnings);
    +669                    }
    +670    
    +671                    @Override
    +672                    public ParserChainTextString caretDecoding(boolean enable) {
    +673                            return super.caretDecoding(enable);
    +674                    }
    +675    
    +676                    @Override
    +677                    ICalReader _constructReader() {
    +678                            return new ICalReader(text);
    +679                    }
    +680    
    +681                    @Override
    +682                    public ICalendar first() {
    +683                            try {
    +684                                    return super.first();
    +685                            } catch (IOException e) {
    +686                                    //should never been thrown because we're reading from a string
    +687                                    throw new RuntimeException(e);
    +688                            }
    +689                    }
    +690    
    +691                    @Override
    +692                    public List<ICalendar> all() {
    +693                            try {
    +694                                    return super.all();
    +695                            } catch (IOException e) {
    +696                                    //should never been thrown because we're reading from a string
    +697                                    throw new RuntimeException(e);
    +698                            }
    +699                    }
    +700            }
    +701    
    +702            ///////////////////////////////////////////////////////
    +703            // XML
    +704            ///////////////////////////////////////////////////////
    +705    
    +706            static abstract class ParserChainXml<T> extends ParserChain<T> {
    +707                    @Override
    +708                    public ICalendar first() throws IOException, SAXException {
    +709                            XCalDocument document = constructDocument();
    +710                            ICalendar ical = document.parseFirst();
    +711                            if (warnings != null) {
    +712                                    warnings.addAll(document.getParseWarnings());
    +713                            }
    +714                            return ical;
    +715                    }
    +716    
    +717                    @Override
    +718                    public List<ICalendar> all() throws IOException, SAXException {
    +719                            XCalDocument document = constructDocument();
    +720                            List<ICalendar> icals = document.parseAll();
    +721                            if (warnings != null) {
    +722                                    warnings.addAll(document.getParseWarnings());
    +723                            }
    +724                            return icals;
    +725                    }
    +726    
    +727                    private XCalDocument constructDocument() throws SAXException, IOException {
    +728                            XCalDocument parser = _constructDocument();
    +729                            parser.setRegistrar(registrar);
    +730                            return parser;
    +731                    }
    +732    
    +733                    abstract XCalDocument _constructDocument() throws IOException, SAXException;
    +734            }
    +735    
    +736            /**
    +737             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +738             * @see Biweekly#parseXml(String)
    +739             */
    +740            public static class ParserChainXmlString extends ParserChainXml<ParserChainXmlString> {
    +741                    private final String xml;
    +742    
    +743                    private ParserChainXmlString(String xml) {
    +744                            this.xml = xml;
    +745                    }
    +746    
    +747                    @Override
    +748                    public ParserChainXmlString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +749                            return super.register(marshaller);
    +750                    }
    +751    
    +752                    @Override
    +753                    public ParserChainXmlString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +754                            return super.register(marshaller);
    +755                    }
    +756    
    +757                    @Override
    +758                    public ParserChainXmlString warnings(List<List<String>> warnings) {
    +759                            return super.warnings(warnings);
    +760                    }
    +761    
    +762                    @Override
    +763                    XCalDocument _constructDocument() throws SAXException {
    +764                            return new XCalDocument(xml);
    +765                    }
    +766    
    +767                    @Override
    +768                    public ICalendar first() throws SAXException {
    +769                            try {
    +770                                    return super.first();
    +771                            } catch (IOException e) {
    +772                                    //should never been thrown because we're reading from a string
    +773                                    throw new RuntimeException(e);
    +774                            }
    +775                    }
    +776    
    +777                    @Override
    +778                    public List<ICalendar> all() throws SAXException {
    +779                            try {
    +780                                    return super.all();
    +781                            } catch (IOException e) {
    +782                                    //should never been thrown because we're reading from a string
    +783                                    throw new RuntimeException(e);
    +784                            }
    +785                    }
    +786            }
    +787    
    +788            /**
    +789             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +790             * @see Biweekly#parseXml(InputStream)
    +791             * @see Biweekly#parseXml(File)
    +792             * @see Biweekly#parseXml(Reader)
    +793             */
    +794            public static class ParserChainXmlReader extends ParserChainXml<ParserChainXmlReader> {
    +795                    private final InputStream in;
    +796                    private final File file;
    +797                    private final Reader reader;
    +798    
    +799                    private ParserChainXmlReader(InputStream in) {
    +800                            this.in = in;
    +801                            this.reader = null;
    +802                            this.file = null;
    +803                    }
    +804    
    +805                    private ParserChainXmlReader(File file) {
    +806                            this.in = null;
    +807                            this.reader = null;
    +808                            this.file = file;
    +809                    }
    +810    
    +811                    private ParserChainXmlReader(Reader reader) {
    +812                            this.in = null;
    +813                            this.reader = reader;
    +814                            this.file = null;
    +815                    }
    +816    
    +817                    @Override
    +818                    public ParserChainXmlReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +819                            return super.register(marshaller);
    +820                    }
    +821    
    +822                    @Override
    +823                    public ParserChainXmlReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +824                            return super.register(marshaller);
    +825                    }
    +826    
    +827                    @Override
    +828                    public ParserChainXmlReader warnings(List<List<String>> warnings) {
    +829                            return super.warnings(warnings);
    +830                    }
    +831    
    +832                    @Override
    +833                    XCalDocument _constructDocument() throws IOException, SAXException {
    +834                            if (in != null) {
    +835                                    return new XCalDocument(in);
    +836                            }
    +837                            if (file != null) {
    +838                                    return new XCalDocument(file);
    +839                            }
    +840                            return new XCalDocument(reader);
    +841                    }
    +842            }
    +843    
    +844            /**
    +845             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +846             * @see Biweekly#parseXml(Document)
    +847             */
    +848            public static class ParserChainXmlDocument extends ParserChainXml<ParserChainXmlDocument> {
    +849                    private final Document document;
    +850    
    +851                    private ParserChainXmlDocument(Document document) {
    +852                            this.document = document;
    +853                    }
    +854    
    +855                    @Override
    +856                    public ParserChainXmlDocument register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +857                            return super.register(marshaller);
    +858                    }
    +859    
    +860                    @Override
    +861                    public ParserChainXmlDocument register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +862                            return super.register(marshaller);
    +863                    }
    +864    
    +865                    @Override
    +866                    public ParserChainXmlDocument warnings(List<List<String>> warnings) {
    +867                            return super.warnings(warnings);
    +868                    }
    +869    
    +870                    @Override
    +871                    XCalDocument _constructDocument() {
    +872                            return new XCalDocument(document);
    +873                    }
    +874    
    +875                    @Override
    +876                    public ICalendar first() {
    +877                            try {
    +878                                    return super.first();
    +879                            } catch (IOException e) {
    +880                                    //should never been thrown because we're reading from a DOM
    +881                                    throw new RuntimeException(e);
    +882                            } catch (SAXException e) {
    +883                                    //should never been thrown because we're reading from a DOM
    +884                                    throw new RuntimeException(e);
    +885                            }
    +886                    }
    +887    
    +888                    @Override
    +889                    public List<ICalendar> all() {
    +890                            try {
    +891                                    return super.all();
    +892                            } catch (IOException e) {
    +893                                    //should never been thrown because we're reading from a DOM
    +894                                    throw new RuntimeException(e);
    +895                            } catch (SAXException e) {
    +896                                    //should never been thrown because we're reading from a DOM
    +897                                    throw new RuntimeException(e);
    +898                            }
    +899                    }
    +900            }
    +901    
    +902            ///////////////////////////////////////////////////////
    +903            // JSON
    +904            ///////////////////////////////////////////////////////
    +905    
    +906            static abstract class ParserChainJson<T> extends ParserChain<T> {
    +907                    final boolean closeWhenDone;
    +908    
    +909                    private ParserChainJson(boolean closeWhenDone) {
    +910                            this.closeWhenDone = closeWhenDone;
    +911                    }
    +912    
    +913                    /**
    +914                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +915                     * syntax may be valid, but it is not in the correct jCal format).
    +916                     * @throws JsonParseException if the JSON syntax is incorrect
    +917                     */
    +918                    @Override
    +919                    public ICalendar first() throws IOException {
    +920                            JCalReader parser = constructReader();
    +921    
    +922                            try {
    +923                                    ICalendar ical = parser.readNext();
    +924                                    if (warnings != null) {
    +925                                            warnings.add(parser.getWarnings());
    +926                                    }
    +927                                    return ical;
    +928                            } finally {
    +929                                    if (closeWhenDone) {
    +930                                            IOUtils.closeQuietly(parser);
    +931                                    }
    +932                            }
    +933                    }
    +934    
    +935                    /**
    +936                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +937                     * syntax may be valid, but it is not in the correct jCal format).
    +938                     * @throws JsonParseException if the JSON syntax is incorrect
    +939                     */
    +940                    @Override
    +941                    public List<ICalendar> all() throws IOException {
    +942                            JCalReader parser = constructReader();
    +943    
    +944                            try {
    +945                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +946                                    ICalendar ical;
    +947                                    while ((ical = parser.readNext()) != null) {
    +948                                            if (warnings != null) {
    +949                                                    warnings.add(parser.getWarnings());
    +950                                            }
    +951                                            icals.add(ical);
    +952                                    }
    +953                                    return icals;
    +954                            } finally {
    +955                                    if (closeWhenDone) {
    +956                                            IOUtils.closeQuietly(parser);
    +957                                    }
    +958                            }
    +959                    }
    +960    
    +961                    private JCalReader constructReader() throws IOException {
    +962                            JCalReader parser = _constructReader();
    +963                            parser.setRegistrar(registrar);
    +964                            return parser;
    +965                    }
    +966    
    +967                    abstract JCalReader _constructReader() throws IOException;
    +968            }
    +969    
    +970            /**
    +971             * Chainer class for parsing JSON-encoded iCalendar data streams (jCal).
    +972             * @see Biweekly#parseJson(InputStream)
    +973             * @see Biweekly#parseJson(File)
    +974             * @see Biweekly#parseJson(Reader)
    +975             */
    +976            public static class ParserChainJsonReader extends ParserChainJson<ParserChainJsonReader> {
    +977                    private final InputStream in;
    +978                    private final File file;
    +979                    private final Reader reader;
    +980    
    +981                    private ParserChainJsonReader(InputStream in) {
    +982                            super(false);
    +983                            this.in = in;
    +984                            this.reader = null;
    +985                            this.file = null;
    +986                    }
    +987    
    +988                    private ParserChainJsonReader(File file) {
    +989                            super(true);
    +990                            this.in = null;
    +991                            this.reader = null;
    +992                            this.file = file;
    +993                    }
    +994    
    +995                    private ParserChainJsonReader(Reader reader) {
    +996                            super(false);
    +997                            this.in = null;
    +998                            this.reader = reader;
    +999                            this.file = null;
    +1000                    }
    +1001    
    +1002                    @Override
    +1003                    public ParserChainJsonReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1004                            return super.register(marshaller);
    +1005                    }
    +1006    
    +1007                    @Override
    +1008                    public ParserChainJsonReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1009                            return super.register(marshaller);
    +1010                    }
    +1011    
    +1012                    @Override
    +1013                    public ParserChainJsonReader warnings(List<List<String>> warnings) {
    +1014                            return super.warnings(warnings);
    +1015                    }
    +1016    
    +1017                    @Override
    +1018                    JCalReader _constructReader() throws IOException {
    +1019                            if (in != null) {
    +1020                                    return new JCalReader(in);
    +1021                            }
    +1022                            if (file != null) {
    +1023                                    return new JCalReader(file);
    +1024                            }
    +1025                            return new JCalReader(reader);
    +1026                    }
    +1027            }
    +1028    
    +1029            /**
    +1030             * Chainer class for parsing JSON-encoded iCalendar strings (jCal).
    +1031             * @see Biweekly#parseJson(String)
    +1032             */
    +1033            public static class ParserChainJsonString extends ParserChainJson<ParserChainJsonString> {
    +1034                    private final String text;
    +1035    
    +1036                    private ParserChainJsonString(String text) {
    +1037                            super(false);
    +1038                            this.text = text;
    +1039                    }
    +1040    
    +1041                    @Override
    +1042                    public ParserChainJsonString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1043                            return super.register(marshaller);
    +1044                    }
    +1045    
    +1046                    @Override
    +1047                    public ParserChainJsonString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1048                            return super.register(marshaller);
    +1049                    }
    +1050    
    +1051                    @Override
    +1052                    public ParserChainJsonString warnings(List<List<String>> warnings) {
    +1053                            return super.warnings(warnings);
    +1054                    }
    +1055    
    +1056                    @Override
    +1057                    JCalReader _constructReader() {
    +1058                            return new JCalReader(text);
    +1059                    }
    +1060    
    +1061                    @Override
    +1062                    public ICalendar first() {
    +1063                            try {
    +1064                                    return super.first();
    +1065                            } catch (IOException e) {
    +1066                                    //should never been thrown because we're reading from a string
    +1067                                    throw new RuntimeException(e);
    +1068                            }
    +1069                    }
    +1070    
    +1071                    @Override
    +1072                    public List<ICalendar> all() {
    +1073                            try {
    +1074                                    return super.all();
    +1075                            } catch (IOException e) {
    +1076                                    //should never been thrown because we're reading from a string
    +1077                                    throw new RuntimeException(e);
    +1078                            }
    +1079                    }
    +1080            }
    +1081    
    +1082            static abstract class WriterChain<T> {
    +1083                    final Collection<ICalendar> icals;
    +1084                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +1085    
    +1086                    @SuppressWarnings("unchecked")
    +1087                    final T this_ = (T) this;
    +1088    
    +1089                    WriterChain(Collection<ICalendar> icals) {
    +1090                            this.icals = icals;
    +1091                    }
    +1092    
    +1093                    /**
    +1094                     * Registers a property marshaller.
    +1095                     * @param marshaller the marshaller
    +1096                     * @return this
    +1097                     */
    +1098                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1099                            registrar.register(marshaller);
    +1100                            return this_;
    +1101                    }
    +1102    
    +1103                    /**
    +1104                     * Registers a component marshaller.
    +1105                     * @param marshaller the marshaller
    +1106                     * @return this
    +1107                     */
    +1108                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1109                            registrar.register(marshaller);
    +1110                            return this_;
    +1111                    }
    +1112            }
    +1113    
    +1114            ///////////////////////////////////////////////////////
    +1115            // plain-text
    +1116            ///////////////////////////////////////////////////////
    +1117    
    +1118            /**
    +1119             * Chainer class for writing to plain text iCalendar data streams.
    +1120             * @see Biweekly#write(Collection)
    +1121             * @see Biweekly#write(ICalendar...)
    +1122             */
    +1123            public static class WriterChainText extends WriterChain<WriterChainText> {
    +1124                    boolean caretEncoding = false;
    +1125    
    +1126                    private WriterChainText(Collection<ICalendar> icals) {
    +1127                            super(icals);
    +1128                    }
    +1129    
    +1130                    /**
    +1131                     * <p>
    +1132                     * Sets whether the writer will apply circumflex accent encoding on
    +1133                     * parameter values (disabled by default). This escaping mechanism
    +1134                     * allows for newlines and double quotes to be included in parameter
    +1135                     * values.
    +1136                     * </p>
    +1137                     * 
    +1138                     * <p>
    +1139                     * When disabled, the writer will replace newlines with spaces and
    +1140                     * double quotes with single quotes.
    +1141                     * </p>
    +1142                     * @param enable true to use circumflex accent encoding, false not to
    +1143                     * @return this
    +1144                     * @see ICalRawWriter#setCaretEncodingEnabled(boolean)
    +1145                     */
    +1146                    public WriterChainText caretEncoding(boolean enable) {
    +1147                            this.caretEncoding = enable;
    +1148                            return this_;
    +1149                    }
    +1150    
    +1151                    /**
    +1152                     * Writes the iCalendar objects to a string.
    +1153                     * @return the iCalendar string
    +1154                     * @throws IllegalArgumentException if the marshaller class for a
    +1155                     * component or property object cannot be found (only happens when an
    +1156                     * experimental property/component marshaller is not registered with the
    +1157                     * {@code register} method.)
    +1158                     */
    +1159                    public String go() {
    +1160                            StringWriter sw = new StringWriter();
    +1161                            try {
    +1162                                    go(sw);
    +1163                            } catch (IOException e) {
    +1164                                    //writing to a string
    +1165                            }
    +1166                            return sw.toString();
    +1167                    }
    +1168    
    +1169                    /**
    +1170                     * Writes the iCalendar objects to a data stream.
    +1171                     * @param out the output stream to write to
    +1172                     * @throws IllegalArgumentException if the marshaller class for a
    +1173                     * component or property object cannot be found (only happens when an
    +1174                     * experimental property/component marshaller is not registered with the
    +1175                     * {@code register} method.)
    +1176                     * @throws IOException if there's a problem writing to the output stream
    +1177                     */
    +1178                    public void go(OutputStream out) throws IOException {
    +1179                            go(new ICalWriter(out));
    +1180                    }
    +1181    
    +1182                    /**
    +1183                     * Writes the iCalendar objects to a file.
    +1184                     * @param file the file to write to
    +1185                     * @throws IllegalArgumentException if the marshaller class for a
    +1186                     * component or property object cannot be found (only happens when an
    +1187                     * experimental property/component marshaller is not registered with the
    +1188                     * {@code register} method.)
    +1189                     * @throws IOException if there's a problem writing to the file
    +1190                     */
    +1191                    public void go(File file) throws IOException {
    +1192                            go(file, false);
    +1193                    }
    +1194    
    +1195                    /**
    +1196                     * Writes the iCalendar objects to a file.
    +1197                     * @param file the file to write to
    +1198                     * @param append true to append to the end of the file, false to
    +1199                     * overwrite it
    +1200                     * @throws IllegalArgumentException if the marshaller class for a
    +1201                     * component or property object cannot be found (only happens when an
    +1202                     * experimental property/component marshaller is not registered with the
    +1203                     * {@code register} method.)
    +1204                     * @throws IOException if there's a problem writing to the file
    +1205                     */
    +1206                    public void go(File file, boolean append) throws IOException {
    +1207                            ICalWriter icalWriter = new ICalWriter(file, append);
    +1208                            try {
    +1209                                    go(icalWriter);
    +1210                            } finally {
    +1211                                    IOUtils.closeQuietly(icalWriter);
    +1212                            }
    +1213                    }
    +1214    
    +1215                    /**
    +1216                     * Writes the iCalendar objects to a data stream.
    +1217                     * @param writer the writer to write to
    +1218                     * @throws IllegalArgumentException if the marshaller class for a
    +1219                     * component or property object cannot be found (only happens when an
    +1220                     * experimental property/component marshaller is not registered with the
    +1221                     * {@code register} method.)
    +1222                     * @throws IOException if there's a problem writing to the writer
    +1223                     */
    +1224                    public void go(Writer writer) throws IOException {
    +1225                            go(new ICalWriter(writer));
    +1226                    }
    +1227    
    +1228                    private void go(ICalWriter icalWriter) throws IOException {
    +1229                            icalWriter.setRegistrar(registrar);
    +1230                            icalWriter.setCaretEncodingEnabled(caretEncoding);
    +1231    
    +1232                            for (ICalendar ical : icals) {
    +1233                                    icalWriter.write(ical);
    +1234                            }
    +1235                    }
    +1236            }
    +1237    
    +1238            ///////////////////////////////////////////////////////
    +1239            // XML
    +1240            ///////////////////////////////////////////////////////
    +1241    
    +1242            /**
    +1243             * Chainer class for writing xCal documents (XML-encoded iCalendar objects).
    +1244             * @see Biweekly#writeXml(Collection)
    +1245             * @see Biweekly#writeXml(ICalendar...)
    +1246             */
    +1247            public static class WriterChainXml extends WriterChain<WriterChainXml> {
    +1248                    int indent = -1;
    +1249                    final Map<String, ICalDataType> parameterDataTypes = new HashMap<String, ICalDataType>(0);
    +1250    
    +1251                    WriterChainXml(Collection<ICalendar> icals) {
    +1252                            super(icals);
    +1253                    }
    +1254    
    +1255                    @Override
    +1256                    public WriterChainXml register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1257                            return super.register(marshaller);
    +1258                    }
    +1259    
    +1260                    @Override
    +1261                    public WriterChainXml register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1262                            return super.register(marshaller);
    +1263                    }
    +1264    
    +1265                    /**
    +1266                     * Registers the data type of an experimental parameter. Experimental
    +1267                     * parameters use the "unknown" xCal data type by default.
    +1268                     * @param parameterName the parameter name (e.g. "x-foo")
    +1269                     * @param dataType the data type
    +1270                     * @return this
    +1271                     */
    +1272                    public WriterChainXml register(String parameterName, ICalDataType dataType) {
    +1273                            parameterDataTypes.put(parameterName, dataType);
    +1274                            return this_;
    +1275                    }
    +1276    
    +1277                    /**
    +1278                     * Sets the number of indent spaces to use for pretty-printing. If not
    +1279                     * set, then the XML will not be pretty-printed.
    +1280                     * @param indent the number of spaces
    +1281                     * @return this
    +1282                     */
    +1283                    public WriterChainXml indent(int indent) {
    +1284                            this.indent = indent;
    +1285                            return this_;
    +1286                    }
    +1287    
    +1288                    /**
    +1289                     * Writes the xCal document to a string.
    +1290                     * @return the XML string
    +1291                     * @throws IllegalArgumentException if the marshaller class for a
    +1292                     * component or property object cannot be found (only happens when an
    +1293                     * experimental property/component marshaller is not registered with the
    +1294                     * {@code register} method.)
    +1295                     */
    +1296                    public String go() {
    +1297                            StringWriter sw = new StringWriter();
    +1298                            try {
    +1299                                    go(sw);
    +1300                            } catch (TransformerException e) {
    +1301                                    //writing to a string
    +1302                            }
    +1303                            return sw.toString();
    +1304                    }
    +1305    
    +1306                    /**
    +1307                     * Writes the xCal document to an output stream.
    +1308                     * @param out the output stream to write to
    +1309                     * @throws IllegalArgumentException if the marshaller class for a
    +1310                     * component or property object cannot be found (only happens when an
    +1311                     * experimental property/component marshaller is not registered with the
    +1312                     * {@code register} method.)
    +1313                     * @throws TransformerException if there's a problem writing the XML
    +1314                     */
    +1315                    public void go(OutputStream out) throws TransformerException {
    +1316                            XCalDocument document = constructDocument();
    +1317                            document.write(out, indent);
    +1318                    }
    +1319    
    +1320                    /**
    +1321                     * Writes the xCal document to a file.
    +1322                     * @param file the file to write to
    +1323                     * @throws IllegalArgumentException if the marshaller class for a
    +1324                     * component or property object cannot be found (only happens when an
    +1325                     * experimental property/component marshaller is not registered with the
    +1326                     * {@code register} method.)
    +1327                     * @throws TransformerException if there's a problem writing the XML
    +1328                     * @throws IOException if there's a problem writing to the file
    +1329                     */
    +1330                    public void go(File file) throws TransformerException, IOException {
    +1331                            XCalDocument document = constructDocument();
    +1332                            document.write(file, indent);
    +1333                    }
    +1334    
    +1335                    /**
    +1336                     * Writes the xCal document to a writer.
    +1337                     * @param writer the writer to write to
    +1338                     * @throws IllegalArgumentException if the marshaller class for a
    +1339                     * component or property object cannot be found (only happens when an
    +1340                     * experimental property/component marshaller is not registered with the
    +1341                     * {@code register} method.)
    +1342                     * @throws TransformerException if there's a problem writing the XML
    +1343                     */
    +1344                    public void go(Writer writer) throws TransformerException {
    +1345                            XCalDocument document = constructDocument();
    +1346                            document.write(writer, indent);
    +1347                    }
    +1348    
    +1349                    /**
    +1350                     * Writes the xCal document to an XML DOM.
    +1351                     * @return the XML DOM
    +1352                     */
    +1353                    public Document dom() {
    +1354                            XCalDocument document = constructDocument();
    +1355                            return document.getDocument();
    +1356                    }
    +1357    
    +1358                    private XCalDocument constructDocument() {
    +1359                            XCalDocument document = new XCalDocument();
    +1360                            document.setRegistrar(registrar);
    +1361                            for (Map.Entry<String, ICalDataType> entry : parameterDataTypes.entrySet()) {
    +1362                                    document.registerParameterDataType(entry.getKey(), entry.getValue());
    +1363                            }
    +1364    
    +1365                            for (ICalendar ical : icals) {
    +1366                                    document.add(ical);
    +1367                            }
    +1368    
    +1369                            return document;
    +1370                    }
    +1371            }
    +1372    
    +1373            ///////////////////////////////////////////////////////
    +1374            // JSON
    +1375            ///////////////////////////////////////////////////////
    +1376    
    +1377            /**
    +1378             * Chainer class for writing to JSON-encoded iCalendar data streams (jCal).
    +1379             * @see Biweekly#writeJson(Collection)
    +1380             * @see Biweekly#writeJson(ICalendar...)
    +1381             */
    +1382            public static class WriterChainJson extends WriterChain<WriterChainJson> {
    +1383                    private boolean indent = false;
    +1384    
    +1385                    private WriterChainJson(Collection<ICalendar> icals) {
    +1386                            super(icals);
    +1387                    }
    +1388    
    +1389                    /**
    +1390                     * Sets whether or not to pretty-print the JSON.
    +1391                     * @param indent true to pretty-print it, false not to (defaults to
    +1392                     * false)
    +1393                     * @return this
    +1394                     */
    +1395                    public WriterChainJson indent(boolean indent) {
    +1396                            this.indent = indent;
    +1397                            return this_;
    +1398                    }
    +1399    
    +1400                    /**
    +1401                     * Writes the iCalendar objects to a string.
    +1402                     * @return the iCalendar string
    +1403                     * @throws IllegalArgumentException if the marshaller class for a
    +1404                     * component or property object cannot be found (only happens when an
    +1405                     * experimental property/component marshaller is not registered with the
    +1406                     * {@code register} method.)
    +1407                     */
    +1408                    public String go() {
    +1409                            StringWriter sw = new StringWriter();
    +1410                            try {
    +1411                                    go(sw);
    +1412                            } catch (IOException e) {
    +1413                                    //writing to a string
    +1414                            }
    +1415                            return sw.toString();
    +1416                    }
    +1417    
    +1418                    /**
    +1419                     * Writes the iCalendar objects to a data stream.
    +1420                     * @param out the output stream to write to
    +1421                     * @throws IllegalArgumentException if the marshaller class for a
    +1422                     * component or property object cannot be found (only happens when an
    +1423                     * experimental property/component marshaller is not registered with the
    +1424                     * {@code register} method.)
    +1425                     * @throws IOException if there's a problem writing to the output stream
    +1426                     */
    +1427                    public void go(OutputStream out) throws IOException {
    +1428                            go(new JCalWriter(out, icals.size() > 1));
    +1429                    }
    +1430    
    +1431                    /**
    +1432                     * Writes the iCalendar objects to a file.
    +1433                     * @param file the file to write to
    +1434                     * @throws IllegalArgumentException if the marshaller class for a
    +1435                     * component or property object cannot be found (only happens when an
    +1436                     * experimental property/component marshaller is not registered with the
    +1437                     * {@code register} method.)
    +1438                     * @throws IOException if there's a problem writing to the file
    +1439                     */
    +1440                    public void go(File file) throws IOException {
    +1441                            JCalWriter jcalWriter = new JCalWriter(file, icals.size() > 1);
    +1442                            try {
    +1443                                    go(jcalWriter);
    +1444                            } finally {
    +1445                                    IOUtils.closeQuietly(jcalWriter);
    +1446                            }
    +1447                    }
    +1448    
    +1449                    /**
    +1450                     * Writes the iCalendar objects to a data stream.
    +1451                     * @param writer the writer to write to
    +1452                     * @throws IllegalArgumentException if the marshaller class for a
    +1453                     * component or property object cannot be found (only happens when an
    +1454                     * experimental property/component marshaller is not registered with the
    +1455                     * {@code register} method.)
    +1456                     * @throws IOException if there's a problem writing to the writer
    +1457                     */
    +1458                    public void go(Writer writer) throws IOException {
    +1459                            go(new JCalWriter(writer, icals.size() > 1));
    +1460                    }
    +1461    
    +1462                    private void go(JCalWriter jcalWriter) throws IOException {
    +1463                            jcalWriter.setRegistrar(registrar);
    +1464                            jcalWriter.setIndent(indent);
    +1465    
    +1466                            for (ICalendar ical : icals) {
    +1467                                    jcalWriter.write(ical);
    +1468                            }
    +1469                            jcalWriter.closeJsonStream();
    +1470                    }
    +1471            }
    +1472    
    +1473            private Biweekly() {
    +1474                    //hide
    +1475            }
    +1476    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.html new file mode 100644 index 000000000..6e42f0110 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/Biweekly.html @@ -0,0 +1,1542 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.io.File;
    +004    import java.io.IOException;
    +005    import java.io.InputStream;
    +006    import java.io.OutputStream;
    +007    import java.io.Reader;
    +008    import java.io.StringWriter;
    +009    import java.io.Writer;
    +010    import java.util.ArrayList;
    +011    import java.util.Arrays;
    +012    import java.util.Collection;
    +013    import java.util.HashMap;
    +014    import java.util.List;
    +015    import java.util.Map;
    +016    import java.util.Properties;
    +017    
    +018    import javax.xml.transform.TransformerException;
    +019    
    +020    import org.w3c.dom.Document;
    +021    import org.xml.sax.SAXException;
    +022    
    +023    import biweekly.component.ICalComponent;
    +024    import biweekly.component.marshaller.ICalComponentMarshaller;
    +025    import biweekly.io.ICalMarshallerRegistrar;
    +026    import biweekly.io.json.JCalParseException;
    +027    import biweekly.io.json.JCalReader;
    +028    import biweekly.io.json.JCalWriter;
    +029    import biweekly.io.text.ICalRawReader;
    +030    import biweekly.io.text.ICalRawWriter;
    +031    import biweekly.io.text.ICalReader;
    +032    import biweekly.io.text.ICalWriter;
    +033    import biweekly.io.xml.XCalDocument;
    +034    import biweekly.property.ICalProperty;
    +035    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +036    import biweekly.util.IOUtils;
    +037    
    +038    import com.fasterxml.jackson.core.JsonParseException;
    +039    
    +040    /*
    +041     Copyright (c) 2013, Michael Angstadt
    +042     All rights reserved.
    +043    
    +044     Redistribution and use in source and binary forms, with or without
    +045     modification, are permitted provided that the following conditions are met: 
    +046    
    +047     1. Redistributions of source code must retain the above copyright notice, this
    +048     list of conditions and the following disclaimer. 
    +049     2. Redistributions in binary form must reproduce the above copyright notice,
    +050     this list of conditions and the following disclaimer in the documentation
    +051     and/or other materials provided with the distribution. 
    +052    
    +053     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +054     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +055     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +056     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +057     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +058     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +059     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +060     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +061     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +062     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +063     */
    +064    
    +065    /**
    +066     * <p>
    +067     * Contains static chaining factory methods for reading/writing iCalendar
    +068     * objects.
    +069     * </p>
    +070     * 
    +071     * <p>
    +072     * <b>Writing an iCalendar object</b>
    +073     * 
    +074     * <pre class="brush:java">
    +075     * ICalendar ical = new ICalendar();
    +076     * 
    +077     * //string
    +078     * String icalString = Biweekly.write(ical).go();
    +079     * 
    +080     * //file
    +081     * File file = new File("meeting.ics");
    +082     * Biweekly.write(ical).go(file);
    +083     * 
    +084     * //output stream
    +085     * OutputStream out = ...
    +086     * Biweekly.write(ical).go(out);
    +087     * out.close();
    +088     * 
    +089     * //writer (should be configured to use UTF-8 encoding)
    +090     * Writer writer = ...
    +091     * Biweekly.write(ical).go(writer);
    +092     * writer.close();
    +093     * </pre>
    +094     * 
    +095     * </p>
    +096     * 
    +097     * <p>
    +098     * <b>Writing multiple iCalendar objects</b>
    +099     * 
    +100     * <pre class="brush:java">
    +101     * ICalendar ical1 = new ICalendar();
    +102     * ICalendar ical2 = new ICalendar();
    +103     * 
    +104     * String icalString = Biweekly.write(ical1, ical2).go();
    +105     * </pre>
    +106     * 
    +107     * </p>
    +108     * 
    +109     * <p>
    +110     * <b>Writing an XML-encoded iCalendar object (xCal)</b><br>
    +111     * 
    +112     * <pre class="brush:java">
    +113     * //Call writeXml() instead of write()
    +114     * ICalendar ical = new ICalendar();
    +115     * String xml = Biweekly.writeXml(ical).indent(2).go();
    +116     * </pre>
    +117     * 
    +118     * </p>
    +119     * 
    +120     * <p>
    +121     * <b>Writing a JSON-encoded iCalendar object (jCal)</b><br>
    +122     * 
    +123     * <pre class="brush:java">
    +124     * //Call writeJson() instead of write()
    +125     * ICalendar ical = new ICalendar();
    +126     * String json = Biweekly.writeJson(ical).go();
    +127     * </pre>
    +128     * 
    +129     * </p>
    +130     * 
    +131     * <p>
    +132     * <b>Reading an iCalendar object</b>
    +133     * 
    +134     * <pre class="brush:java">
    +135     * ICalendar ical;
    +136     * 
    +137     * //string
    +138     * String icalStr = ...
    +139     * ical = Biweekly.parse(icalStr).first();
    +140     * 
    +141     * //file
    +142     * File file = new File("meeting.ics");
    +143     * ical = Biweekly.parse(file).first();
    +144     * 
    +145     * //input stream
    +146     * InputStream in = ...
    +147     * ical = Biweekly.parse(in).first();
    +148     * in.close();  
    +149     * 
    +150     * //reader (should be configured to read UTF-8)
    +151     * Reader reader = ...
    +152     * ical = Biweekly.parse(reader).first();
    +153     * reader.close();
    +154     * </pre>
    +155     * 
    +156     * </p>
    +157     * 
    +158     * <p>
    +159     * <b>Reading multiple iCalendar objects</b>
    +160     * 
    +161     * <pre class="brush:java">
    +162     * String icalStr = ...
    +163     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).all();
    +164     * </pre>
    +165     * 
    +166     * </p>
    +167     * 
    +168     * <p>
    +169     * <b>Reading an XML-encoded iCalendar object (xCal)</b><br>
    +170     * 
    +171     * <pre class="brush:java">
    +172     * //Call parseXml() instead of parse()
    +173     * String xml = ...
    +174     * ICalendar ical = Biweekly.parseXml(xml).first();
    +175     * </pre>
    +176     * 
    +177     * </p>
    +178     * 
    +179     * <p>
    +180     * <b>Reading a JSON-encoded iCalendar object (Cal)</b><br>
    +181     * 
    +182     * <pre class="brush:java">
    +183     * //Call parseJson() instead of parse()
    +184     * String json = ...
    +185     * ICalendar ical = Biweekly.parseJson(json).first();
    +186     * </pre>
    +187     * 
    +188     * </p>
    +189     * 
    +190     * <p>
    +191     * <b>Retrieving parser warnings</b>
    +192     * 
    +193     * <pre class="brush:java">
    +194     * String icalStr = ...
    +195     * List&lt;List&lt;String&gt;&gt; warnings = new ArrayList&lt;List&lt;String&gt;&gt;();
    +196     * List&lt;ICalendar&gt; icals = Biweekly.parse(icalStr).warnings(warnings).all();
    +197     * int i = 0;
    +198     * for (List&lt;String&gt; icalWarnings : warnings){
    +199     *   System.out.println("iCal #" + (i++) + " warnings:");
    +200     *   for (String warning : icalWarnings){
    +201     *     System.out.println(warning);
    +202     *   }
    +203     * }
    +204     * </pre>
    +205     * 
    +206     * </p>
    +207     * 
    +208     * <p>
    +209     * The methods in this class make use of the following classes. These classes
    +210     * can be used if greater control over the read/write operation is required:
    +211     * </p>
    +212     * 
    +213     * <style> table.t td, table.t th {border:1px solid #000;} </style>
    +214     * <table class="t" cellpadding="5" style="border-collapse:collapse;">
    +215     * <tr>
    +216     * <th></th>
    +217     * <th>Classes</th>
    +218     * <th>Supports<br>
    +219     * streaming?</th>
    +220     * </tr>
    +221     * <tr>
    +222     * <th>Text</th>
    +223     * <td>{@link ICalReader} / {@link ICalWriter}</td>
    +224     * <td>yes</td>
    +225     * </tr>
    +226     * <tr>
    +227     * <th>XML</th>
    +228     * <td>{@link XCalDocument}</td>
    +229     * <td>no</td>
    +230     * </tr>
    +231     * <tr>
    +232     * <th>JSON</th>
    +233     * <td>{@link JCalReader} / {@link JCalWriter}</td>
    +234     * <td>yes</td>
    +235     * </tr>
    +236     * </table>
    +237     * @author Michael Angstadt
    +238     */
    +239    public class Biweekly {
    +240            /**
    +241             * The version of the library.
    +242             */
    +243            public static final String VERSION;
    +244    
    +245            /**
    +246             * The project webpage.
    +247             */
    +248            public static final String URL;
    +249    
    +250            static {
    +251                    InputStream in = null;
    +252                    try {
    +253                            in = Biweekly.class.getResourceAsStream("/biweekly.properties");
    +254                            Properties props = new Properties();
    +255                            props.load(in);
    +256    
    +257                            VERSION = props.getProperty("version");
    +258                            URL = props.getProperty("url");
    +259                    } catch (IOException e) {
    +260                            throw new RuntimeException(e);
    +261                    } finally {
    +262                            IOUtils.closeQuietly(in);
    +263                    }
    +264            }
    +265    
    +266            /**
    +267             * Parses an iCalendar object string.
    +268             * @param ical the iCalendar data
    +269             * @return chainer object for completing the parse operation
    +270             */
    +271            public static ParserChainTextString parse(String ical) {
    +272                    return new ParserChainTextString(ical);
    +273            }
    +274    
    +275            /**
    +276             * Parses an iCalendar file.
    +277             * @param file the iCalendar file
    +278             * @return chainer object for completing the parse operation
    +279             */
    +280            public static ParserChainTextReader parse(File file) {
    +281                    return new ParserChainTextReader(file);
    +282            }
    +283    
    +284            /**
    +285             * Parses an iCalendar data stream.
    +286             * @param in the input stream
    +287             * @return chainer object for completing the parse operation
    +288             */
    +289            public static ParserChainTextReader parse(InputStream in) {
    +290                    return new ParserChainTextReader(in);
    +291            }
    +292    
    +293            /**
    +294             * Parses an iCalendar data stream.
    +295             * @param reader the reader
    +296             * @return chainer object for completing the parse operation
    +297             */
    +298            public static ParserChainTextReader parse(Reader reader) {
    +299                    return new ParserChainTextReader(reader);
    +300            }
    +301    
    +302            /**
    +303             * Writes multiple iCalendar objects to a data stream.
    +304             * @param icals the iCalendar objects to write
    +305             * @return chainer object for completing the write operation
    +306             */
    +307            public static WriterChainText write(ICalendar... icals) {
    +308                    return write(Arrays.asList(icals));
    +309            }
    +310    
    +311            /**
    +312             * Writes multiple iCalendar objects to a data stream.
    +313             * @param icals the iCalendar objects to write
    +314             * @return chainer object for completing the write operation
    +315             */
    +316            public static WriterChainText write(Collection<ICalendar> icals) {
    +317                    return new WriterChainText(icals);
    +318            }
    +319    
    +320            /**
    +321             * Parses an xCal document (XML-encoded iCalendar objects) from a string.
    +322             * @param xml the XML string
    +323             * @return chainer object for completing the parse operation
    +324             */
    +325            public static ParserChainXmlString parseXml(String xml) {
    +326                    return new ParserChainXmlString(xml);
    +327            }
    +328    
    +329            /**
    +330             * Parses an xCal document (XML-encoded iCalendar objects) from a file.
    +331             * @param file the XML file
    +332             * @return chainer object for completing the parse operation
    +333             */
    +334            public static ParserChainXmlReader parseXml(File file) {
    +335                    return new ParserChainXmlReader(file);
    +336            }
    +337    
    +338            /**
    +339             * Parses an xCal document (XML-encoded iCalendar objects) from an input
    +340             * stream.
    +341             * @param in the input stream
    +342             * @return chainer object for completing the parse operation
    +343             */
    +344            public static ParserChainXmlReader parseXml(InputStream in) {
    +345                    return new ParserChainXmlReader(in);
    +346            }
    +347    
    +348            /**
    +349             * <p>
    +350             * Parses an xCal document (XML-encoded iCalendar objects) from a reader.
    +351             * </p>
    +352             * <p>
    +353             * Note that use of this method is discouraged. It ignores the character
    +354             * encoding that is defined within the XML document itself, and should only
    +355             * be used if the encoding is undefined or if the encoding needs to be
    +356             * ignored for whatever reason. The {@link #parseXml(InputStream)} method
    +357             * should be used instead, since it takes the XML document's character
    +358             * encoding into account when parsing.
    +359             * </p>
    +360             * @param reader the reader
    +361             * @return chainer object for completing the parse operation
    +362             */
    +363            public static ParserChainXmlReader parseXml(Reader reader) {
    +364                    return new ParserChainXmlReader(reader);
    +365            }
    +366    
    +367            /**
    +368             * Parses an xCal document (XML-encoded iCalendar objects).
    +369             * @param document the XML document
    +370             * @return chainer object for completing the parse operation
    +371             */
    +372            public static ParserChainXmlDocument parseXml(Document document) {
    +373                    return new ParserChainXmlDocument(document);
    +374            }
    +375    
    +376            /**
    +377             * Writes an xCal document (XML-encoded iCalendar objects).
    +378             * @param icals the iCalendar object(s) to write
    +379             * @return chainer object for completing the write operation
    +380             */
    +381            public static WriterChainXml writeXml(ICalendar... icals) {
    +382                    return writeXml(Arrays.asList(icals));
    +383            }
    +384    
    +385            /**
    +386             * Writes an xCal document (XML-encoded iCalendar objects).
    +387             * @param icals the iCalendar objects to write
    +388             * @return chainer object for completing the write operation
    +389             */
    +390            public static WriterChainXml writeXml(Collection<ICalendar> icals) {
    +391                    return new WriterChainXml(icals);
    +392            }
    +393    
    +394            /**
    +395             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +396             * @param json the JSON data
    +397             * @return chainer object for completing the parse operation
    +398             */
    +399            public static ParserChainJsonString parseJson(String json) {
    +400                    return new ParserChainJsonString(json);
    +401            }
    +402    
    +403            /**
    +404             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +405             * @param file the JSON file
    +406             * @return chainer object for completing the parse operation
    +407             */
    +408            public static ParserChainJsonReader parseJson(File file) {
    +409                    return new ParserChainJsonReader(file);
    +410            }
    +411    
    +412            /**
    +413             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +414             * @param in the input stream
    +415             * @return chainer object for completing the parse operation
    +416             */
    +417            public static ParserChainJsonReader parseJson(InputStream in) {
    +418                    return new ParserChainJsonReader(in);
    +419            }
    +420    
    +421            /**
    +422             * Parses a jCal data stream (JSON-encoded iCalendar objects).
    +423             * @param reader the reader
    +424             * @return chainer object for completing the parse operation
    +425             */
    +426            public static ParserChainJsonReader parseJson(Reader reader) {
    +427                    return new ParserChainJsonReader(reader);
    +428            }
    +429    
    +430            /**
    +431             * Writes an xCal document (XML-encoded iCalendar objects).
    +432             * @param icals the iCalendar object(s) to write
    +433             * @return chainer object for completing the write operation
    +434             */
    +435            public static WriterChainJson writeJson(ICalendar... icals) {
    +436                    return writeJson(Arrays.asList(icals));
    +437            }
    +438    
    +439            /**
    +440             * Writes an xCal document (XML-encoded iCalendar objects).
    +441             * @param icals the iCalendar objects to write
    +442             * @return chainer object for completing the write operation
    +443             */
    +444            public static WriterChainJson writeJson(Collection<ICalendar> icals) {
    +445                    return new WriterChainJson(icals);
    +446            }
    +447    
    +448            static abstract class ParserChain<T> {
    +449                    //Note: "package" level is used so various fields/methods don't show up in the Javadocs, but are still visible to child classes
    +450                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +451    
    +452                    @SuppressWarnings("unchecked")
    +453                    final T this_ = (T) this;
    +454    
    +455                    List<List<String>> warnings;
    +456    
    +457                    /**
    +458                     * Registers a property marshaller.
    +459                     * @param marshaller the marshaller
    +460                     * @return this
    +461                     */
    +462                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +463                            registrar.register(marshaller);
    +464                            return this_;
    +465                    }
    +466    
    +467                    /**
    +468                     * Registers a component marshaller.
    +469                     * @param marshaller the marshaller
    +470                     * @return this
    +471                     */
    +472                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +473                            registrar.register(marshaller);
    +474                            return this_;
    +475                    }
    +476    
    +477                    /**
    +478                     * Provides a list for putting the parser warnings into.
    +479                     * @param warnings the list object to populate (it is a
    +480                     * "list of lists"--each parsed {@link ICalendar} object has its own
    +481                     * warnings list)
    +482                     * @return this
    +483                     */
    +484                    public T warnings(List<List<String>> warnings) {
    +485                            this.warnings = warnings;
    +486                            return this_;
    +487                    }
    +488    
    +489                    /**
    +490                     * Reads the first iCalendar object from the data stream.
    +491                     * @return the first iCalendar object or null if there are none
    +492                     * @throws IOException if there a problem reading from the data stream
    +493                     * @throws SAXException if there's a problem parsing the XML
    +494                     */
    +495                    public abstract ICalendar first() throws IOException, SAXException;
    +496    
    +497                    /**
    +498                     * Reads all iCalendar objects from the data stream.
    +499                     * @return the parsed iCalendar objects
    +500                     * @throws IOException if there's a problem reading from the data stream
    +501                     * @throws SAXException if there's a problem parsing the XML
    +502                     */
    +503                    public abstract List<ICalendar> all() throws IOException, SAXException;
    +504            }
    +505    
    +506            ///////////////////////////////////////////////////////
    +507            // plain-text
    +508            ///////////////////////////////////////////////////////
    +509    
    +510            static abstract class ParserChainText<T> extends ParserChain<T> {
    +511                    boolean caretDecoding = true;
    +512                    final boolean closeWhenDone;
    +513    
    +514                    private ParserChainText(boolean closeWhenDone) {
    +515                            this.closeWhenDone = closeWhenDone;
    +516                    }
    +517    
    +518                    /**
    +519                     * Sets whether the reader will decode parameter values that use
    +520                     * circumflex accent encoding (enabled by default). This escaping
    +521                     * mechanism allows newlines and double quotes to be included in
    +522                     * parameter values.
    +523                     * @param enable true to use circumflex accent decoding, false not to
    +524                     * @return this
    +525                     * @see ICalRawReader#setCaretDecodingEnabled(boolean)
    +526                     */
    +527                    public T caretDecoding(boolean enable) {
    +528                            caretDecoding = enable;
    +529                            return this_;
    +530                    }
    +531    
    +532                    @Override
    +533                    public ICalendar first() throws IOException {
    +534                            ICalReader parser = constructReader();
    +535    
    +536                            try {
    +537                                    ICalendar ical = parser.readNext();
    +538                                    if (warnings != null) {
    +539                                            warnings.add(parser.getWarnings());
    +540                                    }
    +541                                    return ical;
    +542                            } finally {
    +543                                    if (closeWhenDone) {
    +544                                            IOUtils.closeQuietly(parser);
    +545                                    }
    +546                            }
    +547                    }
    +548    
    +549                    @Override
    +550                    public List<ICalendar> all() throws IOException {
    +551                            ICalReader parser = constructReader();
    +552    
    +553                            try {
    +554                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +555                                    ICalendar ical;
    +556                                    while ((ical = parser.readNext()) != null) {
    +557                                            if (warnings != null) {
    +558                                                    warnings.add(parser.getWarnings());
    +559                                            }
    +560                                            icals.add(ical);
    +561                                    }
    +562                                    return icals;
    +563                            } finally {
    +564                                    if (closeWhenDone) {
    +565                                            IOUtils.closeQuietly(parser);
    +566                                    }
    +567                            }
    +568                    }
    +569    
    +570                    private ICalReader constructReader() throws IOException {
    +571                            ICalReader parser = _constructReader();
    +572                            parser.setRegistrar(registrar);
    +573                            parser.setCaretDecodingEnabled(caretDecoding);
    +574                            return parser;
    +575                    }
    +576    
    +577                    abstract ICalReader _constructReader() throws IOException;
    +578            }
    +579    
    +580            /**
    +581             * Chainer class for parsing plain text iCalendar data streams.
    +582             * @see Biweekly#parse(InputStream)
    +583             * @see Biweekly#parse(File)
    +584             * @see Biweekly#parse(Reader)
    +585             */
    +586            public static class ParserChainTextReader extends ParserChainText<ParserChainTextReader> {
    +587                    private final InputStream in;
    +588                    private final File file;
    +589                    private final Reader reader;
    +590    
    +591                    private ParserChainTextReader(InputStream in) {
    +592                            super(false);
    +593                            this.in = in;
    +594                            this.reader = null;
    +595                            this.file = null;
    +596                    }
    +597    
    +598                    private ParserChainTextReader(File file) {
    +599                            super(true);
    +600                            this.in = null;
    +601                            this.reader = null;
    +602                            this.file = file;
    +603                    }
    +604    
    +605                    private ParserChainTextReader(Reader reader) {
    +606                            super(false);
    +607                            this.in = null;
    +608                            this.reader = reader;
    +609                            this.file = null;
    +610                    }
    +611    
    +612                    @Override
    +613                    public ParserChainTextReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +614                            return super.register(marshaller);
    +615                    }
    +616    
    +617                    @Override
    +618                    public ParserChainTextReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +619                            return super.register(marshaller);
    +620                    }
    +621    
    +622                    @Override
    +623                    public ParserChainTextReader warnings(List<List<String>> warnings) {
    +624                            return super.warnings(warnings);
    +625                    }
    +626    
    +627                    @Override
    +628                    public ParserChainTextReader caretDecoding(boolean enable) {
    +629                            return super.caretDecoding(enable);
    +630                    }
    +631    
    +632                    @Override
    +633                    ICalReader _constructReader() throws IOException {
    +634                            if (in != null) {
    +635                                    return new ICalReader(in);
    +636                            }
    +637                            if (file != null) {
    +638                                    return new ICalReader(file);
    +639                            }
    +640                            return new ICalReader(reader);
    +641                    }
    +642            }
    +643    
    +644            /**
    +645             * Chainer class for parsing plain text iCalendar strings.
    +646             * @see Biweekly#parse(String)
    +647             */
    +648            public static class ParserChainTextString extends ParserChainText<ParserChainTextString> {
    +649                    private final String text;
    +650    
    +651                    private ParserChainTextString(String text) {
    +652                            super(false);
    +653                            this.text = text;
    +654                    }
    +655    
    +656                    @Override
    +657                    public ParserChainTextString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +658                            return super.register(marshaller);
    +659                    }
    +660    
    +661                    @Override
    +662                    public ParserChainTextString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +663                            return super.register(marshaller);
    +664                    }
    +665    
    +666                    @Override
    +667                    public ParserChainTextString warnings(List<List<String>> warnings) {
    +668                            return super.warnings(warnings);
    +669                    }
    +670    
    +671                    @Override
    +672                    public ParserChainTextString caretDecoding(boolean enable) {
    +673                            return super.caretDecoding(enable);
    +674                    }
    +675    
    +676                    @Override
    +677                    ICalReader _constructReader() {
    +678                            return new ICalReader(text);
    +679                    }
    +680    
    +681                    @Override
    +682                    public ICalendar first() {
    +683                            try {
    +684                                    return super.first();
    +685                            } catch (IOException e) {
    +686                                    //should never been thrown because we're reading from a string
    +687                                    throw new RuntimeException(e);
    +688                            }
    +689                    }
    +690    
    +691                    @Override
    +692                    public List<ICalendar> all() {
    +693                            try {
    +694                                    return super.all();
    +695                            } catch (IOException e) {
    +696                                    //should never been thrown because we're reading from a string
    +697                                    throw new RuntimeException(e);
    +698                            }
    +699                    }
    +700            }
    +701    
    +702            ///////////////////////////////////////////////////////
    +703            // XML
    +704            ///////////////////////////////////////////////////////
    +705    
    +706            static abstract class ParserChainXml<T> extends ParserChain<T> {
    +707                    @Override
    +708                    public ICalendar first() throws IOException, SAXException {
    +709                            XCalDocument document = constructDocument();
    +710                            ICalendar ical = document.parseFirst();
    +711                            if (warnings != null) {
    +712                                    warnings.addAll(document.getParseWarnings());
    +713                            }
    +714                            return ical;
    +715                    }
    +716    
    +717                    @Override
    +718                    public List<ICalendar> all() throws IOException, SAXException {
    +719                            XCalDocument document = constructDocument();
    +720                            List<ICalendar> icals = document.parseAll();
    +721                            if (warnings != null) {
    +722                                    warnings.addAll(document.getParseWarnings());
    +723                            }
    +724                            return icals;
    +725                    }
    +726    
    +727                    private XCalDocument constructDocument() throws SAXException, IOException {
    +728                            XCalDocument parser = _constructDocument();
    +729                            parser.setRegistrar(registrar);
    +730                            return parser;
    +731                    }
    +732    
    +733                    abstract XCalDocument _constructDocument() throws IOException, SAXException;
    +734            }
    +735    
    +736            /**
    +737             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +738             * @see Biweekly#parseXml(String)
    +739             */
    +740            public static class ParserChainXmlString extends ParserChainXml<ParserChainXmlString> {
    +741                    private final String xml;
    +742    
    +743                    private ParserChainXmlString(String xml) {
    +744                            this.xml = xml;
    +745                    }
    +746    
    +747                    @Override
    +748                    public ParserChainXmlString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +749                            return super.register(marshaller);
    +750                    }
    +751    
    +752                    @Override
    +753                    public ParserChainXmlString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +754                            return super.register(marshaller);
    +755                    }
    +756    
    +757                    @Override
    +758                    public ParserChainXmlString warnings(List<List<String>> warnings) {
    +759                            return super.warnings(warnings);
    +760                    }
    +761    
    +762                    @Override
    +763                    XCalDocument _constructDocument() throws SAXException {
    +764                            return new XCalDocument(xml);
    +765                    }
    +766    
    +767                    @Override
    +768                    public ICalendar first() throws SAXException {
    +769                            try {
    +770                                    return super.first();
    +771                            } catch (IOException e) {
    +772                                    //should never been thrown because we're reading from a string
    +773                                    throw new RuntimeException(e);
    +774                            }
    +775                    }
    +776    
    +777                    @Override
    +778                    public List<ICalendar> all() throws SAXException {
    +779                            try {
    +780                                    return super.all();
    +781                            } catch (IOException e) {
    +782                                    //should never been thrown because we're reading from a string
    +783                                    throw new RuntimeException(e);
    +784                            }
    +785                    }
    +786            }
    +787    
    +788            /**
    +789             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +790             * @see Biweekly#parseXml(InputStream)
    +791             * @see Biweekly#parseXml(File)
    +792             * @see Biweekly#parseXml(Reader)
    +793             */
    +794            public static class ParserChainXmlReader extends ParserChainXml<ParserChainXmlReader> {
    +795                    private final InputStream in;
    +796                    private final File file;
    +797                    private final Reader reader;
    +798    
    +799                    private ParserChainXmlReader(InputStream in) {
    +800                            this.in = in;
    +801                            this.reader = null;
    +802                            this.file = null;
    +803                    }
    +804    
    +805                    private ParserChainXmlReader(File file) {
    +806                            this.in = null;
    +807                            this.reader = null;
    +808                            this.file = file;
    +809                    }
    +810    
    +811                    private ParserChainXmlReader(Reader reader) {
    +812                            this.in = null;
    +813                            this.reader = reader;
    +814                            this.file = null;
    +815                    }
    +816    
    +817                    @Override
    +818                    public ParserChainXmlReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +819                            return super.register(marshaller);
    +820                    }
    +821    
    +822                    @Override
    +823                    public ParserChainXmlReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +824                            return super.register(marshaller);
    +825                    }
    +826    
    +827                    @Override
    +828                    public ParserChainXmlReader warnings(List<List<String>> warnings) {
    +829                            return super.warnings(warnings);
    +830                    }
    +831    
    +832                    @Override
    +833                    XCalDocument _constructDocument() throws IOException, SAXException {
    +834                            if (in != null) {
    +835                                    return new XCalDocument(in);
    +836                            }
    +837                            if (file != null) {
    +838                                    return new XCalDocument(file);
    +839                            }
    +840                            return new XCalDocument(reader);
    +841                    }
    +842            }
    +843    
    +844            /**
    +845             * Chainer class for parsing XML-encoded iCalendar objects (xCal).
    +846             * @see Biweekly#parseXml(Document)
    +847             */
    +848            public static class ParserChainXmlDocument extends ParserChainXml<ParserChainXmlDocument> {
    +849                    private final Document document;
    +850    
    +851                    private ParserChainXmlDocument(Document document) {
    +852                            this.document = document;
    +853                    }
    +854    
    +855                    @Override
    +856                    public ParserChainXmlDocument register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +857                            return super.register(marshaller);
    +858                    }
    +859    
    +860                    @Override
    +861                    public ParserChainXmlDocument register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +862                            return super.register(marshaller);
    +863                    }
    +864    
    +865                    @Override
    +866                    public ParserChainXmlDocument warnings(List<List<String>> warnings) {
    +867                            return super.warnings(warnings);
    +868                    }
    +869    
    +870                    @Override
    +871                    XCalDocument _constructDocument() {
    +872                            return new XCalDocument(document);
    +873                    }
    +874    
    +875                    @Override
    +876                    public ICalendar first() {
    +877                            try {
    +878                                    return super.first();
    +879                            } catch (IOException e) {
    +880                                    //should never been thrown because we're reading from a DOM
    +881                                    throw new RuntimeException(e);
    +882                            } catch (SAXException e) {
    +883                                    //should never been thrown because we're reading from a DOM
    +884                                    throw new RuntimeException(e);
    +885                            }
    +886                    }
    +887    
    +888                    @Override
    +889                    public List<ICalendar> all() {
    +890                            try {
    +891                                    return super.all();
    +892                            } catch (IOException e) {
    +893                                    //should never been thrown because we're reading from a DOM
    +894                                    throw new RuntimeException(e);
    +895                            } catch (SAXException e) {
    +896                                    //should never been thrown because we're reading from a DOM
    +897                                    throw new RuntimeException(e);
    +898                            }
    +899                    }
    +900            }
    +901    
    +902            ///////////////////////////////////////////////////////
    +903            // JSON
    +904            ///////////////////////////////////////////////////////
    +905    
    +906            static abstract class ParserChainJson<T> extends ParserChain<T> {
    +907                    final boolean closeWhenDone;
    +908    
    +909                    private ParserChainJson(boolean closeWhenDone) {
    +910                            this.closeWhenDone = closeWhenDone;
    +911                    }
    +912    
    +913                    /**
    +914                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +915                     * syntax may be valid, but it is not in the correct jCal format).
    +916                     * @throws JsonParseException if the JSON syntax is incorrect
    +917                     */
    +918                    @Override
    +919                    public ICalendar first() throws IOException {
    +920                            JCalReader parser = constructReader();
    +921    
    +922                            try {
    +923                                    ICalendar ical = parser.readNext();
    +924                                    if (warnings != null) {
    +925                                            warnings.add(parser.getWarnings());
    +926                                    }
    +927                                    return ical;
    +928                            } finally {
    +929                                    if (closeWhenDone) {
    +930                                            IOUtils.closeQuietly(parser);
    +931                                    }
    +932                            }
    +933                    }
    +934    
    +935                    /**
    +936                     * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +937                     * syntax may be valid, but it is not in the correct jCal format).
    +938                     * @throws JsonParseException if the JSON syntax is incorrect
    +939                     */
    +940                    @Override
    +941                    public List<ICalendar> all() throws IOException {
    +942                            JCalReader parser = constructReader();
    +943    
    +944                            try {
    +945                                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +946                                    ICalendar ical;
    +947                                    while ((ical = parser.readNext()) != null) {
    +948                                            if (warnings != null) {
    +949                                                    warnings.add(parser.getWarnings());
    +950                                            }
    +951                                            icals.add(ical);
    +952                                    }
    +953                                    return icals;
    +954                            } finally {
    +955                                    if (closeWhenDone) {
    +956                                            IOUtils.closeQuietly(parser);
    +957                                    }
    +958                            }
    +959                    }
    +960    
    +961                    private JCalReader constructReader() throws IOException {
    +962                            JCalReader parser = _constructReader();
    +963                            parser.setRegistrar(registrar);
    +964                            return parser;
    +965                    }
    +966    
    +967                    abstract JCalReader _constructReader() throws IOException;
    +968            }
    +969    
    +970            /**
    +971             * Chainer class for parsing JSON-encoded iCalendar data streams (jCal).
    +972             * @see Biweekly#parseJson(InputStream)
    +973             * @see Biweekly#parseJson(File)
    +974             * @see Biweekly#parseJson(Reader)
    +975             */
    +976            public static class ParserChainJsonReader extends ParserChainJson<ParserChainJsonReader> {
    +977                    private final InputStream in;
    +978                    private final File file;
    +979                    private final Reader reader;
    +980    
    +981                    private ParserChainJsonReader(InputStream in) {
    +982                            super(false);
    +983                            this.in = in;
    +984                            this.reader = null;
    +985                            this.file = null;
    +986                    }
    +987    
    +988                    private ParserChainJsonReader(File file) {
    +989                            super(true);
    +990                            this.in = null;
    +991                            this.reader = null;
    +992                            this.file = file;
    +993                    }
    +994    
    +995                    private ParserChainJsonReader(Reader reader) {
    +996                            super(false);
    +997                            this.in = null;
    +998                            this.reader = reader;
    +999                            this.file = null;
    +1000                    }
    +1001    
    +1002                    @Override
    +1003                    public ParserChainJsonReader register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1004                            return super.register(marshaller);
    +1005                    }
    +1006    
    +1007                    @Override
    +1008                    public ParserChainJsonReader register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1009                            return super.register(marshaller);
    +1010                    }
    +1011    
    +1012                    @Override
    +1013                    public ParserChainJsonReader warnings(List<List<String>> warnings) {
    +1014                            return super.warnings(warnings);
    +1015                    }
    +1016    
    +1017                    @Override
    +1018                    JCalReader _constructReader() throws IOException {
    +1019                            if (in != null) {
    +1020                                    return new JCalReader(in);
    +1021                            }
    +1022                            if (file != null) {
    +1023                                    return new JCalReader(file);
    +1024                            }
    +1025                            return new JCalReader(reader);
    +1026                    }
    +1027            }
    +1028    
    +1029            /**
    +1030             * Chainer class for parsing JSON-encoded iCalendar strings (jCal).
    +1031             * @see Biweekly#parseJson(String)
    +1032             */
    +1033            public static class ParserChainJsonString extends ParserChainJson<ParserChainJsonString> {
    +1034                    private final String text;
    +1035    
    +1036                    private ParserChainJsonString(String text) {
    +1037                            super(false);
    +1038                            this.text = text;
    +1039                    }
    +1040    
    +1041                    @Override
    +1042                    public ParserChainJsonString register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1043                            return super.register(marshaller);
    +1044                    }
    +1045    
    +1046                    @Override
    +1047                    public ParserChainJsonString register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1048                            return super.register(marshaller);
    +1049                    }
    +1050    
    +1051                    @Override
    +1052                    public ParserChainJsonString warnings(List<List<String>> warnings) {
    +1053                            return super.warnings(warnings);
    +1054                    }
    +1055    
    +1056                    @Override
    +1057                    JCalReader _constructReader() {
    +1058                            return new JCalReader(text);
    +1059                    }
    +1060    
    +1061                    @Override
    +1062                    public ICalendar first() {
    +1063                            try {
    +1064                                    return super.first();
    +1065                            } catch (IOException e) {
    +1066                                    //should never been thrown because we're reading from a string
    +1067                                    throw new RuntimeException(e);
    +1068                            }
    +1069                    }
    +1070    
    +1071                    @Override
    +1072                    public List<ICalendar> all() {
    +1073                            try {
    +1074                                    return super.all();
    +1075                            } catch (IOException e) {
    +1076                                    //should never been thrown because we're reading from a string
    +1077                                    throw new RuntimeException(e);
    +1078                            }
    +1079                    }
    +1080            }
    +1081    
    +1082            static abstract class WriterChain<T> {
    +1083                    final Collection<ICalendar> icals;
    +1084                    final ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +1085    
    +1086                    @SuppressWarnings("unchecked")
    +1087                    final T this_ = (T) this;
    +1088    
    +1089                    WriterChain(Collection<ICalendar> icals) {
    +1090                            this.icals = icals;
    +1091                    }
    +1092    
    +1093                    /**
    +1094                     * Registers a property marshaller.
    +1095                     * @param marshaller the marshaller
    +1096                     * @return this
    +1097                     */
    +1098                    public T register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1099                            registrar.register(marshaller);
    +1100                            return this_;
    +1101                    }
    +1102    
    +1103                    /**
    +1104                     * Registers a component marshaller.
    +1105                     * @param marshaller the marshaller
    +1106                     * @return this
    +1107                     */
    +1108                    public T register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1109                            registrar.register(marshaller);
    +1110                            return this_;
    +1111                    }
    +1112            }
    +1113    
    +1114            ///////////////////////////////////////////////////////
    +1115            // plain-text
    +1116            ///////////////////////////////////////////////////////
    +1117    
    +1118            /**
    +1119             * Chainer class for writing to plain text iCalendar data streams.
    +1120             * @see Biweekly#write(Collection)
    +1121             * @see Biweekly#write(ICalendar...)
    +1122             */
    +1123            public static class WriterChainText extends WriterChain<WriterChainText> {
    +1124                    boolean caretEncoding = false;
    +1125    
    +1126                    private WriterChainText(Collection<ICalendar> icals) {
    +1127                            super(icals);
    +1128                    }
    +1129    
    +1130                    /**
    +1131                     * <p>
    +1132                     * Sets whether the writer will apply circumflex accent encoding on
    +1133                     * parameter values (disabled by default). This escaping mechanism
    +1134                     * allows for newlines and double quotes to be included in parameter
    +1135                     * values.
    +1136                     * </p>
    +1137                     * 
    +1138                     * <p>
    +1139                     * When disabled, the writer will replace newlines with spaces and
    +1140                     * double quotes with single quotes.
    +1141                     * </p>
    +1142                     * @param enable true to use circumflex accent encoding, false not to
    +1143                     * @return this
    +1144                     * @see ICalRawWriter#setCaretEncodingEnabled(boolean)
    +1145                     */
    +1146                    public WriterChainText caretEncoding(boolean enable) {
    +1147                            this.caretEncoding = enable;
    +1148                            return this_;
    +1149                    }
    +1150    
    +1151                    /**
    +1152                     * Writes the iCalendar objects to a string.
    +1153                     * @return the iCalendar string
    +1154                     * @throws IllegalArgumentException if the marshaller class for a
    +1155                     * component or property object cannot be found (only happens when an
    +1156                     * experimental property/component marshaller is not registered with the
    +1157                     * {@code register} method.)
    +1158                     */
    +1159                    public String go() {
    +1160                            StringWriter sw = new StringWriter();
    +1161                            try {
    +1162                                    go(sw);
    +1163                            } catch (IOException e) {
    +1164                                    //writing to a string
    +1165                            }
    +1166                            return sw.toString();
    +1167                    }
    +1168    
    +1169                    /**
    +1170                     * Writes the iCalendar objects to a data stream.
    +1171                     * @param out the output stream to write to
    +1172                     * @throws IllegalArgumentException if the marshaller class for a
    +1173                     * component or property object cannot be found (only happens when an
    +1174                     * experimental property/component marshaller is not registered with the
    +1175                     * {@code register} method.)
    +1176                     * @throws IOException if there's a problem writing to the output stream
    +1177                     */
    +1178                    public void go(OutputStream out) throws IOException {
    +1179                            go(new ICalWriter(out));
    +1180                    }
    +1181    
    +1182                    /**
    +1183                     * Writes the iCalendar objects to a file.
    +1184                     * @param file the file to write to
    +1185                     * @throws IllegalArgumentException if the marshaller class for a
    +1186                     * component or property object cannot be found (only happens when an
    +1187                     * experimental property/component marshaller is not registered with the
    +1188                     * {@code register} method.)
    +1189                     * @throws IOException if there's a problem writing to the file
    +1190                     */
    +1191                    public void go(File file) throws IOException {
    +1192                            go(file, false);
    +1193                    }
    +1194    
    +1195                    /**
    +1196                     * Writes the iCalendar objects to a file.
    +1197                     * @param file the file to write to
    +1198                     * @param append true to append to the end of the file, false to
    +1199                     * overwrite it
    +1200                     * @throws IllegalArgumentException if the marshaller class for a
    +1201                     * component or property object cannot be found (only happens when an
    +1202                     * experimental property/component marshaller is not registered with the
    +1203                     * {@code register} method.)
    +1204                     * @throws IOException if there's a problem writing to the file
    +1205                     */
    +1206                    public void go(File file, boolean append) throws IOException {
    +1207                            ICalWriter icalWriter = new ICalWriter(file, append);
    +1208                            try {
    +1209                                    go(icalWriter);
    +1210                            } finally {
    +1211                                    IOUtils.closeQuietly(icalWriter);
    +1212                            }
    +1213                    }
    +1214    
    +1215                    /**
    +1216                     * Writes the iCalendar objects to a data stream.
    +1217                     * @param writer the writer to write to
    +1218                     * @throws IllegalArgumentException if the marshaller class for a
    +1219                     * component or property object cannot be found (only happens when an
    +1220                     * experimental property/component marshaller is not registered with the
    +1221                     * {@code register} method.)
    +1222                     * @throws IOException if there's a problem writing to the writer
    +1223                     */
    +1224                    public void go(Writer writer) throws IOException {
    +1225                            go(new ICalWriter(writer));
    +1226                    }
    +1227    
    +1228                    private void go(ICalWriter icalWriter) throws IOException {
    +1229                            icalWriter.setRegistrar(registrar);
    +1230                            icalWriter.setCaretEncodingEnabled(caretEncoding);
    +1231    
    +1232                            for (ICalendar ical : icals) {
    +1233                                    icalWriter.write(ical);
    +1234                            }
    +1235                    }
    +1236            }
    +1237    
    +1238            ///////////////////////////////////////////////////////
    +1239            // XML
    +1240            ///////////////////////////////////////////////////////
    +1241    
    +1242            /**
    +1243             * Chainer class for writing xCal documents (XML-encoded iCalendar objects).
    +1244             * @see Biweekly#writeXml(Collection)
    +1245             * @see Biweekly#writeXml(ICalendar...)
    +1246             */
    +1247            public static class WriterChainXml extends WriterChain<WriterChainXml> {
    +1248                    int indent = -1;
    +1249                    final Map<String, ICalDataType> parameterDataTypes = new HashMap<String, ICalDataType>(0);
    +1250    
    +1251                    WriterChainXml(Collection<ICalendar> icals) {
    +1252                            super(icals);
    +1253                    }
    +1254    
    +1255                    @Override
    +1256                    public WriterChainXml register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +1257                            return super.register(marshaller);
    +1258                    }
    +1259    
    +1260                    @Override
    +1261                    public WriterChainXml register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +1262                            return super.register(marshaller);
    +1263                    }
    +1264    
    +1265                    /**
    +1266                     * Registers the data type of an experimental parameter. Experimental
    +1267                     * parameters use the "unknown" xCal data type by default.
    +1268                     * @param parameterName the parameter name (e.g. "x-foo")
    +1269                     * @param dataType the data type
    +1270                     * @return this
    +1271                     */
    +1272                    public WriterChainXml register(String parameterName, ICalDataType dataType) {
    +1273                            parameterDataTypes.put(parameterName, dataType);
    +1274                            return this_;
    +1275                    }
    +1276    
    +1277                    /**
    +1278                     * Sets the number of indent spaces to use for pretty-printing. If not
    +1279                     * set, then the XML will not be pretty-printed.
    +1280                     * @param indent the number of spaces
    +1281                     * @return this
    +1282                     */
    +1283                    public WriterChainXml indent(int indent) {
    +1284                            this.indent = indent;
    +1285                            return this_;
    +1286                    }
    +1287    
    +1288                    /**
    +1289                     * Writes the xCal document to a string.
    +1290                     * @return the XML string
    +1291                     * @throws IllegalArgumentException if the marshaller class for a
    +1292                     * component or property object cannot be found (only happens when an
    +1293                     * experimental property/component marshaller is not registered with the
    +1294                     * {@code register} method.)
    +1295                     */
    +1296                    public String go() {
    +1297                            StringWriter sw = new StringWriter();
    +1298                            try {
    +1299                                    go(sw);
    +1300                            } catch (TransformerException e) {
    +1301                                    //writing to a string
    +1302                            }
    +1303                            return sw.toString();
    +1304                    }
    +1305    
    +1306                    /**
    +1307                     * Writes the xCal document to an output stream.
    +1308                     * @param out the output stream to write to
    +1309                     * @throws IllegalArgumentException if the marshaller class for a
    +1310                     * component or property object cannot be found (only happens when an
    +1311                     * experimental property/component marshaller is not registered with the
    +1312                     * {@code register} method.)
    +1313                     * @throws TransformerException if there's a problem writing the XML
    +1314                     */
    +1315                    public void go(OutputStream out) throws TransformerException {
    +1316                            XCalDocument document = constructDocument();
    +1317                            document.write(out, indent);
    +1318                    }
    +1319    
    +1320                    /**
    +1321                     * Writes the xCal document to a file.
    +1322                     * @param file the file to write to
    +1323                     * @throws IllegalArgumentException if the marshaller class for a
    +1324                     * component or property object cannot be found (only happens when an
    +1325                     * experimental property/component marshaller is not registered with the
    +1326                     * {@code register} method.)
    +1327                     * @throws TransformerException if there's a problem writing the XML
    +1328                     * @throws IOException if there's a problem writing to the file
    +1329                     */
    +1330                    public void go(File file) throws TransformerException, IOException {
    +1331                            XCalDocument document = constructDocument();
    +1332                            document.write(file, indent);
    +1333                    }
    +1334    
    +1335                    /**
    +1336                     * Writes the xCal document to a writer.
    +1337                     * @param writer the writer to write to
    +1338                     * @throws IllegalArgumentException if the marshaller class for a
    +1339                     * component or property object cannot be found (only happens when an
    +1340                     * experimental property/component marshaller is not registered with the
    +1341                     * {@code register} method.)
    +1342                     * @throws TransformerException if there's a problem writing the XML
    +1343                     */
    +1344                    public void go(Writer writer) throws TransformerException {
    +1345                            XCalDocument document = constructDocument();
    +1346                            document.write(writer, indent);
    +1347                    }
    +1348    
    +1349                    /**
    +1350                     * Writes the xCal document to an XML DOM.
    +1351                     * @return the XML DOM
    +1352                     */
    +1353                    public Document dom() {
    +1354                            XCalDocument document = constructDocument();
    +1355                            return document.getDocument();
    +1356                    }
    +1357    
    +1358                    private XCalDocument constructDocument() {
    +1359                            XCalDocument document = new XCalDocument();
    +1360                            document.setRegistrar(registrar);
    +1361                            for (Map.Entry<String, ICalDataType> entry : parameterDataTypes.entrySet()) {
    +1362                                    document.registerParameterDataType(entry.getKey(), entry.getValue());
    +1363                            }
    +1364    
    +1365                            for (ICalendar ical : icals) {
    +1366                                    document.add(ical);
    +1367                            }
    +1368    
    +1369                            return document;
    +1370                    }
    +1371            }
    +1372    
    +1373            ///////////////////////////////////////////////////////
    +1374            // JSON
    +1375            ///////////////////////////////////////////////////////
    +1376    
    +1377            /**
    +1378             * Chainer class for writing to JSON-encoded iCalendar data streams (jCal).
    +1379             * @see Biweekly#writeJson(Collection)
    +1380             * @see Biweekly#writeJson(ICalendar...)
    +1381             */
    +1382            public static class WriterChainJson extends WriterChain<WriterChainJson> {
    +1383                    private boolean indent = false;
    +1384    
    +1385                    private WriterChainJson(Collection<ICalendar> icals) {
    +1386                            super(icals);
    +1387                    }
    +1388    
    +1389                    /**
    +1390                     * Sets whether or not to pretty-print the JSON.
    +1391                     * @param indent true to pretty-print it, false not to (defaults to
    +1392                     * false)
    +1393                     * @return this
    +1394                     */
    +1395                    public WriterChainJson indent(boolean indent) {
    +1396                            this.indent = indent;
    +1397                            return this_;
    +1398                    }
    +1399    
    +1400                    /**
    +1401                     * Writes the iCalendar objects to a string.
    +1402                     * @return the iCalendar string
    +1403                     * @throws IllegalArgumentException if the marshaller class for a
    +1404                     * component or property object cannot be found (only happens when an
    +1405                     * experimental property/component marshaller is not registered with the
    +1406                     * {@code register} method.)
    +1407                     */
    +1408                    public String go() {
    +1409                            StringWriter sw = new StringWriter();
    +1410                            try {
    +1411                                    go(sw);
    +1412                            } catch (IOException e) {
    +1413                                    //writing to a string
    +1414                            }
    +1415                            return sw.toString();
    +1416                    }
    +1417    
    +1418                    /**
    +1419                     * Writes the iCalendar objects to a data stream.
    +1420                     * @param out the output stream to write to
    +1421                     * @throws IllegalArgumentException if the marshaller class for a
    +1422                     * component or property object cannot be found (only happens when an
    +1423                     * experimental property/component marshaller is not registered with the
    +1424                     * {@code register} method.)
    +1425                     * @throws IOException if there's a problem writing to the output stream
    +1426                     */
    +1427                    public void go(OutputStream out) throws IOException {
    +1428                            go(new JCalWriter(out, icals.size() > 1));
    +1429                    }
    +1430    
    +1431                    /**
    +1432                     * Writes the iCalendar objects to a file.
    +1433                     * @param file the file to write to
    +1434                     * @throws IllegalArgumentException if the marshaller class for a
    +1435                     * component or property object cannot be found (only happens when an
    +1436                     * experimental property/component marshaller is not registered with the
    +1437                     * {@code register} method.)
    +1438                     * @throws IOException if there's a problem writing to the file
    +1439                     */
    +1440                    public void go(File file) throws IOException {
    +1441                            JCalWriter jcalWriter = new JCalWriter(file, icals.size() > 1);
    +1442                            try {
    +1443                                    go(jcalWriter);
    +1444                            } finally {
    +1445                                    IOUtils.closeQuietly(jcalWriter);
    +1446                            }
    +1447                    }
    +1448    
    +1449                    /**
    +1450                     * Writes the iCalendar objects to a data stream.
    +1451                     * @param writer the writer to write to
    +1452                     * @throws IllegalArgumentException if the marshaller class for a
    +1453                     * component or property object cannot be found (only happens when an
    +1454                     * experimental property/component marshaller is not registered with the
    +1455                     * {@code register} method.)
    +1456                     * @throws IOException if there's a problem writing to the writer
    +1457                     */
    +1458                    public void go(Writer writer) throws IOException {
    +1459                            go(new JCalWriter(writer, icals.size() > 1));
    +1460                    }
    +1461    
    +1462                    private void go(JCalWriter jcalWriter) throws IOException {
    +1463                            jcalWriter.setRegistrar(registrar);
    +1464                            jcalWriter.setIndent(indent);
    +1465    
    +1466                            for (ICalendar ical : icals) {
    +1467                                    jcalWriter.write(ical);
    +1468                            }
    +1469                            jcalWriter.closeJsonStream();
    +1470                    }
    +1471            }
    +1472    
    +1473            private Biweekly() {
    +1474                    //hide
    +1475            }
    +1476    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ICalDataType.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ICalDataType.html new file mode 100644 index 000000000..e4019ab97 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ICalDataType.html @@ -0,0 +1,179 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.util.Collection;
    +004    
    +005    import biweekly.util.CaseClasses;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * Defines the data type of a property's value.
    +034     * @author Michael Angstadt
    +035     * @rfc 5545 p.29-50
    +036     */
    +037    public class ICalDataType {
    +038            private static final CaseClasses<ICalDataType, String> enums = new CaseClasses<ICalDataType, String>(ICalDataType.class) {
    +039                    @Override
    +040                    protected ICalDataType create(String value) {
    +041                            return new ICalDataType(value);
    +042                    }
    +043    
    +044                    @Override
    +045                    protected boolean matches(ICalDataType dataType, String value) {
    +046                            return dataType.name.equalsIgnoreCase(value);
    +047                    }
    +048            };
    +049    
    +050            public static final ICalDataType BINARY = new ICalDataType("BINARY");
    +051            public static final ICalDataType BOOLEAN = new ICalDataType("BOOLEAN");
    +052            public static final ICalDataType CAL_ADDRESS = new ICalDataType("CAL-ADDRESS");
    +053            public static final ICalDataType DATE = new ICalDataType("DATE");
    +054            public static final ICalDataType DATE_TIME = new ICalDataType("DATE-TIME");
    +055            public static final ICalDataType DURATION = new ICalDataType("DURATION");
    +056            public static final ICalDataType FLOAT = new ICalDataType("FLOAT");
    +057            public static final ICalDataType INTEGER = new ICalDataType("INTEGER");
    +058            public static final ICalDataType PERIOD = new ICalDataType("PERIOD");
    +059            public static final ICalDataType RECUR = new ICalDataType("RECUR");
    +060            public static final ICalDataType TEXT = new ICalDataType("TEXT");
    +061            public static final ICalDataType TIME = new ICalDataType("TIME");
    +062            public static final ICalDataType URI = new ICalDataType("URI");
    +063            public static final ICalDataType UTC_OFFSET = new ICalDataType("UTC-OFFSET");
    +064    
    +065            private final String name;
    +066    
    +067            private ICalDataType(String name) {
    +068                    this.name = name;
    +069            }
    +070    
    +071            /**
    +072             * Gets the name of the data type.
    +073             * @return the name of the data type (e.g. "text")
    +074             */
    +075            public String getName() {
    +076                    return name;
    +077            }
    +078    
    +079            @Override
    +080            public String toString() {
    +081                    return name;
    +082            }
    +083    
    +084            /**
    +085             * Searches for a parameter value that is defined as a static constant in
    +086             * this class.
    +087             * @param value the parameter value
    +088             * @return the object or null if not found
    +089             */
    +090            public static ICalDataType find(String value) {
    +091                    return enums.find(value);
    +092            }
    +093    
    +094            /**
    +095             * Searches for a parameter value and creates one if it cannot be found. All
    +096             * objects are guaranteed to be unique, so they can be compared with
    +097             * {@code ==} equality.
    +098             * @param value the parameter value
    +099             * @return the object
    +100             */
    +101            public static ICalDataType get(String value) {
    +102                    return enums.get(value);
    +103            }
    +104    
    +105            /**
    +106             * Gets all of the parameter values that are defined as static constants in
    +107             * this class.
    +108             * @return the parameter values
    +109             */
    +110            public static Collection<ICalDataType> all() {
    +111                    return enums.all();
    +112            }
    +113    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ICalException.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ICalException.html new file mode 100644 index 000000000..beff44464 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ICalException.html @@ -0,0 +1,107 @@ + + +
    +001    package biweekly;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * The common base exception that all exceptions inherit from.
    +030     * @author Michael Angstadt
    +031     */
    +032    @SuppressWarnings("serial")
    +033    public class ICalException extends RuntimeException {
    +034            public ICalException() {
    +035                    super();
    +036            }
    +037    
    +038            public ICalException(String message) {
    +039                    super(message);
    +040            }
    +041    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ICalendar.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ICalendar.html new file mode 100644 index 000000000..0a2263eb5 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ICalendar.html @@ -0,0 +1,523 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.io.File;
    +004    import java.io.IOException;
    +005    import java.io.OutputStream;
    +006    import java.io.Writer;
    +007    import java.util.ArrayList;
    +008    import java.util.List;
    +009    
    +010    import javax.xml.transform.TransformerException;
    +011    
    +012    import biweekly.ValidationWarnings.WarningsGroup;
    +013    import biweekly.component.ICalComponent;
    +014    import biweekly.component.VEvent;
    +015    import biweekly.component.VFreeBusy;
    +016    import biweekly.component.VJournal;
    +017    import biweekly.component.VTimezone;
    +018    import biweekly.component.VTodo;
    +019    import biweekly.property.CalendarScale;
    +020    import biweekly.property.Method;
    +021    import biweekly.property.ProductId;
    +022    import biweekly.property.Version;
    +023    
    +024    /*
    +025     Copyright (c) 2013, Michael Angstadt
    +026     All rights reserved.
    +027    
    +028     Redistribution and use in source and binary forms, with or without
    +029     modification, are permitted provided that the following conditions are met: 
    +030    
    +031     1. Redistributions of source code must retain the above copyright notice, this
    +032     list of conditions and the following disclaimer. 
    +033     2. Redistributions in binary form must reproduce the above copyright notice,
    +034     this list of conditions and the following disclaimer in the documentation
    +035     and/or other materials provided with the distribution. 
    +036    
    +037     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +038     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +039     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +040     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +041     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +042     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +043     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +044     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +045     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +046     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +047     */
    +048    
    +049    /**
    +050     * <p>
    +051     * Represents an iCalendar object.
    +052     * </p>
    +053     * 
    +054     * <p>
    +055     * <b>Examples:</b>
    +056     * 
    +057     * <pre class="brush:java">
    +058     * ICalendar ical = new ICalendar();
    +059     * 
    +060     * VEvent event = new VEvent();
    +061     * event.setSummary("Team Meeting");
    +062     * Date start = ...;
    +063     * event.setDateStart(start);
    +064     * Date end = ...;
    +065     * event.setDateEnd(end);
    +066     * ical.addEvent(event);
    +067     * </pre>
    +068     * 
    +069     * </p>
    +070     * @author Michael Angstadt
    +071     * @rfc 5545
    +072     */
    +073    public class ICalendar extends ICalComponent {
    +074            /**
    +075             * <p>
    +076             * Creates a new iCalendar object.
    +077             * </p>
    +078             * <p>
    +079             * The following properties are auto-generated on object creation. These
    +080             * properties <b>must</b> be present in order for the iCalendar object to be
    +081             * valid:
    +082             * <ul>
    +083             * <li>{@link Version} - Set to the default iCalendar version ("2.0").</li>
    +084             * <li>{@link ProductId} - Set to a value that represents this library.</li>
    +085             * </ul>
    +086             * </p>
    +087             */
    +088            public ICalendar() {
    +089                    setVersion(Version.v2_0());
    +090                    setProductId(ProductId.biweekly());
    +091            }
    +092    
    +093            /**
    +094             * Gets the min/max versions a consumer must support in order to
    +095             * successfully parse the iCalendar object. All {@link ICalendar} objects
    +096             * are initialized with a version of "2.0" (the default version). It is a
    +097             * <b>required</b> property.
    +098             * @return the version
    +099             * @rfc 5545 p.79-80
    +100             */
    +101            public Version getVersion() {
    +102                    return getProperty(Version.class);
    +103            }
    +104    
    +105            /**
    +106             * Sets the min/max versions a consumer must support in order to
    +107             * successfully parse the iCalendar object. All {@link ICalendar} objects
    +108             * are initialized with a version of "2.0" (the default version). It is a
    +109             * <b>required</b> property.
    +110             * @param version the version
    +111             * @rfc 5545 p.79-80
    +112             */
    +113            public void setVersion(Version version) {
    +114                    setProperty(Version.class, version);
    +115            }
    +116    
    +117            /**
    +118             * Gets the name of the application that created the iCalendar object. All
    +119             * {@link ICalendar} objects are initialized with a product ID representing
    +120             * this library. It is a <b>required</b> property.
    +121             * @return the property instance or null if not set
    +122             * @rfc 5545 p.78-9
    +123             */
    +124            public ProductId getProductId() {
    +125                    return getProperty(ProductId.class);
    +126            }
    +127    
    +128            /**
    +129             * Sets the name of the application that created the iCalendar object. All
    +130             * {@link ICalendar} objects are initialized with a product ID representing
    +131             * this library. It is a <b>required</b> property.
    +132             * @param prodId the property instance or null to remove
    +133             * @rfc 5545 p.78-9
    +134             */
    +135            public void setProductId(ProductId prodId) {
    +136                    setProperty(ProductId.class, prodId);
    +137            }
    +138    
    +139            /**
    +140             * Sets the application that created the iCalendar object. All
    +141             * {@link ICalendar} objects are initialized with a product ID representing
    +142             * this library.
    +143             * @param prodId a unique string representing the application (e.g.
    +144             * "-//Company//Application//EN") or null to remove
    +145             * @return the property that was created
    +146             * @rfc 5545 p.78-9
    +147             */
    +148            public ProductId setProductId(String prodId) {
    +149                    ProductId prop = (prodId == null) ? null : new ProductId(prodId);
    +150                    setProductId(prop);
    +151                    return prop;
    +152            }
    +153    
    +154            /**
    +155             * Gets the calendar system that this iCalendar object uses. If none is
    +156             * specified, then the calendar is assumed to be in Gregorian format.
    +157             * @return the calendar system or null if not set
    +158             * @rfc 5545 p.76-7
    +159             */
    +160            public CalendarScale getCalendarScale() {
    +161                    return getProperty(CalendarScale.class);
    +162            }
    +163    
    +164            /**
    +165             * Sets the calendar system that this iCalendar object uses. If none is
    +166             * specified, then the calendar is assumed to be in Gregorian format.
    +167             * @param calendarScale the calendar system or null to remove
    +168             * @rfc 5545 p.76-7
    +169             */
    +170            public void setCalendarScale(CalendarScale calendarScale) {
    +171                    setProperty(CalendarScale.class, calendarScale);
    +172            }
    +173    
    +174            /**
    +175             * Gets the value of the Content-Type "method" parameter if the iCalendar
    +176             * object is defined as a MIME message entity.
    +177             * @return the property or null if not set
    +178             * @rfc 5545 p.77-8
    +179             */
    +180            public Method getMethod() {
    +181                    return getProperty(Method.class);
    +182            }
    +183    
    +184            /**
    +185             * Sets the value of the Content-Type "method" parameter if the iCalendar
    +186             * object is defined as a MIME message entity.
    +187             * @param method the property or null to remove
    +188             * @rfc 5545 p.77-8
    +189             */
    +190            public void setMethod(Method method) {
    +191                    setProperty(Method.class, method);
    +192            }
    +193    
    +194            /**
    +195             * Sets the value of the Content-Type "method" parameter if the iCalendar
    +196             * object is defined as a MIME message entity.
    +197             * @param method the method or null to remove
    +198             * @return the property that was created
    +199             * @rfc 5545 p.77-8
    +200             */
    +201            public Method setMethod(String method) {
    +202                    Method prop = (method == null) ? null : new Method(method);
    +203                    setMethod(prop);
    +204                    return prop;
    +205            }
    +206    
    +207            /**
    +208             * Gets the events.
    +209             * @return the events
    +210             */
    +211            public List<VEvent> getEvents() {
    +212                    return getComponents(VEvent.class);
    +213            }
    +214    
    +215            /**
    +216             * Adds an event.
    +217             * @param event the event
    +218             */
    +219            public void addEvent(VEvent event) {
    +220                    addComponent(event);
    +221            }
    +222    
    +223            /**
    +224             * Gets the to-dos.
    +225             * @return the to-dos
    +226             */
    +227            public List<VTodo> getTodos() {
    +228                    return getComponents(VTodo.class);
    +229            }
    +230    
    +231            /**
    +232             * Adds a to-do.
    +233             * @param todo the to-do
    +234             */
    +235            public void addTodo(VTodo todo) {
    +236                    addComponent(todo);
    +237            }
    +238    
    +239            /**
    +240             * Gets the journal entries.
    +241             * @return the journal entries
    +242             */
    +243            public List<VJournal> getJournals() {
    +244                    return getComponents(VJournal.class);
    +245            }
    +246    
    +247            /**
    +248             * Adds a journal entry.
    +249             * @param journal the journal entry
    +250             */
    +251            public void addJournal(VJournal journal) {
    +252                    addComponent(journal);
    +253            }
    +254    
    +255            /**
    +256             * Gets the free/busy entries.
    +257             * @return the free/busy entries
    +258             */
    +259            public List<VFreeBusy> getFreeBusies() {
    +260                    return getComponents(VFreeBusy.class);
    +261            }
    +262    
    +263            /**
    +264             * Adds a free/busy entry.
    +265             * @param freeBusy the free/busy entry
    +266             */
    +267            public void addFreeBusy(VFreeBusy freeBusy) {
    +268                    addComponent(freeBusy);
    +269            }
    +270    
    +271            /**
    +272             * Gets the timezones.
    +273             * @return the timezones
    +274             */
    +275            public List<VTimezone> getTimezones() {
    +276                    return getComponents(VTimezone.class);
    +277            }
    +278    
    +279            /**
    +280             * Adds a timezone.
    +281             * @param timezone the timezone
    +282             */
    +283            public void addTimezone(VTimezone timezone) {
    +284                    addComponent(timezone);
    +285            }
    +286    
    +287            /**
    +288             * Checks this iCalendar object for data consistency problems or deviations
    +289             * from the spec. These problems will not prevent the iCalendar object from
    +290             * being written to a data stream, but may prevent it from being parsed
    +291             * correctly by the consuming application. These problems can largely be
    +292             * avoided by reading the Javadocs of the component and property classes, or
    +293             * by being familiar with the iCalendar standard.
    +294             * @return the validation warnings
    +295             */
    +296            public ValidationWarnings validate() {
    +297                    //TODO make concurrent
    +298                    List<WarningsGroup> warnings = validate(new ArrayList<ICalComponent>(0));
    +299                    return new ValidationWarnings(warnings);
    +300            }
    +301    
    +302            @SuppressWarnings("unchecked")
    +303            @Override
    +304            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +305                    checkRequiredCardinality(warnings, ProductId.class, Version.class);
    +306    
    +307                    if (this.components.isEmpty()) {
    +308                            warnings.add("An iCalendar object must have at least one component.");
    +309                    }
    +310            }
    +311    
    +312            /**
    +313             * Marshals this iCalendar object to its plain text representation.
    +314             * @return the plain text representation
    +315             */
    +316            public String write() {
    +317                    return Biweekly.write(this).go();
    +318            }
    +319    
    +320            /**
    +321             * Marshals this iCalendar object to its plain text representation.
    +322             * @param file the file to write to
    +323             * @throws IOException if there's an I/O problem
    +324             */
    +325            public void write(File file) throws IOException {
    +326                    Biweekly.write(this).go(file);
    +327            }
    +328    
    +329            /**
    +330             * Marshals this iCalendar object to its plain text representation.
    +331             * @param out the data stream to write to
    +332             * @throws IOException if there's an I/O problem
    +333             */
    +334            public void write(OutputStream out) throws IOException {
    +335                    Biweekly.write(this).go(out);
    +336            }
    +337    
    +338            /**
    +339             * Marshals this iCalendar object to its plain text representation.
    +340             * @param writer the data stream to write to
    +341             * @throws IOException if there's an I/O problem
    +342             */
    +343            public void write(Writer writer) throws IOException {
    +344                    Biweekly.write(this).go(writer);
    +345            }
    +346    
    +347            /**
    +348             * Marshals this iCalendar object to its XML representation (xCal). If the
    +349             * iCalendar object contains user-defined property or component objects, use
    +350             * the {@link Biweekly} class instead, in order to register the marshaller
    +351             * classes.
    +352             * @return the XML document
    +353             * @throws IllegalArgumentException if the iCalendar object contains
    +354             * user-defined property or component objects
    +355             */
    +356            public String writeXml() {
    +357                    return Biweekly.writeXml(this).indent(2).go();
    +358            }
    +359    
    +360            /**
    +361             * Marshals this iCalendar object to its XML representation (xCal). If the
    +362             * iCalendar object contains user-defined property or component objects, use
    +363             * the {@link Biweekly} class instead, in order to register the marshaller
    +364             * classes.
    +365             * @param file the file to write to
    +366             * @throws IllegalArgumentException if the iCalendar object contains
    +367             * user-defined property or component objects
    +368             * @throws TransformerException if there's an I/O problem
    +369             * @throws IOException if the file cannot be written to
    +370             */
    +371            public void writeXml(File file) throws TransformerException, IOException {
    +372                    Biweekly.writeXml(this).indent(2).go(file);
    +373            }
    +374    
    +375            /**
    +376             * Marshals this iCalendar object to its XML representation (xCal). If the
    +377             * iCalendar object contains user-defined property or component objects, use
    +378             * the {@link Biweekly} class instead, in order to register the marshaller
    +379             * classes.
    +380             * @param out the data stream to write to
    +381             * @throws IllegalArgumentException if the iCalendar object contains
    +382             * user-defined property or component objects
    +383             * @throws TransformerException if there's an I/O problem
    +384             */
    +385            public void writeXml(OutputStream out) throws TransformerException {
    +386                    Biweekly.writeXml(this).indent(2).go(out);
    +387            }
    +388    
    +389            /**
    +390             * Marshals this iCalendar object to its XML representation (xCal). If the
    +391             * iCalendar object contains user-defined property or component objects, use
    +392             * the {@link Biweekly} class instead, in order to register the marshaller
    +393             * classes.
    +394             * @param writer the data stream to write to
    +395             * @throws IllegalArgumentException if the iCalendar object contains
    +396             * user-defined property or component objects
    +397             * @throws TransformerException if there's an I/O problem
    +398             */
    +399            public void writeXml(Writer writer) throws TransformerException {
    +400                    Biweekly.writeXml(this).indent(2).go(writer);
    +401            }
    +402    
    +403            /**
    +404             * Marshals this iCalendar object to its JSON representation (jCal). If the
    +405             * iCalendar object contains user-defined property or component objects, use
    +406             * the {@link Biweekly} class instead, in order to register the marshaller
    +407             * classes.
    +408             * @return the JSON string
    +409             * @throws IllegalArgumentException if the iCalendar object contains
    +410             * user-defined property or component objects
    +411             */
    +412            public String writeJson() {
    +413                    return Biweekly.writeJson(this).go();
    +414            }
    +415    
    +416            /**
    +417             * Marshals this iCalendar object to its JSON representation (jCal). If the
    +418             * iCalendar object contains user-defined property or component objects, use
    +419             * the {@link Biweekly} class instead, in order to register the marshaller
    +420             * classes.
    +421             * @param file the file to write to
    +422             * @throws IllegalArgumentException if the iCalendar object contains
    +423             * user-defined property or component objects
    +424             * @throws IOException if there's a problem writing to the file
    +425             */
    +426            public void writeJson(File file) throws IOException {
    +427                    Biweekly.writeJson(this).go(file);
    +428            }
    +429    
    +430            /**
    +431             * Marshals this iCalendar object to its JSON representation (jCal). If the
    +432             * iCalendar object contains user-defined property or component objects, use
    +433             * the {@link Biweekly} class instead, in order to register the marshaller
    +434             * classes.
    +435             * @param out the data stream to write to
    +436             * @throws IllegalArgumentException if the iCalendar object contains
    +437             * user-defined property or component objects
    +438             * @throws IOException if there's a problem writing to the output stream
    +439             */
    +440            public void writeJson(OutputStream out) throws IOException {
    +441                    Biweekly.writeJson(this).go(out);
    +442            }
    +443    
    +444            /**
    +445             * Marshals this iCalendar object to its JSON representation (jCal). If the
    +446             * iCalendar object contains user-defined property or component objects, use
    +447             * the {@link Biweekly} class instead, in order to register the marshaller
    +448             * classes.
    +449             * @param writer the data stream to write to
    +450             * @throws IllegalArgumentException if the iCalendar object contains
    +451             * user-defined property or component objects
    +452             * @throws IOException if there's a problem writing to the writer
    +453             */
    +454            public void writeJson(Writer writer) throws IOException {
    +455                    Biweekly.writeJson(this).go(writer);
    +456            }
    +457    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ValidationWarnings.WarningsGroup.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ValidationWarnings.WarningsGroup.html new file mode 100644 index 000000000..54aa4905c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ValidationWarnings.WarningsGroup.html @@ -0,0 +1,359 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.Iterator;
    +005    import java.util.List;
    +006    
    +007    import biweekly.ValidationWarnings.WarningsGroup;
    +008    import biweekly.component.ICalComponent;
    +009    import biweekly.property.ICalProperty;
    +010    import biweekly.util.StringUtils;
    +011    import biweekly.util.StringUtils.JoinCallback;
    +012    
    +013    /*
    +014     Copyright (c) 2013, Michael Angstadt
    +015     All rights reserved.
    +016    
    +017     Redistribution and use in source and binary forms, with or without
    +018     modification, are permitted provided that the following conditions are met: 
    +019    
    +020     1. Redistributions of source code must retain the above copyright notice, this
    +021     list of conditions and the following disclaimer. 
    +022     2. Redistributions in binary form must reproduce the above copyright notice,
    +023     this list of conditions and the following disclaimer in the documentation
    +024     and/or other materials provided with the distribution. 
    +025    
    +026     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +027     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +028     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +029     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +030     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +031     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +032     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +033     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +034     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +035     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +036     */
    +037    
    +038    /**
    +039     * <p>
    +040     * Holds the validation warnings of an iCalendar object.
    +041     * </p>
    +042     * <p>
    +043     * <b>Examples:</b>
    +044     * 
    +045     * <pre class="brush:java">
    +046     * //validate an iCalendar object
    +047     * ValidationWarnings warnings = ical.validate();
    +048     * 
    +049     * //print all warnings to a string:
    +050     * System.out.println(warnings.toString());
    +051     * //sample output:
    +052     * //[ICalendar]: ProductId is not set (it is a required property).
    +053     * //[ICalendar &gt; VEvent &gt; DateStart]: DateStart must come before DateEnd.
    +054     * //[ICalendar &gt; VEvent &gt; VAlarm]: The trigger must specify which date field its duration is relative to.
    +055     * 
    +056     * //iterate over each warnings group
    +057     * //this gives you access to the property/component object and its parent components
    +058     * for (WarningsGroup group : warnings) {
    +059     *      ICalProperty prop = group.getProperty();
    +060     *      if (prop == null) {
    +061     *              //then it was a component that caused the warnings
    +062     *              ICalComponent comp = group.getComponent();
    +063     *      }
    +064     * 
    +065     *      //get parent components
    +066     *      List&lt;ICalComponent&gt; hierarchy = group.getComponentHierarchy();
    +067     * 
    +068     *      //get warning messages
    +069     *      List&lt;String&gt; messages = group.getMessages();
    +070     * }
    +071     * 
    +072     * //you can also get the warnings of specific properties/components
    +073     * List&lt;WarningsGroup&gt; dtstartWarnings = warnings.getByProperty(DateStart.class);
    +074     * List&lt;WarningsGroup&gt; veventWarnings = warnings.getByComponent(VEvent.class);
    +075     * </pre>
    +076     * 
    +077     * </p>
    +078     * @author Michael Angstadt
    +079     * @see ICalendar#validate()
    +080     */
    +081    public class ValidationWarnings implements Iterable<WarningsGroup> {
    +082            private final List<WarningsGroup> warnings;
    +083    
    +084            /**
    +085             * Creates a new validation warnings list.
    +086             * @param warnings the validation warnings
    +087             */
    +088            public ValidationWarnings(List<WarningsGroup> warnings) {
    +089                    this.warnings = warnings;
    +090            }
    +091    
    +092            /**
    +093             * Gets all validation warnings of a given property.
    +094             * @param propertyClass the property (e.g. {@code DateStart.class})
    +095             * @return the validation warnings
    +096             */
    +097            public List<WarningsGroup> getByProperty(Class<? extends ICalProperty> propertyClass) {
    +098                    List<WarningsGroup> warnings = new ArrayList<WarningsGroup>();
    +099                    for (WarningsGroup group : this.warnings) {
    +100                            ICalProperty property = group.getProperty();
    +101                            if (property == null) {
    +102                                    continue;
    +103                            }
    +104    
    +105                            if (propertyClass == property.getClass()) {
    +106                                    warnings.add(group);
    +107                            }
    +108                    }
    +109                    return warnings;
    +110            }
    +111    
    +112            /**
    +113             * Gets all validation warnings of a given component.
    +114             * @param componentClass the component (e.g. {@code VEvent.class})
    +115             * @return the validation warnings
    +116             */
    +117            public List<WarningsGroup> getByComponent(Class<? extends ICalComponent> componentClass) {
    +118                    List<WarningsGroup> warnings = new ArrayList<WarningsGroup>();
    +119                    for (WarningsGroup group : this.warnings) {
    +120                            ICalComponent component = group.getComponent();
    +121                            if (component == null) {
    +122                                    continue;
    +123                            }
    +124    
    +125                            if (componentClass == component.getClass()) {
    +126                                    warnings.add(group);
    +127                            }
    +128                    }
    +129                    return warnings;
    +130            }
    +131    
    +132            /**
    +133             * Gets all the validation warnings.
    +134             * @return the validation warnings
    +135             */
    +136            public List<WarningsGroup> getWarnings() {
    +137                    return warnings;
    +138            }
    +139    
    +140            /**
    +141             * Determines whether there are any validation warnings.
    +142             * @return true if there are none, false if there are one or more
    +143             */
    +144            public boolean isEmpty() {
    +145                    return warnings.isEmpty();
    +146            }
    +147    
    +148            /**
    +149             * <p>
    +150             * Outputs all validation warnings as a newline-delimited string. For
    +151             * example:
    +152             * </p>
    +153             * 
    +154             * <pre>
    +155             * [ICalendar]: ProductId is not set (it is a required property).
    +156             * [ICalendar > VEvent > DateStart]: DateStart must come before DateEnd.
    +157             * [ICalendar > VEvent > VAlarm]: The trigger must specify which date field its duration is relative to.
    +158             * </pre>
    +159             */
    +160            @Override
    +161            public String toString() {
    +162                    return StringUtils.join(warnings, StringUtils.NEWLINE);
    +163            }
    +164    
    +165            /**
    +166             * Iterates over each warning group (same as calling
    +167             * {@code getWarnings().iterator()}).
    +168             * @return the iterator
    +169             */
    +170            public Iterator<WarningsGroup> iterator() {
    +171                    return warnings.iterator();
    +172            }
    +173    
    +174            /**
    +175             * Holds the validation warnings of a property or component.
    +176             * @author Michael Angstadt
    +177             */
    +178            public static class WarningsGroup {
    +179                    private final ICalProperty property;
    +180                    private final ICalComponent component;
    +181                    private final List<ICalComponent> componentHierarchy;
    +182                    private final List<String> messages;
    +183    
    +184                    /**
    +185                     * Creates a new set of validation warnings for a property.
    +186                     * @param property the property that caused the warnings
    +187                     * @param componentHierarchy the hierarchy of components that the
    +188                     * property belongs to
    +189                     * @param messages the warning messages
    +190                     */
    +191                    public WarningsGroup(ICalProperty property, List<ICalComponent> componentHierarchy, List<String> messages) {
    +192                            this(null, property, componentHierarchy, messages);
    +193                    }
    +194    
    +195                    /**
    +196                     * Creates a new set of validation warnings for a component.
    +197                     * @param component the component that caused the warnings
    +198                     * @param componentHierarchy the hierarchy of components that the
    +199                     * component belongs to
    +200                     * @param messages the warning messages
    +201                     */
    +202                    public WarningsGroup(ICalComponent component, List<ICalComponent> componentHierarchy, List<String> messages) {
    +203                            this(component, null, componentHierarchy, messages);
    +204                    }
    +205    
    +206                    private WarningsGroup(ICalComponent component, ICalProperty property, List<ICalComponent> componentHierarchy, List<String> messages) {
    +207                            this.component = component;
    +208                            this.property = property;
    +209                            this.componentHierarchy = componentHierarchy;
    +210                            this.messages = messages;
    +211                    }
    +212    
    +213                    /**
    +214                     * Gets the property object that caused the validation warnings.
    +215                     * @return the property object or null if a component caused the
    +216                     * warnings.
    +217                     */
    +218                    public ICalProperty getProperty() {
    +219                            return property;
    +220                    }
    +221    
    +222                    /**
    +223                     * Gets the component object that caused the validation warnings.
    +224                     * @return the component object or null if a property caused the
    +225                     * warnings.
    +226                     */
    +227                    public ICalComponent getComponent() {
    +228                            return component;
    +229                    }
    +230    
    +231                    /**
    +232                     * Gets the hierarchy of components that the property or component
    +233                     * belongs to.
    +234                     * @return the component hierarchy
    +235                     */
    +236                    public List<ICalComponent> getComponentHierarchy() {
    +237                            return componentHierarchy;
    +238                    }
    +239    
    +240                    /**
    +241                     * Gets the warning messages.
    +242                     * @return the warning messages
    +243                     */
    +244                    public List<String> getMessages() {
    +245                            return messages;
    +246                    }
    +247    
    +248                    /**
    +249                     * <p>
    +250                     * Outputs each message in this warnings group as a newline-delimited
    +251                     * string. Each line includes the component hierarchy and the name of
    +252                     * the property/component. For example:
    +253                     * </p>
    +254                     * 
    +255                     * <pre>
    +256                     * [ICalendar > VEvent > VAlarm]: Email alarms must have at least one attendee.
    +257                     * [ICalendar > VEvent > VAlarm]: The trigger must specify which date field its duration is relative to.
    +258                     * </pre>
    +259                     */
    +260                    @Override
    +261                    public String toString() {
    +262                            final String prefix = "[" + buildPath() + "]: ";
    +263                            return StringUtils.join(messages, StringUtils.NEWLINE, new JoinCallback<String>() {
    +264                                    public void handle(StringBuilder sb, String message) {
    +265                                            sb.append(prefix).append(message);
    +266                                    }
    +267                            });
    +268                    }
    +269    
    +270                    private String buildPath() {
    +271                            StringBuilder sb = new StringBuilder();
    +272    
    +273                            if (!componentHierarchy.isEmpty()) {
    +274                                    String delimitor = " > ";
    +275    
    +276                                    StringUtils.join(componentHierarchy, delimitor, sb, new JoinCallback<ICalComponent>() {
    +277                                            public void handle(StringBuilder sb, ICalComponent component) {
    +278                                                    sb.append(component.getClass().getSimpleName());
    +279                                            }
    +280                                    });
    +281                                    sb.append(delimitor);
    +282                            }
    +283    
    +284                            if (property != null) {
    +285                                    sb.append(property.getClass().getSimpleName());
    +286                            } else {
    +287                                    sb.append(component.getClass().getSimpleName());
    +288                            }
    +289    
    +290                            return sb.toString();
    +291                    }
    +292            }
    +293    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ValidationWarnings.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ValidationWarnings.html new file mode 100644 index 000000000..54aa4905c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/ValidationWarnings.html @@ -0,0 +1,359 @@ + + +
    +001    package biweekly;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.Iterator;
    +005    import java.util.List;
    +006    
    +007    import biweekly.ValidationWarnings.WarningsGroup;
    +008    import biweekly.component.ICalComponent;
    +009    import biweekly.property.ICalProperty;
    +010    import biweekly.util.StringUtils;
    +011    import biweekly.util.StringUtils.JoinCallback;
    +012    
    +013    /*
    +014     Copyright (c) 2013, Michael Angstadt
    +015     All rights reserved.
    +016    
    +017     Redistribution and use in source and binary forms, with or without
    +018     modification, are permitted provided that the following conditions are met: 
    +019    
    +020     1. Redistributions of source code must retain the above copyright notice, this
    +021     list of conditions and the following disclaimer. 
    +022     2. Redistributions in binary form must reproduce the above copyright notice,
    +023     this list of conditions and the following disclaimer in the documentation
    +024     and/or other materials provided with the distribution. 
    +025    
    +026     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +027     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +028     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +029     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +030     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +031     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +032     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +033     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +034     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +035     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +036     */
    +037    
    +038    /**
    +039     * <p>
    +040     * Holds the validation warnings of an iCalendar object.
    +041     * </p>
    +042     * <p>
    +043     * <b>Examples:</b>
    +044     * 
    +045     * <pre class="brush:java">
    +046     * //validate an iCalendar object
    +047     * ValidationWarnings warnings = ical.validate();
    +048     * 
    +049     * //print all warnings to a string:
    +050     * System.out.println(warnings.toString());
    +051     * //sample output:
    +052     * //[ICalendar]: ProductId is not set (it is a required property).
    +053     * //[ICalendar &gt; VEvent &gt; DateStart]: DateStart must come before DateEnd.
    +054     * //[ICalendar &gt; VEvent &gt; VAlarm]: The trigger must specify which date field its duration is relative to.
    +055     * 
    +056     * //iterate over each warnings group
    +057     * //this gives you access to the property/component object and its parent components
    +058     * for (WarningsGroup group : warnings) {
    +059     *      ICalProperty prop = group.getProperty();
    +060     *      if (prop == null) {
    +061     *              //then it was a component that caused the warnings
    +062     *              ICalComponent comp = group.getComponent();
    +063     *      }
    +064     * 
    +065     *      //get parent components
    +066     *      List&lt;ICalComponent&gt; hierarchy = group.getComponentHierarchy();
    +067     * 
    +068     *      //get warning messages
    +069     *      List&lt;String&gt; messages = group.getMessages();
    +070     * }
    +071     * 
    +072     * //you can also get the warnings of specific properties/components
    +073     * List&lt;WarningsGroup&gt; dtstartWarnings = warnings.getByProperty(DateStart.class);
    +074     * List&lt;WarningsGroup&gt; veventWarnings = warnings.getByComponent(VEvent.class);
    +075     * </pre>
    +076     * 
    +077     * </p>
    +078     * @author Michael Angstadt
    +079     * @see ICalendar#validate()
    +080     */
    +081    public class ValidationWarnings implements Iterable<WarningsGroup> {
    +082            private final List<WarningsGroup> warnings;
    +083    
    +084            /**
    +085             * Creates a new validation warnings list.
    +086             * @param warnings the validation warnings
    +087             */
    +088            public ValidationWarnings(List<WarningsGroup> warnings) {
    +089                    this.warnings = warnings;
    +090            }
    +091    
    +092            /**
    +093             * Gets all validation warnings of a given property.
    +094             * @param propertyClass the property (e.g. {@code DateStart.class})
    +095             * @return the validation warnings
    +096             */
    +097            public List<WarningsGroup> getByProperty(Class<? extends ICalProperty> propertyClass) {
    +098                    List<WarningsGroup> warnings = new ArrayList<WarningsGroup>();
    +099                    for (WarningsGroup group : this.warnings) {
    +100                            ICalProperty property = group.getProperty();
    +101                            if (property == null) {
    +102                                    continue;
    +103                            }
    +104    
    +105                            if (propertyClass == property.getClass()) {
    +106                                    warnings.add(group);
    +107                            }
    +108                    }
    +109                    return warnings;
    +110            }
    +111    
    +112            /**
    +113             * Gets all validation warnings of a given component.
    +114             * @param componentClass the component (e.g. {@code VEvent.class})
    +115             * @return the validation warnings
    +116             */
    +117            public List<WarningsGroup> getByComponent(Class<? extends ICalComponent> componentClass) {
    +118                    List<WarningsGroup> warnings = new ArrayList<WarningsGroup>();
    +119                    for (WarningsGroup group : this.warnings) {
    +120                            ICalComponent component = group.getComponent();
    +121                            if (component == null) {
    +122                                    continue;
    +123                            }
    +124    
    +125                            if (componentClass == component.getClass()) {
    +126                                    warnings.add(group);
    +127                            }
    +128                    }
    +129                    return warnings;
    +130            }
    +131    
    +132            /**
    +133             * Gets all the validation warnings.
    +134             * @return the validation warnings
    +135             */
    +136            public List<WarningsGroup> getWarnings() {
    +137                    return warnings;
    +138            }
    +139    
    +140            /**
    +141             * Determines whether there are any validation warnings.
    +142             * @return true if there are none, false if there are one or more
    +143             */
    +144            public boolean isEmpty() {
    +145                    return warnings.isEmpty();
    +146            }
    +147    
    +148            /**
    +149             * <p>
    +150             * Outputs all validation warnings as a newline-delimited string. For
    +151             * example:
    +152             * </p>
    +153             * 
    +154             * <pre>
    +155             * [ICalendar]: ProductId is not set (it is a required property).
    +156             * [ICalendar > VEvent > DateStart]: DateStart must come before DateEnd.
    +157             * [ICalendar > VEvent > VAlarm]: The trigger must specify which date field its duration is relative to.
    +158             * </pre>
    +159             */
    +160            @Override
    +161            public String toString() {
    +162                    return StringUtils.join(warnings, StringUtils.NEWLINE);
    +163            }
    +164    
    +165            /**
    +166             * Iterates over each warning group (same as calling
    +167             * {@code getWarnings().iterator()}).
    +168             * @return the iterator
    +169             */
    +170            public Iterator<WarningsGroup> iterator() {
    +171                    return warnings.iterator();
    +172            }
    +173    
    +174            /**
    +175             * Holds the validation warnings of a property or component.
    +176             * @author Michael Angstadt
    +177             */
    +178            public static class WarningsGroup {
    +179                    private final ICalProperty property;
    +180                    private final ICalComponent component;
    +181                    private final List<ICalComponent> componentHierarchy;
    +182                    private final List<String> messages;
    +183    
    +184                    /**
    +185                     * Creates a new set of validation warnings for a property.
    +186                     * @param property the property that caused the warnings
    +187                     * @param componentHierarchy the hierarchy of components that the
    +188                     * property belongs to
    +189                     * @param messages the warning messages
    +190                     */
    +191                    public WarningsGroup(ICalProperty property, List<ICalComponent> componentHierarchy, List<String> messages) {
    +192                            this(null, property, componentHierarchy, messages);
    +193                    }
    +194    
    +195                    /**
    +196                     * Creates a new set of validation warnings for a component.
    +197                     * @param component the component that caused the warnings
    +198                     * @param componentHierarchy the hierarchy of components that the
    +199                     * component belongs to
    +200                     * @param messages the warning messages
    +201                     */
    +202                    public WarningsGroup(ICalComponent component, List<ICalComponent> componentHierarchy, List<String> messages) {
    +203                            this(component, null, componentHierarchy, messages);
    +204                    }
    +205    
    +206                    private WarningsGroup(ICalComponent component, ICalProperty property, List<ICalComponent> componentHierarchy, List<String> messages) {
    +207                            this.component = component;
    +208                            this.property = property;
    +209                            this.componentHierarchy = componentHierarchy;
    +210                            this.messages = messages;
    +211                    }
    +212    
    +213                    /**
    +214                     * Gets the property object that caused the validation warnings.
    +215                     * @return the property object or null if a component caused the
    +216                     * warnings.
    +217                     */
    +218                    public ICalProperty getProperty() {
    +219                            return property;
    +220                    }
    +221    
    +222                    /**
    +223                     * Gets the component object that caused the validation warnings.
    +224                     * @return the component object or null if a property caused the
    +225                     * warnings.
    +226                     */
    +227                    public ICalComponent getComponent() {
    +228                            return component;
    +229                    }
    +230    
    +231                    /**
    +232                     * Gets the hierarchy of components that the property or component
    +233                     * belongs to.
    +234                     * @return the component hierarchy
    +235                     */
    +236                    public List<ICalComponent> getComponentHierarchy() {
    +237                            return componentHierarchy;
    +238                    }
    +239    
    +240                    /**
    +241                     * Gets the warning messages.
    +242                     * @return the warning messages
    +243                     */
    +244                    public List<String> getMessages() {
    +245                            return messages;
    +246                    }
    +247    
    +248                    /**
    +249                     * <p>
    +250                     * Outputs each message in this warnings group as a newline-delimited
    +251                     * string. Each line includes the component hierarchy and the name of
    +252                     * the property/component. For example:
    +253                     * </p>
    +254                     * 
    +255                     * <pre>
    +256                     * [ICalendar > VEvent > VAlarm]: Email alarms must have at least one attendee.
    +257                     * [ICalendar > VEvent > VAlarm]: The trigger must specify which date field its duration is relative to.
    +258                     * </pre>
    +259                     */
    +260                    @Override
    +261                    public String toString() {
    +262                            final String prefix = "[" + buildPath() + "]: ";
    +263                            return StringUtils.join(messages, StringUtils.NEWLINE, new JoinCallback<String>() {
    +264                                    public void handle(StringBuilder sb, String message) {
    +265                                            sb.append(prefix).append(message);
    +266                                    }
    +267                            });
    +268                    }
    +269    
    +270                    private String buildPath() {
    +271                            StringBuilder sb = new StringBuilder();
    +272    
    +273                            if (!componentHierarchy.isEmpty()) {
    +274                                    String delimitor = " > ";
    +275    
    +276                                    StringUtils.join(componentHierarchy, delimitor, sb, new JoinCallback<ICalComponent>() {
    +277                                            public void handle(StringBuilder sb, ICalComponent component) {
    +278                                                    sb.append(component.getClass().getSimpleName());
    +279                                            }
    +280                                    });
    +281                                    sb.append(delimitor);
    +282                            }
    +283    
    +284                            if (property != null) {
    +285                                    sb.append(property.getClass().getSimpleName());
    +286                            } else {
    +287                                    sb.append(component.getClass().getSimpleName());
    +288                            }
    +289    
    +290                            return sb.toString();
    +291                    }
    +292            }
    +293    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/DaylightSavingsTime.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/DaylightSavingsTime.html new file mode 100644 index 000000000..43bda965a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/DaylightSavingsTime.html @@ -0,0 +1,117 @@ + + +
    +001    package biweekly.component;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * <p>
    +030     * Defines a daylight savings time range within a {@link VTimezone}.
    +031     * </p>
    +032     * <p>
    +033     * <b>Examples:</b>
    +034     * 
    +035     * <pre class="brush:java">
    +036     * VTimezone timezone = new VTimezone(&quot;Eastern Standard Time&quot;);
    +037     * DaylightSavingsTime daylight = new DaylightSavingsTime();
    +038     * DateTimeComponents components = new DateTimeComponents(1999, 4, 4, 2, 0, 0, false);
    +039     * daylight.setDateStart(components);
    +040     * daylight.setTimezoneOffsetFrom(-5, 0);
    +041     * daylight.setTimezoneOffsetTo(-4, 0);
    +042     * timezone.addDaylightSavingsTime(daylight);
    +043     * </pre>
    +044     * 
    +045     * </p>
    +046     * @author Michael Angstadt
    +047     * @rfc 5545 p.62-71
    +048     */
    +049    public class DaylightSavingsTime extends Observance {
    +050            //empty
    +051    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/ICalComponent.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/ICalComponent.html new file mode 100644 index 000000000..14640ae98 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/ICalComponent.html @@ -0,0 +1,502 @@ + + +
    +001    package biweekly.component;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.List;
    +005    
    +006    import biweekly.ICalDataType;
    +007    import biweekly.ICalendar;
    +008    import biweekly.ValidationWarnings.WarningsGroup;
    +009    import biweekly.property.ICalProperty;
    +010    import biweekly.property.RawProperty;
    +011    import biweekly.util.ListMultimap;
    +012    
    +013    /*
    +014     Copyright (c) 2013, Michael Angstadt
    +015     All rights reserved.
    +016    
    +017     Redistribution and use in source and binary forms, with or without
    +018     modification, are permitted provided that the following conditions are met: 
    +019    
    +020     1. Redistributions of source code must retain the above copyright notice, this
    +021     list of conditions and the following disclaimer. 
    +022     2. Redistributions in binary form must reproduce the above copyright notice,
    +023     this list of conditions and the following disclaimer in the documentation
    +024     and/or other materials provided with the distribution. 
    +025    
    +026     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +027     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +028     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +029     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +030     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +031     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +032     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +033     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +034     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +035     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +036     */
    +037    
    +038    /**
    +039     * The base class for iCalendar components.
    +040     * @author Michael Angstadt
    +041     */
    +042    public abstract class ICalComponent {
    +043            protected final ListMultimap<Class<? extends ICalComponent>, ICalComponent> components = new ListMultimap<Class<? extends ICalComponent>, ICalComponent>();
    +044            protected final ListMultimap<Class<? extends ICalProperty>, ICalProperty> properties = new ListMultimap<Class<? extends ICalProperty>, ICalProperty>();
    +045    
    +046            /**
    +047             * Gets the first property of a given class.
    +048             * @param clazz the property class
    +049             * @return the property or null if not found
    +050             */
    +051            public <T extends ICalProperty> T getProperty(Class<T> clazz) {
    +052                    return clazz.cast(properties.first(clazz));
    +053            }
    +054    
    +055            /**
    +056             * Gets all properties of a given class.
    +057             * @param clazz the property class
    +058             * @return the properties
    +059             */
    +060            public <T extends ICalProperty> List<T> getProperties(Class<T> clazz) {
    +061                    List<ICalProperty> props = properties.get(clazz);
    +062    
    +063                    //cast to the requested class
    +064                    List<T> ret = new ArrayList<T>(props.size());
    +065                    for (ICalProperty property : props) {
    +066                            ret.add(clazz.cast(property));
    +067                    }
    +068                    return ret;
    +069            }
    +070    
    +071            /**
    +072             * Gets all the properties associated with this component.
    +073             * @return the properties
    +074             */
    +075            public ListMultimap<Class<? extends ICalProperty>, ICalProperty> getProperties() {
    +076                    return properties;
    +077            }
    +078    
    +079            /**
    +080             * Adds a property to this component.
    +081             * @param property the property to add
    +082             */
    +083            public void addProperty(ICalProperty property) {
    +084                    properties.put(property.getClass(), property);
    +085            }
    +086    
    +087            /**
    +088             * Replaces all existing properties of the given class with a single
    +089             * property instance.
    +090             * @param property the property (must not be null)
    +091             */
    +092            public void setProperty(ICalProperty property) {
    +093                    properties.replace(property.getClass(), property);
    +094            }
    +095    
    +096            /**
    +097             * Replaces all existing properties of the given class with a single
    +098             * property instance. If the property instance is null, then all instances
    +099             * of that property will be removed.
    +100             * @param clazz the property class (e.g. "Version.class")
    +101             * @param property the property or null to remove
    +102             */
    +103            public <T extends ICalProperty> void setProperty(Class<T> clazz, T property) {
    +104                    properties.replace(clazz, property);
    +105            }
    +106    
    +107            /**
    +108             * Removes properties from the iCalendar object.
    +109             * @param clazz the class of the properties to remove (e.g. "Version.class")
    +110             */
    +111            public void removeProperties(Class<? extends ICalProperty> clazz) {
    +112                    properties.removeAll(clazz);
    +113            }
    +114    
    +115            /**
    +116             * Gets the first experimental property with a given name.
    +117             * @param name the property name (e.g. "X-ALT-DESC")
    +118             * @return the property or null if none were found
    +119             */
    +120            public RawProperty getExperimentalProperty(String name) {
    +121                    for (RawProperty raw : getProperties(RawProperty.class)) {
    +122                            if (raw.getName().equalsIgnoreCase(name)) {
    +123                                    return raw;
    +124                            }
    +125                    }
    +126                    return null;
    +127            }
    +128    
    +129            /**
    +130             * Gets all experimental properties with a given name.
    +131             * @param name the property name (e.g. "X-ALT-DESC")
    +132             * @return the properties
    +133             */
    +134            public List<RawProperty> getExperimentalProperties(String name) {
    +135                    List<RawProperty> props = new ArrayList<RawProperty>();
    +136    
    +137                    for (RawProperty raw : getProperties(RawProperty.class)) {
    +138                            if (raw.getName().equalsIgnoreCase(name)) {
    +139                                    props.add(raw);
    +140                            }
    +141                    }
    +142    
    +143                    return props;
    +144            }
    +145    
    +146            /**
    +147             * Gets all experimental properties associated with this component.
    +148             * @return the properties
    +149             */
    +150            public List<RawProperty> getExperimentalProperties() {
    +151                    return getProperties(RawProperty.class);
    +152            }
    +153    
    +154            /**
    +155             * Adds an experimental property to this component.
    +156             * @param name the property name (e.g. "X-ALT-DESC")
    +157             * @param value the property value
    +158             * @return the property object that was created
    +159             */
    +160            public RawProperty addExperimentalProperty(String name, String value) {
    +161                    return addExperimentalProperty(name, null, value);
    +162            }
    +163    
    +164            /**
    +165             * Adds an experimental property to this component.
    +166             * @param name the property name (e.g. "X-ALT-DESC")
    +167             * @param dataType the property's data type (e.g. "text") or null if unknown
    +168             * @param value the property value
    +169             * @return the property object that was created
    +170             */
    +171            public RawProperty addExperimentalProperty(String name, ICalDataType dataType, String value) {
    +172                    RawProperty raw = new RawProperty(name, dataType, value);
    +173                    addProperty(raw);
    +174                    return raw;
    +175            }
    +176    
    +177            /**
    +178             * Adds an experimental property to this component, removing all existing
    +179             * properties that have the same name.
    +180             * @param name the property name (e.g. "X-ALT-DESC")
    +181             * @param value the property value
    +182             * @return the property object that was created
    +183             */
    +184            public RawProperty setExperimentalProperty(String name, String value) {
    +185                    return setExperimentalProperty(name, null, value);
    +186            }
    +187    
    +188            /**
    +189             * Adds an experimental property to this component, removing all existing
    +190             * properties that have the same name.
    +191             * @param name the property name (e.g. "X-ALT-DESC")
    +192             * @param dataType the property's data type (e.g. "text") or null if unknown
    +193             * @param value the property value
    +194             * @return the property object that was created
    +195             */
    +196            public RawProperty setExperimentalProperty(String name, ICalDataType dataType, String value) {
    +197                    removeExperimentalProperty(name);
    +198                    return addExperimentalProperty(name, dataType, value);
    +199            }
    +200    
    +201            /**
    +202             * Removes all experimental properties that have the given name.
    +203             * @param name the component name (e.g. "X-ALT-DESC")
    +204             */
    +205            public void removeExperimentalProperty(String name) {
    +206                    List<RawProperty> xproperties = getExperimentalProperties(name);
    +207                    for (RawProperty xproperty : xproperties) {
    +208                            properties.remove(xproperty.getClass(), xproperty);
    +209                    }
    +210            }
    +211    
    +212            /**
    +213             * Gets the first component of a given class.
    +214             * @param clazz the component class
    +215             * @return the component or null if not found
    +216             */
    +217            public <T extends ICalComponent> T getComponent(Class<T> clazz) {
    +218                    return clazz.cast(components.first(clazz));
    +219            }
    +220    
    +221            /**
    +222             * Gets all components of a given class.
    +223             * @param clazz the component class
    +224             * @return the components
    +225             */
    +226            public <T extends ICalComponent> List<T> getComponents(Class<T> clazz) {
    +227                    List<ICalComponent> comp = components.get(clazz);
    +228    
    +229                    //cast to the requested class
    +230                    List<T> ret = new ArrayList<T>(comp.size());
    +231                    for (ICalComponent property : comp) {
    +232                            ret.add(clazz.cast(property));
    +233                    }
    +234                    return ret;
    +235            }
    +236    
    +237            /**
    +238             * Gets all the sub-components associated with this component.
    +239             * @return the sub-components
    +240             */
    +241            public ListMultimap<Class<? extends ICalComponent>, ICalComponent> getComponents() {
    +242                    return components;
    +243            }
    +244    
    +245            /**
    +246             * Adds a sub-component to this component.
    +247             * @param component the component to add
    +248             */
    +249            public void addComponent(ICalComponent component) {
    +250                    components.put(component.getClass(), component);
    +251            }
    +252    
    +253            /**
    +254             * Replaces all components of a given class with the given component.
    +255             * @param component the component (must not be null)
    +256             */
    +257            public void setComponent(ICalComponent component) {
    +258                    components.replace(component.getClass(), component);
    +259            }
    +260    
    +261            /**
    +262             * Replaces all components of a given class with the given component. If the
    +263             * component instance is null, then all instances of that component will be
    +264             * removed.
    +265             * @param clazz the component's class
    +266             * @param component the component or null to remove
    +267             */
    +268            public <T extends ICalComponent> void setComponent(Class<T> clazz, T component) {
    +269                    components.replace(clazz, component);
    +270            }
    +271    
    +272            /**
    +273             * Gets the first experimental sub-component with a given name.
    +274             * @param name the component name (e.g. "X-PARTY")
    +275             * @return the component or null if none were found
    +276             */
    +277            public RawComponent getExperimentalComponent(String name) {
    +278                    for (RawComponent raw : getComponents(RawComponent.class)) {
    +279                            if (raw.getName().equalsIgnoreCase(name)) {
    +280                                    return raw;
    +281                            }
    +282                    }
    +283                    return null;
    +284            }
    +285    
    +286            /**
    +287             * Gets all experimental sub-component with a given name.
    +288             * @param name the component name (e.g. "X-PARTY")
    +289             * @return the components
    +290             */
    +291            public List<RawComponent> getExperimentalComponents(String name) {
    +292                    List<RawComponent> props = new ArrayList<RawComponent>();
    +293    
    +294                    for (RawComponent raw : getComponents(RawComponent.class)) {
    +295                            if (raw.getName().equalsIgnoreCase(name)) {
    +296                                    props.add(raw);
    +297                            }
    +298                    }
    +299    
    +300                    return props;
    +301            }
    +302    
    +303            /**
    +304             * Gets all experimental sub-components associated with this component.
    +305             * @return the sub-components
    +306             */
    +307            public List<RawComponent> getExperimentalComponents() {
    +308                    return getComponents(RawComponent.class);
    +309            }
    +310    
    +311            /**
    +312             * Adds an experimental sub-component to this component.
    +313             * @param name the component name (e.g. "X-PARTY")
    +314             * @return the component object that was created
    +315             */
    +316            public RawComponent addExperimentalComponent(String name) {
    +317                    RawComponent raw = new RawComponent(name);
    +318                    addComponent(raw);
    +319                    return raw;
    +320            }
    +321    
    +322            /**
    +323             * Adds an experimental sub-component to this component, removing all
    +324             * existing components that have the same name.
    +325             * @param name the component name (e.g. "X-PARTY")
    +326             * @return the component object that was created
    +327             */
    +328            public RawComponent setExperimentalComponents(String name) {
    +329                    removeExperimentalComponents(name);
    +330                    return addExperimentalComponent(name);
    +331            }
    +332    
    +333            /**
    +334             * Removes all experimental sub-components that have the given name.
    +335             * @param name the component name (e.g. "X-PARTY")
    +336             */
    +337            public void removeExperimentalComponents(String name) {
    +338                    List<RawComponent> xcomponents = getExperimentalComponents(name);
    +339                    for (RawComponent xcomponent : xcomponents) {
    +340                            components.remove(xcomponent.getClass(), xcomponent);
    +341                    }
    +342            }
    +343    
    +344            /**
    +345             * Checks the component for data consistency problems or deviations from the
    +346             * spec. These problems will not prevent the component from being written to
    +347             * a data stream, but may prevent it from being parsed correctly by the
    +348             * consuming application. These problems can largely be avoided by reading
    +349             * the Javadocs of the component class, or by being familiar with the
    +350             * iCalendar standard.
    +351             * @param hierarchy the hierarchy of components that the component belongs
    +352             * to
    +353             * @see ICalendar#validate
    +354             * @return a list of warnings or an empty list if no problems were found
    +355             */
    +356            public final List<WarningsGroup> validate(List<ICalComponent> hierarchy) {
    +357                    List<WarningsGroup> warnings = new ArrayList<WarningsGroup>();
    +358    
    +359                    //validate this component
    +360                    List<String> warningsBuf = new ArrayList<String>(0);
    +361                    validate(hierarchy, warningsBuf);
    +362                    if (!warningsBuf.isEmpty()) {
    +363                            warnings.add(new WarningsGroup(this, hierarchy, warningsBuf));
    +364                    }
    +365    
    +366                    //add this component to the hierarchy list
    +367                    //copy the list so other validate() calls aren't effected
    +368                    hierarchy = new ArrayList<ICalComponent>(hierarchy);
    +369                    hierarchy.add(this);
    +370    
    +371                    //validate properties
    +372                    for (ICalProperty property : properties.values()) {
    +373                            List<String> propWarnings = property.validate(hierarchy);
    +374                            if (!propWarnings.isEmpty()) {
    +375                                    warnings.add(new WarningsGroup(property, hierarchy, propWarnings));
    +376                            }
    +377                    }
    +378    
    +379                    //validate sub-components
    +380                    for (ICalComponent component : components.values()) {
    +381                            warnings.addAll(component.validate(hierarchy));
    +382                    }
    +383    
    +384                    return warnings;
    +385            }
    +386    
    +387            /**
    +388             * Checks the component for data consistency problems or deviations from the
    +389             * spec. Meant to be overridden by child classes.
    +390             * @param components the hierarchy of components that the component belongs
    +391             * to
    +392             * @param warnings the list to add the warnings to
    +393             */
    +394            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +395                    //do nothing
    +396            }
    +397    
    +398            /**
    +399             * Utility method for validating that there is exactly one instance of each
    +400             * of the given properties.
    +401             * @param warnings the list to add the warnings to
    +402             * @param classes the properties to check
    +403             */
    +404            protected void checkRequiredCardinality(List<String> warnings, Class<? extends ICalProperty>... classes) {
    +405                    for (Class<? extends ICalProperty> clazz : classes) {
    +406                            List<? extends ICalProperty> props = getProperties(clazz);
    +407    
    +408                            if (props.isEmpty()) {
    +409                                    warnings.add(clazz.getSimpleName() + " is not set (it is a required property).");
    +410                                    continue;
    +411                            }
    +412    
    +413                            if (props.size() > 1) {
    +414                                    warnings.add("There cannot be more than one instance of " + clazz.getSimpleName() + ".");
    +415                                    continue;
    +416                            }
    +417                    }
    +418            }
    +419    
    +420            /**
    +421             * Utility method for validating that there is no more than one instance of
    +422             * each of the given properties.
    +423             * @param warnings the list to add the warnings to
    +424             * @param classes the properties to check
    +425             */
    +426            protected void checkOptionalCardinality(List<String> warnings, Class<? extends ICalProperty>... classes) {
    +427                    for (Class<? extends ICalProperty> clazz : classes) {
    +428                            List<? extends ICalProperty> props = getProperties(clazz);
    +429    
    +430                            if (props.size() > 1) {
    +431                                    warnings.add("There cannot be more than one instance of " + clazz.getSimpleName() + ".");
    +432                                    continue;
    +433                            }
    +434                    }
    +435            }
    +436    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/Observance.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/Observance.html new file mode 100644 index 000000000..b7393dc7d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/Observance.html @@ -0,0 +1,363 @@ + + +
    +001    package biweekly.component;
    +002    
    +003    import java.util.Date;
    +004    import java.util.List;
    +005    
    +006    import biweekly.property.Comment;
    +007    import biweekly.property.DateStart;
    +008    import biweekly.property.ExceptionDates;
    +009    import biweekly.property.RecurrenceDates;
    +010    import biweekly.property.RecurrenceRule;
    +011    import biweekly.property.TimezoneName;
    +012    import biweekly.property.TimezoneOffsetFrom;
    +013    import biweekly.property.TimezoneOffsetTo;
    +014    import biweekly.util.DateTimeComponents;
    +015    import biweekly.util.Recurrence;
    +016    
    +017    /*
    +018     Copyright (c) 2013, Michael Angstadt
    +019     All rights reserved.
    +020    
    +021     Redistribution and use in source and binary forms, with or without
    +022     modification, are permitted provided that the following conditions are met: 
    +023    
    +024     1. Redistributions of source code must retain the above copyright notice, this
    +025     list of conditions and the following disclaimer. 
    +026     2. Redistributions in binary form must reproduce the above copyright notice,
    +027     this list of conditions and the following disclaimer in the documentation
    +028     and/or other materials provided with the distribution. 
    +029    
    +030     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +031     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +032     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +033     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +034     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +035     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +036     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +037     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +038     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +039     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +040     */
    +041    
    +042    /**
    +043     * Parent class for the "daylight" and "standard" timezone observances.
    +044     * @author Michael Angstadt
    +045     * @see DaylightSavingsTime
    +046     * @see StandardTime
    +047     * @rfc 5545 p.62-71
    +048     */
    +049    public abstract class Observance extends ICalComponent {
    +050            /**
    +051             * Gets the date that the timezone observance starts.
    +052             * @return the start date or null if not set
    +053             * @rfc 5545 p.97-8
    +054             */
    +055            public DateStart getDateStart() {
    +056                    return getProperty(DateStart.class);
    +057            }
    +058    
    +059            /**
    +060             * Sets the date that the timezone observance starts.
    +061             * @param dateStart the start date or null to remove
    +062             * @rfc 5545 p.97-8
    +063             */
    +064            public void setDateStart(DateStart dateStart) {
    +065                    if (dateStart != null) {
    +066                            dateStart.setLocalTime(true);
    +067                    }
    +068                    setProperty(DateStart.class, dateStart);
    +069            }
    +070    
    +071            /**
    +072             * Sets the date that the timezone observance starts.
    +073             * @param components the raw components of the start date or null to remove
    +074             * @return the property that was created
    +075             * @rfc 5545 p.97-8
    +076             */
    +077            public DateStart setDateStart(DateTimeComponents components) {
    +078                    DateStart prop = (components == null) ? null : new DateStart(components);
    +079                    setDateStart(prop);
    +080                    return prop;
    +081            }
    +082    
    +083            /**
    +084             * Gets the UTC offset that the timezone observance transitions to.
    +085             * @return the UTC offset or null if not set
    +086             * @rfc 5545 p.105-6
    +087             */
    +088            public TimezoneOffsetTo getTimezoneOffsetTo() {
    +089                    return getProperty(TimezoneOffsetTo.class);
    +090            }
    +091    
    +092            /**
    +093             * Sets the UTC offset that the timezone observance transitions to.
    +094             * @param timezoneOffsetTo the UTC offset or null to remove
    +095             * @rfc 5545 p.105-6
    +096             */
    +097            public void setTimezoneOffsetTo(TimezoneOffsetTo timezoneOffsetTo) {
    +098                    setProperty(TimezoneOffsetTo.class, timezoneOffsetTo);
    +099            }
    +100    
    +101            /**
    +102             * Sets the UTC offset that the timezone observance transitions to.
    +103             * @param hour the hour offset (e.g. "-5")
    +104             * @param minute the minute offset (e.g. "0")
    +105             * @return the property that was created
    +106             * @rfc 5545 p.105-6
    +107             */
    +108            public TimezoneOffsetTo setTimezoneOffsetTo(Integer hour, Integer minute) {
    +109                    TimezoneOffsetTo prop = new TimezoneOffsetTo(hour, minute);
    +110                    setTimezoneOffsetTo(prop);
    +111                    return prop;
    +112            }
    +113    
    +114            /**
    +115             * Gets the UTC offset that the timezone observance transitions from.
    +116             * @return the UTC offset or null if not set
    +117             * @rfc 5545 p.104-5
    +118             */
    +119            public TimezoneOffsetFrom getTimezoneOffsetFrom() {
    +120                    return getProperty(TimezoneOffsetFrom.class);
    +121            }
    +122    
    +123            /**
    +124             * Sets the UTC offset that the timezone observance transitions from.
    +125             * @param timezoneOffsetFrom the UTC offset or null to remove
    +126             * @rfc 5545 p.104-5
    +127             */
    +128            public void setTimezoneOffsetFrom(TimezoneOffsetFrom timezoneOffsetFrom) {
    +129                    setProperty(TimezoneOffsetFrom.class, timezoneOffsetFrom);
    +130            }
    +131    
    +132            /**
    +133             * Sets the UTC offset that the timezone observance transitions from.
    +134             * @param hour the hour offset (e.g. "-5")
    +135             * @param minute the minute offset (e.g. "0")
    +136             * @return the property that was created
    +137             * @rfc 5545 p.104-5
    +138             */
    +139            public TimezoneOffsetFrom setTimezoneOffsetFrom(Integer hour, Integer minute) {
    +140                    TimezoneOffsetFrom prop = new TimezoneOffsetFrom(hour, minute);
    +141                    setTimezoneOffsetFrom(prop);
    +142                    return prop;
    +143            }
    +144    
    +145            /**
    +146             * Gets how often the timezone observance repeats.
    +147             * @return the recurrence rule or null if not set
    +148             * @rfc 5545 p.122-32
    +149             */
    +150            public RecurrenceRule getRecurrenceRule() {
    +151                    return getProperty(RecurrenceRule.class);
    +152            }
    +153    
    +154            /**
    +155             * Sets how often the timezone observance repeats.
    +156             * @param recur the recurrence rule or null to remove
    +157             * @return the property that was created
    +158             * @rfc 5545 p.122-32
    +159             */
    +160            public RecurrenceRule setRecurrenceRule(Recurrence recur) {
    +161                    RecurrenceRule prop = (recur == null) ? null : new RecurrenceRule(recur);
    +162                    setRecurrenceRule(prop);
    +163                    return prop;
    +164            }
    +165    
    +166            /**
    +167             * Sets how often the timezone observance repeats.
    +168             * @param recurrenceRule the recurrence rule or null to remove
    +169             * @rfc 5545 p.122-32
    +170             */
    +171            public void setRecurrenceRule(RecurrenceRule recurrenceRule) {
    +172                    setProperty(RecurrenceRule.class, recurrenceRule);
    +173            }
    +174    
    +175            /**
    +176             * Gets the comments attached to the timezone observance.
    +177             * @return the comments
    +178             * @rfc 5545 p.83-4
    +179             */
    +180            public List<Comment> getComments() {
    +181                    return getProperties(Comment.class);
    +182            }
    +183    
    +184            /**
    +185             * Adds a comment to the timezone observance.
    +186             * @param comment the comment to add
    +187             * @rfc 5545 p.83-4
    +188             */
    +189            public void addComment(Comment comment) {
    +190                    addProperty(comment);
    +191            }
    +192    
    +193            /**
    +194             * Adds a comment to the timezone observance.
    +195             * @param comment the comment to add
    +196             * @return the property that was created
    +197             * @rfc 5545 p.83-4
    +198             */
    +199            public Comment addComment(String comment) {
    +200                    Comment prop = new Comment(comment);
    +201                    addComment(prop);
    +202                    return prop;
    +203            }
    +204    
    +205            /**
    +206             * Gets the list of dates/periods that help define the recurrence rule of
    +207             * this timezone observance (if one is defined).
    +208             * @return the recurrence dates
    +209             * @rfc 5545 p.120-2
    +210             */
    +211            public List<RecurrenceDates> getRecurrenceDates() {
    +212                    return getProperties(RecurrenceDates.class);
    +213            }
    +214    
    +215            /**
    +216             * Adds a list of dates/periods that help define the recurrence rule of this
    +217             * timezone observance (if one is defined).
    +218             * @param recurrenceDates the recurrence dates
    +219             * @rfc 5545 p.120-2
    +220             */
    +221            public void addRecurrenceDates(RecurrenceDates recurrenceDates) {
    +222                    addProperty(recurrenceDates);
    +223            }
    +224    
    +225            /**
    +226             * Gets the traditional, non-standard names for the timezone observance.
    +227             * @return the timezone observance names
    +228             * @rfc 5545 p.103-4
    +229             */
    +230            public List<TimezoneName> getTimezoneNames() {
    +231                    return getProperties(TimezoneName.class);
    +232            }
    +233    
    +234            /**
    +235             * Adds a traditional, non-standard name for the timezone observance.
    +236             * @param timezoneName the timezone observance name
    +237             * @rfc 5545 p.103-4
    +238             */
    +239            public void addTimezoneName(TimezoneName timezoneName) {
    +240                    addProperty(timezoneName);
    +241            }
    +242    
    +243            /**
    +244             * Adds a traditional, non-standard name for the timezone observance.
    +245             * @param timezoneName the timezone observance name (e.g. "EST")
    +246             * @return the property that was created
    +247             * @rfc 5545 p.103-4
    +248             */
    +249            public TimezoneName addTimezoneName(String timezoneName) {
    +250                    TimezoneName prop = new TimezoneName(timezoneName);
    +251                    addTimezoneName(prop);
    +252                    return prop;
    +253            }
    +254    
    +255            /**
    +256             * Gets the list of exceptions to the timezone observance.
    +257             * @return the list of exceptions
    +258             * @rfc 5545 p.118-20
    +259             */
    +260            public List<ExceptionDates> getExceptionDates() {
    +261                    return getProperties(ExceptionDates.class);
    +262            }
    +263    
    +264            /**
    +265             * Adds a list of exceptions to the timezone observance. Note that this
    +266             * property can contain multiple dates.
    +267             * @param exceptionDates the list of exceptions
    +268             * @rfc 5545 p.118-20
    +269             */
    +270            public void addExceptionDates(ExceptionDates exceptionDates) {
    +271                    addProperty(exceptionDates);
    +272            }
    +273    
    +274            @SuppressWarnings("unchecked")
    +275            @Override
    +276            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +277                    checkRequiredCardinality(warnings, DateStart.class, TimezoneOffsetTo.class, TimezoneOffsetFrom.class);
    +278    
    +279                    //RFC 5545 p. 167
    +280                    DateStart dateStart = getDateStart();
    +281                    RecurrenceRule rrule = getRecurrenceRule();
    +282                    if (dateStart != null && rrule != null) {
    +283                            Date start = dateStart.getValue();
    +284                            Recurrence recur = rrule.getValue();
    +285                            if (start != null && recur != null) {
    +286                                    if (!dateStart.hasTime() && (!recur.getByHour().isEmpty() || !recur.getByMinute().isEmpty() || !recur.getBySecond().isEmpty())) {
    +287                                            warnings.add("The BYHOUR, BYMINUTE, and BYSECOND rule parts cannot be specified in the " + RecurrenceRule.class.getSimpleName() + " property when the " + DateStart.class.getSimpleName() + " property contains a date value (as opposed to a date-time value).");
    +288                                    }
    +289                            }
    +290                    }
    +291    
    +292                    //RFC 5545 p. 167
    +293                    if (getProperties(RecurrenceRule.class).size() > 1) {
    +294                            warnings.add("There should be only one instance of the " + RecurrenceRule.class.getSimpleName() + " property.");
    +295                    }
    +296            }
    +297    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/RawComponent.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/RawComponent.html new file mode 100644 index 000000000..f75c68eb8 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/RawComponent.html @@ -0,0 +1,108 @@ + + +
    +001    package biweekly.component;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * A component that does not have a marshaller associated with it.
    +030     * @author Michael Angstadt
    +031     */
    +032    public class RawComponent extends ICalComponent {
    +033            private final String name;
    +034    
    +035            public RawComponent(String name) {
    +036                    this.name = name;
    +037            }
    +038    
    +039            public String getName() {
    +040                    return name;
    +041            }
    +042    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/StandardTime.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/StandardTime.html new file mode 100644 index 000000000..43bd29ac9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/StandardTime.html @@ -0,0 +1,117 @@ + + +
    +001    package biweekly.component;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * <p>
    +030     * Defines a standard time range within a {@link VTimezone}.
    +031     * </p>
    +032     * <p>
    +033     * <b>Examples:</b>
    +034     * 
    +035     * <pre class="brush:java">
    +036     * VTimezone timezone = new VTimezone(&quot;Eastern Standard Time&quot;);
    +037     * StandardTime standard = new StandardTime();
    +038     * DateTimeComponents components = new DateTimeComponents(1998, 10, 25, 2, 0, 0, false);
    +039     * standard.setDateStart(components);
    +040     * standard.setTimezoneOffsetFrom(-4, 0);
    +041     * standard.setTimezoneOffsetTo(-5, 0);
    +042     * timezone.addStandardTime(standard);
    +043     * </pre>
    +044     * 
    +045     * </p>
    +046     * @author Michael Angstadt
    +047     * @rfc 5545 p.62-71
    +048     */
    +049    public class StandardTime extends Observance {
    +050            //empty
    +051    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VAlarm.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VAlarm.html new file mode 100644 index 000000000..5de3a7eb2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VAlarm.html @@ -0,0 +1,552 @@ + + +
    +001    package biweekly.component;
    +002    
    +003    import java.util.Arrays;
    +004    import java.util.List;
    +005    
    +006    import biweekly.parameter.Related;
    +007    import biweekly.property.Action;
    +008    import biweekly.property.Attachment;
    +009    import biweekly.property.Attendee;
    +010    import biweekly.property.DateDue;
    +011    import biweekly.property.DateEnd;
    +012    import biweekly.property.DateStart;
    +013    import biweekly.property.Description;
    +014    import biweekly.property.DurationProperty;
    +015    import biweekly.property.Repeat;
    +016    import biweekly.property.Summary;
    +017    import biweekly.property.Trigger;
    +018    import biweekly.util.Duration;
    +019    
    +020    /*
    +021     Copyright (c) 2013, Michael Angstadt
    +022     All rights reserved.
    +023    
    +024     Redistribution and use in source and binary forms, with or without
    +025     modification, are permitted provided that the following conditions are met: 
    +026    
    +027     1. Redistributions of source code must retain the above copyright notice, this
    +028     list of conditions and the following disclaimer. 
    +029     2. Redistributions in binary form must reproduce the above copyright notice,
    +030     this list of conditions and the following disclaimer in the documentation
    +031     and/or other materials provided with the distribution. 
    +032    
    +033     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +034     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +035     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +036     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +037     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +038     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +039     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +040     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +041     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +042     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +043     */
    +044    
    +045    /**
    +046     * <p>
    +047     * Defines a reminder for an event or to-do task. This class contains static
    +048     * factory methods to aid in the construction of valid alarms.
    +049     * </p>
    +050     * 
    +051     * <p>
    +052     * <b>Examples:</b>
    +053     * 
    +054     * <pre class="brush:java">
    +055     * //audio alarm
    +056     * Trigger trigger = ...
    +057     * Attachment sound = ...
    +058     * VAlarm audio = VAlarm.audio(trigger, sound);
    +059     * 
    +060     * //display alarm
    +061     * Trigger trigger = ...
    +062     * String message = &quot;Meeting at 1pm&quot;;
    +063     * VAlarm display = VAlarm.display(trigger, message);
    +064     * 
    +065     * //email alarm
    +066     * Trigger trigger = ...
    +067     * String subject = &quot;Reminder: Meeting at 1pm&quot;;
    +068     * String body = &quot;Team,\n\nThe team meeting scheduled for 1pm is about to start.  Snacks will be served!\n\nThanks,\nJohn&quot;;
    +069     * List&lt;String&gt; to = Arrays.asList(&quot;janedoe@example.com&quot;, &quot;bobsmith@example.com&quot;);
    +070     * VAlarm email = VAlarm.email(trigger, subject, body, to);
    +071     * </pre>
    +072     * 
    +073     * </p>
    +074     * @author Michael Angstadt
    +075     * @rfc 5545 p.71-6
    +076     */
    +077    public class VAlarm extends ICalComponent {
    +078            /**
    +079             * Creates a new alarm. Consider using one of the static factory methods
    +080             * instead.
    +081             * @param action the alarm action (e.g. "email")
    +082             * @param trigger the trigger
    +083             */
    +084            public VAlarm(Action action, Trigger trigger) {
    +085                    setAction(action);
    +086                    setTrigger(trigger);
    +087            }
    +088    
    +089            /**
    +090             * Creates an audio alarm.
    +091             * @param trigger the trigger
    +092             * @return the alarm
    +093             */
    +094            public static VAlarm audio(Trigger trigger) {
    +095                    return audio(trigger, null);
    +096            }
    +097    
    +098            /**
    +099             * Creates an audio alarm.
    +100             * @param trigger the trigger
    +101             * @param sound a sound to play when the alarm triggers
    +102             * @return the alarm
    +103             */
    +104            public static VAlarm audio(Trigger trigger, Attachment sound) {
    +105                    VAlarm alarm = new VAlarm(Action.audio(), trigger);
    +106                    if (sound != null) {
    +107                            alarm.addAttachment(sound);
    +108                    }
    +109                    return alarm;
    +110            }
    +111    
    +112            /**
    +113             * Creates a display alarm.
    +114             * @param trigger the trigger
    +115             * @param displayText the display text
    +116             * @return the alarm
    +117             */
    +118            public static VAlarm display(Trigger trigger, String displayText) {
    +119                    VAlarm alarm = new VAlarm(Action.display(), trigger);
    +120                    alarm.setDescription(displayText);
    +121                    return alarm;
    +122            }
    +123    
    +124            /**
    +125             * Creates an email alarm.
    +126             * @param trigger the trigger
    +127             * @param subject the email subject
    +128             * @param body the email body
    +129             * @param recipients the email address(es) to send the alert to
    +130             * @return the alarm
    +131             */
    +132            public static VAlarm email(Trigger trigger, String subject, String body, String... recipients) {
    +133                    return email(trigger, subject, body, Arrays.asList(recipients));
    +134            }
    +135    
    +136            /**
    +137             * Creates an email alarm.
    +138             * @param trigger the trigger
    +139             * @param subject the email subject
    +140             * @param body the email body
    +141             * @param recipients the email address(es) to send the alert to
    +142             * @return the alarm
    +143             */
    +144            public static VAlarm email(Trigger trigger, String subject, String body, List<String> recipients) {
    +145                    VAlarm alarm = new VAlarm(Action.email(), trigger);
    +146                    alarm.setSummary(subject);
    +147                    alarm.setDescription(body);
    +148                    for (String recipient : recipients) {
    +149                            alarm.addAttendee(Attendee.email(recipient));
    +150                    }
    +151                    return alarm;
    +152            }
    +153    
    +154            /**
    +155             * Gets any attachments that are associated with the alarm.
    +156             * @return the attachments
    +157             * @rfc 5545 p.80-1
    +158             */
    +159            public List<Attachment> getAttachments() {
    +160                    return getProperties(Attachment.class);
    +161            }
    +162    
    +163            /**
    +164             * Adds an attachment to the alarm. Note that AUDIO alarms should only have
    +165             * 1 attachment.
    +166             * @param attachment the attachment to add
    +167             * @rfc 5545 p.80-1
    +168             */
    +169            public void addAttachment(Attachment attachment) {
    +170                    addProperty(attachment);
    +171            }
    +172    
    +173            /**
    +174             * <p>
    +175             * Gets a detailed description of the alarm. The description should be more
    +176             * detailed than the one provided by the {@link Summary} property.
    +177             * </p>
    +178             * <p>
    +179             * This property has different meanings, depending on the alarm action:
    +180             * <ul>
    +181             * <li>DISPLAY - the display text</li>
    +182             * <li>EMAIL - the body of the email message</li>
    +183             * <li>all others - a general description of the alarm</li>
    +184             * </ul>
    +185             * </p>
    +186             * @return the description or null if not set
    +187             * @rfc 5545 p.84-5
    +188             */
    +189            public Description getDescription() {
    +190                    return getProperty(Description.class);
    +191            }
    +192    
    +193            /**
    +194             * <p>
    +195             * Sets a detailed description of the alarm. The description should be more
    +196             * detailed than the one provided by the {@link Summary} property.
    +197             * </p>
    +198             * <p>
    +199             * This property has different meanings, depending on the alarm action:
    +200             * <ul>
    +201             * <li>DISPLAY - the display text</li>
    +202             * <li>EMAIL - the body of the email message</li>
    +203             * <li>all others - a general description of the alarm</li>
    +204             * </ul>
    +205             * </p>
    +206             * @param description the description or null to remove
    +207             * @rfc 5545 p.84-5
    +208             */
    +209            public void setDescription(Description description) {
    +210                    setProperty(Description.class, description);
    +211            }
    +212    
    +213            /**
    +214             * <p>
    +215             * Sets a detailed description of the alarm. The description should be more
    +216             * detailed than the one provided by the {@link Summary} property.
    +217             * </p>
    +218             * <p>
    +219             * This property has different meanings, depending on the alarm action:
    +220             * <ul>
    +221             * <li>DISPLAY - the display text</li>
    +222             * <li>EMAIL - the body of the email message</li>
    +223             * <li>all others - a general description of the alarm</li>
    +224             * </ul>
    +225             * </p>
    +226             * @param description the description or null to remove
    +227             * @return the property that was created
    +228             * @rfc 5545 p.84-5
    +229             */
    +230            public Description setDescription(String description) {
    +231                    Description prop = (description == null) ? null : new Description(description);
    +232                    setDescription(prop);
    +233                    return prop;
    +234            }
    +235    
    +236            /**
    +237             * <p>
    +238             * Gets the summary of the alarm.
    +239             * </p>
    +240             * <p>
    +241             * This property has different meanings, depending on the alarm action:
    +242             * <ul>
    +243             * <li>EMAIL - the subject line of the email</li>
    +244             * <li>all others - a one-line summary of the alarm</li>
    +245             * </ul>
    +246             * </p>
    +247             * @return the summary or null if not set
    +248             * @rfc 5545 p.93-4
    +249             */
    +250            public Summary getSummary() {
    +251                    return getProperty(Summary.class);
    +252            }
    +253    
    +254            /**
    +255             * <p>
    +256             * Sets the summary of the alarm.
    +257             * </p>
    +258             * <p>
    +259             * This property has different meanings, depending on the alarm action:
    +260             * <ul>
    +261             * <li>EMAIL - the subject line of the email</li>
    +262             * <li>all others - a one-line summary of the alarm</li>
    +263             * </ul>
    +264             * </p>
    +265             * @param summary the summary or null to remove
    +266             * @rfc 5545 p.93-4
    +267             */
    +268            public void setSummary(Summary summary) {
    +269                    setProperty(Summary.class, summary);
    +270            }
    +271    
    +272            /**
    +273             * <p>
    +274             * Sets the summary of the alarm.
    +275             * </p>
    +276             * <p>
    +277             * This property has different meanings, depending on the alarm action:
    +278             * <ul>
    +279             * <li>EMAIL - the subject line of the email</li>
    +280             * <li>all others - a one-line summary of the alarm</li>
    +281             * </ul>
    +282             * </p>
    +283             * @param summary the summary or null to remove
    +284             * @return the property that was created
    +285             * @rfc 5545 p.93-4
    +286             */
    +287            public Summary setSummary(String summary) {
    +288                    Summary prop = (summary == null) ? null : new Summary(summary);
    +289                    setSummary(prop);
    +290                    return prop;
    +291            }
    +292    
    +293            /**
    +294             * Gets the people who will be emailed when the alarm fires (only applicable
    +295             * for EMAIL alarms).
    +296             * @return the email recipients
    +297             * @rfc 5545 p.107-9
    +298             */
    +299            public List<Attendee> getAttendees() {
    +300                    return getProperties(Attendee.class);
    +301            }
    +302    
    +303            /**
    +304             * Adds a person who will be emailed when the alarm fires (only applicable
    +305             * for EMAIL alarms).
    +306             * @param attendee the email recipient
    +307             * @rfc 5545 p.107-9
    +308             */
    +309            public void addAttendee(Attendee attendee) {
    +310                    addProperty(attendee);
    +311            }
    +312    
    +313            /**
    +314             * Gets the type of action to invoke when the alarm is triggered.
    +315             * @return the action or null if not set
    +316             * @rfc 5545 p.132-3
    +317             */
    +318            public Action getAction() {
    +319                    return getProperty(Action.class);
    +320            }
    +321    
    +322            /**
    +323             * Sets the type of action to invoke when the alarm is triggered.
    +324             * @param action the action or null to remove
    +325             * @rfc 5545 p.132-3
    +326             */
    +327            public void setAction(Action action) {
    +328                    setProperty(Action.class, action);
    +329            }
    +330    
    +331            /**
    +332             * Gets the length of the pause between alarm repetitions.
    +333             * @return the duration or null if not set
    +334             * @rfc 5545 p.99
    +335             */
    +336            public DurationProperty getDuration() {
    +337                    return getProperty(DurationProperty.class);
    +338            }
    +339    
    +340            /**
    +341             * Sets the length of the pause between alarm repetitions.
    +342             * @param duration the duration or null to remove
    +343             * @rfc 5545 p.99
    +344             */
    +345            public void setDuration(DurationProperty duration) {
    +346                    setProperty(DurationProperty.class, duration);
    +347            }
    +348    
    +349            /**
    +350             * Sets the length of the pause between alarm repetitions.
    +351             * @param duration the duration or null to remove
    +352             * @return the property that was created
    +353             * @rfc 5545 p.99
    +354             */
    +355            public DurationProperty setDuration(Duration duration) {
    +356                    DurationProperty prop = (duration == null) ? null : new DurationProperty(duration);
    +357                    setDuration(prop);
    +358                    return prop;
    +359            }
    +360    
    +361            /**
    +362             * Gets the number of times an alarm should be repeated after its initial
    +363             * trigger.
    +364             * @return the repeat count or null if not set
    +365             * @rfc 5545 p.133
    +366             */
    +367            public Repeat getRepeat() {
    +368                    return getProperty(Repeat.class);
    +369            }
    +370    
    +371            /**
    +372             * Sets the number of times an alarm should be repeated after its initial
    +373             * trigger.
    +374             * @param repeat the repeat count or null to remove
    +375             * @rfc 5545 p.133
    +376             */
    +377            public void setRepeat(Repeat repeat) {
    +378                    setProperty(Repeat.class, repeat);
    +379            }
    +380    
    +381            /**
    +382             * Sets the number of times an alarm should be repeated after its initial
    +383             * trigger.
    +384             * @param count the repeat count (e.g. "2" to repeat it two more times after
    +385             * it was initially triggered, for a total of three times) or null to remove
    +386             * @return the property that was created
    +387             * @rfc 5545 p.133
    +388             */
    +389            public Repeat setRepeat(Integer count) {
    +390                    Repeat prop = (count == null) ? null : new Repeat(count);
    +391                    setRepeat(prop);
    +392                    return prop;
    +393            }
    +394    
    +395            /**
    +396             * Sets the repetition information for the alarm.
    +397             * @param count the repeat count (e.g. "2" to repeat it two more times after
    +398             * it was initially triggered, for a total of three times)
    +399             * @param pauseDuration the length of the pause between repeats
    +400             * @rfc 5545 p.133
    +401             */
    +402            public void setRepeat(int count, Duration pauseDuration) {
    +403                    Repeat repeat = new Repeat(count);
    +404                    DurationProperty duration = new DurationProperty(pauseDuration);
    +405                    setRepeat(repeat);
    +406                    setDuration(duration);
    +407            }
    +408    
    +409            /**
    +410             * Gets when the alarm will be triggered.
    +411             * @return the trigger time or null if not set
    +412             * @rfc 5545 p.133-6
    +413             */
    +414            public Trigger getTrigger() {
    +415                    return getProperty(Trigger.class);
    +416            }
    +417    
    +418            /**
    +419             * Sets when the alarm will be triggered.
    +420             * @param trigger the trigger time or null to remove
    +421             * @rfc 5545 p.133-6
    +422             */
    +423            public void setTrigger(Trigger trigger) {
    +424                    setProperty(Trigger.class, trigger);
    +425            }
    +426    
    +427            @SuppressWarnings("unchecked")
    +428            @Override
    +429            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +430                    //all alarm types require Action and Trigger
    +431                    checkRequiredCardinality(warnings, Action.class, Trigger.class);
    +432    
    +433                    Action action = getAction();
    +434                    if (action != null) {
    +435                            if (action.isAudio()) {
    +436                                    if (getAttachments().size() > 1) {
    +437                                            warnings.add("Audio alarms should have no more than 1 attachment.");
    +438                                    }
    +439                            }
    +440    
    +441                            if (action.isDisplay()) {
    +442                                    checkRequiredCardinality(warnings, Description.class);
    +443                            }
    +444    
    +445                            if (action.isEmail()) {
    +446                                    checkRequiredCardinality(warnings, Summary.class, Description.class);
    +447                                    if (getAttendees().isEmpty()) {
    +448                                            warnings.add("Email alarms must have at least one attendee.");
    +449                                    }
    +450                            } else {
    +451                                    if (!getAttendees().isEmpty()) {
    +452                                            warnings.add("Only email alarms can have attendees.");
    +453                                    }
    +454                            }
    +455                    }
    +456    
    +457                    Trigger trigger = getTrigger();
    +458                    if (trigger != null) {
    +459                            Related related = trigger.getRelated();
    +460    
    +461                            if (related == null && trigger.getDuration() != null) {
    +462                                    warnings.add("The trigger must specify which date field its duration is relative to.");
    +463                            }
    +464    
    +465                            if (related != null) {
    +466                                    ICalComponent parent = components.get(components.size() - 1);
    +467                                    if (related == Related.START && parent.getProperty(DateStart.class) == null) {
    +468                                            warnings.add("The trigger is settings its duration relative to the start date, but the parent component has no start date property.");
    +469                                    }
    +470                                    if (related == Related.END) {
    +471                                            boolean noEndDate = false;
    +472    
    +473                                            if (parent instanceof VEvent) {
    +474                                                    noEndDate = (parent.getProperty(DateEnd.class) == null && (parent.getProperty(DateStart.class) == null || parent.getProperty(DurationProperty.class) == null));
    +475                                            } else if (parent instanceof VTodo) {
    +476                                                    noEndDate = (parent.getProperty(DateDue.class) == null && (parent.getProperty(DateStart.class) == null || parent.getProperty(DurationProperty.class) == null));
    +477                                            }
    +478    
    +479                                            if (noEndDate) {
    +480                                                    warnings.add("The trigger is settings its duration relative to the end date, but the parent component has no end date or equivalent set.");
    +481                                            }
    +482                                    }
    +483                            }
    +484                    }
    +485            }
    +486    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VEvent.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VEvent.html new file mode 100644 index 000000000..4686f29fa --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VEvent.html @@ -0,0 +1,1247 @@ + + +
    +001    package biweekly.component;
    +002    
    +003    import java.util.Date;
    +004    import java.util.List;
    +005    
    +006    import biweekly.property.Attachment;
    +007    import biweekly.property.Attendee;
    +008    import biweekly.property.Categories;
    +009    import biweekly.property.Classification;
    +010    import biweekly.property.Comment;
    +011    import biweekly.property.Contact;
    +012    import biweekly.property.Created;
    +013    import biweekly.property.DateEnd;
    +014    import biweekly.property.DateStart;
    +015    import biweekly.property.DateTimeStamp;
    +016    import biweekly.property.Description;
    +017    import biweekly.property.DurationProperty;
    +018    import biweekly.property.ExceptionDates;
    +019    import biweekly.property.ExceptionRule;
    +020    import biweekly.property.Geo;
    +021    import biweekly.property.LastModified;
    +022    import biweekly.property.Location;
    +023    import biweekly.property.Method;
    +024    import biweekly.property.Organizer;
    +025    import biweekly.property.Priority;
    +026    import biweekly.property.RecurrenceDates;
    +027    import biweekly.property.RecurrenceId;
    +028    import biweekly.property.RecurrenceRule;
    +029    import biweekly.property.RelatedTo;
    +030    import biweekly.property.RequestStatus;
    +031    import biweekly.property.Resources;
    +032    import biweekly.property.Sequence;
    +033    import biweekly.property.Status;
    +034    import biweekly.property.Summary;
    +035    import biweekly.property.Transparency;
    +036    import biweekly.property.Uid;
    +037    import biweekly.property.Url;
    +038    import biweekly.util.Duration;
    +039    import biweekly.util.Recurrence;
    +040    
    +041    /*
    +042     Copyright (c) 2013, Michael Angstadt
    +043     All rights reserved.
    +044    
    +045     Redistribution and use in source and binary forms, with or without
    +046     modification, are permitted provided that the following conditions are met: 
    +047    
    +048     1. Redistributions of source code must retain the above copyright notice, this
    +049     list of conditions and the following disclaimer. 
    +050     2. Redistributions in binary form must reproduce the above copyright notice,
    +051     this list of conditions and the following disclaimer in the documentation
    +052     and/or other materials provided with the distribution. 
    +053    
    +054     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +055     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +056     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +057     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +058     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +059     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +060     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +061     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +062     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +063     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +064     */
    +065    
    +066    /**
    +067     * <p>
    +068     * Defines a scheduled activity, such as a meeting that's two hours long.
    +069     * </p>
    +070     * <p>
    +071     * <b>Examples:</b>
    +072     * 
    +073     * <pre class="brush:java">
    +074     * VEvent event = new VEvent();
    +075     * Date start = ...
    +076     * event.setDateStart(start);
    +077     * Date end = ...
    +078     * event.setDateEnd(end);
    +079     * event.setSummary("Team Meeting");
    +080     * event.setLocation("Room 21C");
    +081     * event.setCreated(new Date());
    +082     * event.setRecurrenceRule(new Recurrence.Builder(Frequency.WEEKLY).build());
    +083     * </pre>
    +084     * 
    +085     * </p>
    +086     * @author Michael Angstadt
    +087     * @rfc 5545 p.52-5
    +088     */
    +089    public class VEvent extends ICalComponent {
    +090            /**
    +091             * <p>
    +092             * Creates a new event.
    +093             * </p>
    +094             * <p>
    +095             * The following properties are auto-generated on object creation. These
    +096             * properties <b>must</b> be present in order for the event to be valid:
    +097             * <ul>
    +098             * <li>{@link Uid} - Set to a UUID.</li>
    +099             * <li>{@link DateTimeStamp} - Set to the current date-time.</li>
    +100             * </ul>
    +101             * </p>
    +102             */
    +103            public VEvent() {
    +104                    setUid(Uid.random());
    +105                    setDateTimeStamp(new Date());
    +106            }
    +107    
    +108            /**
    +109             * Gets the unique identifier for this event. This component object comes
    +110             * populated with a UID on creation. This is a <b>required</b> property.
    +111             * @return the UID or null if not set
    +112             * @rfc 5545 p.117-8
    +113             */
    +114            public Uid getUid() {
    +115                    return getProperty(Uid.class);
    +116            }
    +117    
    +118            /**
    +119             * Sets the unique identifier for this event. This component object comes
    +120             * populated with a UID on creation. This is a <b>required</b> property.
    +121             * @param uid the UID or null to remove
    +122             * @rfc 5545 p.117-8
    +123             */
    +124            public void setUid(Uid uid) {
    +125                    setProperty(Uid.class, uid);
    +126            }
    +127    
    +128            /**
    +129             * Sets the unique identifier for this event. This component object comes
    +130             * populated with a UID on creation. This is a <b>required</b> property.
    +131             * @param uid the UID or null to remove
    +132             * @return the property that was created
    +133             * @rfc 5545 p.117-8
    +134             */
    +135            public Uid setUid(String uid) {
    +136                    Uid prop = (uid == null) ? null : new Uid(uid);
    +137                    setUid(prop);
    +138                    return prop;
    +139            }
    +140    
    +141            /**
    +142             * Gets either (a) the creation date of the iCalendar object (if the
    +143             * {@link Method} property is defined) or (b) the date that the event was
    +144             * last modified (the {@link LastModified} property also holds this
    +145             * information). This event object comes populated with a
    +146             * {@link DateTimeStamp} property that is set to the current time. This is a
    +147             * <b>required</b> property.
    +148             * @return the date time stamp or null if not set
    +149             * @rfc 5545 p.137-8
    +150             */
    +151            public DateTimeStamp getDateTimeStamp() {
    +152                    return getProperty(DateTimeStamp.class);
    +153            }
    +154    
    +155            /**
    +156             * Sets either (a) the creation date of the iCalendar object (if the
    +157             * {@link Method} property is defined) or (b) the date that the event was
    +158             * last modified (the {@link LastModified} property also holds this
    +159             * information). This event object comes populated with a
    +160             * {@link DateTimeStamp} property that is set to the current time. This is a
    +161             * <b>required</b> property.
    +162             * @param dateTimeStamp the date time stamp or null to remove
    +163             * @rfc 5545 p.137-8
    +164             */
    +165            public void setDateTimeStamp(DateTimeStamp dateTimeStamp) {
    +166                    setProperty(DateTimeStamp.class, dateTimeStamp);
    +167            }
    +168    
    +169            /**
    +170             * Sets either (a) the creation date of the iCalendar object (if the
    +171             * {@link Method} property is defined) or (b) the date that the event was
    +172             * last modified (the {@link LastModified} property also holds this
    +173             * information). This event object comes populated with a
    +174             * {@link DateTimeStamp} property that is set to the current time. This is a
    +175             * <b>required</b> property.
    +176             * @param dateTimeStamp the date time stamp or null to remove
    +177             * @return the property that was created
    +178             * @rfc 5545 p.137-8
    +179             */
    +180            public DateTimeStamp setDateTimeStamp(Date dateTimeStamp) {
    +181                    DateTimeStamp prop = (dateTimeStamp == null) ? null : new DateTimeStamp(dateTimeStamp);
    +182                    setDateTimeStamp(prop);
    +183                    return prop;
    +184            }
    +185    
    +186            /**
    +187             * Gets the date that the event starts.
    +188             * @return the start date or null if not set
    +189             * @rfc 5545 p.97-8
    +190             */
    +191            public DateStart getDateStart() {
    +192                    return getProperty(DateStart.class);
    +193            }
    +194    
    +195            /**
    +196             * Sets the date that the event starts (required if no {@link Method}
    +197             * property is defined).
    +198             * @param dateStart the start date or null to remove
    +199             * @rfc 5545 p.97-8
    +200             */
    +201            public void setDateStart(DateStart dateStart) {
    +202                    setProperty(DateStart.class, dateStart);
    +203            }
    +204    
    +205            /**
    +206             * Sets the date that the event starts (required if no {@link Method}
    +207             * property is defined).
    +208             * @param dateStart the start date or null to remove
    +209             * @return the property that was created
    +210             * @rfc 5545 p.97-8
    +211             */
    +212            public DateStart setDateStart(Date dateStart) {
    +213                    DateStart prop = (dateStart == null) ? null : new DateStart(dateStart);
    +214                    setDateStart(prop);
    +215                    return prop;
    +216            }
    +217    
    +218            /**
    +219             * Gets the level of sensitivity of the event data. If not specified, the
    +220             * data within the event should be considered "public".
    +221             * @return the classification level or null if not set
    +222             * @rfc 5545 p.82-3
    +223             */
    +224            public Classification getClassification() {
    +225                    return getProperty(Classification.class);
    +226            }
    +227    
    +228            /**
    +229             * Sets the level of sensitivity of the event data. If not specified, the
    +230             * data within the event should be considered "public".
    +231             * @param classification the classification level or null to remove
    +232             * @rfc 5545 p.82-3
    +233             */
    +234            public void setClassification(Classification classification) {
    +235                    setProperty(Classification.class, classification);
    +236            }
    +237    
    +238            /**
    +239             * Sets the level of sensitivity of the event data. If not specified, the
    +240             * data within the event should be considered "public".
    +241             * @param classification the classification level (e.g. "CONFIDENTIAL") or
    +242             * null to remove
    +243             * @return the property that was created
    +244             * @rfc 5545 p.82-3
    +245             */
    +246            public Classification setClassification(String classification) {
    +247                    Classification prop = (classification == null) ? null : new Classification(classification);
    +248                    setClassification(prop);
    +249                    return prop;
    +250            }
    +251    
    +252            /**
    +253             * Gets a detailed description of the event. The description should be more
    +254             * detailed than the one provided by the {@link Summary} property.
    +255             * @return the description or null if not set
    +256             * @rfc 5545 p.84-5
    +257             */
    +258            public Description getDescription() {
    +259                    return getProperty(Description.class);
    +260            }
    +261    
    +262            /**
    +263             * Sets a detailed description of the event. The description should be more
    +264             * detailed than the one provided by the {@link Summary} property.
    +265             * @param description the description or null to remove
    +266             * @rfc 5545 p.84-5
    +267             */
    +268            public void setDescription(Description description) {
    +269                    setProperty(Description.class, description);
    +270            }
    +271    
    +272            /**
    +273             * Sets a detailed description of the event. The description should be more
    +274             * detailed than the one provided by the {@link Summary} property.
    +275             * @param description the description or null to remove
    +276             * @return the property that was created
    +277             * @rfc 5545 p.84-5
    +278             */
    +279            public Description setDescription(String description) {
    +280                    Description prop = (description == null) ? null : new Description(description);
    +281                    setDescription(prop);
    +282                    return prop;
    +283            }
    +284    
    +285            /**
    +286             * Gets a set of geographical coordinates.
    +287             * @return the geographical coordinates or null if not set
    +288             * @rfc 5545 p.85-7
    +289             */
    +290            public Geo getGeo() {
    +291                    return getProperty(Geo.class);
    +292            }
    +293    
    +294            /**
    +295             * Sets a set of geographical coordinates.
    +296             * @param geo the geographical coordinates or null to remove
    +297             * @rfc 5545 p.85-7
    +298             */
    +299            public void setGeo(Geo geo) {
    +300                    setProperty(Geo.class, geo);
    +301            }
    +302    
    +303            /**
    +304             * Gets the physical location of the event.
    +305             * @return the location or null if not set
    +306             * @rfc 5545 p.87-8
    +307             */
    +308            public Location getLocation() {
    +309                    return getProperty(Location.class);
    +310            }
    +311    
    +312            /**
    +313             * Sets the physical location of the event.
    +314             * @param location the location or null to remove
    +315             * @rfc 5545 p.87-8
    +316             */
    +317            public void setLocation(Location location) {
    +318                    setProperty(Location.class, location);
    +319            }
    +320    
    +321            /**
    +322             * Sets the physical location of the event.
    +323             * @param location the location (e.g. "Room 101") or null to remove
    +324             * @return the property that was created
    +325             * @rfc 5545 p.87-8
    +326             */
    +327            public Location setLocation(String location) {
    +328                    Location prop = (location == null) ? null : new Location(location);
    +329                    setLocation(prop);
    +330                    return prop;
    +331            }
    +332    
    +333            /**
    +334             * Gets the priority of the event.
    +335             * @return the priority or null if not set
    +336             * @rfc 5545 p.89-90
    +337             */
    +338            public Priority getPriority() {
    +339                    return getProperty(Priority.class);
    +340            }
    +341    
    +342            /**
    +343             * Sets the priority of the event.
    +344             * @param priority the priority or null to remove
    +345             * @rfc 5545 p.89-90
    +346             */
    +347            public void setPriority(Priority priority) {
    +348                    setProperty(Priority.class, priority);
    +349            }
    +350    
    +351            /**
    +352             * Sets the priority of the event.
    +353             * @param priority the priority ("0" is undefined, "1" is the highest, "9"
    +354             * is the lowest) or null to remove
    +355             * @return the property that was created
    +356             * @rfc 5545 p.89-90
    +357             */
    +358            public Priority setPriority(Integer priority) {
    +359                    Priority prop = (priority == null) ? null : new Priority(priority);
    +360                    setPriority(prop);
    +361                    return prop;
    +362            }
    +363    
    +364            /**
    +365             * Gets the status of the event.
    +366             * @return the status or null if not set
    +367             * @rfc 5545 p.92-3
    +368             */
    +369            public Status getStatus() {
    +370                    return getProperty(Status.class);
    +371            }
    +372    
    +373            /**
    +374             * Sets the status of the event.
    +375             * <p>
    +376             * Valid event status codes are:
    +377             * <ul>
    +378             * <li>TENTATIVE</li>
    +379             * <li>CONFIRMED</li>
    +380             * <li>CANCELLED</li>
    +381             * </ul>
    +382             * </p>
    +383             * @param status the status or null to remove
    +384             * @rfc 5545 p.92-3
    +385             */
    +386            public void setStatus(Status status) {
    +387                    setProperty(Status.class, status);
    +388            }
    +389    
    +390            /**
    +391             * Gets the summary of the event.
    +392             * @return the summary or null if not set
    +393             * @rfc 5545 p.93-4
    +394             */
    +395            public Summary getSummary() {
    +396                    return getProperty(Summary.class);
    +397            }
    +398    
    +399            /**
    +400             * Sets the summary of the event.
    +401             * @param summary the summary or null to remove
    +402             * @rfc 5545 p.93-4
    +403             */
    +404            public void setSummary(Summary summary) {
    +405                    setProperty(Summary.class, summary);
    +406            }
    +407    
    +408            /**
    +409             * Sets the summary of the event.
    +410             * @param summary the summary or null to remove
    +411             * @return the property that was created
    +412             * @rfc 5545 p.93-4
    +413             */
    +414            public Summary setSummary(String summary) {
    +415                    Summary prop = (summary == null) ? null : new Summary(summary);
    +416                    setSummary(prop);
    +417                    return prop;
    +418            }
    +419    
    +420            /**
    +421             * Gets whether an event is visible to free/busy time searches. If the event
    +422             * does not have this property, it should be considered visible ("opaque").
    +423             * @return the transparency or null if not set
    +424             * @rfc 5545 p.101-2
    +425             */
    +426            public Transparency getTransparency() {
    +427                    return getProperty(Transparency.class);
    +428            }
    +429    
    +430            /**
    +431             * Sets whether an event is visible to free/busy time searches.
    +432             * @param transparency the transparency or null to remove
    +433             * @rfc 5545 p.101-2
    +434             */
    +435            public void setTransparency(Transparency transparency) {
    +436                    setProperty(Transparency.class, transparency);
    +437            }
    +438    
    +439            /**
    +440             * Sets whether an event is visible to free/busy time searches.
    +441             * @param transparent true to hide the event, false to make it visible it,
    +442             * or null to remove the property
    +443             * @return the property that was created
    +444             * @rfc 5545 p.101-2
    +445             */
    +446            public Transparency setTransparency(Boolean transparent) {
    +447                    Transparency prop = null;
    +448                    if (transparent != null) {
    +449                            prop = transparent ? Transparency.transparent() : Transparency.opaque();
    +450                    }
    +451                    setTransparency(prop);
    +452                    return prop;
    +453            }
    +454    
    +455            /**
    +456             * Gets the organizer of the event.
    +457             * @return the organizer or null if not set
    +458             * @rfc 5545 p.111-2
    +459             */
    +460            public Organizer getOrganizer() {
    +461                    return getProperty(Organizer.class);
    +462            }
    +463    
    +464            /**
    +465             * Sets the organizer of the event.
    +466             * @param organizer the organizer or null to remove
    +467             * @rfc 5545 p.111-2
    +468             */
    +469            public void setOrganizer(Organizer organizer) {
    +470                    setProperty(Organizer.class, organizer);
    +471            }
    +472    
    +473            /**
    +474             * Sets the organizer of the event.
    +475             * @param email the organizer's email address (e.g. "johndoe@example.com")
    +476             * or null to remove
    +477             * @return the property that was created
    +478             * @rfc 5545 p.111-2
    +479             */
    +480            public Organizer setOrganizer(String email) {
    +481                    Organizer prop = (email == null) ? null : Organizer.email(email);
    +482                    setOrganizer(prop);
    +483                    return prop;
    +484            }
    +485    
    +486            /**
    +487             * Gets the original value of the {@link DateStart} property if the event is
    +488             * recurring and has been modified. Used in conjunction with the {@link Uid}
    +489             * and {@link Sequence} properties to uniquely identify a recurrence
    +490             * instance.
    +491             * @return the recurrence ID or null if not set
    +492             * @rfc 5545 p.112-4
    +493             */
    +494            public RecurrenceId getRecurrenceId() {
    +495                    return getProperty(RecurrenceId.class);
    +496            }
    +497    
    +498            /**
    +499             * Sets the original value of the {@link DateStart} property if the event is
    +500             * recurring and has been modified. Used in conjunction with the {@link Uid}
    +501             * and {@link Sequence} properties to uniquely identify a recurrence
    +502             * instance.
    +503             * @param recurrenceId the recurrence ID or null to remove
    +504             * @rfc 5545 p.112-4
    +505             */
    +506            public void setRecurrenceId(RecurrenceId recurrenceId) {
    +507                    setProperty(RecurrenceId.class, recurrenceId);
    +508            }
    +509    
    +510            /**
    +511             * Sets the original value of the {@link DateStart} property if the event is
    +512             * recurring and has been modified. Used in conjunction with the {@link Uid}
    +513             * and {@link Sequence} properties to uniquely identify a recurrence
    +514             * instance.
    +515             * @param originalStartDate the original start date or null to remove
    +516             * @return the property that was created
    +517             * @rfc 5545 p.112-4
    +518             */
    +519            public RecurrenceId setRecurrenceId(Date originalStartDate) {
    +520                    RecurrenceId prop = (originalStartDate == null) ? null : new RecurrenceId(originalStartDate);
    +521                    setRecurrenceId(prop);
    +522                    return prop;
    +523            }
    +524    
    +525            /**
    +526             * Gets a URL to a resource that contains additional information about the
    +527             * event.
    +528             * @return the URL or null if not set
    +529             * @rfc 5545 p.116-7
    +530             */
    +531            public Url getUrl() {
    +532                    return getProperty(Url.class);
    +533            }
    +534    
    +535            /**
    +536             * Sets a URL to a resource that contains additional information about the
    +537             * event.
    +538             * @param url the URL or null to remove
    +539             * @rfc 5545 p.116-7
    +540             */
    +541            public void setUrl(Url url) {
    +542                    setProperty(Url.class, url);
    +543            }
    +544    
    +545            /**
    +546             * Sets a URL to a resource that contains additional information about the
    +547             * event.
    +548             * @param url the URL (e.g. "http://example.com/resource.ics") or null to
    +549             * remove
    +550             * @return the property that was created
    +551             * @rfc 5545 p.116-7
    +552             */
    +553            public Url setUrl(String url) {
    +554                    Url prop = (url == null) ? null : new Url(url);
    +555                    setUrl(prop);
    +556                    return prop;
    +557            }
    +558    
    +559            /**
    +560             * Gets how often the event repeats.
    +561             * @return the recurrence rule or null if not set
    +562             * @rfc 5545 p.122-32
    +563             */
    +564            public RecurrenceRule getRecurrenceRule() {
    +565                    return getProperty(RecurrenceRule.class);
    +566            }
    +567    
    +568            /**
    +569             * Sets how often the event repeats.
    +570             * @param recur the recurrence rule or null to remove
    +571             * @return the property that was created
    +572             * @rfc 5545 p.122-32
    +573             */
    +574            public RecurrenceRule setRecurrenceRule(Recurrence recur) {
    +575                    RecurrenceRule prop = (recur == null) ? null : new RecurrenceRule(recur);
    +576                    setRecurrenceRule(prop);
    +577                    return prop;
    +578            }
    +579    
    +580            /**
    +581             * Sets how often the event repeats.
    +582             * @param recurrenceRule the recurrence rule or null to remove
    +583             * @rfc 5545 p.122-32
    +584             */
    +585            public void setRecurrenceRule(RecurrenceRule recurrenceRule) {
    +586                    setProperty(RecurrenceRule.class, recurrenceRule);
    +587            }
    +588    
    +589            /**
    +590             * Gets the date that the event ends.
    +591             * @return the end date or null if not set
    +592             * @rfc 5545 p.95-6
    +593             */
    +594            public DateEnd getDateEnd() {
    +595                    return getProperty(DateEnd.class);
    +596            }
    +597    
    +598            /**
    +599             * Sets the date that the event ends. This must NOT be set if a
    +600             * {@link DurationProperty} is defined.
    +601             * @param dateEnd the end date or null to remove
    +602             * @rfc 5545 p.95-6
    +603             */
    +604            public void setDateEnd(DateEnd dateEnd) {
    +605                    setProperty(DateEnd.class, dateEnd);
    +606            }
    +607    
    +608            /**
    +609             * Sets the date that the event ends. This must NOT be set if a
    +610             * {@link DurationProperty} is defined.
    +611             * @param dateEnd the end date or null to remove
    +612             * @return the property that was created
    +613             * @rfc 5545 p.95-6
    +614             */
    +615            public DateEnd setDateEnd(Date dateEnd) {
    +616                    DateEnd prop = (dateEnd == null) ? null : new DateEnd(dateEnd);
    +617                    setDateEnd(prop);
    +618                    return prop;
    +619            }
    +620    
    +621            /**
    +622             * Gets the duration of the event.
    +623             * @return the duration or null if not set
    +624             * @rfc 5545 p.99
    +625             */
    +626            public DurationProperty getDuration() {
    +627                    return getProperty(DurationProperty.class);
    +628            }
    +629    
    +630            /**
    +631             * Sets the duration of the event. This must NOT be set if a {@link DateEnd}
    +632             * is defined.
    +633             * @param duration the duration or null to remove
    +634             * @rfc 5545 p.99
    +635             */
    +636            public void setDuration(DurationProperty duration) {
    +637                    setProperty(DurationProperty.class, duration);
    +638            }
    +639    
    +640            /**
    +641             * Sets the duration of the event. This must NOT be set if a {@link DateEnd}
    +642             * is defined.
    +643             * @param duration the duration or null to remove
    +644             * @return the property that was created
    +645             * @rfc 5545 p.99
    +646             */
    +647            public DurationProperty setDuration(Duration duration) {
    +648                    DurationProperty prop = (duration == null) ? null : new DurationProperty(duration);
    +649                    setDuration(prop);
    +650                    return prop;
    +651            }
    +652    
    +653            /**
    +654             * Gets the date-time that the event was initially created.
    +655             * @return the creation date-time or null if not set
    +656             * @rfc 5545 p.136
    +657             */
    +658            public Created getCreated() {
    +659                    return getProperty(Created.class);
    +660            }
    +661    
    +662            /**
    +663             * Sets the date-time that the event was initially created.
    +664             * @param created the creation date-time or null to remove
    +665             * @rfc 5545 p.136
    +666             */
    +667            public void setCreated(Created created) {
    +668                    setProperty(Created.class, created);
    +669            }
    +670    
    +671            /**
    +672             * Sets the date-time that the event was initially created.
    +673             * @param created the creation date-time or null to remove
    +674             * @return the property that was created
    +675             * @rfc 5545 p.136
    +676             */
    +677            public Created setCreated(Date created) {
    +678                    Created prop = (created == null) ? null : new Created(created);
    +679                    setCreated(prop);
    +680                    return prop;
    +681            }
    +682    
    +683            /**
    +684             * Gets the date-time that the event was last changed.
    +685             * @return the last modified date or null if not set
    +686             * @rfc 5545 p.138
    +687             */
    +688            public LastModified getLastModified() {
    +689                    return getProperty(LastModified.class);
    +690            }
    +691    
    +692            /**
    +693             * Sets the date-time that event was last changed.
    +694             * @param lastModified the last modified date or null to remove
    +695             * @rfc 5545 p.138
    +696             */
    +697            public void setLastModified(LastModified lastModified) {
    +698                    setProperty(LastModified.class, lastModified);
    +699            }
    +700    
    +701            /**
    +702             * Sets the date-time that the event was last changed.
    +703             * @param lastModified the last modified date or null to remove
    +704             * @return the property that was created
    +705             * @rfc 5545 p.138
    +706             */
    +707            public LastModified setLastModified(Date lastModified) {
    +708                    LastModified prop = (lastModified == null) ? null : new LastModified(lastModified);
    +709                    setLastModified(prop);
    +710                    return prop;
    +711            }
    +712    
    +713            /**
    +714             * Gets the revision number of the event. The organizer can increment this
    +715             * number every time he or she makes a significant change.
    +716             * @return the sequence number
    +717             * @rfc 5545 p.138-9
    +718             */
    +719            public Sequence getSequence() {
    +720                    return getProperty(Sequence.class);
    +721            }
    +722    
    +723            /**
    +724             * Sets the revision number of the event. The organizer can increment this
    +725             * number every time he or she makes a significant change.
    +726             * @param sequence the sequence number
    +727             * @rfc 5545 p.138-9
    +728             */
    +729            public void setSequence(Sequence sequence) {
    +730                    setProperty(Sequence.class, sequence);
    +731            }
    +732    
    +733            /**
    +734             * Sets the revision number of the event. The organizer can increment this
    +735             * number every time he or she makes a significant change.
    +736             * @param sequence the sequence number
    +737             * @return the property that was created
    +738             * @rfc 5545 p.138-9
    +739             */
    +740            public Sequence setSequence(Integer sequence) {
    +741                    Sequence prop = (sequence == null) ? null : new Sequence(sequence);
    +742                    setSequence(prop);
    +743                    return prop;
    +744            }
    +745    
    +746            /**
    +747             * Increments the revision number of the event. The organizer can increment
    +748             * this number every time he or she makes a significant change.
    +749             * @rfc 5545 p.138-9
    +750             */
    +751            public void incrementSequence() {
    +752                    Sequence sequence = getSequence();
    +753                    if (sequence == null) {
    +754                            setSequence(1);
    +755                    } else {
    +756                            sequence.increment();
    +757                    }
    +758            }
    +759    
    +760            /**
    +761             * Gets any attachments that are associated with the event.
    +762             * @return the attachments
    +763             * @rfc 5545 p.80-1
    +764             */
    +765            public List<Attachment> getAttachments() {
    +766                    return getProperties(Attachment.class);
    +767            }
    +768    
    +769            /**
    +770             * Adds an attachment to the event.
    +771             * @param attachment the attachment to add
    +772             * @rfc 5545 p.80-1
    +773             */
    +774            public void addAttachment(Attachment attachment) {
    +775                    addProperty(attachment);
    +776            }
    +777    
    +778            /**
    +779             * Gets the people who are attending the event.
    +780             * @return the attendees
    +781             * @rfc 5545 p.107-9
    +782             */
    +783            public List<Attendee> getAttendees() {
    +784                    return getProperties(Attendee.class);
    +785            }
    +786    
    +787            /**
    +788             * Adds a person who is attending the event.
    +789             * @param attendee the attendee
    +790             * @rfc 5545 p.107-9
    +791             */
    +792            public void addAttendee(Attendee attendee) {
    +793                    addProperty(attendee);
    +794            }
    +795    
    +796            /**
    +797             * Adds a person who is attending the event.
    +798             * @param email the attendee's email address
    +799             * @return the property that was created
    +800             * @rfc 5545 p.107-9
    +801             */
    +802            public Attendee addAttendee(String email) {
    +803                    Attendee prop = Attendee.email(email);
    +804                    addAttendee(prop);
    +805                    return prop;
    +806            }
    +807    
    +808            /**
    +809             * Gets a list of "tags" or "keywords" that describe the event.
    +810             * @return the categories
    +811             * @rfc 5545 p.81-2
    +812             */
    +813            public List<Categories> getCategories() {
    +814                    return getProperties(Categories.class);
    +815            }
    +816    
    +817            /**
    +818             * Adds a list of "tags" or "keywords" that describe the event. Note that a
    +819             * single property can hold multiple keywords.
    +820             * @param categories the categories to add
    +821             * @rfc 5545 p.81-2
    +822             */
    +823            public void addCategories(Categories categories) {
    +824                    addProperty(categories);
    +825            }
    +826    
    +827            /**
    +828             * Adds a list of "tags" or "keywords" that describe the event.
    +829             * @param categories the categories to add
    +830             * @return the property that was created
    +831             * @rfc 5545 p.81-2
    +832             */
    +833            public Categories addCategories(String... categories) {
    +834                    Categories prop = new Categories(categories);
    +835                    addCategories(prop);
    +836                    return prop;
    +837            }
    +838    
    +839            /**
    +840             * Adds a list of "tags" or "keywords" that describe the event.
    +841             * @param categories the categories to add
    +842             * @return the property that was created
    +843             * @rfc 5545 p.81-2
    +844             */
    +845            public Categories addCategories(List<String> categories) {
    +846                    Categories prop = new Categories(categories);
    +847                    addCategories(prop);
    +848                    return prop;
    +849            }
    +850    
    +851            /**
    +852             * Gets the comments attached to the event.
    +853             * @return the comments
    +854             * @rfc 5545 p.83-4
    +855             */
    +856            public List<Comment> getComments() {
    +857                    return getProperties(Comment.class);
    +858            }
    +859    
    +860            /**
    +861             * Adds a comment to the event.
    +862             * @param comment the comment to add
    +863             * @rfc 5545 p.83-4
    +864             */
    +865            public void addComment(Comment comment) {
    +866                    addProperty(comment);
    +867            }
    +868    
    +869            /**
    +870             * Adds a comment to the event.
    +871             * @param comment the comment to add
    +872             * @return the property that was created
    +873             * @rfc 5545 p.83-4
    +874             */
    +875            public Comment addComment(String comment) {
    +876                    Comment prop = new Comment(comment);
    +877                    addComment(prop);
    +878                    return prop;
    +879            }
    +880    
    +881            /**
    +882             * Gets the contacts associated with the event.
    +883             * @return the contacts
    +884             * @rfc 5545 p.109-11
    +885             */
    +886            public List<Contact> getContacts() {
    +887                    return getProperties(Contact.class);
    +888            }
    +889    
    +890            /**
    +891             * Adds a contact to the event.
    +892             * @param contact the contact
    +893             * @rfc 5545 p.109-11
    +894             */
    +895            public void addContact(Contact contact) {
    +896                    addProperty(contact);
    +897            }
    +898    
    +899            /**
    +900             * Adds a contact to the event.
    +901             * @param contact the contact (e.g. "ACME Co - (123) 555-1234")
    +902             * @return the property that was created
    +903             * @rfc 5545 p.109-11
    +904             */
    +905            public Contact addContact(String contact) {
    +906                    Contact prop = new Contact(contact);
    +907                    addContact(prop);
    +908                    return prop;
    +909            }
    +910    
    +911            /**
    +912             * Gets the list of exceptions to the recurrence rule defined in the event
    +913             * (if one is defined).
    +914             * @return the list of exceptions
    +915             * @rfc 5545 p.118-20
    +916             */
    +917            public List<ExceptionDates> getExceptionDates() {
    +918                    return getProperties(ExceptionDates.class);
    +919            }
    +920    
    +921            /**
    +922             * Adds a list of exceptions to the recurrence rule defined in the event (if
    +923             * one is defined). Note that this property can contain multiple dates.
    +924             * @param exceptionDates the list of exceptions
    +925             * @rfc 5545 p.118-20
    +926             */
    +927            public void addExceptionDates(ExceptionDates exceptionDates) {
    +928                    addProperty(exceptionDates);
    +929            }
    +930    
    +931            /**
    +932             * Gets the response to a scheduling request.
    +933             * @return the response
    +934             * @rfc 5545 p.141-3
    +935             */
    +936            public RequestStatus getRequestStatus() {
    +937                    return getProperty(RequestStatus.class);
    +938            }
    +939    
    +940            /**
    +941             * Sets the response to a scheduling request.
    +942             * @param requestStatus the response
    +943             * @rfc 5545 p.141-3
    +944             */
    +945            public void setRequestStatus(RequestStatus requestStatus) {
    +946                    setProperty(RequestStatus.class, requestStatus);
    +947            }
    +948    
    +949            /**
    +950             * Gets the components that the event is related to.
    +951             * @return the relationships
    +952             * @rfc 5545 p.115-6
    +953             */
    +954            public List<RelatedTo> getRelatedTo() {
    +955                    return getProperties(RelatedTo.class);
    +956            }
    +957    
    +958            /**
    +959             * Adds a component that the event is related to.
    +960             * @param relatedTo the relationship
    +961             * @rfc 5545 p.115-6
    +962             */
    +963            public void addRelatedTo(RelatedTo relatedTo) {
    +964                    //TODO create a method that accepts a component and make the RelatedTo property invisible to the user
    +965                    //@formatter:off
    +966                    /*
    +967                     * addRelation(RelationshipType relType, ICalComponent component){
    +968                     *   RelatedTo prop = new RelatedTo(component.getUid().getValue());
    +969                     *   prop.setRelationshipType(relType);
    +970                     *   addProperty(prop);
    +971                     * }
    +972                     */
    +973                    //@formatter:on
    +974                    addProperty(relatedTo);
    +975            }
    +976    
    +977            /**
    +978             * Adds a component that the event is related to.
    +979             * @param uid the UID of the other component
    +980             * @return the property that was created
    +981             * @rfc 5545 p.115-6
    +982             */
    +983            public RelatedTo addRelatedTo(String uid) {
    +984                    RelatedTo prop = new RelatedTo(uid);
    +985                    addRelatedTo(prop);
    +986                    return prop;
    +987            }
    +988    
    +989            /**
    +990             * Gets the resources that are needed for the event.
    +991             * @return the resources
    +992             * @rfc 5545 p.91
    +993             */
    +994            public List<Resources> getResources() {
    +995                    return getProperties(Resources.class);
    +996            }
    +997    
    +998            /**
    +999             * Adds a list of resources that are needed for the event. Note that a
    +1000             * single property can hold multiple resources.
    +1001             * @param resources the resources to add
    +1002             * @rfc 5545 p.91
    +1003             */
    +1004            public void addResources(Resources resources) {
    +1005                    addProperty(resources);
    +1006            }
    +1007    
    +1008            /**
    +1009             * Adds a list of resources that are needed for the event.
    +1010             * @param resources the resources to add (e.g. "easel", "projector")
    +1011             * @return the property that was created
    +1012             * @rfc 5545 p.91
    +1013             */
    +1014            public Resources addResources(String... resources) {
    +1015                    Resources prop = new Resources(resources);
    +1016                    addResources(prop);
    +1017                    return prop;
    +1018            }
    +1019    
    +1020            /**
    +1021             * Adds a list of resources that are needed for the event.
    +1022             * @param resources the resources to add (e.g. "easel", "projector")
    +1023             * @return the property that was created
    +1024             * @rfc 5545 p.91
    +1025             */
    +1026            public Resources addResources(List<String> resources) {
    +1027                    Resources prop = new Resources(resources);
    +1028                    addResources(prop);
    +1029                    return prop;
    +1030            }
    +1031    
    +1032            /**
    +1033             * Gets the list of dates/periods that help define the recurrence rule of
    +1034             * this event (if one is defined).
    +1035             * @return the recurrence dates
    +1036             * @rfc 5545 p.120-2
    +1037             */
    +1038            public List<RecurrenceDates> getRecurrenceDates() {
    +1039                    return getProperties(RecurrenceDates.class);
    +1040            }
    +1041    
    +1042            /**
    +1043             * Adds a list of dates/periods that help define the recurrence rule of this
    +1044             * event (if one is defined).
    +1045             * @param recurrenceDates the recurrence dates
    +1046             * @rfc 5545 p.120-2
    +1047             */
    +1048            public void addRecurrenceDates(RecurrenceDates recurrenceDates) {
    +1049                    addProperty(recurrenceDates);
    +1050            }
    +1051    
    +1052            /**
    +1053             * Gets the alarms that are assigned to this event.
    +1054             * @return the alarms
    +1055             * @rfc 5545 p.71-6
    +1056             */
    +1057            public List<VAlarm> getAlarms() {
    +1058                    return getComponents(VAlarm.class);
    +1059            }
    +1060    
    +1061            /**
    +1062             * Adds an alarm to this event.
    +1063             * @param alarm the alarm
    +1064             * @rfc 5545 p.71-6
    +1065             */
    +1066            public void addAlarm(VAlarm alarm) {
    +1067                    addComponent(alarm);
    +1068            }
    +1069    
    +1070            /**
    +1071             * <p>
    +1072             * Gets the exceptions for the {@link RecurrenceRule} property.
    +1073             * </p>
    +1074             * <p>
    +1075             * Note that this property has been removed from the latest version of the
    +1076             * iCal specification. Its use should be avoided.
    +1077             * </p>
    +1078             * @return the exception rules
    +1079             * @rfc 2445 p.114-15
    +1080             */
    +1081            public List<ExceptionRule> getExceptionRules() {
    +1082                    return getProperties(ExceptionRule.class);
    +1083            }
    +1084    
    +1085            /**
    +1086             * <p>
    +1087             * Adds an exception for the {@link RecurrenceRule} property.
    +1088             * </p>
    +1089             * <p>
    +1090             * Note that this property has been removed from the latest version of the
    +1091             * iCal specification. Its use should be avoided.
    +1092             * </p>
    +1093             * @param recur the exception rule to add
    +1094             * @return the property that was created
    +1095             * @rfc 2445 p.114-15
    +1096             */
    +1097            public ExceptionRule addExceptionRule(Recurrence recur) {
    +1098                    ExceptionRule prop = (recur == null) ? null : new ExceptionRule(recur);
    +1099                    addExceptionRule(prop);
    +1100                    return prop;
    +1101            }
    +1102    
    +1103            /**
    +1104             * <p>
    +1105             * Adds an exception for the {@link RecurrenceRule} property.
    +1106             * </p>
    +1107             * <p>
    +1108             * Note that this property has been removed from the latest version of the
    +1109             * iCal specification. Its use should be avoided.
    +1110             * </p>
    +1111             * @param exceptionRule the exception rule to add
    +1112             * @rfc 2445 p.114-15
    +1113             */
    +1114            public void addExceptionRule(ExceptionRule exceptionRule) {
    +1115                    addProperty(exceptionRule);
    +1116            }
    +1117    
    +1118            @SuppressWarnings("unchecked")
    +1119            @Override
    +1120            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +1121                    checkRequiredCardinality(warnings, Uid.class, DateTimeStamp.class);
    +1122                    checkOptionalCardinality(warnings, Classification.class, Created.class, Description.class, Geo.class, LastModified.class, Location.class, Organizer.class, Priority.class, Priority.class, Status.class, Summary.class, Transparency.class, Url.class, RecurrenceId.class);
    +1123    
    +1124                    Status status = getStatus();
    +1125                    if (status != null && (status.isNeedsAction() || status.isCompleted() || status.isInProgress() || status.isDraft() || status.isFinal())) {
    +1126                            warnings.add("Invalid status value of \"" + status.getValue() + "\".  Valid status values for events are \"tentative\", \"confirmed\", and \"cancelled\".");
    +1127                    }
    +1128    
    +1129                    DateStart dateStart = getDateStart();
    +1130                    DateEnd dateEnd = getDateEnd();
    +1131    
    +1132                    ICalComponent ical = components.get(0);
    +1133                    if (dateStart == null && ical.getProperty(Method.class) == null) {
    +1134                            warnings.add("A " + DateStart.class.getSimpleName() + " property is required if no " + Method.class.getSimpleName() + " property is set at the top level of the iCalendar object.");
    +1135                    }
    +1136    
    +1137                    if (dateEnd != null && dateStart == null) {
    +1138                            warnings.add("A " + DateStart.class.getSimpleName() + " property must be defined if a " + DateEnd.class.getSimpleName() + " property is defined.");
    +1139                    }
    +1140    
    +1141                    if (dateStart != null && dateEnd != null) {
    +1142                            Date start = dateStart.getValue();
    +1143                            Date end = dateEnd.getValue();
    +1144                            if (start != null && end != null && start.compareTo(end) > 0) {
    +1145                                    warnings.add(DateStart.class.getSimpleName() + " must come before " + DateEnd.class.getSimpleName() + ".");
    +1146                            }
    +1147    
    +1148                            if (dateStart.hasTime() != dateEnd.hasTime()) {
    +1149                                    warnings.add("Both " + DateStart.class.getSimpleName() + " and " + DateEnd.class.getSimpleName() + " must have the same data type (they must either both be dates or both be date-times).");
    +1150                            }
    +1151                    }
    +1152    
    +1153                    if (dateEnd != null && getDuration() != null) {
    +1154                            warnings.add("A DateEnd and a Duration cannot both be defined in the same event.");
    +1155                    }
    +1156    
    +1157                    RecurrenceId recurrenceId = getRecurrenceId();
    +1158                    if (recurrenceId != null && dateStart != null && dateStart.hasTime() != recurrenceId.hasTime()) {
    +1159                            warnings.add("Both " + DateStart.class.getSimpleName() + " and " + RecurrenceId.class.getSimpleName() + " must have the same data type (they must either both be dates or both be date-times).");
    +1160                    }
    +1161    
    +1162                    //RFC 5545 p. 167
    +1163                    RecurrenceRule rrule = getRecurrenceRule();
    +1164                    if (dateStart != null && rrule != null) {
    +1165                            Date start = dateStart.getValue();
    +1166                            Recurrence recur = rrule.getValue();
    +1167                            if (start != null && recur != null) {
    +1168                                    if (!dateStart.hasTime() && (!recur.getByHour().isEmpty() || !recur.getByMinute().isEmpty() || !recur.getBySecond().isEmpty())) {
    +1169                                            warnings.add("The BYHOUR, BYMINUTE, and BYSECOND rule parts cannot be specified in the " + RecurrenceRule.class.getSimpleName() + " property when the " + DateStart.class.getSimpleName() + " property contains a date value (as opposed to a date-time value).");
    +1170                                    }
    +1171                            }
    +1172                    }
    +1173    
    +1174                    //RFC 5545 p. 167
    +1175                    if (getProperties(RecurrenceRule.class).size() > 1) {
    +1176                            warnings.add("There should be only one instance of the " + RecurrenceRule.class.getSimpleName() + " property.");
    +1177                    }
    +1178    
    +1179                    //TODO check for properties which shouldn't be added to VEVENTs
    +1180            }
    +1181    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VFreeBusy.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VFreeBusy.html new file mode 100644 index 000000000..175ea703d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VFreeBusy.html @@ -0,0 +1,570 @@ + + +
    +001    package biweekly.component;
    +002    
    +003    import java.util.Date;
    +004    import java.util.List;
    +005    
    +006    import biweekly.parameter.FreeBusyType;
    +007    import biweekly.property.Attendee;
    +008    import biweekly.property.Comment;
    +009    import biweekly.property.Contact;
    +010    import biweekly.property.DateEnd;
    +011    import biweekly.property.DateStart;
    +012    import biweekly.property.DateTimeStamp;
    +013    import biweekly.property.FreeBusy;
    +014    import biweekly.property.LastModified;
    +015    import biweekly.property.Method;
    +016    import biweekly.property.Organizer;
    +017    import biweekly.property.RequestStatus;
    +018    import biweekly.property.Uid;
    +019    import biweekly.property.Url;
    +020    import biweekly.util.Duration;
    +021    
    +022    /*
    +023     Copyright (c) 2013, Michael Angstadt
    +024     All rights reserved.
    +025    
    +026     Redistribution and use in source and binary forms, with or without
    +027     modification, are permitted provided that the following conditions are met: 
    +028    
    +029     1. Redistributions of source code must retain the above copyright notice, this
    +030     list of conditions and the following disclaimer. 
    +031     2. Redistributions in binary form must reproduce the above copyright notice,
    +032     this list of conditions and the following disclaimer in the documentation
    +033     and/or other materials provided with the distribution. 
    +034    
    +035     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +036     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +037     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +038     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +039     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +040     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +041     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +042     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +043     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +044     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +045     */
    +046    
    +047    /**
    +048     * <p>
    +049     * Defines a collection of time ranges that describe when the person is
    +050     * available or unavailable.
    +051     * </p>
    +052     * <p>
    +053     * <b>Examples:</b>
    +054     * 
    +055     * <pre class="brush:java">
    +056     * VFreeBusy freebusy = new VFreeBusy();
    +057     * 
    +058     * Date start = ...
    +059     * Date end = ...
    +060     * freebusy.addFreeBusy(FreeBusyType.FREE, start, end);
    +061     * 
    +062     * start = ...
    +063     * Duration duration = Duration.builder().hours(2).build();
    +064     * freebusy.addFreeBusy(FreeBusyType.BUSY, start, duration);
    +065     * </pre>
    +066     * 
    +067     * </p>
    +068     * @author Michael Angstadt
    +069     * @rfc 5545 p.59-62
    +070     */
    +071    public class VFreeBusy extends ICalComponent {
    +072            /**
    +073             * <p>
    +074             * Creates a new free/busy component.
    +075             * </p>
    +076             * <p>
    +077             * The following properties are auto-generated on object creation. These
    +078             * properties <b>must</b> be present in order for the free/busy component to
    +079             * be valid:
    +080             * <ul>
    +081             * <li>{@link Uid} - Set to a UUID.</li>
    +082             * <li>{@link DateTimeStamp} - Set to the current date-time.</li>
    +083             * </ul>
    +084             * </p>
    +085             */
    +086            public VFreeBusy() {
    +087                    setUid(Uid.random());
    +088                    setDateTimeStamp(new Date());
    +089            }
    +090    
    +091            /**
    +092             * Gets the unique identifier for this free/busy entry. This component
    +093             * object comes populated with a UID on creation. This is a <b>required</b>
    +094             * property.
    +095             * @return the UID or null if not set
    +096             * @rfc 5545 p.117-8
    +097             */
    +098            public Uid getUid() {
    +099                    return getProperty(Uid.class);
    +100            }
    +101    
    +102            /**
    +103             * Sets the unique identifier for this free/busy entry. This component
    +104             * object comes populated with a UID on creation. This is a <b>required</b>
    +105             * property.
    +106             * @param uid the UID or null to remove
    +107             * @rfc 5545 p.117-8
    +108             */
    +109            public void setUid(Uid uid) {
    +110                    setProperty(Uid.class, uid);
    +111            }
    +112    
    +113            /**
    +114             * Sets the unique identifier for this free/busy entry. This component
    +115             * object comes populated with a UID on creation. This is a <b>required</b>
    +116             * property.
    +117             * @param uid the UID or null to remove
    +118             * @return the property that was created
    +119             * @rfc 5545 p.117-8
    +120             */
    +121            public Uid setUid(String uid) {
    +122                    Uid prop = (uid == null) ? null : new Uid(uid);
    +123                    setUid(prop);
    +124                    return prop;
    +125            }
    +126    
    +127            /**
    +128             * Gets either (a) the creation date of the iCalendar object (if the
    +129             * {@link Method} property is defined) or (b) the date that the free/busy
    +130             * entry was last modified (the {@link LastModified} property also holds
    +131             * this information). This free/busy object comes populated with a
    +132             * {@link DateTimeStamp} property that is set to the current time. This is a
    +133             * <b>required</b> property.
    +134             * @return the date time stamp or null if not set
    +135             * @rfc 5545 p.137-8
    +136             */
    +137            public DateTimeStamp getDateTimeStamp() {
    +138                    return getProperty(DateTimeStamp.class);
    +139            }
    +140    
    +141            /**
    +142             * Sets either (a) the creation date of the iCalendar object (if the
    +143             * {@link Method} property is defined) or (b) the date that the free/busy
    +144             * entry was last modified (the {@link LastModified} property also holds
    +145             * this information). This free/busy object comes populated with a
    +146             * {@link DateTimeStamp} property that is set to the current time. This is a
    +147             * <b>required</b> property.
    +148             * @param dateTimeStamp the date time stamp or null to remove
    +149             * @rfc 5545 p.137-8
    +150             */
    +151            public void setDateTimeStamp(DateTimeStamp dateTimeStamp) {
    +152                    setProperty(DateTimeStamp.class, dateTimeStamp);
    +153            }
    +154    
    +155            /**
    +156             * Sets either (a) the creation date of the iCalendar object (if the
    +157             * {@link Method} property is defined) or (b) the date that the free/busy
    +158             * entry was last modified (the {@link LastModified} property also holds
    +159             * this information). This free/busy object comes populated with a
    +160             * {@link DateTimeStamp} property that is set to the current time. This is a
    +161             * <b>required</b> property.
    +162             * @param dateTimeStamp the date time stamp or null to remove
    +163             * @return the property that was created
    +164             * @rfc 5545 p.137-8
    +165             */
    +166            public DateTimeStamp setDateTimeStamp(Date dateTimeStamp) {
    +167                    DateTimeStamp prop = (dateTimeStamp == null) ? null : new DateTimeStamp(dateTimeStamp);
    +168                    setDateTimeStamp(prop);
    +169                    return prop;
    +170            }
    +171    
    +172            /**
    +173             * Gets the contact associated with the free/busy entry.
    +174             * @return the contact or null if not set
    +175             * @rfc 5545 p.109-11
    +176             */
    +177            public Contact getContact() {
    +178                    return getProperty(Contact.class);
    +179            }
    +180    
    +181            /**
    +182             * Sets the contact for the free/busy entry.
    +183             * @param contact the contact or null to remove
    +184             * @rfc 5545 p.109-11
    +185             */
    +186            public void setContact(Contact contact) {
    +187                    setProperty(Contact.class, contact);
    +188            }
    +189    
    +190            /**
    +191             * Sets the contact for the free/busy entry.
    +192             * @param contact the contact (e.g. "ACME Co - (123) 555-1234")
    +193             * @return the property that was created
    +194             * @rfc 5545 p.109-11
    +195             */
    +196            public Contact addContact(String contact) {
    +197                    Contact prop = new Contact(contact);
    +198                    setContact(prop);
    +199                    return prop;
    +200            }
    +201    
    +202            /**
    +203             * Gets the date that the free/busy entry starts.
    +204             * @return the start date or null if not set
    +205             * @rfc 5545 p.97-8
    +206             */
    +207            public DateStart getDateStart() {
    +208                    return getProperty(DateStart.class);
    +209            }
    +210    
    +211            /**
    +212             * Sets the date that the free/busy entry starts.
    +213             * @param dateStart the start date or null to remove
    +214             * @rfc 5545 p.97-8
    +215             */
    +216            public void setDateStart(DateStart dateStart) {
    +217                    setProperty(DateStart.class, dateStart);
    +218            }
    +219    
    +220            /**
    +221             * Sets the date that the free/busy entry starts.
    +222             * @param dateStart the start date or null to remove
    +223             * @return the property that was created
    +224             * @rfc 5545 p.97-8
    +225             */
    +226            public DateStart setDateStart(Date dateStart) {
    +227                    DateStart prop = (dateStart == null) ? null : new DateStart(dateStart);
    +228                    setDateStart(prop);
    +229                    return prop;
    +230            }
    +231    
    +232            /**
    +233             * Gets the date that the free/busy entry ends.
    +234             * @return the end date or null if not set
    +235             * @rfc 5545 p.95-6
    +236             */
    +237            public DateEnd getDateEnd() {
    +238                    return getProperty(DateEnd.class);
    +239            }
    +240    
    +241            /**
    +242             * Sets the date that the free/busy entry ends.
    +243             * @param dateEnd the end date or null to remove
    +244             * @rfc 5545 p.95-6
    +245             */
    +246            public void setDateEnd(DateEnd dateEnd) {
    +247                    setProperty(DateEnd.class, dateEnd);
    +248            }
    +249    
    +250            /**
    +251             * Sets the date that the free/busy entry ends.
    +252             * @param dateEnd the end date or null to remove
    +253             * @return the property that was created
    +254             * @rfc 5545 p.95-6
    +255             */
    +256            public DateEnd setDateEnd(Date dateEnd) {
    +257                    DateEnd prop = (dateEnd == null) ? null : new DateEnd(dateEnd);
    +258                    setDateEnd(prop);
    +259                    return prop;
    +260            }
    +261    
    +262            /**
    +263             * Gets the person requesting the free/busy time.
    +264             * @return the person requesting the free/busy time or null if not set
    +265             * @rfc 5545 p.111-2
    +266             */
    +267            public Organizer getOrganizer() {
    +268                    return getProperty(Organizer.class);
    +269            }
    +270    
    +271            /**
    +272             * Sets the person requesting the free/busy time.
    +273             * @param organizer the person requesting the free/busy time or null to
    +274             * remove
    +275             * @rfc 5545 p.111-2
    +276             */
    +277            public void setOrganizer(Organizer organizer) {
    +278                    setProperty(Organizer.class, organizer);
    +279            }
    +280    
    +281            /**
    +282             * Sets the person requesting the free/busy time.
    +283             * @param email the email address of the person requesting the free/busy
    +284             * time (e.g. "johndoe@example.com") or null to remove
    +285             * @return the property that was created
    +286             * @rfc 5545 p.111-2
    +287             */
    +288            public Organizer setOrganizer(String email) {
    +289                    Organizer prop = (email == null) ? null : Organizer.email(email);
    +290                    setOrganizer(prop);
    +291                    return prop;
    +292            }
    +293    
    +294            /**
    +295             * Gets a URL to a resource that contains additional information about the
    +296             * free/busy entry.
    +297             * @return the URL or null if not set
    +298             * @rfc 5545 p.116-7
    +299             */
    +300            public Url getUrl() {
    +301                    return getProperty(Url.class);
    +302            }
    +303    
    +304            /**
    +305             * Sets a URL to a resource that contains additional information about the
    +306             * free/busy entry.
    +307             * @param url the URL or null to remove
    +308             * @rfc 5545 p.116-7
    +309             */
    +310            public void setUrl(Url url) {
    +311                    setProperty(Url.class, url);
    +312            }
    +313    
    +314            /**
    +315             * Sets a URL to a resource that contains additional information about the
    +316             * free/busy entry.
    +317             * @param url the URL (e.g. "http://example.com/resource.ics") or null to
    +318             * remove
    +319             * @return the property that was created
    +320             * @rfc 5545 p.116-7
    +321             */
    +322            public Url setUrl(String url) {
    +323                    Url prop = (url == null) ? null : new Url(url);
    +324                    setUrl(prop);
    +325                    return prop;
    +326            }
    +327    
    +328            //
    +329            //zero or more
    +330            //      private List<Attendee> attendees;
    +331            //      private List<Comment> comments;
    +332            //      private List<FreeBusy> freeBusy;
    +333            //      private List<Rstatus> rstatus;
    +334    
    +335            /**
    +336             * Gets the people who are involved in the free/busy entry.
    +337             * @return the attendees
    +338             * @rfc 5545 p.107-9
    +339             */
    +340            public List<Attendee> getAttendees() {
    +341                    return getProperties(Attendee.class);
    +342            }
    +343    
    +344            /**
    +345             * Adds a person who is involved in the free/busy entry.
    +346             * @param attendee the attendee
    +347             * @rfc 5545 p.107-9
    +348             */
    +349            public void addAttendee(Attendee attendee) {
    +350                    addProperty(attendee);
    +351            }
    +352    
    +353            /**
    +354             * Gets the comments attached to the free/busy entry.
    +355             * @return the comments
    +356             * @rfc 5545 p.83-4
    +357             */
    +358            public List<Comment> getComments() {
    +359                    return getProperties(Comment.class);
    +360            }
    +361    
    +362            /**
    +363             * Adds a comment to the free/busy entry.
    +364             * @param comment the comment to add
    +365             * @rfc 5545 p.83-4
    +366             */
    +367            public void addComment(Comment comment) {
    +368                    addProperty(comment);
    +369            }
    +370    
    +371            /**
    +372             * Adds a comment to the free/busy entry.
    +373             * @param comment the comment to add
    +374             * @return the property that was created
    +375             * @rfc 5545 p.83-4
    +376             */
    +377            public Comment addComment(String comment) {
    +378                    Comment prop = new Comment(comment);
    +379                    addComment(prop);
    +380                    return prop;
    +381            }
    +382    
    +383            /**
    +384             * Gets the person's availabilities over certain time periods (for example,
    +385             * "free" between 1pm-3pm, but "busy" between 3pm-4pm).
    +386             * @return the availabilities
    +387             * @rfc 5545 p.100-1
    +388             */
    +389            public List<FreeBusy> getFreeBusy() {
    +390                    return getProperties(FreeBusy.class);
    +391            }
    +392    
    +393            /**
    +394             * Adds a list of time periods for which the person is free or busy (for
    +395             * example, "free" between 1pm-3pm and 4pm-5pm). Note that a
    +396             * {@link FreeBusy} property can contain multiple time periods, but only one
    +397             * availability type (e.g. "busy").
    +398             * @param freeBusy the availabilities
    +399             * @rfc 5545 p.100-1
    +400             */
    +401            public void addFreeBusy(FreeBusy freeBusy) {
    +402                    addProperty(freeBusy);
    +403            }
    +404    
    +405            /**
    +406             * Adds a single time period for which the person is free or busy (for
    +407             * example, "free" between 1pm-3pm). This method will look for an existing
    +408             * property that has the given {@link FreeBusyType} and add the time period
    +409             * to it, or create a new property is one cannot be found.
    +410             * @param type the availability type (e.g. "free" or "busy")
    +411             * @param start the start date-time
    +412             * @param end the end date-time
    +413             * @return the property that was created/modified
    +414             * @rfc 5545 p.100-1
    +415             */
    +416            public FreeBusy addFreeBusy(FreeBusyType type, Date start, Date end) {
    +417                    FreeBusy found = findByFbType(type);
    +418                    found.addValue(start, end);
    +419                    return found;
    +420            }
    +421    
    +422            /**
    +423             * Adds a single time period for which the person is free or busy (for
    +424             * example, "free" for 2 hours after 1pm). This method will look for an
    +425             * existing property that has the given {@link FreeBusyType} and add the
    +426             * time period to it, or create a new property is one cannot be found.
    +427             * @param type the availability type (e.g. "free" or "busy")
    +428             * @param start the start date-time
    +429             * @param duration the length of time
    +430             * @return the property that was created/modified
    +431             * @rfc 5545 p.100-1
    +432             */
    +433            public FreeBusy addFreeBusy(FreeBusyType type, Date start, Duration duration) {
    +434                    FreeBusy found = findByFbType(type);
    +435                    found.addValue(start, duration);
    +436                    return found;
    +437            }
    +438    
    +439            private FreeBusy findByFbType(FreeBusyType type) {
    +440                    FreeBusy found = null;
    +441    
    +442                    for (FreeBusy fb : getFreeBusy()) {
    +443                            if (fb.getType() == type) {
    +444                                    found = fb;
    +445                                    break;
    +446                            }
    +447                    }
    +448    
    +449                    if (found == null) {
    +450                            found = new FreeBusy();
    +451                            found.setType(type);
    +452                            addFreeBusy(found);
    +453                    }
    +454                    return found;
    +455            }
    +456    
    +457            /**
    +458             * Gets the response to a scheduling request.
    +459             * @return the response
    +460             * @rfc 5545 p.141-3
    +461             */
    +462            public RequestStatus getRequestStatus() {
    +463                    return getProperty(RequestStatus.class);
    +464            }
    +465    
    +466            /**
    +467             * Sets the response to a scheduling request.
    +468             * @param requestStatus the response
    +469             * @rfc 5545 p.141-3
    +470             */
    +471            public void setRequestStatus(RequestStatus requestStatus) {
    +472                    setProperty(RequestStatus.class, requestStatus);
    +473            }
    +474    
    +475            @SuppressWarnings("unchecked")
    +476            @Override
    +477            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +478                    checkRequiredCardinality(warnings, Uid.class, DateTimeStamp.class);
    +479                    checkOptionalCardinality(warnings, Contact.class, DateStart.class, DateEnd.class, Organizer.class, Url.class);
    +480    
    +481                    DateStart dateStart = getDateStart();
    +482                    DateEnd dateEnd = getDateEnd();
    +483    
    +484                    if (dateEnd != null && dateStart == null) {
    +485                            warnings.add("A " + DateStart.class.getSimpleName() + " property must be defined if a " + DateEnd.class.getSimpleName() + " property is defined.");
    +486                    }
    +487    
    +488                    if (dateStart != null && dateStart.getValue() != null && !dateStart.hasTime()) {
    +489                            warnings.add(DateStart.class.getSimpleName() + " properties in free/busy components must always have a time component.");
    +490                    }
    +491    
    +492                    if (dateEnd != null && dateEnd.getValue() != null && !dateEnd.hasTime()) {
    +493                            warnings.add(DateEnd.class.getSimpleName() + " properties in free/busy components must always have a time component.");
    +494                    }
    +495    
    +496                    if (dateStart != null && dateEnd != null) {
    +497                            Date start = dateStart.getValue();
    +498                            Date end = dateEnd.getValue();
    +499                            if (start != null && end != null && start.compareTo(end) >= 0) {
    +500                                    warnings.add(DateStart.class.getSimpleName() + " must come before " + DateEnd.class.getSimpleName() + ".");
    +501                            }
    +502                    }
    +503            }
    +504    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VJournal.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VJournal.html new file mode 100644 index 000000000..b0b811315 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VJournal.html @@ -0,0 +1,973 @@ + + +
    +001    package biweekly.component;
    +002    
    +003    import java.util.Date;
    +004    import java.util.List;
    +005    
    +006    import biweekly.property.Attachment;
    +007    import biweekly.property.Attendee;
    +008    import biweekly.property.Categories;
    +009    import biweekly.property.Classification;
    +010    import biweekly.property.Comment;
    +011    import biweekly.property.Contact;
    +012    import biweekly.property.Created;
    +013    import biweekly.property.DateStart;
    +014    import biweekly.property.DateTimeStamp;
    +015    import biweekly.property.Description;
    +016    import biweekly.property.ExceptionDates;
    +017    import biweekly.property.ExceptionRule;
    +018    import biweekly.property.LastModified;
    +019    import biweekly.property.Method;
    +020    import biweekly.property.Organizer;
    +021    import biweekly.property.RecurrenceDates;
    +022    import biweekly.property.RecurrenceId;
    +023    import biweekly.property.RecurrenceRule;
    +024    import biweekly.property.RelatedTo;
    +025    import biweekly.property.RequestStatus;
    +026    import biweekly.property.Sequence;
    +027    import biweekly.property.Status;
    +028    import biweekly.property.Summary;
    +029    import biweekly.property.Uid;
    +030    import biweekly.property.Url;
    +031    import biweekly.util.Recurrence;
    +032    
    +033    /*
    +034     Copyright (c) 2013, Michael Angstadt
    +035     All rights reserved.
    +036    
    +037     Redistribution and use in source and binary forms, with or without
    +038     modification, are permitted provided that the following conditions are met: 
    +039    
    +040     1. Redistributions of source code must retain the above copyright notice, this
    +041     list of conditions and the following disclaimer. 
    +042     2. Redistributions in binary form must reproduce the above copyright notice,
    +043     this list of conditions and the following disclaimer in the documentation
    +044     and/or other materials provided with the distribution. 
    +045    
    +046     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +047     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +048     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +049     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +050     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +051     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +052     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +053     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +054     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +055     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +056     */
    +057    
    +058    /**
    +059     * <p>
    +060     * Defines descriptive text associated with the calendar data.
    +061     * </p>
    +062     * <p>
    +063     * <b>Examples:</b>
    +064     * 
    +065     * <pre class="brush:java">
    +066     * VJournal journal = new VJournal();
    +067     * journal.setSummary("Team Meeting");
    +068     * journal.setDescription("The following items were discussed: ...");
    +069     * byte[] slides = ...
    +070     * journal.addAttachment(new Attachment("application/vnd.ms-powerpoint", slides));
    +071     * </pre>
    +072     * 
    +073     * </p>
    +074     * @author Michael Angstadt
    +075     * @rfc 5545 p.57-9
    +076     */
    +077    public class VJournal extends ICalComponent {
    +078            /**
    +079             * <p>
    +080             * Creates a new journal entry.
    +081             * </p>
    +082             * <p>
    +083             * The following properties are auto-generated on object creation. These
    +084             * properties <b>must</b> be present in order for the journal entry to be
    +085             * valid:
    +086             * <ul>
    +087             * <li>{@link Uid} - Set to a UUID.</li>
    +088             * <li>{@link DateTimeStamp} - Set to the current date-time.</li>
    +089             * </ul>
    +090             * </p>
    +091             */
    +092            public VJournal() {
    +093                    setUid(Uid.random());
    +094                    setDateTimeStamp(new Date());
    +095            }
    +096    
    +097            /**
    +098             * Gets the unique identifier for this journal entry. This component object
    +099             * comes populated with a UID on creation. This is a <b>required</b>
    +100             * property.
    +101             * @return the UID or null if not set
    +102             * @rfc 5545 p.117-8
    +103             */
    +104            public Uid getUid() {
    +105                    return getProperty(Uid.class);
    +106            }
    +107    
    +108            /**
    +109             * Sets the unique identifier for this journal entry. This component object
    +110             * comes populated with a UID on creation. This is a <b>required</b>
    +111             * property.
    +112             * @param uid the UID or null to remove
    +113             * @rfc 5545 p.117-8
    +114             */
    +115            public void setUid(Uid uid) {
    +116                    setProperty(Uid.class, uid);
    +117            }
    +118    
    +119            /**
    +120             * Sets the unique identifier for this journal entry. This component object
    +121             * comes populated with a UID on creation. This is a <b>required</b>
    +122             * property.
    +123             * @param uid the UID or null to remove
    +124             * @return the property that was created
    +125             * @rfc 5545 p.117-8
    +126             */
    +127            public Uid setUid(String uid) {
    +128                    Uid prop = (uid == null) ? null : new Uid(uid);
    +129                    setUid(prop);
    +130                    return prop;
    +131            }
    +132    
    +133            /**
    +134             * Gets either (a) the creation date of the iCalendar object (if the
    +135             * {@link Method} property is defined) or (b) the date that the journal
    +136             * entry was last modified (the {@link LastModified} property also holds
    +137             * this information). This journal entry object comes populated with a
    +138             * {@link DateTimeStamp} property that is set to the current time. This is a
    +139             * <b>required</b> property.
    +140             * @return the date time stamp or null if not set
    +141             * @rfc 5545 p.137-8
    +142             */
    +143            public DateTimeStamp getDateTimeStamp() {
    +144                    return getProperty(DateTimeStamp.class);
    +145            }
    +146    
    +147            /**
    +148             * Sets either (a) the creation date of the iCalendar object (if the
    +149             * {@link Method} property is defined) or (b) the date that the journal
    +150             * entry was last modified (the {@link LastModified} property also holds
    +151             * this information). This journal entry object comes populated with a
    +152             * {@link DateTimeStamp} property that is set to the current time. This is a
    +153             * <b>required</b> property.
    +154             * @param dateTimeStamp the date time stamp or null to remove
    +155             * @rfc 5545 p.137-8
    +156             */
    +157            public void setDateTimeStamp(DateTimeStamp dateTimeStamp) {
    +158                    setProperty(DateTimeStamp.class, dateTimeStamp);
    +159            }
    +160    
    +161            /**
    +162             * Sets either (a) the creation date of the iCalendar object (if the
    +163             * {@link Method} property is defined) or (b) the date that the journal
    +164             * entry was last modified (the {@link LastModified} property also holds
    +165             * this information). This journal entry object comes populated with a
    +166             * {@link DateTimeStamp} property that is set to the current time. This is a
    +167             * <b>required</b> property.
    +168             * @param dateTimeStamp the date time stamp or null to remove
    +169             * @return the property that was created
    +170             * @rfc 5545 p.137-8
    +171             */
    +172            public DateTimeStamp setDateTimeStamp(Date dateTimeStamp) {
    +173                    DateTimeStamp prop = (dateTimeStamp == null) ? null : new DateTimeStamp(dateTimeStamp);
    +174                    setDateTimeStamp(prop);
    +175                    return prop;
    +176            }
    +177    
    +178            /**
    +179             * Gets the level of sensitivity of the journal entry. If not specified, the
    +180             * data within the journal entry should be considered "public".
    +181             * @return the classification level or null if not set
    +182             * @rfc 5545 p.82-3
    +183             */
    +184            public Classification getClassification() {
    +185                    return getProperty(Classification.class);
    +186            }
    +187    
    +188            /**
    +189             * Sets the level of sensitivity of the journal entry. If not specified, the
    +190             * data within the journal entry should be considered "public".
    +191             * @param classification the classification level or null to remove
    +192             * @rfc 5545 p.82-3
    +193             */
    +194            public void setClassification(Classification classification) {
    +195                    setProperty(Classification.class, classification);
    +196            }
    +197    
    +198            /**
    +199             * Sets the level of sensitivity of the journal entry. If not specified, the
    +200             * data within the journal entry should be considered "public".
    +201             * @param classification the classification level (e.g. "CONFIDENTIAL") or
    +202             * null to remove
    +203             * @return the property that was created
    +204             * @rfc 5545 p.82-3
    +205             */
    +206            public Classification setClassification(String classification) {
    +207                    Classification prop = (classification == null) ? null : new Classification(classification);
    +208                    setClassification(prop);
    +209                    return prop;
    +210            }
    +211    
    +212            /**
    +213             * Gets the date-time that the journal entry was initially created.
    +214             * @return the creation date-time or null if not set
    +215             * @rfc 5545 p.136
    +216             */
    +217            public Created getCreated() {
    +218                    return getProperty(Created.class);
    +219            }
    +220    
    +221            /**
    +222             * Sets the date-time that the journal entry was initially created.
    +223             * @param created the creation date-time or null to remove
    +224             * @rfc 5545 p.136
    +225             */
    +226            public void setCreated(Created created) {
    +227                    setProperty(Created.class, created);
    +228            }
    +229    
    +230            /**
    +231             * Sets the date-time that the journal entry was initially created.
    +232             * @param created the creation date-time or null to remove
    +233             * @return the property that was created
    +234             * @rfc 5545 p.136
    +235             */
    +236            public Created setCreated(Date created) {
    +237                    Created prop = (created == null) ? null : new Created(created);
    +238                    setCreated(prop);
    +239                    return prop;
    +240            }
    +241    
    +242            /**
    +243             * Gets the date that the journal entry starts.
    +244             * @return the start date or null if not set
    +245             * @rfc 5545 p.97-8
    +246             */
    +247            public DateStart getDateStart() {
    +248                    return getProperty(DateStart.class);
    +249            }
    +250    
    +251            /**
    +252             * Sets the date that the journal entry starts.
    +253             * @param dateStart the start date or null to remove
    +254             * @rfc 5545 p.97-8
    +255             */
    +256            public void setDateStart(DateStart dateStart) {
    +257                    setProperty(DateStart.class, dateStart);
    +258            }
    +259    
    +260            /**
    +261             * Sets the date that the journal entry starts.
    +262             * @param dateStart the start date or null to remove
    +263             * @return the property that was created
    +264             * @rfc 5545 p.97-8
    +265             */
    +266            public DateStart setDateStart(Date dateStart) {
    +267                    DateStart prop = (dateStart == null) ? null : new DateStart(dateStart);
    +268                    setDateStart(prop);
    +269                    return prop;
    +270            }
    +271    
    +272            /**
    +273             * Gets the date-time that the journal entry was last changed.
    +274             * @return the last modified date or null if not set
    +275             * @rfc 5545 p.138
    +276             */
    +277            public LastModified getLastModified() {
    +278                    return getProperty(LastModified.class);
    +279            }
    +280    
    +281            /**
    +282             * Sets the date-time that the journal entry was last changed.
    +283             * @param lastModified the last modified date or null to remove
    +284             * @rfc 5545 p.138
    +285             */
    +286            public void setLastModified(LastModified lastModified) {
    +287                    setProperty(LastModified.class, lastModified);
    +288            }
    +289    
    +290            /**
    +291             * Sets the date-time that the journal entry was last changed.
    +292             * @param lastModified the last modified date or null to remove
    +293             * @return the property that was created
    +294             * @rfc 5545 p.138
    +295             */
    +296            public LastModified setLastModified(Date lastModified) {
    +297                    LastModified prop = (lastModified == null) ? null : new LastModified(lastModified);
    +298                    setLastModified(prop);
    +299                    return prop;
    +300            }
    +301    
    +302            /**
    +303             * Gets the organizer of the journal entry.
    +304             * @return the organizer or null if not set
    +305             * @rfc 5545 p.111-2
    +306             */
    +307            public Organizer getOrganizer() {
    +308                    return getProperty(Organizer.class);
    +309            }
    +310    
    +311            /**
    +312             * Sets the organizer of the journal entry.
    +313             * @param organizer the organizer or null to remove
    +314             * @rfc 5545 p.111-2
    +315             */
    +316            public void setOrganizer(Organizer organizer) {
    +317                    setProperty(Organizer.class, organizer);
    +318            }
    +319    
    +320            /**
    +321             * Sets the organizer of the journal entry.
    +322             * @param email the organizer's email address (e.g. "johndoe@example.com")
    +323             * or null to remove
    +324             * @return the property that was created
    +325             * @rfc 5545 p.111-2
    +326             */
    +327            public Organizer setOrganizer(String email) {
    +328                    Organizer prop = (email == null) ? null : Organizer.email(email);
    +329                    setOrganizer(prop);
    +330                    return prop;
    +331            }
    +332    
    +333            /**
    +334             * Gets the original value of the {@link DateStart} property if the event is
    +335             * recurring and has been modified. Used in conjunction with the {@link Uid}
    +336             * and {@link Sequence} properties to uniquely identify a recurrence
    +337             * instance.
    +338             * @return the recurrence ID or null if not set
    +339             * @rfc 5545 p.112-4
    +340             */
    +341            public RecurrenceId getRecurrenceId() {
    +342                    return getProperty(RecurrenceId.class);
    +343            }
    +344    
    +345            /**
    +346             * Sets the original value of the {@link DateStart} property if the event is
    +347             * recurring and has been modified. Used in conjunction with the {@link Uid}
    +348             * and {@link Sequence} properties to uniquely identify a recurrence
    +349             * instance.
    +350             * @param recurrenceId the recurrence ID or null to remove
    +351             * @rfc 5545 p.112-4
    +352             */
    +353            public void setRecurrenceId(RecurrenceId recurrenceId) {
    +354                    setProperty(RecurrenceId.class, recurrenceId);
    +355            }
    +356    
    +357            /**
    +358             * Sets the original value of the {@link DateStart} property if the journal
    +359             * entry is recurring and has been modified. Used in conjunction with the
    +360             * {@link Uid} and {@link Sequence} properties to uniquely identify a
    +361             * recurrence instance.
    +362             * @param originalStartDate the original start date or null to remove
    +363             * @return the property that was created
    +364             * @rfc 5545 p.112-4
    +365             */
    +366            public RecurrenceId setRecurrenceId(Date originalStartDate) {
    +367                    RecurrenceId prop = (originalStartDate == null) ? null : new RecurrenceId(originalStartDate);
    +368                    setRecurrenceId(prop);
    +369                    return prop;
    +370            }
    +371    
    +372            /**
    +373             * Gets the revision number of the journal entry. The organizer can
    +374             * increment this number every time he or she makes a significant change.
    +375             * @return the sequence number
    +376             * @rfc 5545 p.138-9
    +377             */
    +378            public Sequence getSequence() {
    +379                    return getProperty(Sequence.class);
    +380            }
    +381    
    +382            /**
    +383             * Sets the revision number of the journal entry. The organizer can
    +384             * increment this number every time he or she makes a significant change.
    +385             * @param sequence the sequence number
    +386             * @rfc 5545 p.138-9
    +387             */
    +388            public void setSequence(Sequence sequence) {
    +389                    setProperty(Sequence.class, sequence);
    +390            }
    +391    
    +392            /**
    +393             * Sets the revision number of the journal entry. The organizer can
    +394             * increment this number every time he or she makes a significant change.
    +395             * @param sequence the sequence number
    +396             * @return the property that was created
    +397             * @rfc 5545 p.138-9
    +398             */
    +399            public Sequence setSequence(Integer sequence) {
    +400                    Sequence prop = (sequence == null) ? null : new Sequence(sequence);
    +401                    setSequence(prop);
    +402                    return prop;
    +403            }
    +404    
    +405            /**
    +406             * Increments the revision number of the journal entry. The organizer can
    +407             * increment this number every time he or she makes a significant change.
    +408             * @rfc 5545 p.138-9
    +409             */
    +410            public void incrementSequence() {
    +411                    Sequence sequence = getSequence();
    +412                    if (sequence == null) {
    +413                            setSequence(1);
    +414                    } else {
    +415                            sequence.increment();
    +416                    }
    +417            }
    +418    
    +419            /**
    +420             * Gets the status of the journal entry.
    +421             * @return the status or null if not set
    +422             * @rfc 5545 p.92-3
    +423             */
    +424            public Status getStatus() {
    +425                    return getProperty(Status.class);
    +426            }
    +427    
    +428            /**
    +429             * Sets the status of the journal entry.
    +430             * <p>
    +431             * Valid journal status codes are:
    +432             * <ul>
    +433             * <li>DRAFT</li>
    +434             * <li>FINAL</li>
    +435             * <li>CANCELLED</li>
    +436             * </ul>
    +437             * </p>
    +438             * @param status the status or null to remove
    +439             * @rfc 5545 p.92-3
    +440             */
    +441            public void setStatus(Status status) {
    +442                    setProperty(Status.class, status);
    +443            }
    +444    
    +445            /**
    +446             * Gets the summary of the journal entry.
    +447             * @return the summary or null if not set
    +448             * @rfc 5545 p.93-4
    +449             */
    +450            public Summary getSummary() {
    +451                    return getProperty(Summary.class);
    +452            }
    +453    
    +454            /**
    +455             * Sets the summary of the journal entry.
    +456             * @param summary the summary or null to remove
    +457             * @rfc 5545 p.93-4
    +458             */
    +459            public void setSummary(Summary summary) {
    +460                    setProperty(Summary.class, summary);
    +461            }
    +462    
    +463            /**
    +464             * Sets the summary of the journal entry.
    +465             * @param summary the summary or null to remove
    +466             * @return the property that was created
    +467             * @rfc 5545 p.93-4
    +468             */
    +469            public Summary setSummary(String summary) {
    +470                    Summary prop = (summary == null) ? null : new Summary(summary);
    +471                    setSummary(prop);
    +472                    return prop;
    +473            }
    +474    
    +475            /**
    +476             * Gets a URL to a resource that contains additional information about the
    +477             * journal entry.
    +478             * @return the URL or null if not set
    +479             * @rfc 5545 p.116-7
    +480             */
    +481            public Url getUrl() {
    +482                    return getProperty(Url.class);
    +483            }
    +484    
    +485            /**
    +486             * Sets a URL to a resource that contains additional information about the
    +487             * journal entry.
    +488             * @param url the URL or null to remove
    +489             * @rfc 5545 p.116-7
    +490             */
    +491            public void setUrl(Url url) {
    +492                    setProperty(Url.class, url);
    +493            }
    +494    
    +495            /**
    +496             * Sets a URL to a resource that contains additional information about the
    +497             * journal entry.
    +498             * @param url the URL (e.g. "http://example.com/resource.ics") or null to
    +499             * remove
    +500             * @return the property that was created
    +501             * @rfc 5545 p.116-7
    +502             */
    +503            public Url setUrl(String url) {
    +504                    Url prop = (url == null) ? null : new Url(url);
    +505                    setUrl(prop);
    +506                    return prop;
    +507            }
    +508    
    +509            /**
    +510             * Gets how often the journal entry repeats.
    +511             * @return the recurrence rule or null if not set
    +512             * @rfc 5545 p.122-32
    +513             */
    +514            public RecurrenceRule getRecurrenceRule() {
    +515                    return getProperty(RecurrenceRule.class);
    +516            }
    +517    
    +518            /**
    +519             * Sets how often the journal entry repeats.
    +520             * @param recur the recurrence rule or null to remove
    +521             * @return the property that was created
    +522             * @rfc 5545 p.122-32
    +523             */
    +524            public RecurrenceRule setRecurrenceRule(Recurrence recur) {
    +525                    RecurrenceRule prop = (recur == null) ? null : new RecurrenceRule(recur);
    +526                    setRecurrenceRule(prop);
    +527                    return prop;
    +528            }
    +529    
    +530            /**
    +531             * Sets how often the journal entry repeats.
    +532             * @param recurrenceRule the recurrence rule or null to remove
    +533             * @rfc 5545 p.122-32
    +534             */
    +535            public void setRecurrenceRule(RecurrenceRule recurrenceRule) {
    +536                    setProperty(RecurrenceRule.class, recurrenceRule);
    +537            }
    +538    
    +539            /**
    +540             * Gets any attachments that are associated with the journal entry.
    +541             * @return the attachments
    +542             * @rfc 5545 p.80-1
    +543             */
    +544            public List<Attachment> getAttachments() {
    +545                    return getProperties(Attachment.class);
    +546            }
    +547    
    +548            /**
    +549             * Adds an attachment to the journal entry.
    +550             * @param attachment the attachment to add
    +551             * @rfc 5545 p.80-1
    +552             */
    +553            public void addAttachment(Attachment attachment) {
    +554                    addProperty(attachment);
    +555            }
    +556    
    +557            /**
    +558             * Gets the people who are involved in the journal entry.
    +559             * @return the attendees
    +560             * @rfc 5545 p.107-9
    +561             */
    +562            public List<Attendee> getAttendees() {
    +563                    return getProperties(Attendee.class);
    +564            }
    +565    
    +566            /**
    +567             * Adds a person who is involved in the journal entry.
    +568             * @param attendee the attendee
    +569             * @rfc 5545 p.107-9
    +570             */
    +571            public void addAttendee(Attendee attendee) {
    +572                    addProperty(attendee);
    +573            }
    +574    
    +575            /**
    +576             * Adds a person who is involved in the journal entry.
    +577             * @param email the attendee's email address
    +578             * @return the property that was created
    +579             * @rfc 5545 p.107-9
    +580             */
    +581            public Attendee addAttendee(String email) {
    +582                    Attendee prop = Attendee.email(email);
    +583                    addAttendee(prop);
    +584                    return prop;
    +585            }
    +586    
    +587            /**
    +588             * Gets a list of "tags" or "keywords" that describe the journal entry.
    +589             * @return the categories
    +590             * @rfc 5545 p.81-2
    +591             */
    +592            public List<Categories> getCategories() {
    +593                    return getProperties(Categories.class);
    +594            }
    +595    
    +596            /**
    +597             * Adds a list of "tags" or "keywords" that describe the journal entry. Note
    +598             * that a single property can hold multiple keywords.
    +599             * @param categories the categories to add
    +600             * @rfc 5545 p.81-2
    +601             */
    +602            public void addCategories(Categories categories) {
    +603                    addProperty(categories);
    +604            }
    +605    
    +606            /**
    +607             * Adds a list of "tags" or "keywords" that describe the journal entry.
    +608             * @param categories the categories to add
    +609             * @return the property that was created
    +610             * @rfc 5545 p.81-2
    +611             */
    +612            public Categories addCategories(String... categories) {
    +613                    Categories prop = new Categories(categories);
    +614                    addCategories(prop);
    +615                    return prop;
    +616            }
    +617    
    +618            /**
    +619             * Adds a list of "tags" or "keywords" that describe the journal entry.
    +620             * @param categories the categories to add
    +621             * @return the property that was created
    +622             * @rfc 5545 p.81-2
    +623             */
    +624            public Categories addCategories(List<String> categories) {
    +625                    Categories prop = new Categories(categories);
    +626                    addCategories(prop);
    +627                    return prop;
    +628            }
    +629    
    +630            /**
    +631             * Gets the comments attached to the journal entry.
    +632             * @return the comments
    +633             * @rfc 5545 p.83-4
    +634             */
    +635            public List<Comment> getComments() {
    +636                    return getProperties(Comment.class);
    +637            }
    +638    
    +639            /**
    +640             * Adds a comment to the journal entry.
    +641             * @param comment the comment to add
    +642             * @rfc 5545 p.83-4
    +643             */
    +644            public void addComment(Comment comment) {
    +645                    addProperty(comment);
    +646            }
    +647    
    +648            /**
    +649             * Adds a comment to the journal entry.
    +650             * @param comment the comment to add
    +651             * @return the property that was created
    +652             * @rfc 5545 p.83-4
    +653             */
    +654            public Comment addComment(String comment) {
    +655                    Comment prop = new Comment(comment);
    +656                    addComment(prop);
    +657                    return prop;
    +658            }
    +659    
    +660            /**
    +661             * Gets the contacts associated with the journal entry.
    +662             * @return the contacts
    +663             * @rfc 5545 p.109-11
    +664             */
    +665            public List<Contact> getContacts() {
    +666                    return getProperties(Contact.class);
    +667            }
    +668    
    +669            /**
    +670             * Adds a contact to the journal entry.
    +671             * @param contact the contact
    +672             * @rfc 5545 p.109-11
    +673             */
    +674            public void addContact(Contact contact) {
    +675                    addProperty(contact);
    +676            }
    +677    
    +678            /**
    +679             * Adds a contact to the journal entry.
    +680             * @param contact the contact (e.g. "ACME Co - (123) 555-1234")
    +681             * @return the property that was created
    +682             * @rfc 5545 p.109-11
    +683             */
    +684            public Contact addContact(String contact) {
    +685                    Contact prop = new Contact(contact);
    +686                    addContact(prop);
    +687                    return prop;
    +688            }
    +689    
    +690            /**
    +691             * Gets the detailed descriptions to the journal entry. The descriptions
    +692             * should be a more detailed version of the one provided by the
    +693             * {@link Summary} property.
    +694             * @return the descriptions
    +695             * @rfc 5545 p.84-5
    +696             */
    +697            public List<Description> getDescriptions() {
    +698                    return getProperties(Description.class);
    +699            }
    +700    
    +701            /**
    +702             * Adds a detailed description to the journal entry. The description should
    +703             * be a more detailed version of the one provided by the {@link Summary}
    +704             * property.
    +705             * @param description the description
    +706             * @rfc 5545 p.84-5
    +707             */
    +708            public void addDescription(Description description) {
    +709                    addProperty(description);
    +710            }
    +711    
    +712            /**
    +713             * Adds a detailed description to the journal entry. The description should
    +714             * be a more detailed version of the one provided by the {@link Summary}
    +715             * property.
    +716             * @param description the description
    +717             * @return the property that was created
    +718             * @rfc 5545 p.84-5
    +719             */
    +720            public Description addDescription(String description) {
    +721                    Description prop = new Description(description);
    +722                    addDescription(prop);
    +723                    return prop;
    +724            }
    +725    
    +726            /**
    +727             * Gets the list of exceptions to the recurrence rule defined in the journal
    +728             * entry (if one is defined).
    +729             * @return the list of exceptions
    +730             * @rfc 5545 p.118-20
    +731             */
    +732            public List<ExceptionDates> getExceptionDates() {
    +733                    return getProperties(ExceptionDates.class);
    +734            }
    +735    
    +736            /**
    +737             * Adds a list of exceptions to the recurrence rule defined in the journal
    +738             * entry (if one is defined). Note that this property can contain multiple
    +739             * dates.
    +740             * @param exceptionDates the list of exceptions
    +741             * @rfc 5545 p.118-20
    +742             */
    +743            public void addExceptionDates(ExceptionDates exceptionDates) {
    +744                    addProperty(exceptionDates);
    +745            }
    +746    
    +747            /**
    +748             * Gets the components that the journal entry is related to.
    +749             * @return the relationships
    +750             * @rfc 5545 p.115-6
    +751             */
    +752            public List<RelatedTo> getRelatedTo() {
    +753                    return getProperties(RelatedTo.class);
    +754            }
    +755    
    +756            /**
    +757             * Adds a component that the journal entry is related to.
    +758             * @param relatedTo the relationship
    +759             * @rfc 5545 p.115-6
    +760             */
    +761            public void addRelatedTo(RelatedTo relatedTo) {
    +762                    //TODO create a method that accepts a component and make the RelatedTo property invisible to the user
    +763                    //@formatter:off
    +764                    /*
    +765                     * addRelation(RelationshipType relType, ICalComponent component){
    +766                     *   RelatedTo prop = new RelatedTo(component.getUid().getValue());
    +767                     *   prop.setRelationshipType(relType);
    +768                     *   addProperty(prop);
    +769                     * }
    +770                     */
    +771                    //@formatter:on
    +772                    addProperty(relatedTo);
    +773            }
    +774    
    +775            /**
    +776             * Adds a component that the journal entry is related to.
    +777             * @param uid the UID of the other component
    +778             * @return the property that was created
    +779             * @rfc 5545 p.115-6
    +780             */
    +781            public RelatedTo addRelatedTo(String uid) {
    +782                    RelatedTo prop = new RelatedTo(uid);
    +783                    addRelatedTo(prop);
    +784                    return prop;
    +785            }
    +786    
    +787            /**
    +788             * Gets the list of dates/periods that help define the recurrence rule of
    +789             * this journal entry (if one is defined).
    +790             * @return the recurrence dates
    +791             * @rfc 5545 p.120-2
    +792             */
    +793            public List<RecurrenceDates> getRecurrenceDates() {
    +794                    return getProperties(RecurrenceDates.class);
    +795            }
    +796    
    +797            /**
    +798             * Adds a list of dates/periods that help define the recurrence rule of this
    +799             * journal entry (if one is defined).
    +800             * @param recurrenceDates the recurrence dates
    +801             * @rfc 5545 p.120-2
    +802             */
    +803            public void addRecurrenceDates(RecurrenceDates recurrenceDates) {
    +804                    addProperty(recurrenceDates);
    +805            }
    +806    
    +807            /**
    +808             * Gets the response to a scheduling request.
    +809             * @return the response
    +810             * @rfc 5545 p.141-3
    +811             */
    +812            public RequestStatus getRequestStatus() {
    +813                    return getProperty(RequestStatus.class);
    +814            }
    +815    
    +816            /**
    +817             * Sets the response to a scheduling request.
    +818             * @param requestStatus the response
    +819             * @rfc 5545 p.141-3
    +820             */
    +821            public void setRequestStatus(RequestStatus requestStatus) {
    +822                    setProperty(RequestStatus.class, requestStatus);
    +823            }
    +824    
    +825            /**
    +826             * <p>
    +827             * Gets the exceptions for the {@link RecurrenceRule} property.
    +828             * </p>
    +829             * <p>
    +830             * Note that this property has been removed from the latest version of the
    +831             * iCal specification. Its use should be avoided.
    +832             * </p>
    +833             * @return the exception rules
    +834             * @rfc 2445 p.114-15
    +835             */
    +836            public List<ExceptionRule> getExceptionRules() {
    +837                    return getProperties(ExceptionRule.class);
    +838            }
    +839    
    +840            /**
    +841             * <p>
    +842             * Adds an exception for the {@link RecurrenceRule} property.
    +843             * </p>
    +844             * <p>
    +845             * Note that this property has been removed from the latest version of the
    +846             * iCal specification. Its use should be avoided.
    +847             * </p>
    +848             * @param recur the exception rule to add
    +849             * @return the property that was created
    +850             * @rfc 2445 p.114-15
    +851             */
    +852            public ExceptionRule addExceptionRule(Recurrence recur) {
    +853                    ExceptionRule prop = (recur == null) ? null : new ExceptionRule(recur);
    +854                    addExceptionRule(prop);
    +855                    return prop;
    +856            }
    +857    
    +858            /**
    +859             * <p>
    +860             * Adds an exception for the {@link RecurrenceRule} property.
    +861             * </p>
    +862             * <p>
    +863             * Note that this property has been removed from the latest version of the
    +864             * iCal specification. Its use should be avoided.
    +865             * </p>
    +866             * @param exceptionRule the exception rule to add
    +867             * @rfc 2445 p.114-15
    +868             */
    +869            public void addExceptionRule(ExceptionRule exceptionRule) {
    +870                    addProperty(exceptionRule);
    +871            }
    +872    
    +873            @SuppressWarnings("unchecked")
    +874            @Override
    +875            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +876                    checkRequiredCardinality(warnings, Uid.class, DateTimeStamp.class);
    +877                    checkOptionalCardinality(warnings, Classification.class, Created.class, DateStart.class, LastModified.class, Organizer.class, RecurrenceId.class, Sequence.class, Status.class, Summary.class, Url.class);
    +878    
    +879                    Status status = getStatus();
    +880                    if (status != null && (status.isTentative() || status.isConfirmed() || status.isNeedsAction() || status.isCompleted() || status.isInProgress())) {
    +881                            warnings.add("Invalid status value (\"" + status.getValue() + "\").  Valid status values are \"draft\", \"final\", and \"cancelled\".");
    +882                    }
    +883    
    +884                    RecurrenceId recurrenceId = getRecurrenceId();
    +885                    DateStart dateStart = getDateStart();
    +886                    if (recurrenceId != null && dateStart != null && dateStart.hasTime() != recurrenceId.hasTime()) {
    +887                            warnings.add("Both " + DateStart.class.getSimpleName() + " and " + RecurrenceId.class.getSimpleName() + " must have the same data type (they must either both be dates or both be datetimes).");
    +888                    }
    +889    
    +890                    //RFC 5545 p. 167
    +891                    RecurrenceRule rrule = getRecurrenceRule();
    +892                    if (dateStart != null && rrule != null) {
    +893                            Date start = dateStart.getValue();
    +894                            Recurrence recur = rrule.getValue();
    +895                            if (start != null && recur != null) {
    +896                                    if (!dateStart.hasTime() && (!recur.getByHour().isEmpty() || !recur.getByMinute().isEmpty() || !recur.getBySecond().isEmpty())) {
    +897                                            warnings.add("The BYHOUR, BYMINUTE, and BYSECOND rule parts cannot be specified in the " + RecurrenceRule.class.getSimpleName() + " property when the " + DateStart.class.getSimpleName() + " property contains a date value (as opposed to a date-time value).");
    +898                                    }
    +899                            }
    +900                    }
    +901    
    +902                    //RFC 5545 p. 167
    +903                    if (getProperties(RecurrenceRule.class).size() > 1) {
    +904                            warnings.add("There should be only one instance of the " + RecurrenceRule.class.getSimpleName() + " property.");
    +905                    }
    +906            }
    +907    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VTimezone.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VTimezone.html new file mode 100644 index 000000000..a43c2249a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VTimezone.html @@ -0,0 +1,277 @@ + + +
    +001    package biweekly.component;
    +002    
    +003    import java.util.Date;
    +004    import java.util.List;
    +005    
    +006    import biweekly.property.LastModified;
    +007    import biweekly.property.TimezoneId;
    +008    import biweekly.property.TimezoneUrl;
    +009    
    +010    /*
    +011     Copyright (c) 2013, Michael Angstadt
    +012     All rights reserved.
    +013    
    +014     Redistribution and use in source and binary forms, with or without
    +015     modification, are permitted provided that the following conditions are met: 
    +016    
    +017     1. Redistributions of source code must retain the above copyright notice, this
    +018     list of conditions and the following disclaimer. 
    +019     2. Redistributions in binary form must reproduce the above copyright notice,
    +020     this list of conditions and the following disclaimer in the documentation
    +021     and/or other materials provided with the distribution. 
    +022    
    +023     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +024     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +025     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +026     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +027     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +028     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +029     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +030     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +031     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +032     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +033     */
    +034    
    +035    /**
    +036     * <p>
    +037     * Defines a timezone's UTC offsets throughout the year.
    +038     * </p>
    +039     * 
    +040     * <p>
    +041     * <b>Examples:</b>
    +042     * 
    +043     * <pre class="brush:java">
    +044     * VTimezone timezone = new VTimezone(&quot;Eastern Standard Time&quot;);
    +045     * 
    +046     * StandardTime standard = new StandardTime();
    +047     * DateTimeComponents componentsStandard = new DateTimeComponents(1998, 10, 25, 2, 0, 0, false);
    +048     * standard.setDateStart(componentsStandard);
    +049     * standard.setTimezoneOffsetFrom(-4, 0);
    +050     * standard.setTimezoneOffsetTo(-5, 0);
    +051     * timezone.addStandardTime(standard);
    +052     * 
    +053     * DaylightSavingsTime daylight = new DaylightSavingsTime();
    +054     * DateTimeComponents componentsDaylight = new DateTimeComponents(1999, 4, 4, 2, 0, 0, false);
    +055     * daylight.setDateStart(componentsDaylight);
    +056     * daylight.setTimezoneOffsetFrom(-5, 0);
    +057     * daylight.setTimezoneOffsetTo(-4, 0);
    +058     * timezone.addDaylightSavingsTime(daylight);
    +059     * </pre>
    +060     * 
    +061     * </p>
    +062     * @author Michael Angstadt
    +063     * @rfc 5545 p.62-71
    +064     */
    +065    public class VTimezone extends ICalComponent {
    +066            /**
    +067             * Creates a new timezone component.
    +068             * @param identifier a unique identifier for this timezone (allows it to be
    +069             * referenced by date-time properties that support timezones).
    +070             */
    +071            public VTimezone(String identifier) {
    +072                    setTimezoneId(identifier);
    +073            }
    +074    
    +075            /**
    +076             * Gets the ID for this timezone. This is a <b>required</b> property.
    +077             * @return the timezone ID or null if not set
    +078             * @rfc 5545 p.102-3
    +079             */
    +080            public TimezoneId getTimezoneId() {
    +081                    return getProperty(TimezoneId.class);
    +082            }
    +083    
    +084            /**
    +085             * Sets an ID for this timezone. This is a <b>required</b> property.
    +086             * @param timezoneId the timezone ID or null to remove
    +087             * @rfc 5545 p.102-3
    +088             */
    +089            public void setTimezoneId(TimezoneId timezoneId) {
    +090                    setProperty(TimezoneId.class, timezoneId);
    +091            }
    +092    
    +093            /**
    +094             * Sets an ID for this timezone. This is a <b>required</b> property.
    +095             * @param timezoneId the timezone ID or null to remove
    +096             * @return the property that was created
    +097             * @rfc 5545 p.102-3
    +098             */
    +099            public TimezoneId setTimezoneId(String timezoneId) {
    +100                    TimezoneId prop = (timezoneId == null) ? null : new TimezoneId(timezoneId);
    +101                    setTimezoneId(prop);
    +102                    return prop;
    +103            }
    +104    
    +105            /**
    +106             * Gets the date-time that the timezone data was last changed.
    +107             * @return the last modified date or null if not set
    +108             * @rfc 5545 p.138
    +109             */
    +110            public LastModified getLastModified() {
    +111                    return getProperty(LastModified.class);
    +112            }
    +113    
    +114            /**
    +115             * Sets the date-time that the timezone data was last changed.
    +116             * @param lastModified the last modified date or null to remove
    +117             * @rfc 5545 p.138
    +118             */
    +119            public void setLastModified(LastModified lastModified) {
    +120                    setProperty(LastModified.class, lastModified);
    +121            }
    +122    
    +123            /**
    +124             * Sets the date-time that the timezone data was last changed.
    +125             * @param lastModified the last modified date or null to remove
    +126             * @return the property that was created
    +127             * @rfc 5545 p.138
    +128             */
    +129            public LastModified setLastModified(Date lastModified) {
    +130                    LastModified prop = (lastModified == null) ? null : new LastModified(lastModified);
    +131                    setLastModified(prop);
    +132                    return prop;
    +133            }
    +134    
    +135            /**
    +136             * Gets the timezone URL, which points to an iCalendar object that contains
    +137             * further information on the timezone.
    +138             * @return the URL or null if not set
    +139             * @rfc 5545 p.106
    +140             */
    +141            public TimezoneUrl getTimezoneUrl() {
    +142                    return getProperty(TimezoneUrl.class);
    +143            }
    +144    
    +145            /**
    +146             * Sets the timezone URL, which points to an iCalendar object that contains
    +147             * further information on the timezone.
    +148             * @param url the URL or null to remove
    +149             * @rfc 5545 p.106
    +150             */
    +151            public void setTimezoneUrl(TimezoneUrl url) {
    +152                    setProperty(TimezoneUrl.class, url);
    +153            }
    +154    
    +155            /**
    +156             * Sets the timezone URL, which points to an iCalendar object that contains
    +157             * further information on the timezone.
    +158             * @param url the timezone URL (e.g.
    +159             * "http://example.com/America-New_York.ics") or null to remove
    +160             * @return the property that was created
    +161             * @rfc 5545 p.106
    +162             */
    +163            public TimezoneUrl setTimezoneUrl(String url) {
    +164                    TimezoneUrl prop = (url == null) ? null : new TimezoneUrl(url);
    +165                    setTimezoneUrl(prop);
    +166                    return prop;
    +167            }
    +168    
    +169            /**
    +170             * Gets the timezone's "standard" observance time ranges.
    +171             * @return the "standard" observance time ranges
    +172             */
    +173            public List<StandardTime> getStandardTimes() {
    +174                    return getComponents(StandardTime.class);
    +175            }
    +176    
    +177            /**
    +178             * Adds a "standard" observance time range.
    +179             * @param standardTime the "standard" observance time
    +180             */
    +181            public void addStandardTime(StandardTime standardTime) {
    +182                    addComponent(standardTime);
    +183            }
    +184    
    +185            /**
    +186             * Gets the timezone's "daylight savings" observance time ranges.
    +187             * @return the "daylight savings" observance time ranges
    +188             */
    +189            public List<DaylightSavingsTime> getDaylightSavingsTime() {
    +190                    return getComponents(DaylightSavingsTime.class);
    +191            }
    +192    
    +193            /**
    +194             * Adds a "daylight savings" observance time range.
    +195             * @param daylightSavingsTime the "daylight savings" observance time
    +196             */
    +197            public void addDaylightSavingsTime(DaylightSavingsTime daylightSavingsTime) {
    +198                    addComponent(daylightSavingsTime);
    +199            }
    +200    
    +201            @SuppressWarnings("unchecked")
    +202            @Override
    +203            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +204                    checkRequiredCardinality(warnings, TimezoneId.class);
    +205                    checkOptionalCardinality(warnings, LastModified.class, TimezoneUrl.class);
    +206    
    +207                    if (getStandardTimes().isEmpty() && getDaylightSavingsTime().isEmpty()) {
    +208                            warnings.add("At least one " + StandardTime.class.getSimpleName() + " or one " + DaylightSavingsTime.class.getSimpleName() + " must be specified.");
    +209                    }
    +210            }
    +211    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VTodo.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VTodo.html new file mode 100644 index 000000000..ce00d20c3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/VTodo.html @@ -0,0 +1,1260 @@ + + +
    +001    package biweekly.component;
    +002    
    +003    import java.util.Date;
    +004    import java.util.List;
    +005    
    +006    import biweekly.property.Attachment;
    +007    import biweekly.property.Attendee;
    +008    import biweekly.property.Categories;
    +009    import biweekly.property.Classification;
    +010    import biweekly.property.Comment;
    +011    import biweekly.property.Completed;
    +012    import biweekly.property.Contact;
    +013    import biweekly.property.Created;
    +014    import biweekly.property.DateDue;
    +015    import biweekly.property.DateStart;
    +016    import biweekly.property.DateTimeStamp;
    +017    import biweekly.property.Description;
    +018    import biweekly.property.DurationProperty;
    +019    import biweekly.property.ExceptionDates;
    +020    import biweekly.property.ExceptionRule;
    +021    import biweekly.property.Geo;
    +022    import biweekly.property.LastModified;
    +023    import biweekly.property.Location;
    +024    import biweekly.property.Method;
    +025    import biweekly.property.Organizer;
    +026    import biweekly.property.PercentComplete;
    +027    import biweekly.property.Priority;
    +028    import biweekly.property.RecurrenceDates;
    +029    import biweekly.property.RecurrenceId;
    +030    import biweekly.property.RecurrenceRule;
    +031    import biweekly.property.RelatedTo;
    +032    import biweekly.property.RequestStatus;
    +033    import biweekly.property.Resources;
    +034    import biweekly.property.Sequence;
    +035    import biweekly.property.Status;
    +036    import biweekly.property.Summary;
    +037    import biweekly.property.Uid;
    +038    import biweekly.property.Url;
    +039    import biweekly.util.Duration;
    +040    import biweekly.util.Recurrence;
    +041    
    +042    /*
    +043     Copyright (c) 2013, Michael Angstadt
    +044     All rights reserved.
    +045    
    +046     Redistribution and use in source and binary forms, with or without
    +047     modification, are permitted provided that the following conditions are met: 
    +048    
    +049     1. Redistributions of source code must retain the above copyright notice, this
    +050     list of conditions and the following disclaimer. 
    +051     2. Redistributions in binary form must reproduce the above copyright notice,
    +052     this list of conditions and the following disclaimer in the documentation
    +053     and/or other materials provided with the distribution. 
    +054    
    +055     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +056     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +057     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +058     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +059     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +060     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +061     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +062     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +063     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +064     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +065     */
    +066    
    +067    /**
    +068     * <p>
    +069     * Defines a task or assignment.
    +070     * </p>
    +071     * <p>
    +072     * <b>Examples:</b>
    +073     * 
    +074     * <pre class="brush:java">
    +075     * VTodo todo = new VTodo();
    +076     * todo.setSummary("Complete report");
    +077     * Date due = ...
    +078     * todo.setDateDue(due);
    +079     * todo.setStatus(Status.confirmed());
    +080     * </pre>
    +081     * 
    +082     * </p>
    +083     * @author Michael Angstadt
    +084     * @rfc 5545 p.55-7
    +085     */
    +086    public class VTodo extends ICalComponent {
    +087            /**
    +088             * <p>
    +089             * Creates a new to-do entry.
    +090             * </p>
    +091             * <p>
    +092             * The following properties are auto-generated on object creation. These
    +093             * properties <b>must</b> be present in order for the to-do to be valid:
    +094             * <ul>
    +095             * <li>{@link Uid} - Set to a UUID.</li>
    +096             * <li>{@link DateTimeStamp} - Set to the current date-time.</li>
    +097             * </ul>
    +098             * </p>
    +099             */
    +100            public VTodo() {
    +101                    setUid(Uid.random());
    +102                    setDateTimeStamp(new Date());
    +103            }
    +104    
    +105            /**
    +106             * Gets the unique identifier for this to-do. This component object comes
    +107             * populated with a UID on creation. This is a <b>required</b> property.
    +108             * @return the UID or null if not set
    +109             * @rfc 5545 p.117-8
    +110             */
    +111            public Uid getUid() {
    +112                    return getProperty(Uid.class);
    +113            }
    +114    
    +115            /**
    +116             * Sets the unique identifier for this to-do. This component object comes
    +117             * populated with a UID on creation. This is a <b>required</b> property.
    +118             * @param uid the UID or null to remove
    +119             * @rfc 5545 p.117-8
    +120             */
    +121            public void setUid(Uid uid) {
    +122                    setProperty(Uid.class, uid);
    +123            }
    +124    
    +125            /**
    +126             * Sets the unique identifier for this to-do. This component object comes
    +127             * populated with a UID on creation. This is a <b>required</b> property.
    +128             * @param uid the UID or null to remove
    +129             * @return the property that was created
    +130             * @rfc 5545 p.117-8
    +131             */
    +132            public Uid setUid(String uid) {
    +133                    Uid prop = (uid == null) ? null : new Uid(uid);
    +134                    setUid(prop);
    +135                    return prop;
    +136            }
    +137    
    +138            /**
    +139             * Gets either (a) the creation date of the iCalendar object (if the
    +140             * {@link Method} property is defined) or (b) the date that the to-do was
    +141             * last modified (the {@link LastModified} property also holds this
    +142             * information). This to-do object comes populated with a
    +143             * {@link DateTimeStamp} property that is set to the current time. This is a
    +144             * <b>required</b> property.
    +145             * @return the date time stamp or null if not set
    +146             * @rfc 5545 p.137-8
    +147             */
    +148            public DateTimeStamp getDateTimeStamp() {
    +149                    return getProperty(DateTimeStamp.class);
    +150            }
    +151    
    +152            /**
    +153             * Sets either (a) the creation date of the iCalendar object (if the
    +154             * {@link Method} property is defined) or (b) the date that the to-do was
    +155             * last modified (the {@link LastModified} property also holds this
    +156             * information). This to-do object comes populated with a
    +157             * {@link DateTimeStamp} property that is set to the current time. This is a
    +158             * <b>required</b> property.
    +159             * @param dateTimeStamp the date time stamp or null to remove
    +160             * @rfc 5545 p.137-8
    +161             */
    +162            public void setDateTimeStamp(DateTimeStamp dateTimeStamp) {
    +163                    setProperty(DateTimeStamp.class, dateTimeStamp);
    +164            }
    +165    
    +166            /**
    +167             * Sets either (a) the creation date of the iCalendar object (if the
    +168             * {@link Method} property is defined) or (b) the date that the to-do was
    +169             * last modified (the {@link LastModified} property also holds this
    +170             * information). This to-do object comes populated with a
    +171             * {@link DateTimeStamp} property that is set to the current time. This is a
    +172             * <b>required</b> property.
    +173             * @param dateTimeStamp the date time stamp or null to remove
    +174             * @return the property that was created
    +175             * @rfc 5545 p.137-8
    +176             */
    +177            public DateTimeStamp setDateTimeStamp(Date dateTimeStamp) {
    +178                    DateTimeStamp prop = (dateTimeStamp == null) ? null : new DateTimeStamp(dateTimeStamp);
    +179                    setDateTimeStamp(prop);
    +180                    return prop;
    +181            }
    +182    
    +183            /**
    +184             * Gets the level of sensitivity of the to-do data. If not specified, the
    +185             * data within the to-do should be considered "public".
    +186             * @return the classification level or null if not set
    +187             * @rfc 5545 p.82-3
    +188             */
    +189            public Classification getClassification() {
    +190                    return getProperty(Classification.class);
    +191            }
    +192    
    +193            /**
    +194             * Sets the level of sensitivity of the to-do data. If not specified, the
    +195             * data within the to-do should be considered "public".
    +196             * @param classification the classification level or null to remove
    +197             * @rfc 5545 p.82-3
    +198             */
    +199            public void setClassification(Classification classification) {
    +200                    setProperty(Classification.class, classification);
    +201            }
    +202    
    +203            /**
    +204             * Sets the level of sensitivity of the to-do data. If not specified, the
    +205             * data within the to-do should be considered "public".
    +206             * @param classification the classification level (e.g. "CONFIDENTIAL") or
    +207             * null to remove
    +208             * @return the property that was created
    +209             * @rfc 5545 p.82-3
    +210             */
    +211            public Classification setClassification(String classification) {
    +212                    Classification prop = (classification == null) ? null : new Classification(classification);
    +213                    setClassification(prop);
    +214                    return prop;
    +215            }
    +216    
    +217            /**
    +218             * Gets the date and time that the to-do was completed.
    +219             * @return the completion date or null if not set
    +220             * @rfc 5545 p.94-5
    +221             */
    +222            public Completed getCompleted() {
    +223                    return getProperty(Completed.class);
    +224            }
    +225    
    +226            /**
    +227             * Sets the date and time that the to-do was completed.
    +228             * @param completed the completion date or null to remove
    +229             * @rfc 5545 p.94-5
    +230             */
    +231            public void setCompleted(Completed completed) {
    +232                    setProperty(Completed.class, completed);
    +233            }
    +234    
    +235            /**
    +236             * Sets the date and time that the to-do was completed.
    +237             * @param completed the completion date or null to remove
    +238             * @return the property that was created
    +239             * @rfc 5545 p.94-5
    +240             */
    +241            public Completed setCompleted(Date completed) {
    +242                    Completed prop = (completed == null) ? null : new Completed(completed);
    +243                    setCompleted(prop);
    +244                    return prop;
    +245            }
    +246    
    +247            /**
    +248             * Gets the date-time that the to-do was initially created.
    +249             * @return the creation date-time or null if not set
    +250             * @rfc 5545 p.136
    +251             */
    +252            public Created getCreated() {
    +253                    return getProperty(Created.class);
    +254            }
    +255    
    +256            /**
    +257             * Sets the date-time that the to-do was initially created.
    +258             * @param created the creation date-time or null to remove
    +259             * @rfc 5545 p.136
    +260             */
    +261            public void setCreated(Created created) {
    +262                    setProperty(Created.class, created);
    +263            }
    +264    
    +265            /**
    +266             * Sets the date-time that the to-do was initially created.
    +267             * @param created the creation date-time or null to remove
    +268             * @return the property that was created
    +269             * @rfc 5545 p.136
    +270             */
    +271            public Created setCreated(Date created) {
    +272                    Created prop = (created == null) ? null : new Created(created);
    +273                    setCreated(prop);
    +274                    return prop;
    +275            }
    +276    
    +277            /**
    +278             * Gets a detailed description of the to-do. The description should be more
    +279             * detailed than the one provided by the {@link Summary} property.
    +280             * @return the description or null if not set
    +281             * @rfc 5545 p.84-5
    +282             */
    +283            public Description getDescription() {
    +284                    return getProperty(Description.class);
    +285            }
    +286    
    +287            /**
    +288             * Sets a detailed description of the to-do. The description should be more
    +289             * detailed than the one provided by the {@link Summary} property.
    +290             * @param description the description or null to remove
    +291             * @rfc 5545 p.84-5
    +292             */
    +293            public void setDescription(Description description) {
    +294                    setProperty(Description.class, description);
    +295            }
    +296    
    +297            /**
    +298             * Sets a detailed description of the to-do. The description should be more
    +299             * detailed than the one provided by the {@link Summary} property.
    +300             * @param description the description or null to remove
    +301             * @return the property that was created
    +302             * @rfc 5545 p.84-5
    +303             */
    +304            public Description setDescription(String description) {
    +305                    Description prop = (description == null) ? null : new Description(description);
    +306                    setDescription(prop);
    +307                    return prop;
    +308            }
    +309    
    +310            /**
    +311             * Gets the date that the to-do starts.
    +312             * @return the start date or null if not set
    +313             * @rfc 5545 p.97-8
    +314             */
    +315            public DateStart getDateStart() {
    +316                    return getProperty(DateStart.class);
    +317            }
    +318    
    +319            /**
    +320             * Sets the date that the to-do starts.
    +321             * @param dateStart the start date or null to remove
    +322             * @rfc 5545 p.97-8
    +323             */
    +324            public void setDateStart(DateStart dateStart) {
    +325                    setProperty(DateStart.class, dateStart);
    +326            }
    +327    
    +328            /**
    +329             * Sets the date that the to-do starts.
    +330             * @param dateStart the start date or null to remove
    +331             * @return the property that was created
    +332             * @rfc 5545 p.97-8
    +333             */
    +334            public DateStart setDateStart(Date dateStart) {
    +335                    DateStart prop = (dateStart == null) ? null : new DateStart(dateStart);
    +336                    setDateStart(prop);
    +337                    return prop;
    +338            }
    +339    
    +340            /**
    +341             * Gets a set of geographical coordinates.
    +342             * @return the geographical coordinates or null if not set
    +343             * @rfc 5545 p.85-7
    +344             */
    +345            public Geo getGeo() {
    +346                    return getProperty(Geo.class);
    +347            }
    +348    
    +349            /**
    +350             * Sets a set of geographical coordinates.
    +351             * @param geo the geographical coordinates or null to remove
    +352             * @rfc 5545 p.85-7
    +353             */
    +354            public void setGeo(Geo geo) {
    +355                    setProperty(Geo.class, geo);
    +356            }
    +357    
    +358            /**
    +359             * Gets the date-time that the to-do was last changed.
    +360             * @return the last modified date or null if not set
    +361             * @rfc 5545 p.138
    +362             */
    +363            public LastModified getLastModified() {
    +364                    return getProperty(LastModified.class);
    +365            }
    +366    
    +367            /**
    +368             * Sets the date-time that the to-do was last changed.
    +369             * @param lastModified the last modified date or null to remove
    +370             * @rfc 5545 p.138
    +371             */
    +372            public void setLastModified(LastModified lastModified) {
    +373                    setProperty(LastModified.class, lastModified);
    +374            }
    +375    
    +376            /**
    +377             * Sets the date-time that the to-do was last changed.
    +378             * @param lastModified the last modified date or null to remove
    +379             * @return the property that was created
    +380             * @rfc 5545 p.138
    +381             */
    +382            public LastModified setLastModified(Date lastModified) {
    +383                    LastModified prop = (lastModified == null) ? null : new LastModified(lastModified);
    +384                    setLastModified(prop);
    +385                    return prop;
    +386            }
    +387    
    +388            /**
    +389             * Gets the physical location of the to-do.
    +390             * @return the location or null if not set
    +391             * @rfc 5545 p.87-8
    +392             */
    +393            public Location getLocation() {
    +394                    return getProperty(Location.class);
    +395            }
    +396    
    +397            /**
    +398             * Sets the physical location of the to-do.
    +399             * @param location the location or null to remove
    +400             * @rfc 5545 p.87-8
    +401             */
    +402            public void setLocation(Location location) {
    +403                    setProperty(Location.class, location);
    +404            }
    +405    
    +406            /**
    +407             * Sets the physical location of the to-do.
    +408             * @param location the location (e.g. "Room 101") or null to remove
    +409             * @return the property that was created
    +410             * @rfc 5545 p.87-8
    +411             */
    +412            public Location setLocation(String location) {
    +413                    Location prop = (location == null) ? null : new Location(location);
    +414                    setLocation(prop);
    +415                    return prop;
    +416            }
    +417    
    +418            /**
    +419             * Gets the organizer of the to-do.
    +420             * @return the organizer or null if not set
    +421             * @rfc 5545 p.111-2
    +422             */
    +423            public Organizer getOrganizer() {
    +424                    return getProperty(Organizer.class);
    +425            }
    +426    
    +427            /**
    +428             * Sets the organizer of the to-do.
    +429             * @param organizer the organizer or null to remove
    +430             * @rfc 5545 p.111-2
    +431             */
    +432            public void setOrganizer(Organizer organizer) {
    +433                    setProperty(Organizer.class, organizer);
    +434            }
    +435    
    +436            /**
    +437             * Sets the organizer of the to-do.
    +438             * @param email the organizer's email address (e.g. "johndoe@example.com")
    +439             * or null to remove
    +440             * @return the property that was created
    +441             * @rfc 5545 p.111-2
    +442             */
    +443            public Organizer setOrganizer(String email) {
    +444                    Organizer prop = (email == null) ? null : Organizer.email(email);
    +445                    setOrganizer(prop);
    +446                    return prop;
    +447            }
    +448    
    +449            /**
    +450             * Gets the amount that the to-do task has been completed.
    +451             * @return the percent complete or null if not set
    +452             * @rfc 5545 p.88-9
    +453             */
    +454            public PercentComplete getPercentComplete() {
    +455                    return getProperty(PercentComplete.class);
    +456            }
    +457    
    +458            /**
    +459             * Sets the amount that the to-do task has been completed.
    +460             * @param percentComplete the percent complete or null to remove
    +461             * @rfc 5545 p.88-9
    +462             */
    +463            public void setPercentComplete(PercentComplete percentComplete) {
    +464                    setProperty(PercentComplete.class, percentComplete);
    +465            }
    +466    
    +467            /**
    +468             * Sets the amount that the to-do task has been completed.
    +469             * @param percent the percent complete (e.g. "50" for 50%) or null to remove
    +470             * @return the property that was created
    +471             * @rfc 5545 p.88-9
    +472             */
    +473            public PercentComplete setPercentComplete(Integer percent) {
    +474                    PercentComplete prop = (percent == null) ? null : new PercentComplete(percent);
    +475                    setPercentComplete(prop);
    +476                    return prop;
    +477            }
    +478    
    +479            /**
    +480             * Gets the priority of the to-do.
    +481             * @return the priority or null if not set
    +482             * @rfc 5545 p.89-90
    +483             */
    +484            public Priority getPriority() {
    +485                    return getProperty(Priority.class);
    +486            }
    +487    
    +488            /**
    +489             * Sets the priority of the to-do.
    +490             * @param priority the priority or null to remove
    +491             * @rfc 5545 p.89-90
    +492             */
    +493            public void setPriority(Priority priority) {
    +494                    setProperty(Priority.class, priority);
    +495            }
    +496    
    +497            /**
    +498             * Sets the priority of the to-do.
    +499             * @param priority the priority ("0" is undefined, "1" is the highest, "9"
    +500             * is the lowest) or null to remove
    +501             * @return the property that was created
    +502             * @rfc 5545 p.89-90
    +503             */
    +504            public Priority setPriority(Integer priority) {
    +505                    Priority prop = (priority == null) ? null : new Priority(priority);
    +506                    setPriority(prop);
    +507                    return prop;
    +508            }
    +509    
    +510            /**
    +511             * Gets the original value of the {@link DateStart} property if the to-do is
    +512             * recurring and has been modified. Used in conjunction with the {@link Uid}
    +513             * and {@link Sequence} properties to uniquely identify a recurrence
    +514             * instance.
    +515             * @return the recurrence ID or null if not set
    +516             * @rfc 5545 p.112-4
    +517             */
    +518            public RecurrenceId getRecurrenceId() {
    +519                    return getProperty(RecurrenceId.class);
    +520            }
    +521    
    +522            /**
    +523             * Sets the original value of the {@link DateStart} property if the to-do is
    +524             * recurring and has been modified. Used in conjunction with the {@link Uid}
    +525             * and {@link Sequence} properties to uniquely identify a recurrence
    +526             * instance.
    +527             * @param recurrenceId the recurrence ID or null to remove
    +528             * @rfc 5545 p.112-4
    +529             */
    +530            public void setRecurrenceId(RecurrenceId recurrenceId) {
    +531                    setProperty(RecurrenceId.class, recurrenceId);
    +532            }
    +533    
    +534            /**
    +535             * Sets the original value of the {@link DateStart} property if the to-do is
    +536             * recurring and has been modified. Used in conjunction with the {@link Uid}
    +537             * and {@link Sequence} properties to uniquely identify a recurrence
    +538             * instance.
    +539             * @param originalStartDate the original start date or null to remove
    +540             * @return the property that was created
    +541             * @rfc 5545 p.112-4
    +542             */
    +543            public RecurrenceId setRecurrenceId(Date originalStartDate) {
    +544                    RecurrenceId prop = (originalStartDate == null) ? null : new RecurrenceId(originalStartDate);
    +545                    setRecurrenceId(prop);
    +546                    return prop;
    +547            }
    +548    
    +549            /**
    +550             * Gets the revision number of the to-do. The organizer can increment this
    +551             * number every time he or she makes a significant change.
    +552             * @return the sequence number
    +553             * @rfc 5545 p.138-9
    +554             */
    +555            public Sequence getSequence() {
    +556                    return getProperty(Sequence.class);
    +557            }
    +558    
    +559            /**
    +560             * Sets the revision number of the to-do. The organizer can increment this
    +561             * number every time he or she makes a significant change.
    +562             * @param sequence the sequence number
    +563             * @rfc 5545 p.138-9
    +564             */
    +565            public void setSequence(Sequence sequence) {
    +566                    setProperty(Sequence.class, sequence);
    +567            }
    +568    
    +569            /**
    +570             * Sets the revision number of the to-do. The organizer can increment this
    +571             * number every time he or she makes a significant change.
    +572             * @param sequence the sequence number
    +573             * @return the property that was created
    +574             * @rfc 5545 p.138-9
    +575             */
    +576            public Sequence setSequence(Integer sequence) {
    +577                    Sequence prop = (sequence == null) ? null : new Sequence(sequence);
    +578                    setSequence(prop);
    +579                    return prop;
    +580            }
    +581    
    +582            /**
    +583             * Increments the revision number of the to-do. The organizer can increment
    +584             * this number every time he or she makes a significant change.
    +585             * @rfc 5545 p.138-9
    +586             */
    +587            public void incrementSequence() {
    +588                    Sequence sequence = getSequence();
    +589                    if (sequence == null) {
    +590                            setSequence(1);
    +591                    } else {
    +592                            sequence.increment();
    +593                    }
    +594            }
    +595    
    +596            /**
    +597             * Gets the status of the to-do.
    +598             * @return the status or null if not set
    +599             * @rfc 5545 p.92-3
    +600             */
    +601            public Status getStatus() {
    +602                    return getProperty(Status.class);
    +603            }
    +604    
    +605            /**
    +606             * Sets the status of the to-do.
    +607             * <p>
    +608             * Valid to-do status codes are:
    +609             * <ul>
    +610             * <li>NEEDS-ACTION</li>
    +611             * <li>COMPLETED</li>
    +612             * <li>IN-PROGRESS</li>
    +613             * <li>CANCELLED</li>
    +614             * </ul>
    +615             * </p>
    +616             * @param status the status or null to remove
    +617             * @rfc 5545 p.92-3
    +618             */
    +619            public void setStatus(Status status) {
    +620                    setProperty(Status.class, status);
    +621            }
    +622    
    +623            /**
    +624             * Gets the summary of the to-do.
    +625             * @return the summary or null if not set
    +626             * @rfc 5545 p.93-4
    +627             */
    +628            public Summary getSummary() {
    +629                    return getProperty(Summary.class);
    +630            }
    +631    
    +632            /**
    +633             * Sets the summary of the to-do.
    +634             * @param summary the summary or null to remove
    +635             * @rfc 5545 p.93-4
    +636             */
    +637            public void setSummary(Summary summary) {
    +638                    setProperty(Summary.class, summary);
    +639            }
    +640    
    +641            /**
    +642             * Sets the summary of the to-do.
    +643             * @param summary the summary or null to remove
    +644             * @return the property that was created
    +645             * @rfc 5545 p.93-4
    +646             */
    +647            public Summary setSummary(String summary) {
    +648                    Summary prop = (summary == null) ? null : new Summary(summary);
    +649                    setSummary(prop);
    +650                    return prop;
    +651            }
    +652    
    +653            /**
    +654             * Gets a URL to a resource that contains additional information about the
    +655             * to-do.
    +656             * @return the URL or null if not set
    +657             * @rfc 5545 p.116-7
    +658             */
    +659            public Url getUrl() {
    +660                    return getProperty(Url.class);
    +661            }
    +662    
    +663            /**
    +664             * Sets a URL to a resource that contains additional information about the
    +665             * to-do.
    +666             * @param url the URL or null to remove
    +667             * @rfc 5545 p.116-7
    +668             */
    +669            public void setUrl(Url url) {
    +670                    setProperty(Url.class, url);
    +671            }
    +672    
    +673            /**
    +674             * Sets a URL to a resource that contains additional information about the
    +675             * to-do.
    +676             * @param url the URL (e.g. "http://example.com/resource.ics") or null to
    +677             * remove
    +678             * @return the property that was created
    +679             * @rfc 5545 p.116-7
    +680             */
    +681            public Url setUrl(String url) {
    +682                    Url prop = (url == null) ? null : new Url(url);
    +683                    setUrl(prop);
    +684                    return prop;
    +685            }
    +686    
    +687            /**
    +688             * Gets how often the to-do repeats.
    +689             * @return the recurrence rule or null if not set
    +690             * @rfc 5545 p.122-32
    +691             */
    +692            public RecurrenceRule getRecurrenceRule() {
    +693                    return getProperty(RecurrenceRule.class);
    +694            }
    +695    
    +696            /**
    +697             * Sets how often the to-do repeats.
    +698             * @param recur the recurrence rule or null to remove
    +699             * @return the property that was created
    +700             * @rfc 5545 p.122-32
    +701             */
    +702            public RecurrenceRule setRecurrenceRule(Recurrence recur) {
    +703                    RecurrenceRule prop = (recur == null) ? null : new RecurrenceRule(recur);
    +704                    setRecurrenceRule(prop);
    +705                    return prop;
    +706            }
    +707    
    +708            /**
    +709             * Sets how often the to-do repeats.
    +710             * @param recurrenceRule the recurrence rule or null to remove
    +711             * @rfc 5545 p.122-32
    +712             */
    +713            public void setRecurrenceRule(RecurrenceRule recurrenceRule) {
    +714                    setProperty(RecurrenceRule.class, recurrenceRule);
    +715            }
    +716    
    +717            /**
    +718             * Gets the date that a to-do is due by.
    +719             * @return the due date or null if not set
    +720             * @rfc 5545 p.96-7
    +721             */
    +722            public DateDue getDateDue() {
    +723                    return getProperty(DateDue.class);
    +724            }
    +725    
    +726            /**
    +727             * Sets the date that a to-do is due by. This must NOT be set if a
    +728             * {@link DurationProperty} is defined.
    +729             * @param dateDue the due date or null to remove
    +730             * @rfc 5545 p.96-7
    +731             */
    +732            public void setDateDue(DateDue dateDue) {
    +733                    setProperty(DateDue.class, dateDue);
    +734            }
    +735    
    +736            /**
    +737             * Sets the date that a to-do is due by. This must NOT be set if a
    +738             * {@link DurationProperty} is defined.
    +739             * @param dateDue the due date or null to remove
    +740             * @return the property that was created
    +741             * @rfc 5545 p.96-7
    +742             */
    +743            public DateDue setDateDue(Date dateDue) {
    +744                    DateDue prop = (dateDue == null) ? null : new DateDue(dateDue);
    +745                    setDateDue(prop);
    +746                    return prop;
    +747            }
    +748    
    +749            /**
    +750             * Gets the duration of the to-do.
    +751             * @return the duration or null if not set
    +752             * @rfc 5545 p.99
    +753             */
    +754            public DurationProperty getDuration() {
    +755                    return getProperty(DurationProperty.class);
    +756            }
    +757    
    +758            /**
    +759             * Sets the duration of the to-do. This must NOT be set if a {@link DateDue}
    +760             * is defined.
    +761             * @param duration the duration or null to remove
    +762             * @rfc 5545 p.99
    +763             */
    +764            public void setDuration(DurationProperty duration) {
    +765                    setProperty(DurationProperty.class, duration);
    +766            }
    +767    
    +768            /**
    +769             * Sets the duration of the to-do. This must NOT be set if a {@link DateDue}
    +770             * is defined.
    +771             * @param duration the duration or null to remove
    +772             * @return the property that was created
    +773             * @rfc 5545 p.99
    +774             */
    +775            public DurationProperty setDuration(Duration duration) {
    +776                    DurationProperty prop = (duration == null) ? null : new DurationProperty(duration);
    +777                    setDuration(prop);
    +778                    return prop;
    +779            }
    +780    
    +781            /**
    +782             * Gets any attachments that are associated with the to-do.
    +783             * @return the attachments
    +784             * @rfc 5545 p.80-1
    +785             */
    +786            public List<Attachment> getAttachments() {
    +787                    return getProperties(Attachment.class);
    +788            }
    +789    
    +790            /**
    +791             * Adds an attachment to the to-do.
    +792             * @param attachment the attachment to add
    +793             * @rfc 5545 p.80-1
    +794             */
    +795            public void addAttachment(Attachment attachment) {
    +796                    addProperty(attachment);
    +797            }
    +798    
    +799            /**
    +800             * Gets the people who are involved in the to-do.
    +801             * @return the attendees
    +802             * @rfc 5545 p.107-9
    +803             */
    +804            public List<Attendee> getAttendees() {
    +805                    return getProperties(Attendee.class);
    +806            }
    +807    
    +808            /**
    +809             * Adds a person who is involved in the to-do.
    +810             * @param attendee the attendee
    +811             * @rfc 5545 p.107-9
    +812             */
    +813            public void addAttendee(Attendee attendee) {
    +814                    addProperty(attendee);
    +815            }
    +816    
    +817            /**
    +818             * Adds a person who is involved in the to-do.
    +819             * @param email the attendee's email address
    +820             * @return the property that was created
    +821             * @rfc 5545 p.107-9
    +822             */
    +823            public Attendee addAttendee(String email) {
    +824                    Attendee prop = Attendee.email(email);
    +825                    addAttendee(prop);
    +826                    return prop;
    +827            }
    +828    
    +829            /**
    +830             * Gets a list of "tags" or "keywords" that describe the to-do.
    +831             * @return the categories
    +832             * @rfc 5545 p.81-2
    +833             */
    +834            public List<Categories> getCategories() {
    +835                    return getProperties(Categories.class);
    +836            }
    +837    
    +838            /**
    +839             * Adds a list of "tags" or "keywords" that describe the to-do. Note that a
    +840             * single property can hold multiple keywords.
    +841             * @param categories the categories to add
    +842             * @rfc 5545 p.81-2
    +843             */
    +844            public void addCategories(Categories categories) {
    +845                    addProperty(categories);
    +846            }
    +847    
    +848            /**
    +849             * Adds a list of "tags" or "keywords" that describe the to-do.
    +850             * @param categories the categories to add
    +851             * @return the property that was created
    +852             * @rfc 5545 p.81-2
    +853             */
    +854            public Categories addCategories(String... categories) {
    +855                    Categories prop = new Categories(categories);
    +856                    addCategories(prop);
    +857                    return prop;
    +858            }
    +859    
    +860            /**
    +861             * Adds a list of "tags" or "keywords" that describe the to-do.
    +862             * @param categories the categories to add
    +863             * @return the property that was created
    +864             * @rfc 5545 p.81-2
    +865             */
    +866            public Categories addCategories(List<String> categories) {
    +867                    Categories prop = new Categories(categories);
    +868                    addCategories(prop);
    +869                    return prop;
    +870            }
    +871    
    +872            /**
    +873             * Gets the comments attached to the to-do.
    +874             * @return the comments
    +875             * @rfc 5545 p.83-4
    +876             */
    +877            public List<Comment> getComments() {
    +878                    return getProperties(Comment.class);
    +879            }
    +880    
    +881            /**
    +882             * Adds a comment to the to-do.
    +883             * @param comment the comment to add
    +884             * @rfc 5545 p.83-4
    +885             */
    +886            public void addComment(Comment comment) {
    +887                    addProperty(comment);
    +888            }
    +889    
    +890            /**
    +891             * Adds a comment to the to-do.
    +892             * @param comment the comment to add
    +893             * @return the property that was created
    +894             * @rfc 5545 p.83-4
    +895             */
    +896            public Comment addComment(String comment) {
    +897                    Comment prop = new Comment(comment);
    +898                    addComment(prop);
    +899                    return prop;
    +900            }
    +901    
    +902            /**
    +903             * Gets the contacts associated with the to-do.
    +904             * @return the contacts
    +905             * @rfc 5545 p.109-11
    +906             */
    +907            public List<Contact> getContacts() {
    +908                    return getProperties(Contact.class);
    +909            }
    +910    
    +911            /**
    +912             * Adds a contact to the to-do.
    +913             * @param contact the contact
    +914             * @rfc 5545 p.109-11
    +915             */
    +916            public void addContact(Contact contact) {
    +917                    addProperty(contact);
    +918            }
    +919    
    +920            /**
    +921             * Adds a contact to the to-do.
    +922             * @param contact the contact (e.g. "ACME Co - (123) 555-1234")
    +923             * @return the property that was created
    +924             * @rfc 5545 p.109-11
    +925             */
    +926            public Contact addContact(String contact) {
    +927                    Contact prop = new Contact(contact);
    +928                    addContact(prop);
    +929                    return prop;
    +930            }
    +931    
    +932            /**
    +933             * Gets the list of exceptions to the recurrence rule defined in the to-do
    +934             * (if one is defined).
    +935             * @return the list of exceptions
    +936             * @rfc 5545 p.118-20
    +937             */
    +938            public List<ExceptionDates> getExceptionDates() {
    +939                    return getProperties(ExceptionDates.class);
    +940            }
    +941    
    +942            /**
    +943             * Adds a list of exceptions to the recurrence rule defined in the to-do (if
    +944             * one is defined). Note that this property can contain multiple dates.
    +945             * @param exceptionDates the list of exceptions
    +946             * @rfc 5545 p.118-20
    +947             */
    +948            public void addExceptionDates(ExceptionDates exceptionDates) {
    +949                    addProperty(exceptionDates);
    +950            }
    +951    
    +952            /**
    +953             * Gets the response to a scheduling request.
    +954             * @return the response
    +955             * @rfc 5545 p.141-3
    +956             */
    +957            public RequestStatus getRequestStatus() {
    +958                    return getProperty(RequestStatus.class);
    +959            }
    +960    
    +961            /**
    +962             * Sets the response to a scheduling request.
    +963             * @param requestStatus the response
    +964             * @rfc 5545 p.141-3
    +965             */
    +966            public void setRequestStatus(RequestStatus requestStatus) {
    +967                    setProperty(RequestStatus.class, requestStatus);
    +968            }
    +969    
    +970            /**
    +971             * Gets the components that the to-do is related to.
    +972             * @return the relationships
    +973             * @rfc 5545 p.115-6
    +974             */
    +975            public List<RelatedTo> getRelatedTo() {
    +976                    return getProperties(RelatedTo.class);
    +977            }
    +978    
    +979            /**
    +980             * Adds a component that the to-do is related to.
    +981             * @param relatedTo the relationship
    +982             * @rfc 5545 p.115-6
    +983             */
    +984            public void addRelatedTo(RelatedTo relatedTo) {
    +985                    //TODO create a method that accepts a component and make the RelatedTo property invisible to the user
    +986                    //@formatter:off
    +987                    /*
    +988                     * addRelation(RelationshipType relType, ICalComponent component){
    +989                     *   RelatedTo prop = new RelatedTo(component.getUid().getValue());
    +990                     *   prop.setRelationshipType(relType);
    +991                     *   addProperty(prop);
    +992                     * }
    +993                     */
    +994                    //@formatter:on
    +995                    addProperty(relatedTo);
    +996            }
    +997    
    +998            /**
    +999             * Adds a component that the to-do is related to.
    +1000             * @param uid the UID of the other component
    +1001             * @return the property that was created
    +1002             * @rfc 5545 p.115-6
    +1003             */
    +1004            public RelatedTo addRelatedTo(String uid) {
    +1005                    RelatedTo prop = new RelatedTo(uid);
    +1006                    addRelatedTo(prop);
    +1007                    return prop;
    +1008            }
    +1009    
    +1010            /**
    +1011             * Gets the resources that are needed for the to-do.
    +1012             * @return the resources
    +1013             * @rfc 5545 p.91
    +1014             */
    +1015            public List<Resources> getResources() {
    +1016                    return getProperties(Resources.class);
    +1017            }
    +1018    
    +1019            /**
    +1020             * Adds a list of resources that are needed for the to-do. Note that a
    +1021             * single property can hold multiple resources.
    +1022             * @param resources the resources to add
    +1023             * @rfc 5545 p.91
    +1024             */
    +1025            public void addResources(Resources resources) {
    +1026                    addProperty(resources);
    +1027            }
    +1028    
    +1029            /**
    +1030             * Adds a list of resources that are needed for the to-do.
    +1031             * @param resources the resources to add (e.g. "easel", "projector")
    +1032             * @return the property that was created
    +1033             * @rfc 5545 p.91
    +1034             */
    +1035            public Resources addResources(String... resources) {
    +1036                    Resources prop = new Resources(resources);
    +1037                    addResources(prop);
    +1038                    return prop;
    +1039            }
    +1040    
    +1041            /**
    +1042             * Adds a list of resources that are needed for the to-do.
    +1043             * @param resources the resources to add (e.g. "easel", "projector")
    +1044             * @return the property that was created
    +1045             * @rfc 5545 p.91
    +1046             */
    +1047            public Resources addResources(List<String> resources) {
    +1048                    Resources prop = new Resources(resources);
    +1049                    addResources(prop);
    +1050                    return prop;
    +1051            }
    +1052    
    +1053            /**
    +1054             * Gets the list of dates/periods that help define the recurrence rule of
    +1055             * this to-do (if one is defined).
    +1056             * @return the recurrence dates
    +1057             * @rfc 5545 p.120-2
    +1058             */
    +1059            public List<RecurrenceDates> getRecurrenceDates() {
    +1060                    return getProperties(RecurrenceDates.class);
    +1061            }
    +1062    
    +1063            /**
    +1064             * Adds a list of dates/periods that help define the recurrence rule of this
    +1065             * to-do (if one is defined).
    +1066             * @param recurrenceDates the recurrence dates
    +1067             * @rfc 5545 p.120-2
    +1068             */
    +1069            public void addRecurrenceDates(RecurrenceDates recurrenceDates) {
    +1070                    addProperty(recurrenceDates);
    +1071            }
    +1072    
    +1073            /**
    +1074             * Gets the alarms that are assigned to this to-do.
    +1075             * @return the alarms
    +1076             * @rfc 5545 p.71-6
    +1077             */
    +1078            public List<VAlarm> getAlarms() {
    +1079                    return getComponents(VAlarm.class);
    +1080            }
    +1081    
    +1082            /**
    +1083             * Adds an alarm to this to-do.
    +1084             * @param alarm the alarm
    +1085             * @rfc 5545 p.71-6
    +1086             */
    +1087            public void addAlarm(VAlarm alarm) {
    +1088                    addComponent(alarm);
    +1089            }
    +1090    
    +1091            /**
    +1092             * <p>
    +1093             * Gets the exceptions for the {@link RecurrenceRule} property.
    +1094             * </p>
    +1095             * <p>
    +1096             * Note that this property has been removed from the latest version of the
    +1097             * iCal specification. Its use should be avoided.
    +1098             * </p>
    +1099             * @return the exception rules
    +1100             * @rfc 2445 p.114-15
    +1101             */
    +1102            public List<ExceptionRule> getExceptionRules() {
    +1103                    return getProperties(ExceptionRule.class);
    +1104            }
    +1105    
    +1106            /**
    +1107             * <p>
    +1108             * Adds an exception for the {@link RecurrenceRule} property.
    +1109             * </p>
    +1110             * <p>
    +1111             * Note that this property has been removed from the latest version of the
    +1112             * iCal specification. Its use should be avoided.
    +1113             * </p>
    +1114             * @param recur the exception rule to add
    +1115             * @return the property that was created
    +1116             * @rfc 2445 p.114-15
    +1117             */
    +1118            public ExceptionRule addExceptionRule(Recurrence recur) {
    +1119                    ExceptionRule prop = (recur == null) ? null : new ExceptionRule(recur);
    +1120                    addExceptionRule(prop);
    +1121                    return prop;
    +1122            }
    +1123    
    +1124            /**
    +1125             * <p>
    +1126             * Adds an exception for the {@link RecurrenceRule} property.
    +1127             * </p>
    +1128             * <p>
    +1129             * Note that this property has been removed from the latest version of the
    +1130             * iCal specification. Its use should be avoided.
    +1131             * </p>
    +1132             * @param exceptionRule the exception rule to add
    +1133             * @rfc 2445 p.114-15
    +1134             */
    +1135            public void addExceptionRule(ExceptionRule exceptionRule) {
    +1136                    addProperty(exceptionRule);
    +1137            }
    +1138    
    +1139            @SuppressWarnings("unchecked")
    +1140            @Override
    +1141            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +1142                    checkRequiredCardinality(warnings, Uid.class, DateTimeStamp.class);
    +1143                    checkOptionalCardinality(warnings, Classification.class, Completed.class, Created.class, Description.class, DateStart.class, Geo.class, LastModified.class, Location.class, Organizer.class, PercentComplete.class, Priority.class, RecurrenceId.class, Sequence.class, Status.class, Summary.class, Url.class);
    +1144    
    +1145                    Status status = getStatus();
    +1146                    if (status != null && (status.isTentative() || status.isConfirmed() || status.isDraft() || status.isFinal())) {
    +1147                            warnings.add("Invalid status value of \"" + status.getValue() + "\".  Valid status values for to-do tasks are \"needs-action\", \"completed\", \"in-progress\", and \"cancelled\".");
    +1148                    }
    +1149    
    +1150                    DateStart dateStart = getDateStart();
    +1151                    DateDue dateDue = getDateDue();
    +1152                    if (dateStart != null && dateDue != null) {
    +1153                            Date start = dateStart.getValue();
    +1154                            Date due = dateDue.getValue();
    +1155                            if (start != null && due != null && start.compareTo(due) > 0) {
    +1156                                    warnings.add("" + DateStart.class.getSimpleName() + " must come before " + DateDue.class.getSimpleName() + ".");
    +1157                            }
    +1158    
    +1159                            if (dateStart.hasTime() != dateDue.hasTime()) {
    +1160                                    warnings.add("Both " + DateStart.class.getSimpleName() + " and " + DateDue.class.getSimpleName() + " must have the same data type (they must either both be dates or both be date-times).");
    +1161                            }
    +1162                    }
    +1163    
    +1164                    DurationProperty duration = getDuration();
    +1165                    if (dateDue != null && duration != null) {
    +1166                            warnings.add("A " + DateDue.class.getSimpleName() + " and a " + DurationProperty.class.getSimpleName() + " cannot both be defined in the same to-do.");
    +1167                    }
    +1168                    if (dateStart == null && duration != null) {
    +1169                            warnings.add("A " + DateStart.class.getSimpleName() + " must be defined if a " + DurationProperty.class.getSimpleName() + " is defined.");
    +1170                    }
    +1171    
    +1172                    RecurrenceId recurrenceId = getRecurrenceId();
    +1173                    if (recurrenceId != null && dateStart != null && dateStart.hasTime() != recurrenceId.hasTime()) {
    +1174                            warnings.add("Both " + DateStart.class.getSimpleName() + " and " + RecurrenceId.class.getSimpleName() + " must have the same data type (they must either both be dates or both be date-times).");
    +1175                    }
    +1176    
    +1177                    //RFC 5545 p. 167
    +1178                    RecurrenceRule rrule = getRecurrenceRule();
    +1179                    if (dateStart != null && rrule != null) {
    +1180                            Date start = dateStart.getValue();
    +1181                            Recurrence recur = rrule.getValue();
    +1182                            if (start != null && recur != null) {
    +1183                                    if (!dateStart.hasTime() && (!recur.getByHour().isEmpty() || !recur.getByMinute().isEmpty() || !recur.getBySecond().isEmpty())) {
    +1184                                            warnings.add("The BYHOUR, BYMINUTE, and BYSECOND rule parts cannot be specified in the " + RecurrenceRule.class.getSimpleName() + " property when the " + DateStart.class.getSimpleName() + " property contains a date value (as opposed to a date-time value).");
    +1185                                    }
    +1186                            }
    +1187                    }
    +1188    
    +1189                    //RFC 5545 p. 167
    +1190                    if (getProperties(RecurrenceRule.class).size() > 1) {
    +1191                            warnings.add("There should be only one instance of the " + RecurrenceRule.class.getSimpleName() + " property.");
    +1192                    }
    +1193            }
    +1194    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/DaylightSavingsTimeMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/DaylightSavingsTimeMarshaller.html new file mode 100644 index 000000000..586bd0fc1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/DaylightSavingsTimeMarshaller.html @@ -0,0 +1,108 @@ + + +
    +001    package biweekly.component.marshaller;
    +002    
    +003    import biweekly.component.DaylightSavingsTime;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * @author Michael Angstadt
    +032     */
    +033    public class DaylightSavingsTimeMarshaller extends ICalComponentMarshaller<DaylightSavingsTime> {
    +034            public DaylightSavingsTimeMarshaller() {
    +035                    super(DaylightSavingsTime.class, "DAYLIGHT");
    +036            }
    +037    
    +038            @Override
    +039            protected DaylightSavingsTime _newInstance() {
    +040                    return new DaylightSavingsTime();
    +041            }
    +042    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/ICalComponentMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/ICalComponentMarshaller.html new file mode 100644 index 000000000..757b5a5d4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/ICalComponentMarshaller.html @@ -0,0 +1,175 @@ + + +
    +001    package biweekly.component.marshaller;
    +002    
    +003    import java.util.Collection;
    +004    import java.util.List;
    +005    
    +006    import biweekly.component.ICalComponent;
    +007    import biweekly.property.ICalProperty;
    +008    
    +009    /*
    +010     Copyright (c) 2013, Michael Angstadt
    +011     All rights reserved.
    +012    
    +013     Redistribution and use in source and binary forms, with or without
    +014     modification, are permitted provided that the following conditions are met: 
    +015    
    +016     1. Redistributions of source code must retain the above copyright notice, this
    +017     list of conditions and the following disclaimer. 
    +018     2. Redistributions in binary form must reproduce the above copyright notice,
    +019     this list of conditions and the following disclaimer in the documentation
    +020     and/or other materials provided with the distribution. 
    +021    
    +022     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +023     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +024     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +025     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +026     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +027     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +028     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +029     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +030     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +031     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +032     */
    +033    
    +034    /**
    +035     * Base class for iCalendar component marshallers.
    +036     * @param <T> the component class
    +037     * @author Michael Angstadt
    +038     */
    +039    public abstract class ICalComponentMarshaller<T extends ICalComponent> {
    +040            protected final Class<T> clazz;
    +041            protected final String componentName;
    +042    
    +043            /**
    +044             * Creates a new component marshaller.
    +045             * @param clazz the component's class
    +046             * @param componentName the component's name (e.g. "VEVENT")
    +047             */
    +048            public ICalComponentMarshaller(Class<T> clazz, String componentName) {
    +049                    this.clazz = clazz;
    +050                    this.componentName = componentName;
    +051            }
    +052    
    +053            /**
    +054             * Gets the component class.
    +055             * @return the component class.
    +056             */
    +057            public Class<T> getComponentClass() {
    +058                    return clazz;
    +059            }
    +060    
    +061            /**
    +062             * Gets the component's name.
    +063             * @return the compent's name (e.g. "VEVENT")
    +064             */
    +065            public String getComponentName() {
    +066                    return componentName;
    +067            }
    +068    
    +069            /**
    +070             * Creates a new instance of the component class that doesn't have any
    +071             * properties or sub-components.
    +072             * @return the new instance
    +073             */
    +074            public T emptyInstance() {
    +075                    T component = _newInstance();
    +076    
    +077                    //remove any properties/components that were created in the constructor
    +078                    component.getProperties().clear();
    +079                    component.getComponents().clear();
    +080    
    +081                    return component;
    +082            }
    +083    
    +084            /**
    +085             * Creates a new instance of the component class.
    +086             * @return the new instance
    +087             */
    +088            protected abstract T _newInstance();
    +089    
    +090            /**
    +091             * Gets the sub-components to marshal. Child classes can override this for
    +092             * better control over which components are marshalled.
    +093             * @param component the component
    +094             * @return the sub-components to marshal
    +095             */
    +096            public Collection<ICalComponent> getComponents(T component) {
    +097                    return component.getComponents().values();
    +098            }
    +099    
    +100            /**
    +101             * Gets the properties to marshal. Child classes can override this for
    +102             * better control over which properties are marshalled.
    +103             * @param component the component
    +104             * @return the properties to marshal
    +105             */
    +106            public List<ICalProperty> getProperties(T component) {
    +107                    return component.getProperties().values();
    +108            }
    +109    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/ICalendarMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/ICalendarMarshaller.html new file mode 100644 index 000000000..39f0e5067 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/ICalendarMarshaller.html @@ -0,0 +1,108 @@ + + +
    +001    package biweekly.component.marshaller;
    +002    
    +003    import biweekly.ICalendar;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * @author Michael Angstadt
    +032     */
    +033    public class ICalendarMarshaller extends ICalComponentMarshaller<ICalendar> {
    +034            public ICalendarMarshaller() {
    +035                    super(ICalendar.class, "VCALENDAR");
    +036            }
    +037    
    +038            @Override
    +039            protected ICalendar _newInstance() {
    +040                    return new ICalendar();
    +041            }
    +042    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/RawComponentMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/RawComponentMarshaller.html new file mode 100644 index 000000000..de714eb85 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/RawComponentMarshaller.html @@ -0,0 +1,112 @@ + + +
    +001    package biweekly.component.marshaller;
    +002    
    +003    import biweekly.component.RawComponent;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * @author Michael Angstadt
    +032     */
    +033    public class RawComponentMarshaller extends ICalComponentMarshaller<RawComponent> {
    +034            /**
    +035             * Creates a new raw component marshaller.
    +036             * @param componentName the component's name (e.g. "X-PARTY")
    +037             */
    +038            public RawComponentMarshaller(String componentName) {
    +039                    super(RawComponent.class, componentName);
    +040            }
    +041    
    +042            @Override
    +043            protected RawComponent _newInstance() {
    +044                    return new RawComponent(componentName);
    +045            }
    +046    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/StandardTimeMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/StandardTimeMarshaller.html new file mode 100644 index 000000000..e2191f0a1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/StandardTimeMarshaller.html @@ -0,0 +1,108 @@ + + +
    +001    package biweekly.component.marshaller;
    +002    
    +003    import biweekly.component.StandardTime;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * @author Michael Angstadt
    +032     */
    +033    public class StandardTimeMarshaller extends ICalComponentMarshaller<StandardTime> {
    +034            public StandardTimeMarshaller() {
    +035                    super(StandardTime.class, "STANDARD");
    +036            }
    +037    
    +038            @Override
    +039            protected StandardTime _newInstance() {
    +040                    return new StandardTime();
    +041            }
    +042    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VAlarmMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VAlarmMarshaller.html new file mode 100644 index 000000000..da1056a68 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VAlarmMarshaller.html @@ -0,0 +1,108 @@ + + +
    +001    package biweekly.component.marshaller;
    +002    
    +003    import biweekly.component.VAlarm;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * @author Michael Angstadt
    +032     */
    +033    public class VAlarmMarshaller extends ICalComponentMarshaller<VAlarm> {
    +034            public VAlarmMarshaller() {
    +035                    super(VAlarm.class, "VALARM");
    +036            }
    +037    
    +038            @Override
    +039            protected VAlarm _newInstance() {
    +040                    return new VAlarm(null, null);
    +041            }
    +042    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VEventMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VEventMarshaller.html new file mode 100644 index 000000000..14cf28a7b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VEventMarshaller.html @@ -0,0 +1,108 @@ + + +
    +001    package biweekly.component.marshaller;
    +002    
    +003    import biweekly.component.VEvent;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * @author Michael Angstadt
    +032     */
    +033    public class VEventMarshaller extends ICalComponentMarshaller<VEvent> {
    +034            public VEventMarshaller() {
    +035                    super(VEvent.class, "VEVENT");
    +036            }
    +037    
    +038            @Override
    +039            protected VEvent _newInstance() {
    +040                    return new VEvent();
    +041            }
    +042    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VFreeBusyMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VFreeBusyMarshaller.html new file mode 100644 index 000000000..9e24495c3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VFreeBusyMarshaller.html @@ -0,0 +1,175 @@ + + +
    +001    package biweekly.component.marshaller;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.Collections;
    +005    import java.util.Comparator;
    +006    import java.util.Date;
    +007    import java.util.List;
    +008    
    +009    import biweekly.component.VFreeBusy;
    +010    import biweekly.property.FreeBusy;
    +011    import biweekly.property.ICalProperty;
    +012    import biweekly.util.Period;
    +013    
    +014    /*
    +015     Copyright (c) 2013, Michael Angstadt
    +016     All rights reserved.
    +017    
    +018     Redistribution and use in source and binary forms, with or without
    +019     modification, are permitted provided that the following conditions are met: 
    +020    
    +021     1. Redistributions of source code must retain the above copyright notice, this
    +022     list of conditions and the following disclaimer. 
    +023     2. Redistributions in binary form must reproduce the above copyright notice,
    +024     this list of conditions and the following disclaimer in the documentation
    +025     and/or other materials provided with the distribution. 
    +026    
    +027     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +028     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +029     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +030     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +031     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +032     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +033     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +034     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +035     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +036     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +037     */
    +038    
    +039    /**
    +040     * @author Michael Angstadt
    +041     */
    +042    public class VFreeBusyMarshaller extends ICalComponentMarshaller<VFreeBusy> {
    +043            public VFreeBusyMarshaller() {
    +044                    super(VFreeBusy.class, "VFREEBUSY");
    +045            }
    +046    
    +047            @Override
    +048            public List<ICalProperty> getProperties(VFreeBusy component) {
    +049                    List<ICalProperty> properties = super.getProperties(component);
    +050    
    +051                    List<FreeBusy> fb = new ArrayList<FreeBusy>(component.getFreeBusy());
    +052                    if (fb.isEmpty()) {
    +053                            return properties;
    +054                    }
    +055    
    +056                    //sort FREEBUSY properties by start date (p.100)
    +057                    Collections.sort(fb, new Comparator<FreeBusy>() {
    +058                            public int compare(FreeBusy one, FreeBusy two) {
    +059                                    Date oneStart = getEarliestStartDate(one);
    +060                                    Date twoStart = getEarliestStartDate(two);
    +061                                    if (oneStart == null && twoStart == null) {
    +062                                            return 0;
    +063                                    }
    +064                                    if (oneStart == null) {
    +065                                            return 1;
    +066                                    }
    +067                                    if (twoStart == null) {
    +068                                            return -1;
    +069                                    }
    +070                                    return oneStart.compareTo(twoStart);
    +071                            }
    +072    
    +073                            private Date getEarliestStartDate(FreeBusy fb) {
    +074                                    Date date = null;
    +075                                    for (Period tp : fb.getValues()) {
    +076                                            if (tp.getStartDate() == null) {
    +077                                                    continue;
    +078                                            }
    +079                                            if (date == null || date.compareTo(tp.getStartDate()) > 0) {
    +080                                                    date = tp.getStartDate();
    +081                                            }
    +082                                    }
    +083                                    return date;
    +084                            }
    +085                    });
    +086    
    +087                    //find index of first FREEBUSY instance
    +088                    int index = 0;
    +089                    for (ICalProperty prop : properties) {
    +090                            if (prop instanceof FreeBusy) {
    +091                                    break;
    +092                            }
    +093                            index++;
    +094                    }
    +095    
    +096                    //remove and re-add the FREEBUSY instances in sorted order
    +097                    for (FreeBusy f : fb) {
    +098                            properties.remove(f);
    +099                            properties.add(index++, f);
    +100                    }
    +101    
    +102                    return properties;
    +103            }
    +104    
    +105            @Override
    +106            protected VFreeBusy _newInstance() {
    +107                    return new VFreeBusy();
    +108            }
    +109    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VJournalMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VJournalMarshaller.html new file mode 100644 index 000000000..22eba11fa --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VJournalMarshaller.html @@ -0,0 +1,108 @@ + + +
    +001    package biweekly.component.marshaller;
    +002    
    +003    import biweekly.component.VJournal;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * @author Michael Angstadt
    +032     */
    +033    public class VJournalMarshaller extends ICalComponentMarshaller<VJournal> {
    +034            public VJournalMarshaller() {
    +035                    super(VJournal.class, "VJOURNAL");
    +036            }
    +037    
    +038            @Override
    +039            protected VJournal _newInstance() {
    +040                    return new VJournal();
    +041            }
    +042    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VTimezoneMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VTimezoneMarshaller.html new file mode 100644 index 000000000..b0da9cf8b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VTimezoneMarshaller.html @@ -0,0 +1,108 @@ + + +
    +001    package biweekly.component.marshaller;
    +002    
    +003    import biweekly.component.VTimezone;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * @author Michael Angstadt
    +032     */
    +033    public class VTimezoneMarshaller extends ICalComponentMarshaller<VTimezone> {
    +034            public VTimezoneMarshaller() {
    +035                    super(VTimezone.class, "VTIMEZONE");
    +036            }
    +037    
    +038            @Override
    +039            protected VTimezone _newInstance() {
    +040                    return new VTimezone(null);
    +041            }
    +042    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VTodoMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VTodoMarshaller.html new file mode 100644 index 000000000..fd7f598e5 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/component/marshaller/VTodoMarshaller.html @@ -0,0 +1,108 @@ + + +
    +001    package biweekly.component.marshaller;
    +002    
    +003    import biweekly.component.VTodo;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * @author Michael Angstadt
    +032     */
    +033    public class VTodoMarshaller extends ICalComponentMarshaller<VTodo> {
    +034            public VTodoMarshaller() {
    +035                    super(VTodo.class, "VTODO");
    +036            }
    +037    
    +038            @Override
    +039            protected VTodo _newInstance() {
    +040                    return new VTodo();
    +041            }
    +042    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/CannotParseException.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/CannotParseException.html new file mode 100644 index 000000000..ff0220c9a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/CannotParseException.html @@ -0,0 +1,118 @@ + + +
    +001    package biweekly.io;
    +002    
    +003    import biweekly.ICalException;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Thrown during the unmarshalling of an iCalendar property to signal that the
    +032     * property's value could not be parsed (for example, being unable to parse a
    +033     * date string).
    +034     * @author Michael Angstadt
    +035     */
    +036    @SuppressWarnings("serial")
    +037    public class CannotParseException extends ICalException {
    +038            /**
    +039             * Creates a new "cannot parse" exception.
    +040             */
    +041            public CannotParseException() {
    +042                    super();
    +043            }
    +044    
    +045            /**
    +046             * Creates a new "cannot parse" exception.
    +047             * @param reason the reason why the property value cannot be parsed
    +048             */
    +049            public CannotParseException(String reason) {
    +050                    super(reason);
    +051            }
    +052    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/ICalMarshallerRegistrar.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/ICalMarshallerRegistrar.html new file mode 100644 index 000000000..1fbb3e054 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/ICalMarshallerRegistrar.html @@ -0,0 +1,468 @@ + + +
    +001    package biweekly.io;
    +002    
    +003    import java.util.HashMap;
    +004    import java.util.Map;
    +005    
    +006    import javax.xml.namespace.QName;
    +007    
    +008    import biweekly.ICalendar;
    +009    import biweekly.component.ICalComponent;
    +010    import biweekly.component.RawComponent;
    +011    import biweekly.component.marshaller.DaylightSavingsTimeMarshaller;
    +012    import biweekly.component.marshaller.ICalComponentMarshaller;
    +013    import biweekly.component.marshaller.ICalendarMarshaller;
    +014    import biweekly.component.marshaller.RawComponentMarshaller;
    +015    import biweekly.component.marshaller.StandardTimeMarshaller;
    +016    import biweekly.component.marshaller.VAlarmMarshaller;
    +017    import biweekly.component.marshaller.VEventMarshaller;
    +018    import biweekly.component.marshaller.VFreeBusyMarshaller;
    +019    import biweekly.component.marshaller.VJournalMarshaller;
    +020    import biweekly.component.marshaller.VTimezoneMarshaller;
    +021    import biweekly.component.marshaller.VTodoMarshaller;
    +022    import biweekly.io.xml.XCalNamespaceContext;
    +023    import biweekly.property.ICalProperty;
    +024    import biweekly.property.RawProperty;
    +025    import biweekly.property.Xml;
    +026    import biweekly.property.marshaller.ActionMarshaller;
    +027    import biweekly.property.marshaller.AttachmentMarshaller;
    +028    import biweekly.property.marshaller.AttendeeMarshaller;
    +029    import biweekly.property.marshaller.CalendarScaleMarshaller;
    +030    import biweekly.property.marshaller.CategoriesMarshaller;
    +031    import biweekly.property.marshaller.ClassificationMarshaller;
    +032    import biweekly.property.marshaller.CommentMarshaller;
    +033    import biweekly.property.marshaller.CompletedMarshaller;
    +034    import biweekly.property.marshaller.ContactMarshaller;
    +035    import biweekly.property.marshaller.CreatedMarshaller;
    +036    import biweekly.property.marshaller.DateDueMarshaller;
    +037    import biweekly.property.marshaller.DateEndMarshaller;
    +038    import biweekly.property.marshaller.DateStartMarshaller;
    +039    import biweekly.property.marshaller.DateTimeStampMarshaller;
    +040    import biweekly.property.marshaller.DescriptionMarshaller;
    +041    import biweekly.property.marshaller.DurationPropertyMarshaller;
    +042    import biweekly.property.marshaller.ExceptionDatesMarshaller;
    +043    import biweekly.property.marshaller.ExceptionRuleMarshaller;
    +044    import biweekly.property.marshaller.FreeBusyMarshaller;
    +045    import biweekly.property.marshaller.GeoMarshaller;
    +046    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +047    import biweekly.property.marshaller.LastModifiedMarshaller;
    +048    import biweekly.property.marshaller.LocationMarshaller;
    +049    import biweekly.property.marshaller.MethodMarshaller;
    +050    import biweekly.property.marshaller.OrganizerMarshaller;
    +051    import biweekly.property.marshaller.PercentCompleteMarshaller;
    +052    import biweekly.property.marshaller.PriorityMarshaller;
    +053    import biweekly.property.marshaller.ProductIdMarshaller;
    +054    import biweekly.property.marshaller.RawPropertyMarshaller;
    +055    import biweekly.property.marshaller.RecurrenceDatesMarshaller;
    +056    import biweekly.property.marshaller.RecurrenceIdMarshaller;
    +057    import biweekly.property.marshaller.RecurrenceRuleMarshaller;
    +058    import biweekly.property.marshaller.RelatedToMarshaller;
    +059    import biweekly.property.marshaller.RepeatMarshaller;
    +060    import biweekly.property.marshaller.RequestStatusMarshaller;
    +061    import biweekly.property.marshaller.ResourcesMarshaller;
    +062    import biweekly.property.marshaller.SequenceMarshaller;
    +063    import biweekly.property.marshaller.StatusMarshaller;
    +064    import biweekly.property.marshaller.SummaryMarshaller;
    +065    import biweekly.property.marshaller.TimezoneIdMarshaller;
    +066    import biweekly.property.marshaller.TimezoneNameMarshaller;
    +067    import biweekly.property.marshaller.TimezoneOffsetFromMarshaller;
    +068    import biweekly.property.marshaller.TimezoneOffsetToMarshaller;
    +069    import biweekly.property.marshaller.TimezoneUrlMarshaller;
    +070    import biweekly.property.marshaller.TransparencyMarshaller;
    +071    import biweekly.property.marshaller.TriggerMarshaller;
    +072    import biweekly.property.marshaller.UidMarshaller;
    +073    import biweekly.property.marshaller.UrlMarshaller;
    +074    import biweekly.property.marshaller.VersionMarshaller;
    +075    import biweekly.property.marshaller.XmlMarshaller;
    +076    
    +077    /*
    +078     Copyright (c) 2013, Michael Angstadt
    +079     All rights reserved.
    +080    
    +081     Redistribution and use in source and binary forms, with or without
    +082     modification, are permitted provided that the following conditions are met: 
    +083    
    +084     1. Redistributions of source code must retain the above copyright notice, this
    +085     list of conditions and the following disclaimer. 
    +086     2. Redistributions in binary form must reproduce the above copyright notice,
    +087     this list of conditions and the following disclaimer in the documentation
    +088     and/or other materials provided with the distribution. 
    +089    
    +090     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +091     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +092     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +093     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +094     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +095     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +096     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +097     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +098     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +099     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +100     */
    +101    
    +102    /**
    +103     * <p>
    +104     * Manages a listing of component and property marshallers. This is useful for
    +105     * injecting the marshallers of any experimental components or properties you
    +106     * have defined into a reader or writer object. The same object instance can be
    +107     * reused and injected into multiple reader/writer classes.
    +108     * </p>
    +109     * <p>
    +110     * <b>Example:</b>
    +111     * 
    +112     * <pre class="brush:java">
    +113     * //init the registrar
    +114     * ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +115     * registrar.register(new CustomPropertyMarshaller());
    +116     * registrar.register(new AnotherCustomPropertyMarshaller());
    +117     * registrar.register(new CustomComponentMarshaller());
    +118     * 
    +119     * //inject into a reader class
    +120     * ICalReader textReader = new ICalReader(...);
    +121     * textReader.setRegistrar(registrar);
    +122     * List&lt;ICalendar&gt; icals = new ArrayList&lt;ICalendar&gt;();
    +123     * ICalendar ical;
    +124     * while ((ical = textReader.readNext()) != null){
    +125     *   icals.add(ical);
    +126     * }
    +127     * 
    +128     * //inject the same instance in another reader/writer class
    +129     * JCalWriter writer = new JCalWriter(...);
    +130     * writer.setRegistrar(registrar);
    +131     * for (ICalendar ical : icals){
    +132     *   writer.write(ical);
    +133     * }
    +134     * </pre>
    +135     * 
    +136     * </p>
    +137     * @author Michael Angstadt
    +138     */
    +139    public class ICalMarshallerRegistrar {
    +140            //define standard component marshallers
    +141            private static final Map<String, ICalComponentMarshaller<? extends ICalComponent>> standardCompByName = new HashMap<String, ICalComponentMarshaller<? extends ICalComponent>>();
    +142            private static final Map<Class<? extends ICalComponent>, ICalComponentMarshaller<? extends ICalComponent>> standardCompByClass = new HashMap<Class<? extends ICalComponent>, ICalComponentMarshaller<? extends ICalComponent>>();
    +143            static {
    +144                    registerStandard(new ICalendarMarshaller());
    +145                    registerStandard(new VAlarmMarshaller());
    +146                    registerStandard(new VEventMarshaller());
    +147                    registerStandard(new VFreeBusyMarshaller());
    +148                    registerStandard(new VJournalMarshaller());
    +149                    registerStandard(new VTodoMarshaller());
    +150                    registerStandard(new VTimezoneMarshaller());
    +151                    registerStandard(new StandardTimeMarshaller());
    +152                    registerStandard(new DaylightSavingsTimeMarshaller());
    +153            }
    +154    
    +155            //define standard property marshallers
    +156            private static final Map<String, ICalPropertyMarshaller<? extends ICalProperty>> standardPropByName = new HashMap<String, ICalPropertyMarshaller<? extends ICalProperty>>();
    +157            private static final Map<Class<? extends ICalProperty>, ICalPropertyMarshaller<? extends ICalProperty>> standardPropByClass = new HashMap<Class<? extends ICalProperty>, ICalPropertyMarshaller<? extends ICalProperty>>();
    +158            private static final Map<QName, ICalPropertyMarshaller<? extends ICalProperty>> standardPropByQName = new HashMap<QName, ICalPropertyMarshaller<? extends ICalProperty>>();
    +159            static {
    +160                    //RFC 5545
    +161                    registerStandard(new ActionMarshaller());
    +162                    registerStandard(new AttachmentMarshaller());
    +163                    registerStandard(new AttendeeMarshaller());
    +164                    registerStandard(new CalendarScaleMarshaller());
    +165                    registerStandard(new CategoriesMarshaller());
    +166                    registerStandard(new ClassificationMarshaller());
    +167                    registerStandard(new CommentMarshaller());
    +168                    registerStandard(new CompletedMarshaller());
    +169                    registerStandard(new ContactMarshaller());
    +170                    registerStandard(new CreatedMarshaller());
    +171                    registerStandard(new DateDueMarshaller());
    +172                    registerStandard(new DateEndMarshaller());
    +173                    registerStandard(new DateStartMarshaller());
    +174                    registerStandard(new DateTimeStampMarshaller());
    +175                    registerStandard(new DescriptionMarshaller());
    +176                    registerStandard(new DurationPropertyMarshaller());
    +177                    registerStandard(new ExceptionDatesMarshaller());
    +178                    registerStandard(new FreeBusyMarshaller());
    +179                    registerStandard(new GeoMarshaller());
    +180                    registerStandard(new LastModifiedMarshaller());
    +181                    registerStandard(new LocationMarshaller());
    +182                    registerStandard(new MethodMarshaller());
    +183                    registerStandard(new OrganizerMarshaller());
    +184                    registerStandard(new PercentCompleteMarshaller());
    +185                    registerStandard(new PriorityMarshaller());
    +186                    registerStandard(new ProductIdMarshaller());
    +187                    registerStandard(new RecurrenceDatesMarshaller());
    +188                    registerStandard(new RecurrenceIdMarshaller());
    +189                    registerStandard(new RecurrenceRuleMarshaller());
    +190                    registerStandard(new RelatedToMarshaller());
    +191                    registerStandard(new RepeatMarshaller());
    +192                    registerStandard(new RequestStatusMarshaller());
    +193                    registerStandard(new ResourcesMarshaller());
    +194                    registerStandard(new SequenceMarshaller());
    +195                    registerStandard(new StatusMarshaller());
    +196                    registerStandard(new SummaryMarshaller());
    +197                    registerStandard(new TimezoneIdMarshaller());
    +198                    registerStandard(new TimezoneNameMarshaller());
    +199                    registerStandard(new TimezoneOffsetFromMarshaller());
    +200                    registerStandard(new TimezoneOffsetToMarshaller());
    +201                    registerStandard(new TimezoneUrlMarshaller());
    +202                    registerStandard(new TransparencyMarshaller());
    +203                    registerStandard(new TriggerMarshaller());
    +204                    registerStandard(new UidMarshaller());
    +205                    registerStandard(new UrlMarshaller());
    +206                    registerStandard(new VersionMarshaller());
    +207    
    +208                    //RFC 6321
    +209                    registerStandard(new XmlMarshaller());
    +210    
    +211                    //RFC 2445
    +212                    registerStandard(new ExceptionRuleMarshaller());
    +213            }
    +214    
    +215            private final Map<String, ICalComponentMarshaller<? extends ICalComponent>> experimentalCompByName = new HashMap<String, ICalComponentMarshaller<? extends ICalComponent>>(0);
    +216            private final Map<Class<? extends ICalComponent>, ICalComponentMarshaller<? extends ICalComponent>> experimentalCompByClass = new HashMap<Class<? extends ICalComponent>, ICalComponentMarshaller<? extends ICalComponent>>(0);
    +217    
    +218            private final Map<String, ICalPropertyMarshaller<? extends ICalProperty>> experimentalPropByName = new HashMap<String, ICalPropertyMarshaller<? extends ICalProperty>>(0);
    +219            private final Map<Class<? extends ICalProperty>, ICalPropertyMarshaller<? extends ICalProperty>> experimentalPropByClass = new HashMap<Class<? extends ICalProperty>, ICalPropertyMarshaller<? extends ICalProperty>>(0);
    +220            private final Map<QName, ICalPropertyMarshaller<? extends ICalProperty>> experimentalPropByQName = new HashMap<QName, ICalPropertyMarshaller<? extends ICalProperty>>(0);
    +221    
    +222            /**
    +223             * Gets a component marshaller by name.
    +224             * @param componentName the component name (e.g. "VEVENT")
    +225             * @return the component marshaller or a {@link RawComponentMarshaller} if
    +226             * not found
    +227             */
    +228            public ICalComponentMarshaller<? extends ICalComponent> getComponentMarshaller(String componentName) {
    +229                    componentName = componentName.toUpperCase();
    +230    
    +231                    ICalComponentMarshaller<? extends ICalComponent> marshaller = experimentalCompByName.get(componentName);
    +232                    if (marshaller != null) {
    +233                            return marshaller;
    +234                    }
    +235    
    +236                    marshaller = standardCompByName.get(componentName);
    +237                    if (marshaller != null) {
    +238                            return marshaller;
    +239                    }
    +240    
    +241                    return new RawComponentMarshaller(componentName);
    +242            }
    +243    
    +244            /**
    +245             * Gets a property marshaller by name.
    +246             * @param propertyName the property name (e.g. "VERSION")
    +247             * @return the property marshaller or a {@link RawPropertyMarshaller} if not
    +248             * found
    +249             */
    +250            public ICalPropertyMarshaller<? extends ICalProperty> getPropertyMarshaller(String propertyName) {
    +251                    propertyName = propertyName.toUpperCase();
    +252    
    +253                    ICalPropertyMarshaller<? extends ICalProperty> marshaller = experimentalPropByName.get(propertyName);
    +254                    if (marshaller != null) {
    +255                            return marshaller;
    +256                    }
    +257    
    +258                    marshaller = standardPropByName.get(propertyName);
    +259                    if (marshaller != null) {
    +260                            return marshaller;
    +261                    }
    +262    
    +263                    return new RawPropertyMarshaller(propertyName);
    +264            }
    +265    
    +266            /**
    +267             * Gets a component marshaller by class.
    +268             * @param clazz the component class
    +269             * @return the component marshaller or null if not found
    +270             */
    +271            public ICalComponentMarshaller<? extends ICalComponent> getComponentMarshaller(Class<? extends ICalComponent> clazz) {
    +272                    ICalComponentMarshaller<? extends ICalComponent> marshaller = experimentalCompByClass.get(clazz);
    +273                    if (marshaller != null) {
    +274                            return marshaller;
    +275                    }
    +276    
    +277                    return standardCompByClass.get(clazz);
    +278            }
    +279    
    +280            /**
    +281             * Gets a property marshaller by class.
    +282             * @param clazz the property class
    +283             * @return the property marshaller or null if not found
    +284             */
    +285            public ICalPropertyMarshaller<? extends ICalProperty> getPropertyMarshaller(Class<? extends ICalProperty> clazz) {
    +286                    ICalPropertyMarshaller<? extends ICalProperty> marshaller = experimentalPropByClass.get(clazz);
    +287                    if (marshaller != null) {
    +288                            return marshaller;
    +289                    }
    +290    
    +291                    return standardPropByClass.get(clazz);
    +292            }
    +293    
    +294            /**
    +295             * Gets the appropriate component marshaller for a given component instance.
    +296             * @param component the component instance
    +297             * @return the component marshaller or null if not found
    +298             */
    +299            public ICalComponentMarshaller<? extends ICalComponent> getComponentMarshaller(ICalComponent component) {
    +300                    if (component instanceof RawComponent) {
    +301                            RawComponent raw = (RawComponent) component;
    +302                            return new RawComponentMarshaller(raw.getName());
    +303                    }
    +304    
    +305                    return getComponentMarshaller(component.getClass());
    +306            }
    +307    
    +308            /**
    +309             * Gets the appropriate property marshaller for a given property instance.
    +310             * @param property the property instance
    +311             * @return the property marshaller or null if not found
    +312             */
    +313            public ICalPropertyMarshaller<? extends ICalProperty> getPropertyMarshaller(ICalProperty property) {
    +314                    if (property instanceof RawProperty) {
    +315                            RawProperty raw = (RawProperty) property;
    +316                            return new RawPropertyMarshaller(raw.getName());
    +317                    }
    +318    
    +319                    return getPropertyMarshaller(property.getClass());
    +320            }
    +321    
    +322            /**
    +323             * Gets a property marshaller by XML local name and namespace.
    +324             * @param qname the XML local name and namespace
    +325             * @return the property marshaller or a {@link XmlMarshaller} if not found
    +326             */
    +327            public ICalPropertyMarshaller<? extends ICalProperty> getPropertyMarshaller(QName qname) {
    +328                    ICalPropertyMarshaller<? extends ICalProperty> marshaller = experimentalPropByQName.get(qname);
    +329                    if (marshaller != null) {
    +330                            return marshaller;
    +331                    }
    +332    
    +333                    marshaller = standardPropByQName.get(qname);
    +334                    if (marshaller != null) {
    +335                            return marshaller;
    +336                    }
    +337    
    +338                    if (XCalNamespaceContext.XCAL_NS.equals(qname.getNamespaceURI())) {
    +339                            return new RawPropertyMarshaller(qname.getLocalPart().toUpperCase());
    +340                    }
    +341    
    +342                    return getPropertyMarshaller(Xml.class);
    +343            }
    +344    
    +345            /**
    +346             * Registers a component marshaller.
    +347             * @param marshaller the marshaller to register
    +348             */
    +349            public void register(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +350                    experimentalCompByName.put(marshaller.getComponentName().toUpperCase(), marshaller);
    +351                    experimentalCompByClass.put(marshaller.getComponentClass(), marshaller);
    +352            }
    +353    
    +354            /**
    +355             * Registers a property marshaller.
    +356             * @param marshaller the marshaller to register
    +357             */
    +358            public void register(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +359                    experimentalPropByName.put(marshaller.getPropertyName().toUpperCase(), marshaller);
    +360                    experimentalPropByClass.put(marshaller.getPropertyClass(), marshaller);
    +361                    experimentalPropByQName.put(marshaller.getQName(), marshaller);
    +362            }
    +363    
    +364            /**
    +365             * Unregisters a component marshaller.
    +366             * @param marshaller the marshaller to unregister
    +367             */
    +368            public void unregister(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +369                    experimentalCompByName.remove(marshaller.getComponentName().toUpperCase());
    +370                    experimentalCompByClass.remove(marshaller.getComponentClass());
    +371            }
    +372    
    +373            /**
    +374             * Unregisters a property marshaller
    +375             * @param marshaller the marshaller to unregister
    +376             */
    +377            public void unregister(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +378                    experimentalPropByName.remove(marshaller.getPropertyName().toUpperCase());
    +379                    experimentalPropByClass.remove(marshaller.getPropertyClass());
    +380                    experimentalPropByQName.remove(marshaller.getQName());
    +381            }
    +382    
    +383            /**
    +384             * Convenience method for getting the marshaller of the root iCalendar
    +385             * component ("VCALENDAR").
    +386             * @return the marshaller
    +387             */
    +388            public static ICalendarMarshaller getICalendarMarshaller() {
    +389                    return (ICalendarMarshaller) standardCompByClass.get(ICalendar.class);
    +390            }
    +391    
    +392            private static void registerStandard(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +393                    standardCompByName.put(marshaller.getComponentName().toUpperCase(), marshaller);
    +394                    standardCompByClass.put(marshaller.getComponentClass(), marshaller);
    +395            }
    +396    
    +397            private static void registerStandard(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +398                    standardPropByName.put(marshaller.getPropertyName().toUpperCase(), marshaller);
    +399                    standardPropByClass.put(marshaller.getPropertyClass(), marshaller);
    +400                    standardPropByQName.put(marshaller.getQName(), marshaller);
    +401            }
    +402    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/SkipMeException.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/SkipMeException.html new file mode 100644 index 000000000..2e9165ee7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/SkipMeException.html @@ -0,0 +1,119 @@ + + +
    +001    package biweekly.io;
    +002    
    +003    import biweekly.ICalException;
    +004    import biweekly.ICalendar;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Thrown during the reading or writing of an iCalendar property to show that
    +033     * the property should not be written to the iCalendar data stream or not be
    +034     * included in the parsed {@link ICalendar} object.
    +035     * @author Michael Angstadt
    +036     */
    +037    @SuppressWarnings("serial")
    +038    public class SkipMeException extends ICalException {
    +039            /**
    +040             * Creates a new skip-me exception.
    +041             */
    +042            public SkipMeException() {
    +043                    super();
    +044            }
    +045    
    +046            /**
    +047             * Creates a new skip-me exception.
    +048             * @param msg the reason why this property is being skipped
    +049             */
    +050            public SkipMeException(String msg) {
    +051                    super(msg);
    +052            }
    +053    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalParseException.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalParseException.html new file mode 100644 index 000000000..69afc5138 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalParseException.html @@ -0,0 +1,134 @@ + + +
    +001    package biweekly.io.json;
    +002    
    +003    import biweekly.ICalException;
    +004    
    +005    import com.fasterxml.jackson.core.JsonToken;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * Thrown during the parsing of a JSON-encoded iCalendar object (jCal) when the
    +034     * jCal object is not formatted in the correct way (the JSON syntax is valid,
    +035     * but it's not in the correct jCal format).
    +036     * @author Michael Angstadt
    +037     */
    +038    @SuppressWarnings("serial")
    +039    public class JCalParseException extends ICalException {
    +040            private final JsonToken expected, actual;
    +041    
    +042            /**
    +043             * Creates a jCal parse exception.
    +044             * @param expected the JSON token that the parser was expecting
    +045             * @param actual the actual JSON token
    +046             */
    +047            public JCalParseException(JsonToken expected, JsonToken actual) {
    +048                    super("Expected " + expected + " but was " + actual + ".");
    +049                    this.expected = expected;
    +050                    this.actual = actual;
    +051            }
    +052    
    +053            /**
    +054             * Gets the JSON token that the parser was expected.
    +055             * @return the expected token
    +056             */
    +057            public JsonToken getExpectedToken() {
    +058                    return expected;
    +059            }
    +060    
    +061            /**
    +062             * Gets the JSON token that was read.
    +063             * @return the actual token
    +064             */
    +065            public JsonToken getActualToken() {
    +066                    return actual;
    +067            }
    +068    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalRawReader.JCalDataStreamListener.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalRawReader.JCalDataStreamListener.html new file mode 100644 index 000000000..52381ad72 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalRawReader.JCalDataStreamListener.html @@ -0,0 +1,370 @@ + + +
    +001    package biweekly.io.json;
    +002    
    +003    import java.io.Closeable;
    +004    import java.io.IOException;
    +005    import java.io.Reader;
    +006    import java.util.ArrayList;
    +007    import java.util.HashMap;
    +008    import java.util.List;
    +009    import java.util.Map;
    +010    
    +011    import biweekly.ICalDataType;
    +012    import biweekly.io.ICalMarshallerRegistrar;
    +013    import biweekly.parameter.ICalParameters;
    +014    
    +015    import com.fasterxml.jackson.core.JsonFactory;
    +016    import com.fasterxml.jackson.core.JsonParseException;
    +017    import com.fasterxml.jackson.core.JsonParser;
    +018    import com.fasterxml.jackson.core.JsonToken;
    +019    
    +020    /*
    +021     Copyright (c) 2013, Michael Angstadt
    +022     All rights reserved.
    +023    
    +024     Redistribution and use in source and binary forms, with or without
    +025     modification, are permitted provided that the following conditions are met: 
    +026    
    +027     1. Redistributions of source code must retain the above copyright notice, this
    +028     list of conditions and the following disclaimer. 
    +029     2. Redistributions in binary form must reproduce the above copyright notice,
    +030     this list of conditions and the following disclaimer in the documentation
    +031     and/or other materials provided with the distribution. 
    +032    
    +033     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +034     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +035     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +036     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +037     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +038     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +039     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +040     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +041     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +042     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +043     */
    +044    
    +045    /**
    +046     * Parses an iCalendar JSON data stream (jCal).
    +047     * @author Michael Angstadt
    +048     * @see <a href="http://tools.ietf.org/html/draft-ietf-jcardcal-jcal-05">jCal
    +049     * draft</a>
    +050     */
    +051    public class JCalRawReader implements Closeable {
    +052            private static final String vcalendarComponentName = ICalMarshallerRegistrar.getICalendarMarshaller().getComponentName().toLowerCase(); //"vcalendar"
    +053            private final Reader reader;
    +054            private JsonParser jp;
    +055            private boolean eof = false;
    +056            private JCalDataStreamListener listener;
    +057    
    +058            /**
    +059             * Creates a new reader.
    +060             * @param reader the reader to the data stream
    +061             */
    +062            public JCalRawReader(Reader reader) {
    +063                    this.reader = reader;
    +064            }
    +065    
    +066            /**
    +067             * Gets the current line number.
    +068             * @return the line number
    +069             */
    +070            public int getLineNum() {
    +071                    return (jp == null) ? 0 : jp.getCurrentLocation().getLineNr();
    +072            }
    +073    
    +074            /**
    +075             * Reads the next iCalendar object from the jCal data stream.
    +076             * @param listener handles the iCalendar data as it is read off the wire
    +077             * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +078             * syntax may be valid, but it is not in the correct jCal format).
    +079             * @throws JsonParseException if the JSON syntax is incorrect
    +080             * @throws IOException if there is a problem reading from the data stream
    +081             */
    +082            public void readNext(JCalDataStreamListener listener) throws IOException {
    +083                    if (jp == null) {
    +084                            JsonFactory factory = new JsonFactory();
    +085                            jp = factory.createJsonParser(reader);
    +086                    } else if (jp.isClosed()) {
    +087                            return;
    +088                    }
    +089    
    +090                    this.listener = listener;
    +091    
    +092                    //find the next iCalendar object
    +093                    JsonToken prev = null;
    +094                    JsonToken cur;
    +095                    while ((cur = jp.nextToken()) != null) {
    +096                            if (prev == JsonToken.START_ARRAY && cur == JsonToken.VALUE_STRING && vcalendarComponentName.equals(jp.getValueAsString())) {
    +097                                    break;
    +098                            }
    +099                            prev = cur;
    +100                    }
    +101                    if (cur == null) {
    +102                            //EOF
    +103                            eof = true;
    +104                            return;
    +105                    }
    +106    
    +107                    parseComponent(new ArrayList<String>());
    +108            }
    +109    
    +110            private void parseComponent(List<String> components) throws IOException {
    +111                    if (jp.getCurrentToken() != JsonToken.VALUE_STRING) {
    +112                            throw new JCalParseException(JsonToken.VALUE_STRING, jp.getCurrentToken());
    +113                    }
    +114                    String componentName = jp.getValueAsString();
    +115                    listener.readComponent(components, componentName);
    +116                    components.add(componentName);
    +117    
    +118                    //TODO add messages to the jCal exceptions
    +119    
    +120                    //start properties array
    +121                    if (jp.nextToken() != JsonToken.START_ARRAY) {
    +122                            throw new JCalParseException(JsonToken.START_ARRAY, jp.getCurrentToken());
    +123                    }
    +124    
    +125                    //read properties
    +126                    while (jp.nextToken() != JsonToken.END_ARRAY) { //until we reach the end properties array
    +127                            if (jp.getCurrentToken() != JsonToken.START_ARRAY) {
    +128                                    throw new JCalParseException(JsonToken.START_ARRAY, jp.getCurrentToken());
    +129                            }
    +130                            jp.nextToken();
    +131                            parseProperty(components);
    +132                    }
    +133    
    +134                    //start sub-components array
    +135                    if (jp.nextToken() != JsonToken.START_ARRAY) {
    +136                            throw new JCalParseException(JsonToken.START_ARRAY, jp.getCurrentToken());
    +137                    }
    +138    
    +139                    //read sub-components
    +140                    while (jp.nextToken() != JsonToken.END_ARRAY) { //until we reach the end sub-components array
    +141                            if (jp.getCurrentToken() != JsonToken.START_ARRAY) {
    +142                                    throw new JCalParseException(JsonToken.START_ARRAY, jp.getCurrentToken());
    +143                            }
    +144                            jp.nextToken();
    +145                            parseComponent(new ArrayList<String>(components));
    +146                    }
    +147    
    +148                    //read the end of the component array (e.g. the last bracket in this example: ["comp", [ /* props */ ], [ /* comps */] ])
    +149                    if (jp.nextToken() != JsonToken.END_ARRAY) {
    +150                            throw new JCalParseException(JsonToken.END_ARRAY, jp.getCurrentToken());
    +151                    }
    +152            }
    +153    
    +154            private void parseProperty(List<String> components) throws IOException {
    +155                    //get property name
    +156                    if (jp.getCurrentToken() != JsonToken.VALUE_STRING) {
    +157                            throw new JCalParseException(JsonToken.VALUE_STRING, jp.getCurrentToken());
    +158                    }
    +159                    String propertyName = jp.getValueAsString().toLowerCase();
    +160    
    +161                    ICalParameters parameters = parseParameters();
    +162    
    +163                    //get data type
    +164                    if (jp.nextToken() != JsonToken.VALUE_STRING) {
    +165                            throw new JCalParseException(JsonToken.VALUE_STRING, jp.getCurrentToken());
    +166                    }
    +167                    String dataTypeStr = jp.getText();
    +168                    ICalDataType dataType = "unknown".equals(dataTypeStr) ? null : ICalDataType.get(dataTypeStr);
    +169    
    +170                    //get property value(s)
    +171                    List<JsonValue> values = parseValues();
    +172    
    +173                    JCalValue value = new JCalValue(values);
    +174                    listener.readProperty(components, propertyName, parameters, dataType, value);
    +175            }
    +176    
    +177            private ICalParameters parseParameters() throws IOException {
    +178                    if (jp.nextToken() != JsonToken.START_OBJECT) {
    +179                            throw new JCalParseException(JsonToken.START_OBJECT, jp.getCurrentToken());
    +180                    }
    +181    
    +182                    ICalParameters parameters = new ICalParameters();
    +183                    while (jp.nextToken() != JsonToken.END_OBJECT) {
    +184                            String parameterName = jp.getText();
    +185    
    +186                            if (jp.nextToken() == JsonToken.START_ARRAY) {
    +187                                    //multi-valued parameter
    +188                                    while (jp.nextToken() != JsonToken.END_ARRAY) {
    +189                                            parameters.put(parameterName, jp.getText());
    +190                                    }
    +191                            } else {
    +192                                    parameters.put(parameterName, jp.getValueAsString());
    +193                            }
    +194                    }
    +195    
    +196                    return parameters;
    +197            }
    +198    
    +199            private List<JsonValue> parseValues() throws IOException {
    +200                    List<JsonValue> values = new ArrayList<JsonValue>();
    +201                    while (jp.nextToken() != JsonToken.END_ARRAY) { //until we reach the end of the property array
    +202                            JsonValue value = parseValue();
    +203                            values.add(value);
    +204                    }
    +205                    return values;
    +206            }
    +207    
    +208            private Object parseValueElement() throws IOException {
    +209                    switch (jp.getCurrentToken()) {
    +210                    case VALUE_FALSE:
    +211                    case VALUE_TRUE:
    +212                            return jp.getBooleanValue();
    +213                    case VALUE_NUMBER_FLOAT:
    +214                            return jp.getDoubleValue();
    +215                    case VALUE_NUMBER_INT:
    +216                            return jp.getLongValue();
    +217                    case VALUE_NULL:
    +218                            return null;
    +219                    default:
    +220                            return jp.getText();
    +221                    }
    +222            }
    +223    
    +224            private List<JsonValue> parseValueArray() throws IOException {
    +225                    List<JsonValue> array = new ArrayList<JsonValue>();
    +226    
    +227                    while (jp.nextToken() != JsonToken.END_ARRAY) {
    +228                            JsonValue value = parseValue();
    +229                            array.add(value);
    +230                    }
    +231    
    +232                    return array;
    +233            }
    +234    
    +235            private Map<String, JsonValue> parseValueObject() throws IOException {
    +236                    Map<String, JsonValue> object = new HashMap<String, JsonValue>();
    +237    
    +238                    jp.nextToken();
    +239                    while (jp.getCurrentToken() != JsonToken.END_OBJECT) {
    +240                            if (jp.getCurrentToken() != JsonToken.FIELD_NAME) {
    +241                                    throw new JCalParseException(JsonToken.FIELD_NAME, jp.getCurrentToken());
    +242                            }
    +243    
    +244                            String key = jp.getText();
    +245                            jp.nextToken();
    +246                            JsonValue value = parseValue();
    +247                            object.put(key, value);
    +248    
    +249                            jp.nextToken();
    +250                    }
    +251    
    +252                    return object;
    +253            }
    +254    
    +255            private JsonValue parseValue() throws IOException {
    +256                    switch (jp.getCurrentToken()) {
    +257                    case START_ARRAY:
    +258                            return new JsonValue(parseValueArray());
    +259                    case START_OBJECT:
    +260                            return new JsonValue(parseValueObject());
    +261                    default:
    +262                            return new JsonValue(parseValueElement());
    +263                    }
    +264            }
    +265    
    +266            /**
    +267             * Determines whether the end of the data stream has been reached.
    +268             * @return true if the end has been reached, false if not
    +269             */
    +270            public boolean eof() {
    +271                    return eof;
    +272            }
    +273    
    +274            /**
    +275             * Handles the iCalendar data as it is read off the data stream.
    +276             * @author Michael Angstadt
    +277             */
    +278            public static interface JCalDataStreamListener {
    +279                    /**
    +280                     * Called when the parser begins to read a component.
    +281                     * @param parentHierarchy the component's parent components
    +282                     * @param componentName the component name (e.g. "vevent")
    +283                     */
    +284                    void readComponent(List<String> parentHierarchy, String componentName);
    +285    
    +286                    /**
    +287                     * Called when a property is read.
    +288                     * @param componentHierarchy the hierarchy of components that the
    +289                     * property belongs to
    +290                     * @param propertyName the property name (e.g. "summary")
    +291                     * @param parameters the parameters
    +292                     * @param dataType the data type (e.g. "text")
    +293                     * @param value the property value
    +294                     */
    +295                    void readProperty(List<String> componentHierarchy, String propertyName, ICalParameters parameters, ICalDataType dataType, JCalValue value);
    +296            }
    +297    
    +298            /**
    +299             * Closes the underlying {@link Reader} object.
    +300             */
    +301            public void close() throws IOException {
    +302                    reader.close();
    +303            }
    +304    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalRawReader.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalRawReader.html new file mode 100644 index 000000000..52381ad72 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalRawReader.html @@ -0,0 +1,370 @@ + + +
    +001    package biweekly.io.json;
    +002    
    +003    import java.io.Closeable;
    +004    import java.io.IOException;
    +005    import java.io.Reader;
    +006    import java.util.ArrayList;
    +007    import java.util.HashMap;
    +008    import java.util.List;
    +009    import java.util.Map;
    +010    
    +011    import biweekly.ICalDataType;
    +012    import biweekly.io.ICalMarshallerRegistrar;
    +013    import biweekly.parameter.ICalParameters;
    +014    
    +015    import com.fasterxml.jackson.core.JsonFactory;
    +016    import com.fasterxml.jackson.core.JsonParseException;
    +017    import com.fasterxml.jackson.core.JsonParser;
    +018    import com.fasterxml.jackson.core.JsonToken;
    +019    
    +020    /*
    +021     Copyright (c) 2013, Michael Angstadt
    +022     All rights reserved.
    +023    
    +024     Redistribution and use in source and binary forms, with or without
    +025     modification, are permitted provided that the following conditions are met: 
    +026    
    +027     1. Redistributions of source code must retain the above copyright notice, this
    +028     list of conditions and the following disclaimer. 
    +029     2. Redistributions in binary form must reproduce the above copyright notice,
    +030     this list of conditions and the following disclaimer in the documentation
    +031     and/or other materials provided with the distribution. 
    +032    
    +033     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +034     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +035     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +036     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +037     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +038     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +039     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +040     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +041     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +042     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +043     */
    +044    
    +045    /**
    +046     * Parses an iCalendar JSON data stream (jCal).
    +047     * @author Michael Angstadt
    +048     * @see <a href="http://tools.ietf.org/html/draft-ietf-jcardcal-jcal-05">jCal
    +049     * draft</a>
    +050     */
    +051    public class JCalRawReader implements Closeable {
    +052            private static final String vcalendarComponentName = ICalMarshallerRegistrar.getICalendarMarshaller().getComponentName().toLowerCase(); //"vcalendar"
    +053            private final Reader reader;
    +054            private JsonParser jp;
    +055            private boolean eof = false;
    +056            private JCalDataStreamListener listener;
    +057    
    +058            /**
    +059             * Creates a new reader.
    +060             * @param reader the reader to the data stream
    +061             */
    +062            public JCalRawReader(Reader reader) {
    +063                    this.reader = reader;
    +064            }
    +065    
    +066            /**
    +067             * Gets the current line number.
    +068             * @return the line number
    +069             */
    +070            public int getLineNum() {
    +071                    return (jp == null) ? 0 : jp.getCurrentLocation().getLineNr();
    +072            }
    +073    
    +074            /**
    +075             * Reads the next iCalendar object from the jCal data stream.
    +076             * @param listener handles the iCalendar data as it is read off the wire
    +077             * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +078             * syntax may be valid, but it is not in the correct jCal format).
    +079             * @throws JsonParseException if the JSON syntax is incorrect
    +080             * @throws IOException if there is a problem reading from the data stream
    +081             */
    +082            public void readNext(JCalDataStreamListener listener) throws IOException {
    +083                    if (jp == null) {
    +084                            JsonFactory factory = new JsonFactory();
    +085                            jp = factory.createJsonParser(reader);
    +086                    } else if (jp.isClosed()) {
    +087                            return;
    +088                    }
    +089    
    +090                    this.listener = listener;
    +091    
    +092                    //find the next iCalendar object
    +093                    JsonToken prev = null;
    +094                    JsonToken cur;
    +095                    while ((cur = jp.nextToken()) != null) {
    +096                            if (prev == JsonToken.START_ARRAY && cur == JsonToken.VALUE_STRING && vcalendarComponentName.equals(jp.getValueAsString())) {
    +097                                    break;
    +098                            }
    +099                            prev = cur;
    +100                    }
    +101                    if (cur == null) {
    +102                            //EOF
    +103                            eof = true;
    +104                            return;
    +105                    }
    +106    
    +107                    parseComponent(new ArrayList<String>());
    +108            }
    +109    
    +110            private void parseComponent(List<String> components) throws IOException {
    +111                    if (jp.getCurrentToken() != JsonToken.VALUE_STRING) {
    +112                            throw new JCalParseException(JsonToken.VALUE_STRING, jp.getCurrentToken());
    +113                    }
    +114                    String componentName = jp.getValueAsString();
    +115                    listener.readComponent(components, componentName);
    +116                    components.add(componentName);
    +117    
    +118                    //TODO add messages to the jCal exceptions
    +119    
    +120                    //start properties array
    +121                    if (jp.nextToken() != JsonToken.START_ARRAY) {
    +122                            throw new JCalParseException(JsonToken.START_ARRAY, jp.getCurrentToken());
    +123                    }
    +124    
    +125                    //read properties
    +126                    while (jp.nextToken() != JsonToken.END_ARRAY) { //until we reach the end properties array
    +127                            if (jp.getCurrentToken() != JsonToken.START_ARRAY) {
    +128                                    throw new JCalParseException(JsonToken.START_ARRAY, jp.getCurrentToken());
    +129                            }
    +130                            jp.nextToken();
    +131                            parseProperty(components);
    +132                    }
    +133    
    +134                    //start sub-components array
    +135                    if (jp.nextToken() != JsonToken.START_ARRAY) {
    +136                            throw new JCalParseException(JsonToken.START_ARRAY, jp.getCurrentToken());
    +137                    }
    +138    
    +139                    //read sub-components
    +140                    while (jp.nextToken() != JsonToken.END_ARRAY) { //until we reach the end sub-components array
    +141                            if (jp.getCurrentToken() != JsonToken.START_ARRAY) {
    +142                                    throw new JCalParseException(JsonToken.START_ARRAY, jp.getCurrentToken());
    +143                            }
    +144                            jp.nextToken();
    +145                            parseComponent(new ArrayList<String>(components));
    +146                    }
    +147    
    +148                    //read the end of the component array (e.g. the last bracket in this example: ["comp", [ /* props */ ], [ /* comps */] ])
    +149                    if (jp.nextToken() != JsonToken.END_ARRAY) {
    +150                            throw new JCalParseException(JsonToken.END_ARRAY, jp.getCurrentToken());
    +151                    }
    +152            }
    +153    
    +154            private void parseProperty(List<String> components) throws IOException {
    +155                    //get property name
    +156                    if (jp.getCurrentToken() != JsonToken.VALUE_STRING) {
    +157                            throw new JCalParseException(JsonToken.VALUE_STRING, jp.getCurrentToken());
    +158                    }
    +159                    String propertyName = jp.getValueAsString().toLowerCase();
    +160    
    +161                    ICalParameters parameters = parseParameters();
    +162    
    +163                    //get data type
    +164                    if (jp.nextToken() != JsonToken.VALUE_STRING) {
    +165                            throw new JCalParseException(JsonToken.VALUE_STRING, jp.getCurrentToken());
    +166                    }
    +167                    String dataTypeStr = jp.getText();
    +168                    ICalDataType dataType = "unknown".equals(dataTypeStr) ? null : ICalDataType.get(dataTypeStr);
    +169    
    +170                    //get property value(s)
    +171                    List<JsonValue> values = parseValues();
    +172    
    +173                    JCalValue value = new JCalValue(values);
    +174                    listener.readProperty(components, propertyName, parameters, dataType, value);
    +175            }
    +176    
    +177            private ICalParameters parseParameters() throws IOException {
    +178                    if (jp.nextToken() != JsonToken.START_OBJECT) {
    +179                            throw new JCalParseException(JsonToken.START_OBJECT, jp.getCurrentToken());
    +180                    }
    +181    
    +182                    ICalParameters parameters = new ICalParameters();
    +183                    while (jp.nextToken() != JsonToken.END_OBJECT) {
    +184                            String parameterName = jp.getText();
    +185    
    +186                            if (jp.nextToken() == JsonToken.START_ARRAY) {
    +187                                    //multi-valued parameter
    +188                                    while (jp.nextToken() != JsonToken.END_ARRAY) {
    +189                                            parameters.put(parameterName, jp.getText());
    +190                                    }
    +191                            } else {
    +192                                    parameters.put(parameterName, jp.getValueAsString());
    +193                            }
    +194                    }
    +195    
    +196                    return parameters;
    +197            }
    +198    
    +199            private List<JsonValue> parseValues() throws IOException {
    +200                    List<JsonValue> values = new ArrayList<JsonValue>();
    +201                    while (jp.nextToken() != JsonToken.END_ARRAY) { //until we reach the end of the property array
    +202                            JsonValue value = parseValue();
    +203                            values.add(value);
    +204                    }
    +205                    return values;
    +206            }
    +207    
    +208            private Object parseValueElement() throws IOException {
    +209                    switch (jp.getCurrentToken()) {
    +210                    case VALUE_FALSE:
    +211                    case VALUE_TRUE:
    +212                            return jp.getBooleanValue();
    +213                    case VALUE_NUMBER_FLOAT:
    +214                            return jp.getDoubleValue();
    +215                    case VALUE_NUMBER_INT:
    +216                            return jp.getLongValue();
    +217                    case VALUE_NULL:
    +218                            return null;
    +219                    default:
    +220                            return jp.getText();
    +221                    }
    +222            }
    +223    
    +224            private List<JsonValue> parseValueArray() throws IOException {
    +225                    List<JsonValue> array = new ArrayList<JsonValue>();
    +226    
    +227                    while (jp.nextToken() != JsonToken.END_ARRAY) {
    +228                            JsonValue value = parseValue();
    +229                            array.add(value);
    +230                    }
    +231    
    +232                    return array;
    +233            }
    +234    
    +235            private Map<String, JsonValue> parseValueObject() throws IOException {
    +236                    Map<String, JsonValue> object = new HashMap<String, JsonValue>();
    +237    
    +238                    jp.nextToken();
    +239                    while (jp.getCurrentToken() != JsonToken.END_OBJECT) {
    +240                            if (jp.getCurrentToken() != JsonToken.FIELD_NAME) {
    +241                                    throw new JCalParseException(JsonToken.FIELD_NAME, jp.getCurrentToken());
    +242                            }
    +243    
    +244                            String key = jp.getText();
    +245                            jp.nextToken();
    +246                            JsonValue value = parseValue();
    +247                            object.put(key, value);
    +248    
    +249                            jp.nextToken();
    +250                    }
    +251    
    +252                    return object;
    +253            }
    +254    
    +255            private JsonValue parseValue() throws IOException {
    +256                    switch (jp.getCurrentToken()) {
    +257                    case START_ARRAY:
    +258                            return new JsonValue(parseValueArray());
    +259                    case START_OBJECT:
    +260                            return new JsonValue(parseValueObject());
    +261                    default:
    +262                            return new JsonValue(parseValueElement());
    +263                    }
    +264            }
    +265    
    +266            /**
    +267             * Determines whether the end of the data stream has been reached.
    +268             * @return true if the end has been reached, false if not
    +269             */
    +270            public boolean eof() {
    +271                    return eof;
    +272            }
    +273    
    +274            /**
    +275             * Handles the iCalendar data as it is read off the data stream.
    +276             * @author Michael Angstadt
    +277             */
    +278            public static interface JCalDataStreamListener {
    +279                    /**
    +280                     * Called when the parser begins to read a component.
    +281                     * @param parentHierarchy the component's parent components
    +282                     * @param componentName the component name (e.g. "vevent")
    +283                     */
    +284                    void readComponent(List<String> parentHierarchy, String componentName);
    +285    
    +286                    /**
    +287                     * Called when a property is read.
    +288                     * @param componentHierarchy the hierarchy of components that the
    +289                     * property belongs to
    +290                     * @param propertyName the property name (e.g. "summary")
    +291                     * @param parameters the parameters
    +292                     * @param dataType the data type (e.g. "text")
    +293                     * @param value the property value
    +294                     */
    +295                    void readProperty(List<String> componentHierarchy, String propertyName, ICalParameters parameters, ICalDataType dataType, JCalValue value);
    +296            }
    +297    
    +298            /**
    +299             * Closes the underlying {@link Reader} object.
    +300             */
    +301            public void close() throws IOException {
    +302                    reader.close();
    +303            }
    +304    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalRawWriter.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalRawWriter.html new file mode 100644 index 000000000..85bc5e6f9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalRawWriter.html @@ -0,0 +1,396 @@ + + +
    +001    package biweekly.io.json;
    +002    
    +003    import static biweekly.util.StringUtils.NEWLINE;
    +004    
    +005    import java.io.Closeable;
    +006    import java.io.IOException;
    +007    import java.io.Writer;
    +008    import java.util.LinkedList;
    +009    import java.util.List;
    +010    import java.util.Map;
    +011    
    +012    import biweekly.ICalDataType;
    +013    import biweekly.parameter.ICalParameters;
    +014    
    +015    import com.fasterxml.jackson.core.JsonFactory;
    +016    import com.fasterxml.jackson.core.JsonGenerator;
    +017    import com.fasterxml.jackson.core.JsonGenerator.Feature;
    +018    
    +019    /*
    +020     Copyright (c) 2013, Michael Angstadt
    +021     All rights reserved.
    +022    
    +023     Redistribution and use in source and binary forms, with or without
    +024     modification, are permitted provided that the following conditions are met: 
    +025    
    +026     1. Redistributions of source code must retain the above copyright notice, this
    +027     list of conditions and the following disclaimer. 
    +028     2. Redistributions in binary form must reproduce the above copyright notice,
    +029     this list of conditions and the following disclaimer in the documentation
    +030     and/or other materials provided with the distribution. 
    +031    
    +032     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +033     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +034     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +035     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +036     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +037     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +038     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +039     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +040     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +041     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +042     */
    +043    
    +044    /**
    +045     * Writes data to an iCalendar JSON data stream (jCal).
    +046     * @author Michael Angstadt
    +047     * @see <a href="http://tools.ietf.org/html/draft-ietf-jcardcal-jcal-05">jCal
    +048     * draft</a>
    +049     */
    +050    public class JCalRawWriter implements Closeable {
    +051            private final Writer writer;
    +052            private final boolean wrapInArray;
    +053            private final LinkedList<Info> stack = new LinkedList<Info>();
    +054            private JsonGenerator jg;
    +055            private boolean indent = false;
    +056            private boolean componentEnded = false;
    +057    
    +058            /**
    +059             * Creates a new raw writer.
    +060             * @param writer the writer to the data stream
    +061             * @param wrapInArray true to wrap everything in an array, false not to
    +062             * (useful when writing more than one iCalendar object)
    +063             */
    +064            public JCalRawWriter(Writer writer, boolean wrapInArray) {
    +065                    this.writer = writer;
    +066                    this.wrapInArray = wrapInArray;
    +067            }
    +068    
    +069            /**
    +070             * Gets whether or not the JSON will be pretty-printed.
    +071             * @return true if it will be pretty-printed, false if not (defaults to
    +072             * false)
    +073             */
    +074            public boolean isIndent() {
    +075                    return indent;
    +076            }
    +077    
    +078            /**
    +079             * Sets whether or not to pretty-print the JSON.
    +080             * @param indent true to pretty-print it, false not to (defaults to false)
    +081             */
    +082            public void setIndent(boolean indent) {
    +083                    this.indent = indent;
    +084            }
    +085    
    +086            /**
    +087             * Writes the beginning of a new component array.
    +088             * @param componentName the component name (e.g. "vevent")
    +089             * @throws IOException if there's an I/O problem
    +090             */
    +091            public void writeStartComponent(String componentName) throws IOException {
    +092                    if (jg == null) {
    +093                            init();
    +094                    }
    +095    
    +096                    componentEnded = false;
    +097    
    +098                    if (!stack.isEmpty()) {
    +099                            Info parent = stack.getLast();
    +100                            if (!parent.wroteEndPropertiesArray) {
    +101                                    jg.writeEndArray();
    +102                                    parent.wroteEndPropertiesArray = true;
    +103                            }
    +104                            if (!parent.wroteStartSubComponentsArray) {
    +105                                    jg.writeStartArray();
    +106                                    parent.wroteStartSubComponentsArray = true;
    +107                            }
    +108                    }
    +109    
    +110                    jg.writeStartArray();
    +111                    indent(stack.size() * 2);
    +112                    jg.writeString(componentName);
    +113                    jg.writeStartArray(); //start properties array
    +114    
    +115                    stack.add(new Info());
    +116            }
    +117    
    +118            /**
    +119             * Closes the current component array.
    +120             * @throws IllegalStateException if there are no open components (
    +121             * {@link #writeStartComponent(String)} must be called first)
    +122             * @throws IOException if there's an I/O problem
    +123             */
    +124            public void writeEndComponent() throws IOException {
    +125                    if (stack.isEmpty()) {
    +126                            throw new IllegalStateException("Call \"writeStartComponent\" first.");
    +127                    }
    +128                    Info cur = stack.removeLast();
    +129    
    +130                    if (!cur.wroteEndPropertiesArray) {
    +131                            jg.writeEndArray();
    +132                    }
    +133                    if (!cur.wroteStartSubComponentsArray) {
    +134                            jg.writeStartArray();
    +135                    }
    +136    
    +137                    jg.writeEndArray(); //end sub-components array
    +138                    jg.writeEndArray(); //end the array of this component
    +139    
    +140                    componentEnded = true;
    +141            }
    +142    
    +143            /**
    +144             * Writes a property to the current component.
    +145             * @param propertyName the property name (e.g. "version")
    +146             * @param dataType the property's data type (e.g. "text")
    +147             * @param value the property value
    +148             * @throws IllegalStateException if there are no open components (
    +149             * {@link #writeStartComponent(String)} must be called first) or if the last
    +150             * method called was {@link #writeEndComponent()}.
    +151             * @throws IOException if there's an I/O problem
    +152             */
    +153            public void writeProperty(String propertyName, ICalDataType dataType, JCalValue value) throws IOException {
    +154                    writeProperty(propertyName, new ICalParameters(), dataType, value);
    +155            }
    +156    
    +157            /**
    +158             * Writes a property to the current component.
    +159             * @param propertyName the property name (e.g. "version")
    +160             * @param parameters the parameters
    +161             * @param dataType the property's data type (e.g. "text")
    +162             * @param value the property value
    +163             * @throws IllegalStateException if there are no open components (
    +164             * {@link #writeStartComponent(String)} must be called first) or if the last
    +165             * method called was {@link #writeEndComponent()}.
    +166             * @throws IOException if there's an I/O problem
    +167             */
    +168            public void writeProperty(String propertyName, ICalParameters parameters, ICalDataType dataType, JCalValue value) throws IOException {
    +169                    if (stack.isEmpty()) {
    +170                            throw new IllegalStateException("Call \"writeStartComponent\" first.");
    +171                    }
    +172                    if (componentEnded) {
    +173                            throw new IllegalStateException("Cannot write a property after calling \"writeEndComponent\".");
    +174                    }
    +175    
    +176                    jg.writeStartArray();
    +177                    indent(stack.size() * 2);
    +178    
    +179                    //write the property name
    +180                    jg.writeString(propertyName);
    +181    
    +182                    //write parameters
    +183                    jg.writeStartObject();
    +184                    for (Map.Entry<String, List<String>> entry : parameters) {
    +185                            String name = entry.getKey().toLowerCase();
    +186                            List<String> values = entry.getValue();
    +187                            if (values.isEmpty()) {
    +188                                    continue;
    +189                            }
    +190    
    +191                            if (values.size() == 1) {
    +192                                    jg.writeStringField(name, values.get(0));
    +193                            } else {
    +194                                    jg.writeArrayFieldStart(name);
    +195                                    for (String paramValue : values) {
    +196                                            jg.writeString(paramValue);
    +197                                    }
    +198                                    jg.writeEndArray();
    +199                            }
    +200                    }
    +201                    jg.writeEndObject();
    +202    
    +203                    //write data type
    +204                    jg.writeString((dataType == null) ? "unknown" : dataType.getName().toLowerCase());
    +205    
    +206                    //write value
    +207                    for (JsonValue jsonValue : value.getValues()) {
    +208                            writeValue(jsonValue);
    +209                    }
    +210    
    +211                    jg.writeEndArray();
    +212            }
    +213    
    +214            private void writeValue(JsonValue jsonValue) throws IOException {
    +215                    if (jsonValue.isNull()) {
    +216                            jg.writeNull();
    +217                            return;
    +218                    }
    +219    
    +220                    Object val = jsonValue.getValue();
    +221                    if (val != null) {
    +222                            if (val instanceof Byte) {
    +223                                    jg.writeNumber((Byte) val);
    +224                            } else if (val instanceof Short) {
    +225                                    jg.writeNumber((Short) val);
    +226                            } else if (val instanceof Integer) {
    +227                                    jg.writeNumber((Integer) val);
    +228                            } else if (val instanceof Long) {
    +229                                    jg.writeNumber((Long) val);
    +230                            } else if (val instanceof Float) {
    +231                                    jg.writeNumber((Float) val);
    +232                            } else if (val instanceof Double) {
    +233                                    jg.writeNumber((Double) val);
    +234                            } else if (val instanceof Boolean) {
    +235                                    jg.writeBoolean((Boolean) val);
    +236                            } else {
    +237                                    jg.writeString(val.toString());
    +238                            }
    +239                            return;
    +240                    }
    +241    
    +242                    List<JsonValue> array = jsonValue.getArray();
    +243                    if (array != null) {
    +244                            jg.writeStartArray();
    +245                            for (JsonValue element : array) {
    +246                                    writeValue(element);
    +247                            }
    +248                            jg.writeEndArray();
    +249                            return;
    +250                    }
    +251    
    +252                    Map<String, JsonValue> object = jsonValue.getObject();
    +253                    if (object != null) {
    +254                            jg.writeStartObject();
    +255                            for (Map.Entry<String, JsonValue> entry : object.entrySet()) {
    +256                                    jg.writeFieldName(entry.getKey());
    +257                                    writeValue(entry.getValue());
    +258                            }
    +259                            jg.writeEndObject();
    +260                            return;
    +261                    }
    +262            }
    +263    
    +264            /**
    +265             * Checks to see if pretty-printing is enabled, and adds indentation
    +266             * whitespace if it is.
    +267             * @param spaces the number of spaces to indent with
    +268             * @throws IOException
    +269             */
    +270            private void indent(int spaces) throws IOException {
    +271                    if (indent) {
    +272                            jg.writeRaw(NEWLINE);
    +273                            for (int i = 0; i < spaces; i++) {
    +274                                    jg.writeRaw(' ');
    +275                            }
    +276                    }
    +277            }
    +278    
    +279            /**
    +280             * Finishes writing the JSON document so that it is syntactically correct.
    +281             * No more data can be written once this method is called.
    +282             * @throws IOException if there's a problem closing the stream
    +283             */
    +284            public void closeJsonStream() throws IOException {
    +285                    if (jg == null) {
    +286                            return;
    +287                    }
    +288    
    +289                    while (!stack.isEmpty()) {
    +290                            writeEndComponent();
    +291                    }
    +292    
    +293                    if (wrapInArray) {
    +294                            indent(0);
    +295                            jg.writeEndArray();
    +296                    }
    +297    
    +298                    jg.close();
    +299            }
    +300    
    +301            /**
    +302             * Finishes writing the JSON document and closes the underlying
    +303             * {@link Writer}.
    +304             * @throws IOException if there's a problem closing the stream
    +305             */
    +306            public void close() throws IOException {
    +307                    if (jg == null) {
    +308                            return;
    +309                    }
    +310    
    +311                    closeJsonStream();
    +312                    writer.close();
    +313            }
    +314    
    +315            private void init() throws IOException {
    +316                    JsonFactory factory = new JsonFactory();
    +317                    factory.configure(Feature.AUTO_CLOSE_TARGET, false);
    +318                    jg = factory.createJsonGenerator(writer);
    +319    
    +320                    if (wrapInArray) {
    +321                            jg.writeStartArray();
    +322                            indent(0);
    +323                    }
    +324            }
    +325    
    +326            private static class Info {
    +327                    public boolean wroteEndPropertiesArray = false;
    +328                    public boolean wroteStartSubComponentsArray = false;
    +329            }
    +330    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalReader.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalReader.html new file mode 100644 index 000000000..4d3cc3943 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalReader.html @@ -0,0 +1,361 @@ + + +
    +001    package biweekly.io.json;
    +002    
    +003    import static biweekly.util.IOUtils.utf8Reader;
    +004    import static biweekly.util.StringUtils.NEWLINE;
    +005    
    +006    import java.io.Closeable;
    +007    import java.io.File;
    +008    import java.io.FileNotFoundException;
    +009    import java.io.IOException;
    +010    import java.io.InputStream;
    +011    import java.io.Reader;
    +012    import java.io.StringReader;
    +013    import java.util.ArrayList;
    +014    import java.util.Arrays;
    +015    import java.util.HashMap;
    +016    import java.util.List;
    +017    import java.util.Map;
    +018    
    +019    import biweekly.ICalDataType;
    +020    import biweekly.ICalendar;
    +021    import biweekly.component.ICalComponent;
    +022    import biweekly.component.marshaller.ICalComponentMarshaller;
    +023    import biweekly.component.marshaller.ICalendarMarshaller;
    +024    import biweekly.io.CannotParseException;
    +025    import biweekly.io.ICalMarshallerRegistrar;
    +026    import biweekly.io.SkipMeException;
    +027    import biweekly.io.json.JCalRawReader.JCalDataStreamListener;
    +028    import biweekly.parameter.ICalParameters;
    +029    import biweekly.property.ICalProperty;
    +030    import biweekly.property.RawProperty;
    +031    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +032    import biweekly.property.marshaller.ICalPropertyMarshaller.Result;
    +033    import biweekly.property.marshaller.RawPropertyMarshaller;
    +034    
    +035    import com.fasterxml.jackson.core.JsonParseException;
    +036    
    +037    /*
    +038     Copyright (c) 2013, Michael Angstadt
    +039     All rights reserved.
    +040    
    +041     Redistribution and use in source and binary forms, with or without
    +042     modification, are permitted provided that the following conditions are met: 
    +043    
    +044     1. Redistributions of source code must retain the above copyright notice, this
    +045     list of conditions and the following disclaimer. 
    +046     2. Redistributions in binary form must reproduce the above copyright notice,
    +047     this list of conditions and the following disclaimer in the documentation
    +048     and/or other materials provided with the distribution. 
    +049    
    +050     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +051     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +052     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +053     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +054     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +055     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +056     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +057     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +058     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +059     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +060     */
    +061    
    +062    /**
    +063     * <p>
    +064     * Parses {@link ICalendar} objects from a jCal data stream (JSON).
    +065     * </p>
    +066     * <p>
    +067     * <b>Example:</b>
    +068     * 
    +069     * <pre class="brush:java">
    +070     * InputStream in = ...
    +071     * JCalReader jcalReader = new JCalReader(in);
    +072     * ICalendar ical;
    +073     * while ((ical = jcalReader.readNext()) != null){
    +074     *   ...
    +075     * }
    +076     * jcalReader.close();
    +077     * </pre>
    +078     * 
    +079     * </p>
    +080     * @author Michael Angstadt
    +081     * @see <a href="http://tools.ietf.org/html/draft-ietf-jcardcal-jcal-05">jCal
    +082     * draft</a>
    +083     */
    +084    public class JCalReader implements Closeable {
    +085            private static final ICalendarMarshaller icalMarshaller = ICalMarshallerRegistrar.getICalendarMarshaller();
    +086            private ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +087            private final JCalRawReader reader;
    +088            private final List<String> warnings = new ArrayList<String>();
    +089    
    +090            /**
    +091             * Creates a jCard reader.
    +092             * @param json the JSON string
    +093             */
    +094            public JCalReader(String json) {
    +095                    this(new StringReader(json));
    +096            }
    +097    
    +098            /**
    +099             * Creates a jCard reader.
    +100             * @param in the input stream to read the vCards from
    +101             */
    +102            public JCalReader(InputStream in) {
    +103                    this(utf8Reader(in));
    +104            }
    +105    
    +106            /**
    +107             * Creates a jCard reader.
    +108             * @param file the file to read the vCards from
    +109             * @throws FileNotFoundException if the file doesn't exist
    +110             */
    +111            public JCalReader(File file) throws FileNotFoundException {
    +112                    this(utf8Reader(file));
    +113            }
    +114    
    +115            /**
    +116             * Creates a jCard reader.
    +117             * @param reader the reader to read the vCards from
    +118             */
    +119            public JCalReader(Reader reader) {
    +120                    this.reader = new JCalRawReader(reader);
    +121            }
    +122    
    +123            /**
    +124             * Gets the warnings from the last iCalendar object that was unmarshalled.
    +125             * This list is reset every time a new iCalendar object is read.
    +126             * @return the warnings or empty list if there were no warnings
    +127             */
    +128            public List<String> getWarnings() {
    +129                    return new ArrayList<String>(warnings);
    +130            }
    +131    
    +132            /**
    +133             * <p>
    +134             * Registers an experimental property marshaller. Can also be used to
    +135             * override the marshaller of a standard property (such as DTSTART). Calling
    +136             * this method is the same as calling:
    +137             * </p>
    +138             * <p>
    +139             * {@code getRegistrar().register(marshaller)}.
    +140             * </p>
    +141             * @param marshaller the marshaller to register
    +142             */
    +143            public void registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +144                    registrar.register(marshaller);
    +145            }
    +146    
    +147            /**
    +148             * <p>
    +149             * Registers an experimental component marshaller. Can also be used to
    +150             * override the marshaller of a standard component (such as VEVENT). Calling
    +151             * this method is the same as calling:
    +152             * </p>
    +153             * <p>
    +154             * {@code getRegistrar().register(marshaller)}.
    +155             * </p>
    +156             * @param marshaller the marshaller to register
    +157             */
    +158            public void registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +159                    registrar.register(marshaller);
    +160            }
    +161    
    +162            /**
    +163             * Gets the object that manages the component/property marshaller objects.
    +164             * @return the marshaller registrar
    +165             */
    +166            public ICalMarshallerRegistrar getRegistrar() {
    +167                    return registrar;
    +168            }
    +169    
    +170            /**
    +171             * Sets the object that manages the component/property marshaller objects.
    +172             * @param registrar the marshaller registrar
    +173             */
    +174            public void setRegistrar(ICalMarshallerRegistrar registrar) {
    +175                    this.registrar = registrar;
    +176            }
    +177    
    +178            /**
    +179             * Reads the next iCalendar object from the JSON data stream.
    +180             * @return the iCalendar object or null if there are no more
    +181             * @throws JCalParseException if the jCal syntax is incorrect (the JSON
    +182             * syntax may be valid, but it is not in the correct jCal format).
    +183             * @throws JsonParseException if the JSON syntax is incorrect
    +184             * @throws IOException if there is a problem reading from the data stream
    +185             */
    +186            public ICalendar readNext() throws IOException {
    +187                    if (reader.eof()) {
    +188                            return null;
    +189                    }
    +190    
    +191                    warnings.clear();
    +192    
    +193                    JCalDataStreamListenerImpl listener = new JCalDataStreamListenerImpl();
    +194                    reader.readNext(listener);
    +195                    return listener.getICalendar();
    +196            }
    +197    
    +198            private void addWarning(String message, String propertyName) {
    +199                    StringBuilder sb = new StringBuilder();
    +200                    sb.append("Line ").append(reader.getLineNum());
    +201                    if (propertyName != null) {
    +202                            sb.append(" (").append(propertyName).append(" property)");
    +203                    }
    +204                    sb.append(": ").append(message);
    +205    
    +206                    warnings.add(sb.toString());
    +207            }
    +208    
    +209            //@Override
    +210            public void close() throws IOException {
    +211                    reader.close();
    +212            }
    +213    
    +214            private class JCalDataStreamListenerImpl implements JCalDataStreamListener {
    +215                    private final Map<List<String>, ICalComponent> components = new HashMap<List<String>, ICalComponent>();
    +216    
    +217                    public void readProperty(List<String> componentHierarchy, String propertyName, ICalParameters parameters, ICalDataType dataType, JCalValue value) {
    +218                            //get the component that the property belongs to
    +219                            ICalComponent parent = components.get(componentHierarchy);
    +220    
    +221                            //unmarshal the property
    +222                            ICalPropertyMarshaller<? extends ICalProperty> m = registrar.getPropertyMarshaller(propertyName);
    +223                            ICalProperty property = null;
    +224                            try {
    +225                                    Result<? extends ICalProperty> result = m.parseJson(value, dataType, parameters);
    +226    
    +227                                    for (String warning : result.getWarnings()) {
    +228                                            addWarning(warning, propertyName);
    +229                                    }
    +230    
    +231                                    property = result.getProperty();
    +232                            } catch (SkipMeException e) {
    +233                                    if (e.getMessage() == null) {
    +234                                            addWarning("Property has requested that it be skipped.", propertyName);
    +235                                    } else {
    +236                                            addWarning("Property has requested that it be skipped: " + e.getMessage(), propertyName);
    +237                                    }
    +238                            } catch (CannotParseException e) {
    +239                                    Result<? extends ICalProperty> result = new RawPropertyMarshaller(propertyName).parseJson(value, dataType, parameters);
    +240                                    for (String warning : result.getWarnings()) {
    +241                                            addWarning(warning, propertyName);
    +242                                    }
    +243                                    property = result.getProperty();
    +244    
    +245                                    String valueStr = ((RawProperty) property).getValue();
    +246                                    if (e.getMessage() == null) {
    +247                                            addWarning("Property value could not be unmarshalled: " + valueStr, propertyName);
    +248                                    } else {
    +249                                            addWarning("Property value could not be unmarshalled." + NEWLINE + "  Value: " + valueStr + NEWLINE + "  Reason: " + e.getMessage(), propertyName);
    +250                                    }
    +251                            }
    +252    
    +253                            if (property != null) {
    +254                                    parent.addProperty(property);
    +255                            }
    +256                    }
    +257    
    +258                    public void readComponent(List<String> parentHierarchy, String componentName) {
    +259                            ICalComponentMarshaller<? extends ICalComponent> m = registrar.getComponentMarshaller(componentName);
    +260                            ICalComponent component = m.emptyInstance();
    +261    
    +262                            ICalComponent parent = components.get(parentHierarchy);
    +263                            if (parent != null) {
    +264                                    parent.addComponent(component);
    +265                            }
    +266    
    +267                            List<String> hierarchy = new ArrayList<String>(parentHierarchy);
    +268                            hierarchy.add(componentName);
    +269                            components.put(hierarchy, component);
    +270                    }
    +271    
    +272                    public ICalendar getICalendar() {
    +273                            if (components.isEmpty()) {
    +274                                    //EOF
    +275                                    return null;
    +276                            }
    +277    
    +278                            ICalComponent component = components.get(Arrays.asList(icalMarshaller.getComponentName().toLowerCase()));
    +279                            if (component == null) {
    +280                                    //should never happen because the parser always looks for a "vcalendar" component
    +281                                    return null;
    +282                            }
    +283    
    +284                            if (component instanceof ICalendar) {
    +285                                    //should happen every time
    +286                                    return (ICalendar) component;
    +287                            }
    +288    
    +289                            //this will only happen if the user decides to override the ICalendarMarshaller for some reason
    +290                            ICalendar ical = icalMarshaller.emptyInstance();
    +291                            ical.addComponent(component);
    +292                            return ical;
    +293                    }
    +294            }
    +295    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalValue.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalValue.html new file mode 100644 index 000000000..3a156c6b4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalValue.html @@ -0,0 +1,419 @@ + + +
    +001    package biweekly.io.json;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.Arrays;
    +005    import java.util.Collections;
    +006    import java.util.LinkedHashMap;
    +007    import java.util.List;
    +008    import java.util.Map;
    +009    
    +010    import biweekly.util.ListMultimap;
    +011    
    +012    /*
    +013     Copyright (c) 2013, Michael Angstadt
    +014     All rights reserved.
    +015    
    +016     Redistribution and use in source and binary forms, with or without
    +017     modification, are permitted provided that the following conditions are met: 
    +018    
    +019     1. Redistributions of source code must retain the above copyright notice, this
    +020     list of conditions and the following disclaimer. 
    +021     2. Redistributions in binary form must reproduce the above copyright notice,
    +022     this list of conditions and the following disclaimer in the documentation
    +023     and/or other materials provided with the distribution. 
    +024    
    +025     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +026     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +027     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +028     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +029     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +030     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +031     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +032     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +033     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +034     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +035     */
    +036    
    +037    /**
    +038     * Holds the value of a jCal property.
    +039     * @author Michael Angstadt
    +040     */
    +041    public class JCalValue {
    +042            private final List<JsonValue> values;
    +043    
    +044            /**
    +045             * Creates a new jCal value.
    +046             * @param values the values
    +047             */
    +048            public JCalValue(List<JsonValue> values) {
    +049                    this.values = Collections.unmodifiableList(values);
    +050            }
    +051    
    +052            /**
    +053             * Creates a new jCal value.
    +054             * @param values the values
    +055             */
    +056            public JCalValue(JsonValue... values) {
    +057                    this.values = Arrays.asList(values); //unmodifiable
    +058            }
    +059    
    +060            /**
    +061             * Creates a single-valued value.
    +062             * @param value the value
    +063             * @return the jCal value
    +064             */
    +065            public static JCalValue single(Object value) {
    +066                    return new JCalValue(new JsonValue(value));
    +067            }
    +068    
    +069            /**
    +070             * Creates a multi-valued value.
    +071             * @param values the values
    +072             * @return the jCal value
    +073             */
    +074            public static JCalValue multi(Object... values) {
    +075                    return multi(Arrays.asList(values));
    +076            }
    +077    
    +078            /**
    +079             * Creates a multi-valued value.
    +080             * @param values the values
    +081             * @return the jCal value
    +082             */
    +083            public static JCalValue multi(List<?> values) {
    +084                    List<JsonValue> multiValues = new ArrayList<JsonValue>(values.size());
    +085                    for (Object value : values) {
    +086                            multiValues.add(new JsonValue(value));
    +087                    }
    +088                    return new JCalValue(multiValues);
    +089            }
    +090    
    +091            /**
    +092             * <p>
    +093             * Creates a structured value.
    +094             * </p>
    +095             * <p>
    +096             * This method accepts a vararg of {@link Object} instances. {@link List}
    +097             * objects will be treated as multi-valued components. All other objects.
    +098             * Null values will be treated as empty components.
    +099             * </p>
    +100             * @param values the values
    +101             * @return the jCal value
    +102             */
    +103            public static JCalValue structured(Object... values) {
    +104                    List<List<?>> valuesList = new ArrayList<List<?>>(values.length);
    +105                    for (Object value : values) {
    +106                            List<?> list = (value instanceof List) ? (List<?>) value : Arrays.asList(value);
    +107                            valuesList.add(list);
    +108                    }
    +109                    return structured(valuesList);
    +110            }
    +111    
    +112            /**
    +113             * Creates a structured value.
    +114             * @param values the values
    +115             * @return the jCal value
    +116             */
    +117            public static JCalValue structured(List<List<?>> values) {
    +118                    List<JsonValue> array = new ArrayList<JsonValue>(values.size());
    +119    
    +120                    for (List<?> list : values) {
    +121                            if (list.isEmpty()) {
    +122                                    array.add(new JsonValue(""));
    +123                                    continue;
    +124                            }
    +125    
    +126                            if (list.size() == 1) {
    +127                                    Object value = list.get(0);
    +128                                    if (value == null) {
    +129                                            value = "";
    +130                                    }
    +131                                    array.add(new JsonValue(value));
    +132                                    continue;
    +133                            }
    +134    
    +135                            List<JsonValue> subArray = new ArrayList<JsonValue>(list.size());
    +136                            for (Object value : list) {
    +137                                    if (value == null) {
    +138                                            value = "";
    +139                                    }
    +140                                    subArray.add(new JsonValue(value));
    +141                            }
    +142                            array.add(new JsonValue(subArray));
    +143                    }
    +144    
    +145                    return new JCalValue(new JsonValue(array));
    +146            }
    +147    
    +148            /**
    +149             * Creates an object value.
    +150             * @param value the object
    +151             * @return the jCal value
    +152             */
    +153            public static JCalValue object(ListMultimap<String, Object> value) {
    +154                    Map<String, JsonValue> object = new LinkedHashMap<String, JsonValue>();
    +155                    for (Map.Entry<String, List<Object>> entry : value) {
    +156                            String key = entry.getKey();
    +157                            List<Object> list = entry.getValue();
    +158    
    +159                            JsonValue v;
    +160                            if (list.size() == 1) {
    +161                                    v = new JsonValue(list.get(0));
    +162                            } else {
    +163                                    List<JsonValue> array = new ArrayList<JsonValue>(list.size());
    +164                                    for (Object element : list) {
    +165                                            array.add(new JsonValue(element));
    +166                                    }
    +167                                    v = new JsonValue(array);
    +168                            }
    +169                            object.put(key, v);
    +170                    }
    +171                    return new JCalValue(new JsonValue(object));
    +172            }
    +173    
    +174            /**
    +175             * Gets the raw JSON values. Use one of the "{@code as*}" methods to parse
    +176             * the values as one of the standard jCal values.
    +177             * @return the JSON values
    +178             */
    +179            public List<JsonValue> getValues() {
    +180                    return values;
    +181            }
    +182    
    +183            /**
    +184             * Parses this jCal value as a single-valued property value.
    +185             * @return the value or empty string if not found
    +186             */
    +187            public String asSingle() {
    +188                    if (values.isEmpty()) {
    +189                            return "";
    +190                    }
    +191    
    +192                    JsonValue first = values.get(0);
    +193                    if (first.isNull()) {
    +194                            return "";
    +195                    }
    +196    
    +197                    Object obj = first.getValue();
    +198                    if (obj != null) {
    +199                            return obj.toString();
    +200                    }
    +201    
    +202                    //get the first element of the array
    +203                    List<JsonValue> array = first.getArray();
    +204                    if (array != null && !array.isEmpty()) {
    +205                            obj = array.get(0).getValue();
    +206                            if (obj != null) {
    +207                                    return obj.toString();
    +208                            }
    +209                    }
    +210    
    +211                    return "";
    +212            }
    +213    
    +214            /**
    +215             * Parses this jCal value as a structured property value.
    +216             * @return the structured values or empty list if not found
    +217             */
    +218            public List<List<String>> asStructured() {
    +219                    if (values.isEmpty()) {
    +220                            return Collections.emptyList();
    +221                    }
    +222    
    +223                    JsonValue first = values.get(0);
    +224    
    +225                    //["request-status", {}, "text", ["2.0", "Success"] ]
    +226                    List<JsonValue> array = first.getArray();
    +227                    if (array != null) {
    +228                            List<List<String>> valuesStr = new ArrayList<List<String>>(array.size());
    +229                            for (JsonValue value : array) {
    +230                                    if (value.isNull()) {
    +231                                            valuesStr.add(Arrays.asList(""));
    +232                                            continue;
    +233                                    }
    +234    
    +235                                    Object obj = value.getValue();
    +236                                    if (obj != null) {
    +237                                            valuesStr.add(Arrays.asList(obj.toString()));
    +238                                            continue;
    +239                                    }
    +240    
    +241                                    List<JsonValue> subArray = value.getArray();
    +242                                    if (subArray != null) {
    +243                                            List<String> subValuesStr = new ArrayList<String>(subArray.size());
    +244                                            for (JsonValue subArrayValue : subArray) {
    +245                                                    if (subArrayValue.isNull()) {
    +246                                                            subValuesStr.add("");
    +247                                                            continue;
    +248                                                    }
    +249    
    +250                                                    obj = subArrayValue.getValue();
    +251                                                    if (obj != null) {
    +252                                                            subValuesStr.add(obj.toString());
    +253                                                            continue;
    +254                                                    }
    +255                                            }
    +256                                            valuesStr.add(subValuesStr);
    +257                                    }
    +258                            }
    +259                            return valuesStr;
    +260                    }
    +261    
    +262                    //get the first value if it's not enclosed in an array
    +263                    //["request-status", {}, "text", "2.0"]
    +264                    Object obj = first.getValue();
    +265                    if (obj != null) {
    +266                            List<List<String>> values = new ArrayList<List<String>>(1);
    +267                            values.add(Arrays.asList(obj.toString()));
    +268                            return values;
    +269                    }
    +270    
    +271                    //["request-status", {}, "text", null]
    +272                    if (first.isNull()) {
    +273                            List<List<String>> values = new ArrayList<List<String>>(1);
    +274                            values.add(Arrays.asList(""));
    +275                            return values;
    +276                    }
    +277    
    +278                    return Collections.emptyList();
    +279            }
    +280    
    +281            /**
    +282             * Parses this jCal value as a multi-valued property value.
    +283             * @return the values or empty list if not found
    +284             */
    +285            public List<String> asMulti() {
    +286                    if (values.isEmpty()) {
    +287                            return Collections.emptyList();
    +288                    }
    +289    
    +290                    List<String> multi = new ArrayList<String>(values.size());
    +291                    for (JsonValue value : values) {
    +292                            if (value.isNull()) {
    +293                                    multi.add("");
    +294                                    continue;
    +295                            }
    +296    
    +297                            Object obj = value.getValue();
    +298                            if (obj != null) {
    +299                                    multi.add(obj.toString());
    +300                                    continue;
    +301                            }
    +302                    }
    +303                    return multi;
    +304            }
    +305    
    +306            /**
    +307             * Parses this jCal value as an object property value.
    +308             * @return the object or an empty map if not found
    +309             */
    +310            public ListMultimap<String, String> asObject() {
    +311                    if (values.isEmpty()) {
    +312                            return new ListMultimap<String, String>(0);
    +313                    }
    +314    
    +315                    Map<String, JsonValue> map = values.get(0).getObject();
    +316                    if (map == null) {
    +317                            return new ListMultimap<String, String>(0);
    +318                    }
    +319    
    +320                    ListMultimap<String, String> values = new ListMultimap<String, String>();
    +321                    for (Map.Entry<String, JsonValue> entry : map.entrySet()) {
    +322                            String key = entry.getKey();
    +323                            JsonValue value = entry.getValue();
    +324    
    +325                            if (value.isNull()) {
    +326                                    values.put(key, "");
    +327                                    continue;
    +328                            }
    +329    
    +330                            Object obj = value.getValue();
    +331                            if (obj != null) {
    +332                                    values.put(key, obj.toString());
    +333                                    continue;
    +334                            }
    +335    
    +336                            List<JsonValue> array = value.getArray();
    +337                            if (array != null) {
    +338                                    for (JsonValue element : array) {
    +339                                            if (element.isNull()) {
    +340                                                    values.put(key, "");
    +341                                                    continue;
    +342                                            }
    +343    
    +344                                            obj = element.getValue();
    +345                                            if (obj != null) {
    +346                                                    values.put(key, obj.toString());
    +347                                            }
    +348                                    }
    +349                            }
    +350                    }
    +351                    return values;
    +352            }
    +353    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalWriter.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalWriter.html new file mode 100644 index 000000000..f59f15497 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JCalWriter.html @@ -0,0 +1,340 @@ + + +
    +001    package biweekly.io.json;
    +002    
    +003    import static biweekly.util.IOUtils.utf8Writer;
    +004    
    +005    import java.io.Closeable;
    +006    import java.io.File;
    +007    import java.io.IOException;
    +008    import java.io.OutputStream;
    +009    import java.io.Writer;
    +010    
    +011    import biweekly.ICalDataType;
    +012    import biweekly.ICalendar;
    +013    import biweekly.component.ICalComponent;
    +014    import biweekly.component.marshaller.ICalComponentMarshaller;
    +015    import biweekly.io.ICalMarshallerRegistrar;
    +016    import biweekly.io.SkipMeException;
    +017    import biweekly.parameter.ICalParameters;
    +018    import biweekly.property.ICalProperty;
    +019    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +020    
    +021    /*
    +022     Copyright (c) 2013, Michael Angstadt
    +023     All rights reserved.
    +024    
    +025     Redistribution and use in source and binary forms, with or without
    +026     modification, are permitted provided that the following conditions are met: 
    +027    
    +028     1. Redistributions of source code must retain the above copyright notice, this
    +029     list of conditions and the following disclaimer. 
    +030     2. Redistributions in binary form must reproduce the above copyright notice,
    +031     this list of conditions and the following disclaimer in the documentation
    +032     and/or other materials provided with the distribution. 
    +033    
    +034     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +035     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +036     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +037     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +038     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +039     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +040     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +041     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +042     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +043     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +044     */
    +045    
    +046    /**
    +047     * <p>
    +048     * Writes {@link ICalendar} objects to a JSON data stream (jCal).
    +049     * </p>
    +050     * <p>
    +051     * <b>Example:</b>
    +052     * 
    +053     * <pre class="brush:java">
    +054     * List&lt;ICalendar&gt; icals = ... 
    +055     * OutputStream out = ...
    +056     * JCalWriter jcalWriter = new JCalWriter(out);
    +057     * for (ICalendar ical : icals){
    +058     *   jcalWriter.write(ical);
    +059     * }
    +060     * jcalWriter.close();
    +061     * </pre>
    +062     * 
    +063     * </p>
    +064     * @author Michael Angstadt
    +065     * @see <a href="http://tools.ietf.org/html/draft-ietf-jcardcal-jcal-05">jCal
    +066     * draft</a>
    +067     */
    +068    public class JCalWriter implements Closeable {
    +069            private ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +070            private final JCalRawWriter writer;
    +071    
    +072            /**
    +073             * Creates a jCal writer that writes to an output stream.
    +074             * @param outputStream the output stream to write to
    +075             */
    +076            public JCalWriter(OutputStream outputStream) {
    +077                    this(utf8Writer(outputStream));
    +078            }
    +079    
    +080            /**
    +081             * Creates a jCal writer that writes to an output stream.
    +082             * @param outputStream the output stream to write to
    +083             * @param wrapInArray true to wrap all iCalendar objects in a parent array,
    +084             * false not to (useful when writing more than one iCalendar object)
    +085             */
    +086            public JCalWriter(OutputStream outputStream, boolean wrapInArray) {
    +087                    this(utf8Writer(outputStream), wrapInArray);
    +088            }
    +089    
    +090            /**
    +091             * Creates a jCal writer that writes to a file.
    +092             * @param file the file to write to
    +093             * @throws IOException if the file cannot be written to
    +094             */
    +095            public JCalWriter(File file) throws IOException {
    +096                    this(utf8Writer(file));
    +097            }
    +098    
    +099            /**
    +100             * Creates a jCal writer that writes to a file.
    +101             * @param file the file to write to
    +102             * @param wrapInArray true to wrap all iCalendar objects in a parent array,
    +103             * false not to (useful when writing more than one iCalendar object)
    +104             * @throws IOException if the file cannot be written to
    +105             */
    +106            public JCalWriter(File file, boolean wrapInArray) throws IOException {
    +107                    this(utf8Writer(file), wrapInArray);
    +108            }
    +109    
    +110            /**
    +111             * Creates a jCal writer that writes to a writer.
    +112             * @param writer the writer to the data stream
    +113             */
    +114            public JCalWriter(Writer writer) {
    +115                    this(writer, false);
    +116            }
    +117    
    +118            /**
    +119             * Creates a jCal writer that writes to a writer.
    +120             * @param writer the writer to the data stream
    +121             * @param wrapInArray true to wrap all iCalendar objects in a parent array,
    +122             * false not to (useful when writing more than one iCalendar object)
    +123             */
    +124            public JCalWriter(Writer writer, boolean wrapInArray) {
    +125                    this.writer = new JCalRawWriter(writer, wrapInArray);
    +126            }
    +127    
    +128            /**
    +129             * <p>
    +130             * Registers an experimental property marshaller. Can also be used to
    +131             * override the marshaller of a standard property (such as DTSTART). Calling
    +132             * this method is the same as calling:
    +133             * </p>
    +134             * <p>
    +135             * {@code getRegistrar().register(marshaller)}.
    +136             * </p>
    +137             * @param marshaller the marshaller to register
    +138             */
    +139            public void registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +140                    registrar.register(marshaller);
    +141            }
    +142    
    +143            /**
    +144             * <p>
    +145             * Registers an experimental component marshaller. Can also be used to
    +146             * override the marshaller of a standard component (such as VEVENT). Calling
    +147             * this method is the same as calling:
    +148             * </p>
    +149             * <p>
    +150             * {@code getRegistrar().register(marshaller)}.
    +151             * </p>
    +152             * @param marshaller the marshaller to register
    +153             */
    +154            public void registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +155                    registrar.register(marshaller);
    +156            }
    +157    
    +158            /**
    +159             * Gets the object that manages the component/property marshaller objects.
    +160             * @return the marshaller registrar
    +161             */
    +162            public ICalMarshallerRegistrar getRegistrar() {
    +163                    return registrar;
    +164            }
    +165    
    +166            /**
    +167             * Sets the object that manages the component/property marshaller objects.
    +168             * @param registrar the marshaller registrar
    +169             */
    +170            public void setRegistrar(ICalMarshallerRegistrar registrar) {
    +171                    this.registrar = registrar;
    +172            }
    +173    
    +174            /**
    +175             * Gets whether or not the JSON will be pretty-printed.
    +176             * @return true if it will be pretty-printed, false if not (defaults to
    +177             * false)
    +178             */
    +179            public boolean isIndent() {
    +180                    return writer.isIndent();
    +181            }
    +182    
    +183            /**
    +184             * Sets whether or not to pretty-print the JSON.
    +185             * @param indent true to pretty-print it, false not to (defaults to false)
    +186             */
    +187            public void setIndent(boolean indent) {
    +188                    writer.setIndent(indent);
    +189            }
    +190    
    +191            /**
    +192             * Writes an iCalendar object to the data stream.
    +193             * @param ical the iCalendar object to write
    +194             * @throws IllegalArgumentException if the marshaller class for a component
    +195             * or property object cannot be found (only happens when an experimental
    +196             * property/component marshaller is not registered with the
    +197             * {@code registerMarshaller} method.)
    +198             * @throws IOException if there's a problem writing to the data stream
    +199             */
    +200            public void write(ICalendar ical) throws IOException {
    +201                    writeComponent(ical);
    +202            }
    +203    
    +204            /**
    +205             * Writes a component to the data stream.
    +206             * @param component the component to write
    +207             * @throws IllegalArgumentException if the marshaller class for a component
    +208             * or property object cannot be found (only happens when an experimental
    +209             * property/component marshaller is not registered with the
    +210             * {@code registerMarshaller} method.)
    +211             * @throws IOException if there's a problem writing to the data stream
    +212             */
    +213            @SuppressWarnings({ "rawtypes", "unchecked" })
    +214            private void writeComponent(ICalComponent component) throws IOException {
    +215                    ICalComponentMarshaller compMarshaller = registrar.getComponentMarshaller(component);
    +216                    if (compMarshaller == null) {
    +217                            throw new IllegalArgumentException("No marshaller found for component class \"" + component.getClass().getName() + "\".");
    +218                    }
    +219    
    +220                    writer.writeStartComponent(compMarshaller.getComponentName().toLowerCase());
    +221    
    +222                    //write properties
    +223                    for (Object obj : compMarshaller.getProperties(component)) {
    +224                            ICalProperty property = (ICalProperty) obj;
    +225                            ICalPropertyMarshaller propMarshaller = registrar.getPropertyMarshaller(property);
    +226                            if (propMarshaller == null) {
    +227                                    throw new IllegalArgumentException("No marshaller found for property class \"" + property.getClass().getName() + "\".");
    +228                            }
    +229    
    +230                            //marshal property
    +231                            String propertyName = propMarshaller.getPropertyName().toLowerCase();
    +232                            ICalParameters parameters;
    +233                            JCalValue value;
    +234                            try {
    +235                                    parameters = propMarshaller.prepareParameters(property);
    +236                                    value = propMarshaller.writeJson(property);
    +237                            } catch (SkipMeException e) {
    +238                                    continue;
    +239                            }
    +240    
    +241                            //get the data type
    +242                            ICalDataType dataType = propMarshaller.dataType(property);
    +243    
    +244                            //write property
    +245                            writer.writeProperty(propertyName, parameters, dataType, value);
    +246                    }
    +247    
    +248                    //write sub-components
    +249                    for (Object obj : compMarshaller.getComponents(component)) {
    +250                            ICalComponent subComponent = (ICalComponent) obj;
    +251                            writeComponent(subComponent);
    +252                    }
    +253    
    +254                    writer.writeEndComponent();
    +255            }
    +256    
    +257            /**
    +258             * Finishes writing the JSON document and closes the underlying
    +259             * {@link Writer}.
    +260             * @throws IOException if there's a problem closing the stream
    +261             */
    +262            public void close() throws IOException {
    +263                    writer.close();
    +264            }
    +265    
    +266            /**
    +267             * Finishes writing the JSON document so that it is syntactically correct.
    +268             * No more iCalendar objects can be written once this method is called.
    +269             * @throws IOException if there's a problem writing to the data stream
    +270             */
    +271            public void closeJsonStream() throws IOException {
    +272                    writer.closeJsonStream();
    +273            }
    +274    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JsonValue.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JsonValue.html new file mode 100644 index 000000000..06fd38065 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/json/JsonValue.html @@ -0,0 +1,232 @@ + + +
    +001    package biweekly.io.json;
    +002    
    +003    import java.util.List;
    +004    import java.util.Map;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Represents a JSON value, array, or object.
    +033     * @author Michael Angstadt
    +034     */
    +035    public class JsonValue {
    +036            private final boolean isNull;
    +037            private final Object value;
    +038            private final List<JsonValue> array;
    +039            private final Map<String, JsonValue> object;
    +040    
    +041            /**
    +042             * Creates a JSON value (such as a string or integer).
    +043             * @param value the value
    +044             */
    +045            public JsonValue(Object value) {
    +046                    this.value = value;
    +047                    array = null;
    +048                    object = null;
    +049                    isNull = (value == null);
    +050            }
    +051    
    +052            /**
    +053             * Creates a JSON array.
    +054             * @param array the array elements
    +055             */
    +056            public JsonValue(List<JsonValue> array) {
    +057                    this.array = array;
    +058                    value = null;
    +059                    object = null;
    +060                    isNull = (array == null);
    +061            }
    +062    
    +063            /**
    +064             * Creates a JSON object.
    +065             * @param object the object fields
    +066             */
    +067            public JsonValue(Map<String, JsonValue> object) {
    +068                    this.object = object;
    +069                    value = null;
    +070                    array = null;
    +071                    isNull = (object == null);
    +072            }
    +073    
    +074            /**
    +075             * Gets the JSON value.
    +076             * @return the value or null if it's not a JSON value
    +077             */
    +078            public Object getValue() {
    +079                    return value;
    +080            }
    +081    
    +082            /**
    +083             * Gets the JSON array elements.
    +084             * @return the array elements or null if it's not a JSON array
    +085             */
    +086            public List<JsonValue> getArray() {
    +087                    return array;
    +088            }
    +089    
    +090            /**
    +091             * Gets the JSON object.
    +092             * @return the object or null if it's not a JSON object
    +093             */
    +094            public Map<String, JsonValue> getObject() {
    +095                    return object;
    +096            }
    +097    
    +098            /**
    +099             * Determines if the value is "null" or not.
    +100             * @return true if the value is "null", false if not
    +101             */
    +102            public boolean isNull() {
    +103                    return isNull;
    +104            }
    +105    
    +106            @Override
    +107            public int hashCode() {
    +108                    final int prime = 31;
    +109                    int result = 1;
    +110                    result = prime * result + ((array == null) ? 0 : array.hashCode());
    +111                    result = prime * result + (isNull ? 1231 : 1237);
    +112                    result = prime * result + ((object == null) ? 0 : object.hashCode());
    +113                    result = prime * result + ((value == null) ? 0 : value.hashCode());
    +114                    return result;
    +115            }
    +116    
    +117            @Override
    +118            public boolean equals(Object obj) {
    +119                    if (this == obj)
    +120                            return true;
    +121                    if (obj == null)
    +122                            return false;
    +123                    if (getClass() != obj.getClass())
    +124                            return false;
    +125                    JsonValue other = (JsonValue) obj;
    +126                    if (array == null) {
    +127                            if (other.array != null)
    +128                                    return false;
    +129                    } else if (!array.equals(other.array))
    +130                            return false;
    +131                    if (isNull != other.isNull)
    +132                            return false;
    +133                    if (object == null) {
    +134                            if (other.object != null)
    +135                                    return false;
    +136                    } else if (!object.equals(other.object))
    +137                            return false;
    +138                    if (value == null) {
    +139                            if (other.value != null)
    +140                                    return false;
    +141                    } else if (!value.equals(other.value))
    +142                            return false;
    +143                    return true;
    +144            }
    +145    
    +146            @Override
    +147            public String toString() {
    +148                    if (isNull) {
    +149                            return "NULL";
    +150                    }
    +151    
    +152                    if (value != null) {
    +153                            return "VALUE = " + value;
    +154                    }
    +155    
    +156                    if (array != null) {
    +157                            return "ARRAY = " + array;
    +158                    }
    +159    
    +160                    if (object != null) {
    +161                            return "OBJECT = " + object;
    +162                    }
    +163    
    +164                    return "";
    +165            }
    +166    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/FoldedLineReader.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/FoldedLineReader.html new file mode 100644 index 000000000..7590012ea --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/FoldedLineReader.html @@ -0,0 +1,205 @@ + + +
    +001    package biweekly.io.text;
    +002    
    +003    import java.io.BufferedReader;
    +004    import java.io.IOException;
    +005    import java.io.Reader;
    +006    import java.io.StringReader;
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * Automatically unfolds lines of text as they are read.
    +035     * @author Michael Angstadt
    +036     */
    +037    public class FoldedLineReader extends BufferedReader {
    +038            private String lastLine;
    +039            private boolean singleSpaceFolding = true;
    +040            private int lastLineNum = 0, lineCount = 0;
    +041    
    +042            /**
    +043             * Creates a new folded line reader.
    +044             * @param reader the reader object to wrap
    +045             */
    +046            public FoldedLineReader(Reader reader) {
    +047                    super(reader);
    +048            }
    +049    
    +050            /**
    +051             * Creates a new folded line reader.
    +052             * @param text the text to read
    +053             */
    +054            public FoldedLineReader(String text) {
    +055                    this(new StringReader(text));
    +056            }
    +057    
    +058            /**
    +059             * Sets whether the reader will only ignore the first whitespace character
    +060             * it encounters at the beginning of a folded line. This setting is enabled
    +061             * by default in order to support iCalendar files generated by Outlook.
    +062             * @param enabled true to enable (default), false to disable
    +063             */
    +064            public void setSingleSpaceFoldingEnabled(boolean enabled) {
    +065                    singleSpaceFolding = enabled;
    +066            }
    +067    
    +068            /**
    +069             * Gets whether the reader will only ignore the first whitespace character
    +070             * it encounters at the beginning of a folded line. This setting is enabled
    +071             * by default in order to support iCalendar files generated by Outlook.
    +072             * @return true if enabled (default), false if disabled
    +073             */
    +074            public boolean isSingleSpaceFoldingEnabled() {
    +075                    return singleSpaceFolding;
    +076            }
    +077    
    +078            /**
    +079             * Gets the starting line number of the last unfolded line that was read.
    +080             * @return the line number
    +081             */
    +082            public int getLineNum() {
    +083                    return lastLineNum;
    +084            }
    +085    
    +086            /**
    +087             * Reads the next non-empty line.
    +088             * @return the next non-empty line or null of EOF
    +089             * @throws IOException
    +090             */
    +091            private String readNonEmptyLine() throws IOException {
    +092                    String line;
    +093                    do {
    +094                            line = super.readLine();
    +095                            if (line != null) {
    +096                                    lineCount++;
    +097                            }
    +098                    } while (line != null && line.length() == 0);
    +099                    return line;
    +100            }
    +101    
    +102            /**
    +103             * Reads the next line, unfolding it if necessary.
    +104             * @return the next line or null if EOF
    +105             * @throws IOException if there's a problem reading from the reader
    +106             */
    +107            @Override
    +108            public String readLine() throws IOException {
    +109                    String wholeLine = (lastLine == null) ? readNonEmptyLine() : lastLine;
    +110                    lastLine = null;
    +111                    if (wholeLine == null) {
    +112                            return null;
    +113                    }
    +114    
    +115                    //long lines are folded
    +116                    lastLineNum = lineCount;
    +117                    StringBuilder wholeLineSb = new StringBuilder(wholeLine);
    +118                    while (true) {
    +119                            String line = readNonEmptyLine();
    +120                            if (line == null) {
    +121                                    break;
    +122                            } else if (line.length() > 0 && Character.isWhitespace(line.charAt(0))) {
    +123                                    //the line was folded
    +124    
    +125                                    int lastWhitespace = 1;
    +126                                    if (!singleSpaceFolding) {
    +127                                            while (lastWhitespace < line.length() && Character.isWhitespace(line.charAt(lastWhitespace))) {
    +128                                                    lastWhitespace++;
    +129                                            }
    +130                                    }
    +131                                    wholeLineSb.append(line.substring(lastWhitespace));
    +132                            } else {
    +133                                    lastLine = line;
    +134                                    break;
    +135                            }
    +136                    }
    +137                    return wholeLineSb.toString();
    +138            }
    +139    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/FoldedLineWriter.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/FoldedLineWriter.html new file mode 100644 index 000000000..8e4185caf --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/FoldedLineWriter.html @@ -0,0 +1,262 @@ + + +
    +001    package biweekly.io.text;
    +002    
    +003    import java.io.IOException;
    +004    import java.io.Writer;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Automatically folds lines as they are written.
    +033     * @author Michael Angstadt
    +034     */
    +035    public class FoldedLineWriter extends Writer {
    +036            private int curLineLength = 0;
    +037            private int lineLength;
    +038            private String indent;
    +039            private String newline;
    +040            private final Writer writer;
    +041    
    +042            /**
    +043             * @param writer the writer object to wrap
    +044             * @param lineLength the maximum length a line can be before it is folded
    +045             * (excluding the newline)
    +046             * @param indent the string to prepend to each folded line (e.g. a single
    +047             * space character)
    +048             * @param newline the newline sequence to use (e.g. "\r\n")
    +049             * @throws IllegalArgumentException if the line length is less than or equal
    +050             * to zero
    +051             * @throws IllegalArgumentException if the length of the indent string is
    +052             * greater than the max line length
    +053             */
    +054            public FoldedLineWriter(Writer writer, int lineLength, String indent, String newline) {
    +055                    setLineLength(lineLength);
    +056                    setIndent(indent);
    +057                    this.writer = writer;
    +058                    this.newline = newline;
    +059            }
    +060    
    +061            /**
    +062             * Writes a string of text, followed by a newline.
    +063             * @param str the text to write
    +064             * @throws IOException if there's a problem writing to the output stream
    +065             */
    +066            public void writeln(String str) throws IOException {
    +067                    write(str);
    +068                    write(newline);
    +069            }
    +070    
    +071            @Override
    +072            public void write(char buf[], int start, int end) throws IOException {
    +073                    write(buf, start, end, lineLength, indent);
    +074            }
    +075    
    +076            /**
    +077             * Writes a portion of an array of characters.
    +078             * @param buf the array of characters
    +079             * @param start the offset from which to start writing characters
    +080             * @param end the number of characters to write
    +081             * @param lineLength the maximum length a line can be before it is folded
    +082             * (excluding the newline)
    +083             * @param indent the indent string to use (e.g. a single space character)
    +084             * @throws IOException if there's a problem writing to the output stream
    +085             */
    +086            public void write(char buf[], int start, int end, int lineLength, String indent) throws IOException {
    +087                    for (int i = start; i < end; i++) {
    +088                            char c = buf[i];
    +089                            if (c == '\n') {
    +090                                    writer.write(buf, start, i - start + 1);
    +091                                    curLineLength = 0;
    +092                                    start = i + 1;
    +093                            } else if (c == '\r') {
    +094                                    if (i == end - 1 || buf[i + 1] != '\n') {
    +095                                            writer.write(buf, start, i - start + 1);
    +096                                            curLineLength = 0;
    +097                                            start = i + 1;
    +098                                    } else {
    +099                                            curLineLength++;
    +100                                    }
    +101                            } else if (curLineLength >= lineLength) {
    +102                                    //if the last characters on the line are whitespace, then exceed the max line length in order to include the whitespace on the same line
    +103                                    //otherwise it will be lost because it will merge with the padding on the next line
    +104                                    if (Character.isWhitespace(c)) {
    +105                                            while (Character.isWhitespace(c) && i < end - 1) {
    +106                                                    i++;
    +107                                                    c = buf[i];
    +108                                            }
    +109                                            if (i == end - 1) {
    +110                                                    //the rest of the char array is whitespace, so leave the loop
    +111                                                    break;
    +112                                            }
    +113                                    }
    +114    
    +115                                    writer.write(buf, start, i - start);
    +116                                    String s = newline + indent;
    +117                                    writer.write(s.toCharArray(), 0, s.length());
    +118                                    start = i;
    +119                                    curLineLength = indent.length() + 1;
    +120                            } else {
    +121                                    curLineLength++;
    +122                            }
    +123                    }
    +124                    writer.write(buf, start, end - start);
    +125            }
    +126    
    +127            @Override
    +128            public void close() throws IOException {
    +129                    writer.close();
    +130            }
    +131    
    +132            @Override
    +133            public void flush() throws IOException {
    +134                    writer.flush();
    +135            }
    +136    
    +137            /**
    +138             * Gets the maximum length a line can be before it is folded (excluding the
    +139             * newline).
    +140             * @return the line length
    +141             */
    +142            public int getLineLength() {
    +143                    return lineLength;
    +144            }
    +145    
    +146            /**
    +147             * Sets the maximum length a line can be before it is folded (excluding the
    +148             * newline).
    +149             * @param lineLength the line length
    +150             * @throws IllegalArgumentException if the line length is less than or equal
    +151             * to zero
    +152             */
    +153            public void setLineLength(int lineLength) {
    +154                    if (lineLength <= 0) {
    +155                            throw new IllegalArgumentException("Line length must be greater than 0.");
    +156                    }
    +157                    this.lineLength = lineLength;
    +158            }
    +159    
    +160            /**
    +161             * Gets the string that is prepended to each folded line.
    +162             * @return the indent string
    +163             */
    +164            public String getIndent() {
    +165                    return indent;
    +166            }
    +167    
    +168            /**
    +169             * Sets the string that is prepended to each folded line.
    +170             * @param indent the indent string (e.g. a single space character)
    +171             * @throws IllegalArgumentException if the length of the indent string is
    +172             * greater than the max line length
    +173             */
    +174            public void setIndent(String indent) {
    +175                    if (indent.length() >= lineLength) {
    +176                            throw new IllegalArgumentException("The length of the indent string must be less than the max line length.");
    +177                    }
    +178                    this.indent = indent;
    +179            }
    +180    
    +181            /**
    +182             * Gets the newline sequence that is used to separate lines.
    +183             * @return the newline sequence
    +184             */
    +185            public String getNewline() {
    +186                    return newline;
    +187            }
    +188    
    +189            /**
    +190             * Sets the newline sequence that is used to separate lines
    +191             * @param newline the newline sequence
    +192             */
    +193            public void setNewline(String newline) {
    +194                    this.newline = newline;
    +195            }
    +196    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/FoldingScheme.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/FoldingScheme.html new file mode 100644 index 000000000..37f91c7f8 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/FoldingScheme.html @@ -0,0 +1,142 @@ + + +
    +001    package biweekly.io.text;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * Specifies how an iCalendar object should be folded when written to a string.
    +030     * @author Michael Angstadt
    +031     */
    +032    public class FoldingScheme {
    +033            /**
    +034             * Folds lines according to RFC specification (75 characters not including
    +035             * CRLF, with 1 space as indentation).
    +036             */
    +037            public static final FoldingScheme DEFAULT = new FoldingScheme(75, " ");
    +038    
    +039            private final int lineLength;
    +040            private final String indent;
    +041    
    +042            /**
    +043             * @param lineLength the maximum number of characters that can exist on a
    +044             * line before needing to be folded (not including the newline)
    +045             * @param indent the string to use for indentation
    +046             * @throws IllegalArgumentException if the line length is &lt;= 0, or if the
    +047             * line length is less than the length of the indentation string
    +048             */
    +049            public FoldingScheme(int lineLength, String indent) {
    +050                    if (lineLength <= 0) {
    +051                            throw new IllegalArgumentException("The line length must be greater than 0.");
    +052                    }
    +053                    if (indent.length() > lineLength) {
    +054                            throw new IllegalArgumentException("The line length must be greater than the length of the indentation string.");
    +055                    }
    +056                    this.lineLength = lineLength;
    +057                    this.indent = indent;
    +058            }
    +059    
    +060            /**
    +061             * Gets the maximum number of characters that can exist on a line before
    +062             * needing to be folded (not including the newline).
    +063             * @return the max line length
    +064             */
    +065            public int getLineLength() {
    +066                    return lineLength;
    +067            }
    +068    
    +069            /**
    +070             * Gets the string that is used to indent the folded line.
    +071             * @return the indent string
    +072             */
    +073            public String getIndent() {
    +074                    return indent;
    +075            }
    +076    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawReader.ICalDataStreamListener.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawReader.ICalDataStreamListener.html new file mode 100644 index 000000000..daf2e0958 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawReader.ICalDataStreamListener.html @@ -0,0 +1,402 @@ + + +
    +001    package biweekly.io.text;
    +002    
    +003    import static biweekly.util.StringUtils.NEWLINE;
    +004    
    +005    import java.io.Closeable;
    +006    import java.io.IOException;
    +007    import java.io.Reader;
    +008    
    +009    import biweekly.ICalException;
    +010    import biweekly.parameter.ICalParameters;
    +011    
    +012    /*
    +013     Copyright (c) 2013, Michael Angstadt
    +014     All rights reserved.
    +015    
    +016     Redistribution and use in source and binary forms, with or without
    +017     modification, are permitted provided that the following conditions are met: 
    +018    
    +019     1. Redistributions of source code must retain the above copyright notice, this
    +020     list of conditions and the following disclaimer. 
    +021     2. Redistributions in binary form must reproduce the above copyright notice,
    +022     this list of conditions and the following disclaimer in the documentation
    +023     and/or other materials provided with the distribution. 
    +024    
    +025     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +026     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +027     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +028     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +029     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +030     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +031     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +032     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +033     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +034     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +035     */
    +036    
    +037    /**
    +038     * Parses an iCalendar data stream.
    +039     * @author Michael Angstadt
    +040     * @rfc 5545
    +041     */
    +042    public class ICalRawReader implements Closeable {
    +043            private final FoldedLineReader reader;
    +044            private boolean caretDecodingEnabled = true;
    +045            private boolean eof = false;
    +046    
    +047            /**
    +048             * Creates a new reader.
    +049             * @param reader the reader to the data stream
    +050             */
    +051            public ICalRawReader(Reader reader) {
    +052                    this.reader = new FoldedLineReader(reader);
    +053            }
    +054    
    +055            /**
    +056             * Gets the line number of the last line that was read.
    +057             * @return the line number
    +058             */
    +059            public int getLineNum() {
    +060                    return reader.getLineNum();
    +061            }
    +062    
    +063            /**
    +064             * Starts or continues reading from the iCalendar data stream.
    +065             * @param listener handles the iCalendar data as it is read off the wire
    +066             * @throws IOException if there is an I/O problem
    +067             */
    +068            public void start(ICalDataStreamListener listener) throws IOException {
    +069                    String line;
    +070                    while ((line = reader.readLine()) != null) {
    +071                            try {
    +072                                    parseLine(line, listener);
    +073                            } catch (StopReadingException e) {
    +074                                    return;
    +075                            }
    +076                    }
    +077                    eof = true;
    +078            }
    +079    
    +080            private void parseLine(String line, ICalDataStreamListener listener) {
    +081                    String propertyName = null;
    +082                    ICalParameters parameters = new ICalParameters();
    +083                    String value = null;
    +084    
    +085                    char escapeChar = 0; //is the next char escaped?
    +086                    boolean inQuotes = false; //are we inside of double quotes?
    +087                    StringBuilder buffer = new StringBuilder();
    +088                    String curParamName = null;
    +089                    for (int i = 0; i < line.length(); i++) {
    +090                            char ch = line.charAt(i);
    +091                            if (escapeChar != 0) {
    +092                                    if (escapeChar == '\\') {
    +093                                            //backslash escaping in parameter values is not part of the standard
    +094                                            if (ch == '\\') {
    +095                                                    buffer.append(ch);
    +096                                            } else if (ch == 'n' || ch == 'N') {
    +097                                                    //newlines
    +098                                                    buffer.append(NEWLINE);
    +099                                            } else if (ch == '"') {
    +100                                                    //incase a double quote is escaped with a backslash
    +101                                                    buffer.append(ch);
    +102                                            } else {
    +103                                                    //treat the escape character as a normal character because it's not a valid escape sequence
    +104                                                    buffer.append(escapeChar).append(ch);
    +105                                            }
    +106                                    } else if (escapeChar == '^') {
    +107                                            if (ch == '^') {
    +108                                                    buffer.append(ch);
    +109                                            } else if (ch == 'n') {
    +110                                                    buffer.append(NEWLINE);
    +111                                            } else if (ch == '\'') {
    +112                                                    buffer.append('"');
    +113                                            } else {
    +114                                                    //treat the escape character as a normal character because it's not a valid escape sequence
    +115                                                    buffer.append(escapeChar).append(ch);
    +116                                            }
    +117                                    }
    +118                                    escapeChar = 0;
    +119                            } else if (ch == '\\' || (ch == '^' && caretDecodingEnabled)) {
    +120                                    escapeChar = ch;
    +121                            } else if ((ch == ';' || ch == ':') && !inQuotes) {
    +122                                    if (propertyName == null) {
    +123                                            propertyName = buffer.toString();
    +124                                    } else if (curParamName == null) {
    +125                                            //value-less parameter (bad iCal syntax)
    +126                                            String parameterName = buffer.toString();
    +127                                            listener.valuelessParameter(propertyName, parameterName);
    +128                                            parameters.put(parameterName, null);
    +129                                    } else {
    +130                                            //parameter value
    +131                                            String paramValue = buffer.toString();
    +132                                            parameters.put(curParamName, paramValue);
    +133                                            curParamName = null;
    +134                                    }
    +135                                    buffer.setLength(0);
    +136    
    +137                                    if (ch == ':') {
    +138                                            if (i < line.length() - 1) {
    +139                                                    value = line.substring(i + 1);
    +140                                            } else {
    +141                                                    value = "";
    +142                                            }
    +143                                            break;
    +144                                    }
    +145                            } else if (ch == ',' && !inQuotes) {
    +146                                    //multi-valued parameter
    +147                                    parameters.put(curParamName, buffer.toString());
    +148                                    buffer.setLength(0);
    +149                            } else if (ch == '=' && curParamName == null) {
    +150                                    //parameter name
    +151                                    curParamName = buffer.toString();
    +152                                    buffer.setLength(0);
    +153                            } else if (ch == '"') {
    +154                                    inQuotes = !inQuotes;
    +155                            } else {
    +156                                    buffer.append(ch);
    +157                            }
    +158                    }
    +159    
    +160                    if (propertyName == null || value == null) {
    +161                            listener.invalidLine(line);
    +162                            return;
    +163                    }
    +164                    if ("BEGIN".equalsIgnoreCase(propertyName)) {
    +165                            listener.beginComponent(value);
    +166                            return;
    +167                    }
    +168                    if ("END".equalsIgnoreCase(propertyName)) {
    +169                            listener.endComponent(value);
    +170                            return;
    +171                    }
    +172                    listener.readProperty(propertyName, parameters, value);
    +173            }
    +174    
    +175            /**
    +176             * <p>
    +177             * Gets whether the reader will decode parameter values that use circumflex
    +178             * accent encoding (enabled by default). This escaping mechanism allows
    +179             * newlines and double quotes to be included in parameter values.
    +180             * </p>
    +181             * 
    +182             * <table border="1">
    +183             * <tr>
    +184             * <th>Raw Character</th>
    +185             * <th>Encoded Character</th>
    +186             * </tr>
    +187             * <tr>
    +188             * <td>{@code "}</td>
    +189             * <td>{@code ^'}</td>
    +190             * </tr>
    +191             * <tr>
    +192             * <td><i>newline</i></td>
    +193             * <td>{@code ^n}</td>
    +194             * </tr>
    +195             * <tr>
    +196             * <td>{@code ^}</td>
    +197             * <td>{@code ^^}</td>
    +198             * </tr>
    +199             * </table>
    +200             * 
    +201             * <p>
    +202             * Example:
    +203             * </p>
    +204             * 
    +205             * <pre>
    +206             * GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
    +207             *  sburgh, PA 15212":40.446816;80.00566
    +208             * </pre>
    +209             * 
    +210             * @return true if circumflex accent decoding is enabled, false if not
    +211             * @rfc 6868
    +212             */
    +213            public boolean isCaretDecodingEnabled() {
    +214                    return caretDecodingEnabled;
    +215            }
    +216    
    +217            /**
    +218             * <p>
    +219             * Sets whether the reader will decode parameter values that use circumflex
    +220             * accent encoding (enabled by default). This escaping mechanism allows
    +221             * newlines and double quotes to be included in parameter values.
    +222             * </p>
    +223             * 
    +224             * <table border="1">
    +225             * <tr>
    +226             * <th>Raw Character</th>
    +227             * <th>Encoded Character</th>
    +228             * </tr>
    +229             * <tr>
    +230             * <td>{@code "}</td>
    +231             * <td>{@code ^'}</td>
    +232             * </tr>
    +233             * <tr>
    +234             * <td><i>newline</i></td>
    +235             * <td>{@code ^n}</td>
    +236             * </tr>
    +237             * <tr>
    +238             * <td>{@code ^}</td>
    +239             * <td>{@code ^^}</td>
    +240             * </tr>
    +241             * </table>
    +242             * 
    +243             * <p>
    +244             * Example:
    +245             * </p>
    +246             * 
    +247             * <pre>
    +248             * GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
    +249             *  sburgh, PA 15212":geo:40.446816,-80.00566
    +250             * </pre>
    +251             * 
    +252             * @param enable true to use circumflex accent decoding, false not to
    +253             * @rfc 6868
    +254             */
    +255            public void setCaretDecodingEnabled(boolean enable) {
    +256                    caretDecodingEnabled = enable;
    +257            }
    +258    
    +259            /**
    +260             * Determines whether the end of the data stream has been reached.
    +261             * @return true if the end has been reached, false if not
    +262             */
    +263            public boolean eof() {
    +264                    return eof;
    +265            }
    +266    
    +267            /**
    +268             * Handles the iCalendar data as it is read off the data stream. Each one of
    +269             * this interface's methods may throw a {@link StopReadingException} at any
    +270             * time to force the parser to stop reading from the data stream. This will
    +271             * cause the reader to return from the {@link ICalRawReader#start} method.
    +272             * To continue reading from the data stream, simply call the
    +273             * {@link ICalRawReader#start} method again.
    +274             * @author Michael Angstadt
    +275             */
    +276            public static interface ICalDataStreamListener {
    +277                    /**
    +278                     * Called when a component begins (when a "BEGIN:NAME" property is
    +279                     * reached).
    +280                     * @param name the component name (e.g. "VEVENT")
    +281                     * @throws StopReadingException to force the reader to stop reading from
    +282                     * the data stream
    +283                     */
    +284                    void beginComponent(String name);
    +285    
    +286                    /**
    +287                     * Called when a property is read.
    +288                     * @param name the property name (e.g. "VERSION")
    +289                     * @param parameters the parameters
    +290                     * @param value the property value
    +291                     * @throws StopReadingException to force the reader to stop reading from
    +292                     * the data stream
    +293                     */
    +294                    void readProperty(String name, ICalParameters parameters, String value);
    +295    
    +296                    /**
    +297                     * Called when a component ends (when a "END:NAME" property is reached).
    +298                     * @param name the component name (e.g. "VEVENT")
    +299                     * @throws StopReadingException to force the reader to stop reading from
    +300                     * the data stream
    +301                     */
    +302                    void endComponent(String name);
    +303    
    +304                    /**
    +305                     * Called when a line cannot be parsed.
    +306                     * @param line the unparseable line
    +307                     * @throws StopReadingException to force the reader to stop reading from
    +308                     * the data stream
    +309                     */
    +310                    void invalidLine(String line);
    +311    
    +312                    /**
    +313                     * Called when a value-less parameter is read.
    +314                     * @param propertyName the property name (e.g. "VERSION")
    +315                     * @param parameterName the parameter name (e.g. "FMTTYPE")
    +316                     */
    +317                    void valuelessParameter(String propertyName, String parameterName);
    +318            }
    +319    
    +320            /**
    +321             * Instructs an {@link ICalRawReader} to stop reading from the data stream
    +322             * when thrown from an {@link ICalDataStreamListener} implementation.
    +323             * @author Michael Angstadt
    +324             */
    +325            @SuppressWarnings("serial")
    +326            public static class StopReadingException extends ICalException {
    +327                    //empty
    +328            }
    +329    
    +330            /**
    +331             * Closes the underlying {@link Reader} object.
    +332             */
    +333            public void close() throws IOException {
    +334                    reader.close();
    +335            }
    +336    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawReader.StopReadingException.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawReader.StopReadingException.html new file mode 100644 index 000000000..daf2e0958 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawReader.StopReadingException.html @@ -0,0 +1,402 @@ + + +
    +001    package biweekly.io.text;
    +002    
    +003    import static biweekly.util.StringUtils.NEWLINE;
    +004    
    +005    import java.io.Closeable;
    +006    import java.io.IOException;
    +007    import java.io.Reader;
    +008    
    +009    import biweekly.ICalException;
    +010    import biweekly.parameter.ICalParameters;
    +011    
    +012    /*
    +013     Copyright (c) 2013, Michael Angstadt
    +014     All rights reserved.
    +015    
    +016     Redistribution and use in source and binary forms, with or without
    +017     modification, are permitted provided that the following conditions are met: 
    +018    
    +019     1. Redistributions of source code must retain the above copyright notice, this
    +020     list of conditions and the following disclaimer. 
    +021     2. Redistributions in binary form must reproduce the above copyright notice,
    +022     this list of conditions and the following disclaimer in the documentation
    +023     and/or other materials provided with the distribution. 
    +024    
    +025     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +026     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +027     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +028     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +029     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +030     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +031     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +032     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +033     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +034     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +035     */
    +036    
    +037    /**
    +038     * Parses an iCalendar data stream.
    +039     * @author Michael Angstadt
    +040     * @rfc 5545
    +041     */
    +042    public class ICalRawReader implements Closeable {
    +043            private final FoldedLineReader reader;
    +044            private boolean caretDecodingEnabled = true;
    +045            private boolean eof = false;
    +046    
    +047            /**
    +048             * Creates a new reader.
    +049             * @param reader the reader to the data stream
    +050             */
    +051            public ICalRawReader(Reader reader) {
    +052                    this.reader = new FoldedLineReader(reader);
    +053            }
    +054    
    +055            /**
    +056             * Gets the line number of the last line that was read.
    +057             * @return the line number
    +058             */
    +059            public int getLineNum() {
    +060                    return reader.getLineNum();
    +061            }
    +062    
    +063            /**
    +064             * Starts or continues reading from the iCalendar data stream.
    +065             * @param listener handles the iCalendar data as it is read off the wire
    +066             * @throws IOException if there is an I/O problem
    +067             */
    +068            public void start(ICalDataStreamListener listener) throws IOException {
    +069                    String line;
    +070                    while ((line = reader.readLine()) != null) {
    +071                            try {
    +072                                    parseLine(line, listener);
    +073                            } catch (StopReadingException e) {
    +074                                    return;
    +075                            }
    +076                    }
    +077                    eof = true;
    +078            }
    +079    
    +080            private void parseLine(String line, ICalDataStreamListener listener) {
    +081                    String propertyName = null;
    +082                    ICalParameters parameters = new ICalParameters();
    +083                    String value = null;
    +084    
    +085                    char escapeChar = 0; //is the next char escaped?
    +086                    boolean inQuotes = false; //are we inside of double quotes?
    +087                    StringBuilder buffer = new StringBuilder();
    +088                    String curParamName = null;
    +089                    for (int i = 0; i < line.length(); i++) {
    +090                            char ch = line.charAt(i);
    +091                            if (escapeChar != 0) {
    +092                                    if (escapeChar == '\\') {
    +093                                            //backslash escaping in parameter values is not part of the standard
    +094                                            if (ch == '\\') {
    +095                                                    buffer.append(ch);
    +096                                            } else if (ch == 'n' || ch == 'N') {
    +097                                                    //newlines
    +098                                                    buffer.append(NEWLINE);
    +099                                            } else if (ch == '"') {
    +100                                                    //incase a double quote is escaped with a backslash
    +101                                                    buffer.append(ch);
    +102                                            } else {
    +103                                                    //treat the escape character as a normal character because it's not a valid escape sequence
    +104                                                    buffer.append(escapeChar).append(ch);
    +105                                            }
    +106                                    } else if (escapeChar == '^') {
    +107                                            if (ch == '^') {
    +108                                                    buffer.append(ch);
    +109                                            } else if (ch == 'n') {
    +110                                                    buffer.append(NEWLINE);
    +111                                            } else if (ch == '\'') {
    +112                                                    buffer.append('"');
    +113                                            } else {
    +114                                                    //treat the escape character as a normal character because it's not a valid escape sequence
    +115                                                    buffer.append(escapeChar).append(ch);
    +116                                            }
    +117                                    }
    +118                                    escapeChar = 0;
    +119                            } else if (ch == '\\' || (ch == '^' && caretDecodingEnabled)) {
    +120                                    escapeChar = ch;
    +121                            } else if ((ch == ';' || ch == ':') && !inQuotes) {
    +122                                    if (propertyName == null) {
    +123                                            propertyName = buffer.toString();
    +124                                    } else if (curParamName == null) {
    +125                                            //value-less parameter (bad iCal syntax)
    +126                                            String parameterName = buffer.toString();
    +127                                            listener.valuelessParameter(propertyName, parameterName);
    +128                                            parameters.put(parameterName, null);
    +129                                    } else {
    +130                                            //parameter value
    +131                                            String paramValue = buffer.toString();
    +132                                            parameters.put(curParamName, paramValue);
    +133                                            curParamName = null;
    +134                                    }
    +135                                    buffer.setLength(0);
    +136    
    +137                                    if (ch == ':') {
    +138                                            if (i < line.length() - 1) {
    +139                                                    value = line.substring(i + 1);
    +140                                            } else {
    +141                                                    value = "";
    +142                                            }
    +143                                            break;
    +144                                    }
    +145                            } else if (ch == ',' && !inQuotes) {
    +146                                    //multi-valued parameter
    +147                                    parameters.put(curParamName, buffer.toString());
    +148                                    buffer.setLength(0);
    +149                            } else if (ch == '=' && curParamName == null) {
    +150                                    //parameter name
    +151                                    curParamName = buffer.toString();
    +152                                    buffer.setLength(0);
    +153                            } else if (ch == '"') {
    +154                                    inQuotes = !inQuotes;
    +155                            } else {
    +156                                    buffer.append(ch);
    +157                            }
    +158                    }
    +159    
    +160                    if (propertyName == null || value == null) {
    +161                            listener.invalidLine(line);
    +162                            return;
    +163                    }
    +164                    if ("BEGIN".equalsIgnoreCase(propertyName)) {
    +165                            listener.beginComponent(value);
    +166                            return;
    +167                    }
    +168                    if ("END".equalsIgnoreCase(propertyName)) {
    +169                            listener.endComponent(value);
    +170                            return;
    +171                    }
    +172                    listener.readProperty(propertyName, parameters, value);
    +173            }
    +174    
    +175            /**
    +176             * <p>
    +177             * Gets whether the reader will decode parameter values that use circumflex
    +178             * accent encoding (enabled by default). This escaping mechanism allows
    +179             * newlines and double quotes to be included in parameter values.
    +180             * </p>
    +181             * 
    +182             * <table border="1">
    +183             * <tr>
    +184             * <th>Raw Character</th>
    +185             * <th>Encoded Character</th>
    +186             * </tr>
    +187             * <tr>
    +188             * <td>{@code "}</td>
    +189             * <td>{@code ^'}</td>
    +190             * </tr>
    +191             * <tr>
    +192             * <td><i>newline</i></td>
    +193             * <td>{@code ^n}</td>
    +194             * </tr>
    +195             * <tr>
    +196             * <td>{@code ^}</td>
    +197             * <td>{@code ^^}</td>
    +198             * </tr>
    +199             * </table>
    +200             * 
    +201             * <p>
    +202             * Example:
    +203             * </p>
    +204             * 
    +205             * <pre>
    +206             * GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
    +207             *  sburgh, PA 15212":40.446816;80.00566
    +208             * </pre>
    +209             * 
    +210             * @return true if circumflex accent decoding is enabled, false if not
    +211             * @rfc 6868
    +212             */
    +213            public boolean isCaretDecodingEnabled() {
    +214                    return caretDecodingEnabled;
    +215            }
    +216    
    +217            /**
    +218             * <p>
    +219             * Sets whether the reader will decode parameter values that use circumflex
    +220             * accent encoding (enabled by default). This escaping mechanism allows
    +221             * newlines and double quotes to be included in parameter values.
    +222             * </p>
    +223             * 
    +224             * <table border="1">
    +225             * <tr>
    +226             * <th>Raw Character</th>
    +227             * <th>Encoded Character</th>
    +228             * </tr>
    +229             * <tr>
    +230             * <td>{@code "}</td>
    +231             * <td>{@code ^'}</td>
    +232             * </tr>
    +233             * <tr>
    +234             * <td><i>newline</i></td>
    +235             * <td>{@code ^n}</td>
    +236             * </tr>
    +237             * <tr>
    +238             * <td>{@code ^}</td>
    +239             * <td>{@code ^^}</td>
    +240             * </tr>
    +241             * </table>
    +242             * 
    +243             * <p>
    +244             * Example:
    +245             * </p>
    +246             * 
    +247             * <pre>
    +248             * GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
    +249             *  sburgh, PA 15212":geo:40.446816,-80.00566
    +250             * </pre>
    +251             * 
    +252             * @param enable true to use circumflex accent decoding, false not to
    +253             * @rfc 6868
    +254             */
    +255            public void setCaretDecodingEnabled(boolean enable) {
    +256                    caretDecodingEnabled = enable;
    +257            }
    +258    
    +259            /**
    +260             * Determines whether the end of the data stream has been reached.
    +261             * @return true if the end has been reached, false if not
    +262             */
    +263            public boolean eof() {
    +264                    return eof;
    +265            }
    +266    
    +267            /**
    +268             * Handles the iCalendar data as it is read off the data stream. Each one of
    +269             * this interface's methods may throw a {@link StopReadingException} at any
    +270             * time to force the parser to stop reading from the data stream. This will
    +271             * cause the reader to return from the {@link ICalRawReader#start} method.
    +272             * To continue reading from the data stream, simply call the
    +273             * {@link ICalRawReader#start} method again.
    +274             * @author Michael Angstadt
    +275             */
    +276            public static interface ICalDataStreamListener {
    +277                    /**
    +278                     * Called when a component begins (when a "BEGIN:NAME" property is
    +279                     * reached).
    +280                     * @param name the component name (e.g. "VEVENT")
    +281                     * @throws StopReadingException to force the reader to stop reading from
    +282                     * the data stream
    +283                     */
    +284                    void beginComponent(String name);
    +285    
    +286                    /**
    +287                     * Called when a property is read.
    +288                     * @param name the property name (e.g. "VERSION")
    +289                     * @param parameters the parameters
    +290                     * @param value the property value
    +291                     * @throws StopReadingException to force the reader to stop reading from
    +292                     * the data stream
    +293                     */
    +294                    void readProperty(String name, ICalParameters parameters, String value);
    +295    
    +296                    /**
    +297                     * Called when a component ends (when a "END:NAME" property is reached).
    +298                     * @param name the component name (e.g. "VEVENT")
    +299                     * @throws StopReadingException to force the reader to stop reading from
    +300                     * the data stream
    +301                     */
    +302                    void endComponent(String name);
    +303    
    +304                    /**
    +305                     * Called when a line cannot be parsed.
    +306                     * @param line the unparseable line
    +307                     * @throws StopReadingException to force the reader to stop reading from
    +308                     * the data stream
    +309                     */
    +310                    void invalidLine(String line);
    +311    
    +312                    /**
    +313                     * Called when a value-less parameter is read.
    +314                     * @param propertyName the property name (e.g. "VERSION")
    +315                     * @param parameterName the parameter name (e.g. "FMTTYPE")
    +316                     */
    +317                    void valuelessParameter(String propertyName, String parameterName);
    +318            }
    +319    
    +320            /**
    +321             * Instructs an {@link ICalRawReader} to stop reading from the data stream
    +322             * when thrown from an {@link ICalDataStreamListener} implementation.
    +323             * @author Michael Angstadt
    +324             */
    +325            @SuppressWarnings("serial")
    +326            public static class StopReadingException extends ICalException {
    +327                    //empty
    +328            }
    +329    
    +330            /**
    +331             * Closes the underlying {@link Reader} object.
    +332             */
    +333            public void close() throws IOException {
    +334                    reader.close();
    +335            }
    +336    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawReader.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawReader.html new file mode 100644 index 000000000..daf2e0958 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawReader.html @@ -0,0 +1,402 @@ + + +
    +001    package biweekly.io.text;
    +002    
    +003    import static biweekly.util.StringUtils.NEWLINE;
    +004    
    +005    import java.io.Closeable;
    +006    import java.io.IOException;
    +007    import java.io.Reader;
    +008    
    +009    import biweekly.ICalException;
    +010    import biweekly.parameter.ICalParameters;
    +011    
    +012    /*
    +013     Copyright (c) 2013, Michael Angstadt
    +014     All rights reserved.
    +015    
    +016     Redistribution and use in source and binary forms, with or without
    +017     modification, are permitted provided that the following conditions are met: 
    +018    
    +019     1. Redistributions of source code must retain the above copyright notice, this
    +020     list of conditions and the following disclaimer. 
    +021     2. Redistributions in binary form must reproduce the above copyright notice,
    +022     this list of conditions and the following disclaimer in the documentation
    +023     and/or other materials provided with the distribution. 
    +024    
    +025     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +026     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +027     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +028     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +029     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +030     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +031     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +032     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +033     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +034     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +035     */
    +036    
    +037    /**
    +038     * Parses an iCalendar data stream.
    +039     * @author Michael Angstadt
    +040     * @rfc 5545
    +041     */
    +042    public class ICalRawReader implements Closeable {
    +043            private final FoldedLineReader reader;
    +044            private boolean caretDecodingEnabled = true;
    +045            private boolean eof = false;
    +046    
    +047            /**
    +048             * Creates a new reader.
    +049             * @param reader the reader to the data stream
    +050             */
    +051            public ICalRawReader(Reader reader) {
    +052                    this.reader = new FoldedLineReader(reader);
    +053            }
    +054    
    +055            /**
    +056             * Gets the line number of the last line that was read.
    +057             * @return the line number
    +058             */
    +059            public int getLineNum() {
    +060                    return reader.getLineNum();
    +061            }
    +062    
    +063            /**
    +064             * Starts or continues reading from the iCalendar data stream.
    +065             * @param listener handles the iCalendar data as it is read off the wire
    +066             * @throws IOException if there is an I/O problem
    +067             */
    +068            public void start(ICalDataStreamListener listener) throws IOException {
    +069                    String line;
    +070                    while ((line = reader.readLine()) != null) {
    +071                            try {
    +072                                    parseLine(line, listener);
    +073                            } catch (StopReadingException e) {
    +074                                    return;
    +075                            }
    +076                    }
    +077                    eof = true;
    +078            }
    +079    
    +080            private void parseLine(String line, ICalDataStreamListener listener) {
    +081                    String propertyName = null;
    +082                    ICalParameters parameters = new ICalParameters();
    +083                    String value = null;
    +084    
    +085                    char escapeChar = 0; //is the next char escaped?
    +086                    boolean inQuotes = false; //are we inside of double quotes?
    +087                    StringBuilder buffer = new StringBuilder();
    +088                    String curParamName = null;
    +089                    for (int i = 0; i < line.length(); i++) {
    +090                            char ch = line.charAt(i);
    +091                            if (escapeChar != 0) {
    +092                                    if (escapeChar == '\\') {
    +093                                            //backslash escaping in parameter values is not part of the standard
    +094                                            if (ch == '\\') {
    +095                                                    buffer.append(ch);
    +096                                            } else if (ch == 'n' || ch == 'N') {
    +097                                                    //newlines
    +098                                                    buffer.append(NEWLINE);
    +099                                            } else if (ch == '"') {
    +100                                                    //incase a double quote is escaped with a backslash
    +101                                                    buffer.append(ch);
    +102                                            } else {
    +103                                                    //treat the escape character as a normal character because it's not a valid escape sequence
    +104                                                    buffer.append(escapeChar).append(ch);
    +105                                            }
    +106                                    } else if (escapeChar == '^') {
    +107                                            if (ch == '^') {
    +108                                                    buffer.append(ch);
    +109                                            } else if (ch == 'n') {
    +110                                                    buffer.append(NEWLINE);
    +111                                            } else if (ch == '\'') {
    +112                                                    buffer.append('"');
    +113                                            } else {
    +114                                                    //treat the escape character as a normal character because it's not a valid escape sequence
    +115                                                    buffer.append(escapeChar).append(ch);
    +116                                            }
    +117                                    }
    +118                                    escapeChar = 0;
    +119                            } else if (ch == '\\' || (ch == '^' && caretDecodingEnabled)) {
    +120                                    escapeChar = ch;
    +121                            } else if ((ch == ';' || ch == ':') && !inQuotes) {
    +122                                    if (propertyName == null) {
    +123                                            propertyName = buffer.toString();
    +124                                    } else if (curParamName == null) {
    +125                                            //value-less parameter (bad iCal syntax)
    +126                                            String parameterName = buffer.toString();
    +127                                            listener.valuelessParameter(propertyName, parameterName);
    +128                                            parameters.put(parameterName, null);
    +129                                    } else {
    +130                                            //parameter value
    +131                                            String paramValue = buffer.toString();
    +132                                            parameters.put(curParamName, paramValue);
    +133                                            curParamName = null;
    +134                                    }
    +135                                    buffer.setLength(0);
    +136    
    +137                                    if (ch == ':') {
    +138                                            if (i < line.length() - 1) {
    +139                                                    value = line.substring(i + 1);
    +140                                            } else {
    +141                                                    value = "";
    +142                                            }
    +143                                            break;
    +144                                    }
    +145                            } else if (ch == ',' && !inQuotes) {
    +146                                    //multi-valued parameter
    +147                                    parameters.put(curParamName, buffer.toString());
    +148                                    buffer.setLength(0);
    +149                            } else if (ch == '=' && curParamName == null) {
    +150                                    //parameter name
    +151                                    curParamName = buffer.toString();
    +152                                    buffer.setLength(0);
    +153                            } else if (ch == '"') {
    +154                                    inQuotes = !inQuotes;
    +155                            } else {
    +156                                    buffer.append(ch);
    +157                            }
    +158                    }
    +159    
    +160                    if (propertyName == null || value == null) {
    +161                            listener.invalidLine(line);
    +162                            return;
    +163                    }
    +164                    if ("BEGIN".equalsIgnoreCase(propertyName)) {
    +165                            listener.beginComponent(value);
    +166                            return;
    +167                    }
    +168                    if ("END".equalsIgnoreCase(propertyName)) {
    +169                            listener.endComponent(value);
    +170                            return;
    +171                    }
    +172                    listener.readProperty(propertyName, parameters, value);
    +173            }
    +174    
    +175            /**
    +176             * <p>
    +177             * Gets whether the reader will decode parameter values that use circumflex
    +178             * accent encoding (enabled by default). This escaping mechanism allows
    +179             * newlines and double quotes to be included in parameter values.
    +180             * </p>
    +181             * 
    +182             * <table border="1">
    +183             * <tr>
    +184             * <th>Raw Character</th>
    +185             * <th>Encoded Character</th>
    +186             * </tr>
    +187             * <tr>
    +188             * <td>{@code "}</td>
    +189             * <td>{@code ^'}</td>
    +190             * </tr>
    +191             * <tr>
    +192             * <td><i>newline</i></td>
    +193             * <td>{@code ^n}</td>
    +194             * </tr>
    +195             * <tr>
    +196             * <td>{@code ^}</td>
    +197             * <td>{@code ^^}</td>
    +198             * </tr>
    +199             * </table>
    +200             * 
    +201             * <p>
    +202             * Example:
    +203             * </p>
    +204             * 
    +205             * <pre>
    +206             * GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
    +207             *  sburgh, PA 15212":40.446816;80.00566
    +208             * </pre>
    +209             * 
    +210             * @return true if circumflex accent decoding is enabled, false if not
    +211             * @rfc 6868
    +212             */
    +213            public boolean isCaretDecodingEnabled() {
    +214                    return caretDecodingEnabled;
    +215            }
    +216    
    +217            /**
    +218             * <p>
    +219             * Sets whether the reader will decode parameter values that use circumflex
    +220             * accent encoding (enabled by default). This escaping mechanism allows
    +221             * newlines and double quotes to be included in parameter values.
    +222             * </p>
    +223             * 
    +224             * <table border="1">
    +225             * <tr>
    +226             * <th>Raw Character</th>
    +227             * <th>Encoded Character</th>
    +228             * </tr>
    +229             * <tr>
    +230             * <td>{@code "}</td>
    +231             * <td>{@code ^'}</td>
    +232             * </tr>
    +233             * <tr>
    +234             * <td><i>newline</i></td>
    +235             * <td>{@code ^n}</td>
    +236             * </tr>
    +237             * <tr>
    +238             * <td>{@code ^}</td>
    +239             * <td>{@code ^^}</td>
    +240             * </tr>
    +241             * </table>
    +242             * 
    +243             * <p>
    +244             * Example:
    +245             * </p>
    +246             * 
    +247             * <pre>
    +248             * GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
    +249             *  sburgh, PA 15212":geo:40.446816,-80.00566
    +250             * </pre>
    +251             * 
    +252             * @param enable true to use circumflex accent decoding, false not to
    +253             * @rfc 6868
    +254             */
    +255            public void setCaretDecodingEnabled(boolean enable) {
    +256                    caretDecodingEnabled = enable;
    +257            }
    +258    
    +259            /**
    +260             * Determines whether the end of the data stream has been reached.
    +261             * @return true if the end has been reached, false if not
    +262             */
    +263            public boolean eof() {
    +264                    return eof;
    +265            }
    +266    
    +267            /**
    +268             * Handles the iCalendar data as it is read off the data stream. Each one of
    +269             * this interface's methods may throw a {@link StopReadingException} at any
    +270             * time to force the parser to stop reading from the data stream. This will
    +271             * cause the reader to return from the {@link ICalRawReader#start} method.
    +272             * To continue reading from the data stream, simply call the
    +273             * {@link ICalRawReader#start} method again.
    +274             * @author Michael Angstadt
    +275             */
    +276            public static interface ICalDataStreamListener {
    +277                    /**
    +278                     * Called when a component begins (when a "BEGIN:NAME" property is
    +279                     * reached).
    +280                     * @param name the component name (e.g. "VEVENT")
    +281                     * @throws StopReadingException to force the reader to stop reading from
    +282                     * the data stream
    +283                     */
    +284                    void beginComponent(String name);
    +285    
    +286                    /**
    +287                     * Called when a property is read.
    +288                     * @param name the property name (e.g. "VERSION")
    +289                     * @param parameters the parameters
    +290                     * @param value the property value
    +291                     * @throws StopReadingException to force the reader to stop reading from
    +292                     * the data stream
    +293                     */
    +294                    void readProperty(String name, ICalParameters parameters, String value);
    +295    
    +296                    /**
    +297                     * Called when a component ends (when a "END:NAME" property is reached).
    +298                     * @param name the component name (e.g. "VEVENT")
    +299                     * @throws StopReadingException to force the reader to stop reading from
    +300                     * the data stream
    +301                     */
    +302                    void endComponent(String name);
    +303    
    +304                    /**
    +305                     * Called when a line cannot be parsed.
    +306                     * @param line the unparseable line
    +307                     * @throws StopReadingException to force the reader to stop reading from
    +308                     * the data stream
    +309                     */
    +310                    void invalidLine(String line);
    +311    
    +312                    /**
    +313                     * Called when a value-less parameter is read.
    +314                     * @param propertyName the property name (e.g. "VERSION")
    +315                     * @param parameterName the parameter name (e.g. "FMTTYPE")
    +316                     */
    +317                    void valuelessParameter(String propertyName, String parameterName);
    +318            }
    +319    
    +320            /**
    +321             * Instructs an {@link ICalRawReader} to stop reading from the data stream
    +322             * when thrown from an {@link ICalDataStreamListener} implementation.
    +323             * @author Michael Angstadt
    +324             */
    +325            @SuppressWarnings("serial")
    +326            public static class StopReadingException extends ICalException {
    +327                    //empty
    +328            }
    +329    
    +330            /**
    +331             * Closes the underlying {@link Reader} object.
    +332             */
    +333            public void close() throws IOException {
    +334                    reader.close();
    +335            }
    +336    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawWriter.ParameterValueChangedListener.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawWriter.ParameterValueChangedListener.html new file mode 100644 index 000000000..c52454c8f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawWriter.ParameterValueChangedListener.html @@ -0,0 +1,519 @@ + + +
    +001    package biweekly.io.text;
    +002    
    +003    import java.io.Closeable;
    +004    import java.io.IOException;
    +005    import java.io.Writer;
    +006    import java.util.BitSet;
    +007    import java.util.List;
    +008    import java.util.Map;
    +009    import java.util.regex.Pattern;
    +010    
    +011    import biweekly.parameter.ICalParameters;
    +012    
    +013    /*
    +014     Copyright (c) 2013, Michael Angstadt
    +015     All rights reserved.
    +016    
    +017     Redistribution and use in source and binary forms, with or without
    +018     modification, are permitted provided that the following conditions are met: 
    +019    
    +020     1. Redistributions of source code must retain the above copyright notice, this
    +021     list of conditions and the following disclaimer. 
    +022     2. Redistributions in binary form must reproduce the above copyright notice,
    +023     this list of conditions and the following disclaimer in the documentation
    +024     and/or other materials provided with the distribution. 
    +025    
    +026     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +027     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +028     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +029     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +030     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +031     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +032     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +033     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +034     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +035     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +036     */
    +037    
    +038    /**
    +039     * Writes data to an iCalendar data stream.
    +040     * @author Michael Angstadt
    +041     * @rfc 5545
    +042     */
    +043    public class ICalRawWriter implements Closeable {
    +044            /**
    +045             * Regular expression used to determine if a parameter value needs to be
    +046             * quoted.
    +047             */
    +048            private static final Pattern quoteMeRegex = Pattern.compile(".*?[,:;].*");
    +049    
    +050            /**
    +051             * Regular expression used to detect newline character sequences.
    +052             */
    +053            private static final Pattern newlineRegex = Pattern.compile("\\r\\n|\\r|\\n");
    +054    
    +055            /**
    +056             * Regular expression used to determine if a property name contains any
    +057             * invalid characters.
    +058             */
    +059            private static final Pattern propertyNameRegex = Pattern.compile("(?i)[-a-z0-9]+");
    +060    
    +061            /**
    +062             * The characters that are not valid in parameter values and that should be
    +063             * removed.
    +064             */
    +065            private static final BitSet invalidParamValueChars;
    +066            static {
    +067                    invalidParamValueChars = new BitSet(128);
    +068                    invalidParamValueChars.set(0, 31);
    +069                    invalidParamValueChars.set(127);
    +070                    invalidParamValueChars.set('\t', false); //allow
    +071                    invalidParamValueChars.set('\n', false); //allow
    +072                    invalidParamValueChars.set('\r', false); //allow
    +073            }
    +074    
    +075            private final String newline;
    +076            private boolean caretEncodingEnabled = false;
    +077            private final FoldingScheme foldingScheme;
    +078            private final Writer writer;
    +079            private ParameterValueChangedListener parameterValueChangedListener;
    +080    
    +081            /**
    +082             * Creates an iCalendar raw writer using the standard folding scheme and
    +083             * newline sequence.
    +084             * @param writer the writer to the data stream
    +085             */
    +086            public ICalRawWriter(Writer writer) {
    +087                    this(writer, FoldingScheme.DEFAULT);
    +088            }
    +089    
    +090            /**
    +091             * Creates an iCalendar raw writer using the standard newline sequence.
    +092             * @param writer the writer to the data stream
    +093             * @param foldingScheme the folding scheme to use or null not to fold at all
    +094             */
    +095            public ICalRawWriter(Writer writer, FoldingScheme foldingScheme) {
    +096                    this(writer, foldingScheme, "\r\n");
    +097            }
    +098    
    +099            /**
    +100             * Creates an iCalendar raw writer.
    +101             * @param writer the writer to the data stream
    +102             * @param foldingScheme the folding scheme to use or null not to fold at all
    +103             * @param newline the newline sequence to use
    +104             */
    +105            public ICalRawWriter(Writer writer, FoldingScheme foldingScheme, String newline) {
    +106                    if (foldingScheme == null) {
    +107                            this.writer = writer;
    +108                    } else {
    +109                            this.writer = new FoldedLineWriter(writer, foldingScheme.getLineLength(), foldingScheme.getIndent(), newline);
    +110                    }
    +111                    this.foldingScheme = foldingScheme;
    +112                    this.newline = newline;
    +113            }
    +114    
    +115            /**
    +116             * <p>
    +117             * Gets whether the writer will apply circumflex accent encoding on
    +118             * parameter values (disabled by default). This escaping mechanism allows
    +119             * for newlines and double quotes to be included in parameter values.
    +120             * </p>
    +121             * 
    +122             * <p>
    +123             * When disabled, the writer will replace newlines with spaces and double
    +124             * quotes with single quotes.
    +125             * </p>
    +126             * 
    +127             * <table border="1">
    +128             * <tr>
    +129             * <th>Character</th>
    +130             * <th>Replacement<br>
    +131             * (when disabled)</th>
    +132             * <th>Replacement<br>
    +133             * (when enabled)</th>
    +134             * </tr>
    +135             * <tr>
    +136             * <td>{@code "}</td>
    +137             * <td>{@code '}</td>
    +138             * <td>{@code ^'}</td>
    +139             * </tr>
    +140             * <tr>
    +141             * <td><i>newline</i></td>
    +142             * <td><code><i>space</i></code></td>
    +143             * <td>{@code ^n}</td>
    +144             * </tr>
    +145             * <tr>
    +146             * <td>{@code ^}</td>
    +147             * <td>{@code ^}</td>
    +148             * <td>{@code ^^}</td>
    +149             * </tr>
    +150             * </table>
    +151             * 
    +152             * <p>
    +153             * Example:
    +154             * </p>
    +155             * 
    +156             * <pre>
    +157             * GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
    +158             *  sburgh, PA 15212":40.446816;80.00566
    +159             * </pre>
    +160             * 
    +161             * @return true if circumflex accent encoding is enabled, false if not
    +162             * @rfc 6868
    +163             */
    +164            public boolean isCaretEncodingEnabled() {
    +165                    return caretEncodingEnabled;
    +166            }
    +167    
    +168            /**
    +169             * <p>
    +170             * Sets whether the writer will apply circumflex accent encoding on
    +171             * parameter values (disabled by default). This escaping mechanism allows
    +172             * for newlines and double quotes to be included in parameter values.
    +173             * </p>
    +174             * 
    +175             * <p>
    +176             * When disabled, the writer will replace newlines with spaces and double
    +177             * quotes with single quotes.
    +178             * </p>
    +179             * 
    +180             * <table border="1">
    +181             * <tr>
    +182             * <th>Character</th>
    +183             * <th>Replacement<br>
    +184             * (when disabled)</th>
    +185             * <th>Replacement<br>
    +186             * (when enabled)</th>
    +187             * </tr>
    +188             * <tr>
    +189             * <td>{@code "}</td>
    +190             * <td>{@code '}</td>
    +191             * <td>{@code ^'}</td>
    +192             * </tr>
    +193             * <tr>
    +194             * <td><i>newline</i></td>
    +195             * <td><code><i>space</i></code></td>
    +196             * <td>{@code ^n}</td>
    +197             * </tr>
    +198             * <tr>
    +199             * <td>{@code ^}</td>
    +200             * <td>{@code ^}</td>
    +201             * <td>{@code ^^}</td>
    +202             * </tr>
    +203             * </table>
    +204             * 
    +205             * <p>
    +206             * Example:
    +207             * </p>
    +208             * 
    +209             * <pre>
    +210             * GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
    +211             *  sburgh, PA 15212":40.446816;80.00566
    +212             * </pre>
    +213             * 
    +214             * @param enable true to use circumflex accent encoding, false not to
    +215             * @rfc 6868
    +216             */
    +217            public void setCaretEncodingEnabled(boolean enable) {
    +218                    caretEncodingEnabled = enable;
    +219            }
    +220    
    +221            /**
    +222             * Gets the newline sequence that is used to separate lines.
    +223             * @return the newline sequence
    +224             */
    +225            public String getNewline() {
    +226                    return newline;
    +227            }
    +228    
    +229            /**
    +230             * Gets the listener which will be invoked when a parameter's value is
    +231             * changed due to containing invalid characters.
    +232             * @return the listener or null if not set
    +233             */
    +234            public ParameterValueChangedListener getParameterValueChangedListener() {
    +235                    return parameterValueChangedListener;
    +236            }
    +237    
    +238            /**
    +239             * Sets the listener which will be invoked when a parameter's value is
    +240             * changed due to containing invalid characters.
    +241             * @param parameterValueChangedListener the listener or null to remove
    +242             */
    +243            public void setParameterValueChangedListener(ParameterValueChangedListener parameterValueChangedListener) {
    +244                    this.parameterValueChangedListener = parameterValueChangedListener;
    +245            }
    +246    
    +247            /**
    +248             * Gets the rules for how each line is folded.
    +249             * @return the folding scheme or null if the lines are not folded
    +250             */
    +251            public FoldingScheme getFoldingScheme() {
    +252                    return foldingScheme;
    +253            }
    +254    
    +255            /**
    +256             * Writes a property marking the beginning of a component (in other words,
    +257             * writes a "BEGIN:NAME" property).
    +258             * @param componentName the component name (e.g. "VEVENT")
    +259             * @throws IOException if there's an I/O problem
    +260             */
    +261            public void writeBeginComponent(String componentName) throws IOException {
    +262                    writeProperty("BEGIN", componentName);
    +263            }
    +264    
    +265            /**
    +266             * Writes a property marking the end of a component (in other words, writes
    +267             * a "END:NAME" property).
    +268             * @param componentName the component name (e.g. "VEVENT")
    +269             * @throws IOException if there's an I/O problem
    +270             */
    +271            public void writeEndComponent(String componentName) throws IOException {
    +272                    writeProperty("END", componentName);
    +273            }
    +274    
    +275            /**
    +276             * Writes a property to the iCalendar data stream.
    +277             * @param propertyName the property name (e.g. "VERSION")
    +278             * @param value the property value (e.g. "2.0")
    +279             * @throws IllegalArgumentException if the property name contains invalid
    +280             * characters
    +281             * @throws IOException if there's an I/O problem
    +282             */
    +283            public void writeProperty(String propertyName, String value) throws IOException {
    +284                    writeProperty(propertyName, new ICalParameters(), value);
    +285            }
    +286    
    +287            /**
    +288             * Writes a property to the iCalendar data stream.
    +289             * @param propertyName the property name (e.g. "VERSION")
    +290             * @param parameters the property parameters
    +291             * @param value the property value (e.g. "2.0")
    +292             * @throws IllegalArgumentException if the property name contains invalid
    +293             * characters
    +294             * @throws IOException if there's an I/O problem
    +295             */
    +296            public void writeProperty(String propertyName, ICalParameters parameters, String value) throws IOException {
    +297                    //validate the property name
    +298                    if (!propertyNameRegex.matcher(propertyName).matches()) {
    +299                            throw new IllegalArgumentException("Property name invalid.  Property names can only contain letters, numbers, and hyphens.");
    +300                    }
    +301    
    +302                    //write the property name
    +303                    writer.append(propertyName);
    +304    
    +305                    //write the parameters
    +306                    for (Map.Entry<String, List<String>> subType : parameters) {
    +307                            String parameterName = subType.getKey();
    +308                            List<String> parameterValues = subType.getValue();
    +309                            if (!parameterValues.isEmpty()) {
    +310                                    //e.g. ADR;TYPE=home,work,"another,value":
    +311    
    +312                                    boolean first = true;
    +313                                    writer.append(';').append(parameterName).append('=');
    +314                                    for (String parameterValue : parameterValues) {
    +315                                            if (!first) {
    +316                                                    writer.append(',');
    +317                                            }
    +318    
    +319                                            parameterValue = sanitizeParameterValue(parameterValue, parameterName, propertyName);
    +320    
    +321                                            //surround with double quotes if contains special chars
    +322                                            if (quoteMeRegex.matcher(parameterValue).matches()) {
    +323                                                    writer.append('"');
    +324                                                    writer.append(parameterValue);
    +325                                                    writer.append('"');
    +326                                            } else {
    +327                                                    writer.append(parameterValue);
    +328                                            }
    +329    
    +330                                            first = false;
    +331                                    }
    +332                            }
    +333                    }
    +334    
    +335                    writer.append(':');
    +336    
    +337                    //write the property value
    +338                    if (value == null) {
    +339                            value = "";
    +340                    } else {
    +341                            value = escapeNewlines(value);
    +342                    }
    +343                    writer.append(value);
    +344    
    +345                    writer.append(newline);
    +346            }
    +347    
    +348            /**
    +349             * Removes or escapes all invalid characters in a parameter value.
    +350             * @param parameterValue the parameter value
    +351             * @param parameterName the parameter name
    +352             * @param propertyName the name of the property to which the parameter
    +353             * belongs
    +354             * @return the sanitized parameter value
    +355             */
    +356            private String sanitizeParameterValue(String parameterValue, String parameterName, String propertyName) {
    +357                    boolean valueChanged = false;
    +358                    String modifiedValue = removeInvalidParameterValueChars(parameterValue);
    +359    
    +360                    if (caretEncodingEnabled) {
    +361                            valueChanged = (modifiedValue != parameterValue);
    +362                            modifiedValue = applyCaretEncoding(modifiedValue);
    +363                    } else {
    +364                            //replace double quotes with single quotes
    +365                            modifiedValue = modifiedValue.replace('"', '\'');
    +366    
    +367                            //replace newlines with spaces
    +368                            modifiedValue = newlineRegex.matcher(modifiedValue).replaceAll(" ");
    +369    
    +370                            valueChanged = (modifiedValue != parameterValue);
    +371                    }
    +372    
    +373                    if (valueChanged && parameterValueChangedListener != null) {
    +374                            parameterValueChangedListener.onParameterValueChanged(propertyName, parameterName, parameterValue, modifiedValue);
    +375                    }
    +376    
    +377                    return modifiedValue;
    +378            }
    +379    
    +380            /**
    +381             * Removes invalid characters from a parameter value.
    +382             * @param value the parameter value
    +383             * @return the sanitized parameter value
    +384             */
    +385            private String removeInvalidParameterValueChars(String value) {
    +386                    StringBuilder sb = new StringBuilder(value.length());
    +387    
    +388                    for (int i = 0; i < value.length(); i++) {
    +389                            char ch = value.charAt(i);
    +390                            if (!invalidParamValueChars.get(ch)) {
    +391                                    sb.append(ch);
    +392                            }
    +393                    }
    +394    
    +395                    return (sb.length() == value.length()) ? value : sb.toString();
    +396            }
    +397    
    +398            /**
    +399             * Applies circumflex accent encoding to a string.
    +400             * @param value the string
    +401             * @return the encoded string
    +402             */
    +403            private String applyCaretEncoding(String value) {
    +404                    value = value.replace("^", "^^");
    +405                    value = newlineRegex.matcher(value).replaceAll("^n");
    +406                    value = value.replace("\"", "^'");
    +407                    return value;
    +408            }
    +409    
    +410            /**
    +411             * Escapes all newline characters.
    +412             * <p>
    +413             * This method escapes the following newline sequences:
    +414             * </p>
    +415             * <ul>
    +416             * <li>{@code \r\n}</li>
    +417             * <li>{@code \r}</li>
    +418             * <li>{@code \n}</li>
    +419             * </ul>
    +420             * @param text the text to escape
    +421             * @return the escaped text
    +422             */
    +423            private String escapeNewlines(String text) {
    +424                    return newlineRegex.matcher(text).replaceAll("\\\\n");
    +425            }
    +426    
    +427            /**
    +428             * Closes the underlying {@link Writer} object.
    +429             */
    +430            public void close() throws IOException {
    +431                    writer.close();
    +432            }
    +433    
    +434            /**
    +435             * Allows you to respond to when a parameter's value is changed due to it
    +436             * containing invalid characters. If a character can be escaped (such as the
    +437             * "^" character when caret encoding is enabled), then this does not count
    +438             * as the parameter being modified because it can be decoded without losing
    +439             * any information.
    +440             * @author Michael Angstadt
    +441             */
    +442            public static interface ParameterValueChangedListener {
    +443                    /**
    +444                     * Called when a parameter value is changed.
    +445                     * @param propertyName the name of the property to which the parameter
    +446                     * belongs
    +447                     * @param parameterName the parameter name
    +448                     * @param originalValue the original parameter value
    +449                     * @param modifiedValue the modified parameter value
    +450                     */
    +451                    void onParameterValueChanged(String propertyName, String parameterName, String originalValue, String modifiedValue);
    +452            }
    +453    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawWriter.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawWriter.html new file mode 100644 index 000000000..c52454c8f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalRawWriter.html @@ -0,0 +1,519 @@ + + +
    +001    package biweekly.io.text;
    +002    
    +003    import java.io.Closeable;
    +004    import java.io.IOException;
    +005    import java.io.Writer;
    +006    import java.util.BitSet;
    +007    import java.util.List;
    +008    import java.util.Map;
    +009    import java.util.regex.Pattern;
    +010    
    +011    import biweekly.parameter.ICalParameters;
    +012    
    +013    /*
    +014     Copyright (c) 2013, Michael Angstadt
    +015     All rights reserved.
    +016    
    +017     Redistribution and use in source and binary forms, with or without
    +018     modification, are permitted provided that the following conditions are met: 
    +019    
    +020     1. Redistributions of source code must retain the above copyright notice, this
    +021     list of conditions and the following disclaimer. 
    +022     2. Redistributions in binary form must reproduce the above copyright notice,
    +023     this list of conditions and the following disclaimer in the documentation
    +024     and/or other materials provided with the distribution. 
    +025    
    +026     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +027     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +028     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +029     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +030     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +031     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +032     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +033     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +034     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +035     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +036     */
    +037    
    +038    /**
    +039     * Writes data to an iCalendar data stream.
    +040     * @author Michael Angstadt
    +041     * @rfc 5545
    +042     */
    +043    public class ICalRawWriter implements Closeable {
    +044            /**
    +045             * Regular expression used to determine if a parameter value needs to be
    +046             * quoted.
    +047             */
    +048            private static final Pattern quoteMeRegex = Pattern.compile(".*?[,:;].*");
    +049    
    +050            /**
    +051             * Regular expression used to detect newline character sequences.
    +052             */
    +053            private static final Pattern newlineRegex = Pattern.compile("\\r\\n|\\r|\\n");
    +054    
    +055            /**
    +056             * Regular expression used to determine if a property name contains any
    +057             * invalid characters.
    +058             */
    +059            private static final Pattern propertyNameRegex = Pattern.compile("(?i)[-a-z0-9]+");
    +060    
    +061            /**
    +062             * The characters that are not valid in parameter values and that should be
    +063             * removed.
    +064             */
    +065            private static final BitSet invalidParamValueChars;
    +066            static {
    +067                    invalidParamValueChars = new BitSet(128);
    +068                    invalidParamValueChars.set(0, 31);
    +069                    invalidParamValueChars.set(127);
    +070                    invalidParamValueChars.set('\t', false); //allow
    +071                    invalidParamValueChars.set('\n', false); //allow
    +072                    invalidParamValueChars.set('\r', false); //allow
    +073            }
    +074    
    +075            private final String newline;
    +076            private boolean caretEncodingEnabled = false;
    +077            private final FoldingScheme foldingScheme;
    +078            private final Writer writer;
    +079            private ParameterValueChangedListener parameterValueChangedListener;
    +080    
    +081            /**
    +082             * Creates an iCalendar raw writer using the standard folding scheme and
    +083             * newline sequence.
    +084             * @param writer the writer to the data stream
    +085             */
    +086            public ICalRawWriter(Writer writer) {
    +087                    this(writer, FoldingScheme.DEFAULT);
    +088            }
    +089    
    +090            /**
    +091             * Creates an iCalendar raw writer using the standard newline sequence.
    +092             * @param writer the writer to the data stream
    +093             * @param foldingScheme the folding scheme to use or null not to fold at all
    +094             */
    +095            public ICalRawWriter(Writer writer, FoldingScheme foldingScheme) {
    +096                    this(writer, foldingScheme, "\r\n");
    +097            }
    +098    
    +099            /**
    +100             * Creates an iCalendar raw writer.
    +101             * @param writer the writer to the data stream
    +102             * @param foldingScheme the folding scheme to use or null not to fold at all
    +103             * @param newline the newline sequence to use
    +104             */
    +105            public ICalRawWriter(Writer writer, FoldingScheme foldingScheme, String newline) {
    +106                    if (foldingScheme == null) {
    +107                            this.writer = writer;
    +108                    } else {
    +109                            this.writer = new FoldedLineWriter(writer, foldingScheme.getLineLength(), foldingScheme.getIndent(), newline);
    +110                    }
    +111                    this.foldingScheme = foldingScheme;
    +112                    this.newline = newline;
    +113            }
    +114    
    +115            /**
    +116             * <p>
    +117             * Gets whether the writer will apply circumflex accent encoding on
    +118             * parameter values (disabled by default). This escaping mechanism allows
    +119             * for newlines and double quotes to be included in parameter values.
    +120             * </p>
    +121             * 
    +122             * <p>
    +123             * When disabled, the writer will replace newlines with spaces and double
    +124             * quotes with single quotes.
    +125             * </p>
    +126             * 
    +127             * <table border="1">
    +128             * <tr>
    +129             * <th>Character</th>
    +130             * <th>Replacement<br>
    +131             * (when disabled)</th>
    +132             * <th>Replacement<br>
    +133             * (when enabled)</th>
    +134             * </tr>
    +135             * <tr>
    +136             * <td>{@code "}</td>
    +137             * <td>{@code '}</td>
    +138             * <td>{@code ^'}</td>
    +139             * </tr>
    +140             * <tr>
    +141             * <td><i>newline</i></td>
    +142             * <td><code><i>space</i></code></td>
    +143             * <td>{@code ^n}</td>
    +144             * </tr>
    +145             * <tr>
    +146             * <td>{@code ^}</td>
    +147             * <td>{@code ^}</td>
    +148             * <td>{@code ^^}</td>
    +149             * </tr>
    +150             * </table>
    +151             * 
    +152             * <p>
    +153             * Example:
    +154             * </p>
    +155             * 
    +156             * <pre>
    +157             * GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
    +158             *  sburgh, PA 15212":40.446816;80.00566
    +159             * </pre>
    +160             * 
    +161             * @return true if circumflex accent encoding is enabled, false if not
    +162             * @rfc 6868
    +163             */
    +164            public boolean isCaretEncodingEnabled() {
    +165                    return caretEncodingEnabled;
    +166            }
    +167    
    +168            /**
    +169             * <p>
    +170             * Sets whether the writer will apply circumflex accent encoding on
    +171             * parameter values (disabled by default). This escaping mechanism allows
    +172             * for newlines and double quotes to be included in parameter values.
    +173             * </p>
    +174             * 
    +175             * <p>
    +176             * When disabled, the writer will replace newlines with spaces and double
    +177             * quotes with single quotes.
    +178             * </p>
    +179             * 
    +180             * <table border="1">
    +181             * <tr>
    +182             * <th>Character</th>
    +183             * <th>Replacement<br>
    +184             * (when disabled)</th>
    +185             * <th>Replacement<br>
    +186             * (when enabled)</th>
    +187             * </tr>
    +188             * <tr>
    +189             * <td>{@code "}</td>
    +190             * <td>{@code '}</td>
    +191             * <td>{@code ^'}</td>
    +192             * </tr>
    +193             * <tr>
    +194             * <td><i>newline</i></td>
    +195             * <td><code><i>space</i></code></td>
    +196             * <td>{@code ^n}</td>
    +197             * </tr>
    +198             * <tr>
    +199             * <td>{@code ^}</td>
    +200             * <td>{@code ^}</td>
    +201             * <td>{@code ^^}</td>
    +202             * </tr>
    +203             * </table>
    +204             * 
    +205             * <p>
    +206             * Example:
    +207             * </p>
    +208             * 
    +209             * <pre>
    +210             * GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
    +211             *  sburgh, PA 15212":40.446816;80.00566
    +212             * </pre>
    +213             * 
    +214             * @param enable true to use circumflex accent encoding, false not to
    +215             * @rfc 6868
    +216             */
    +217            public void setCaretEncodingEnabled(boolean enable) {
    +218                    caretEncodingEnabled = enable;
    +219            }
    +220    
    +221            /**
    +222             * Gets the newline sequence that is used to separate lines.
    +223             * @return the newline sequence
    +224             */
    +225            public String getNewline() {
    +226                    return newline;
    +227            }
    +228    
    +229            /**
    +230             * Gets the listener which will be invoked when a parameter's value is
    +231             * changed due to containing invalid characters.
    +232             * @return the listener or null if not set
    +233             */
    +234            public ParameterValueChangedListener getParameterValueChangedListener() {
    +235                    return parameterValueChangedListener;
    +236            }
    +237    
    +238            /**
    +239             * Sets the listener which will be invoked when a parameter's value is
    +240             * changed due to containing invalid characters.
    +241             * @param parameterValueChangedListener the listener or null to remove
    +242             */
    +243            public void setParameterValueChangedListener(ParameterValueChangedListener parameterValueChangedListener) {
    +244                    this.parameterValueChangedListener = parameterValueChangedListener;
    +245            }
    +246    
    +247            /**
    +248             * Gets the rules for how each line is folded.
    +249             * @return the folding scheme or null if the lines are not folded
    +250             */
    +251            public FoldingScheme getFoldingScheme() {
    +252                    return foldingScheme;
    +253            }
    +254    
    +255            /**
    +256             * Writes a property marking the beginning of a component (in other words,
    +257             * writes a "BEGIN:NAME" property).
    +258             * @param componentName the component name (e.g. "VEVENT")
    +259             * @throws IOException if there's an I/O problem
    +260             */
    +261            public void writeBeginComponent(String componentName) throws IOException {
    +262                    writeProperty("BEGIN", componentName);
    +263            }
    +264    
    +265            /**
    +266             * Writes a property marking the end of a component (in other words, writes
    +267             * a "END:NAME" property).
    +268             * @param componentName the component name (e.g. "VEVENT")
    +269             * @throws IOException if there's an I/O problem
    +270             */
    +271            public void writeEndComponent(String componentName) throws IOException {
    +272                    writeProperty("END", componentName);
    +273            }
    +274    
    +275            /**
    +276             * Writes a property to the iCalendar data stream.
    +277             * @param propertyName the property name (e.g. "VERSION")
    +278             * @param value the property value (e.g. "2.0")
    +279             * @throws IllegalArgumentException if the property name contains invalid
    +280             * characters
    +281             * @throws IOException if there's an I/O problem
    +282             */
    +283            public void writeProperty(String propertyName, String value) throws IOException {
    +284                    writeProperty(propertyName, new ICalParameters(), value);
    +285            }
    +286    
    +287            /**
    +288             * Writes a property to the iCalendar data stream.
    +289             * @param propertyName the property name (e.g. "VERSION")
    +290             * @param parameters the property parameters
    +291             * @param value the property value (e.g. "2.0")
    +292             * @throws IllegalArgumentException if the property name contains invalid
    +293             * characters
    +294             * @throws IOException if there's an I/O problem
    +295             */
    +296            public void writeProperty(String propertyName, ICalParameters parameters, String value) throws IOException {
    +297                    //validate the property name
    +298                    if (!propertyNameRegex.matcher(propertyName).matches()) {
    +299                            throw new IllegalArgumentException("Property name invalid.  Property names can only contain letters, numbers, and hyphens.");
    +300                    }
    +301    
    +302                    //write the property name
    +303                    writer.append(propertyName);
    +304    
    +305                    //write the parameters
    +306                    for (Map.Entry<String, List<String>> subType : parameters) {
    +307                            String parameterName = subType.getKey();
    +308                            List<String> parameterValues = subType.getValue();
    +309                            if (!parameterValues.isEmpty()) {
    +310                                    //e.g. ADR;TYPE=home,work,"another,value":
    +311    
    +312                                    boolean first = true;
    +313                                    writer.append(';').append(parameterName).append('=');
    +314                                    for (String parameterValue : parameterValues) {
    +315                                            if (!first) {
    +316                                                    writer.append(',');
    +317                                            }
    +318    
    +319                                            parameterValue = sanitizeParameterValue(parameterValue, parameterName, propertyName);
    +320    
    +321                                            //surround with double quotes if contains special chars
    +322                                            if (quoteMeRegex.matcher(parameterValue).matches()) {
    +323                                                    writer.append('"');
    +324                                                    writer.append(parameterValue);
    +325                                                    writer.append('"');
    +326                                            } else {
    +327                                                    writer.append(parameterValue);
    +328                                            }
    +329    
    +330                                            first = false;
    +331                                    }
    +332                            }
    +333                    }
    +334    
    +335                    writer.append(':');
    +336    
    +337                    //write the property value
    +338                    if (value == null) {
    +339                            value = "";
    +340                    } else {
    +341                            value = escapeNewlines(value);
    +342                    }
    +343                    writer.append(value);
    +344    
    +345                    writer.append(newline);
    +346            }
    +347    
    +348            /**
    +349             * Removes or escapes all invalid characters in a parameter value.
    +350             * @param parameterValue the parameter value
    +351             * @param parameterName the parameter name
    +352             * @param propertyName the name of the property to which the parameter
    +353             * belongs
    +354             * @return the sanitized parameter value
    +355             */
    +356            private String sanitizeParameterValue(String parameterValue, String parameterName, String propertyName) {
    +357                    boolean valueChanged = false;
    +358                    String modifiedValue = removeInvalidParameterValueChars(parameterValue);
    +359    
    +360                    if (caretEncodingEnabled) {
    +361                            valueChanged = (modifiedValue != parameterValue);
    +362                            modifiedValue = applyCaretEncoding(modifiedValue);
    +363                    } else {
    +364                            //replace double quotes with single quotes
    +365                            modifiedValue = modifiedValue.replace('"', '\'');
    +366    
    +367                            //replace newlines with spaces
    +368                            modifiedValue = newlineRegex.matcher(modifiedValue).replaceAll(" ");
    +369    
    +370                            valueChanged = (modifiedValue != parameterValue);
    +371                    }
    +372    
    +373                    if (valueChanged && parameterValueChangedListener != null) {
    +374                            parameterValueChangedListener.onParameterValueChanged(propertyName, parameterName, parameterValue, modifiedValue);
    +375                    }
    +376    
    +377                    return modifiedValue;
    +378            }
    +379    
    +380            /**
    +381             * Removes invalid characters from a parameter value.
    +382             * @param value the parameter value
    +383             * @return the sanitized parameter value
    +384             */
    +385            private String removeInvalidParameterValueChars(String value) {
    +386                    StringBuilder sb = new StringBuilder(value.length());
    +387    
    +388                    for (int i = 0; i < value.length(); i++) {
    +389                            char ch = value.charAt(i);
    +390                            if (!invalidParamValueChars.get(ch)) {
    +391                                    sb.append(ch);
    +392                            }
    +393                    }
    +394    
    +395                    return (sb.length() == value.length()) ? value : sb.toString();
    +396            }
    +397    
    +398            /**
    +399             * Applies circumflex accent encoding to a string.
    +400             * @param value the string
    +401             * @return the encoded string
    +402             */
    +403            private String applyCaretEncoding(String value) {
    +404                    value = value.replace("^", "^^");
    +405                    value = newlineRegex.matcher(value).replaceAll("^n");
    +406                    value = value.replace("\"", "^'");
    +407                    return value;
    +408            }
    +409    
    +410            /**
    +411             * Escapes all newline characters.
    +412             * <p>
    +413             * This method escapes the following newline sequences:
    +414             * </p>
    +415             * <ul>
    +416             * <li>{@code \r\n}</li>
    +417             * <li>{@code \r}</li>
    +418             * <li>{@code \n}</li>
    +419             * </ul>
    +420             * @param text the text to escape
    +421             * @return the escaped text
    +422             */
    +423            private String escapeNewlines(String text) {
    +424                    return newlineRegex.matcher(text).replaceAll("\\\\n");
    +425            }
    +426    
    +427            /**
    +428             * Closes the underlying {@link Writer} object.
    +429             */
    +430            public void close() throws IOException {
    +431                    writer.close();
    +432            }
    +433    
    +434            /**
    +435             * Allows you to respond to when a parameter's value is changed due to it
    +436             * containing invalid characters. If a character can be escaped (such as the
    +437             * "^" character when caret encoding is enabled), then this does not count
    +438             * as the parameter being modified because it can be decoded without losing
    +439             * any information.
    +440             * @author Michael Angstadt
    +441             */
    +442            public static interface ParameterValueChangedListener {
    +443                    /**
    +444                     * Called when a parameter value is changed.
    +445                     * @param propertyName the name of the property to which the parameter
    +446                     * belongs
    +447                     * @param parameterName the parameter name
    +448                     * @param originalValue the original parameter value
    +449                     * @param modifiedValue the modified parameter value
    +450                     */
    +451                    void onParameterValueChanged(String propertyName, String parameterName, String originalValue, String modifiedValue);
    +452            }
    +453    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalReader.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalReader.html new file mode 100644 index 000000000..28e08eb60 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalReader.html @@ -0,0 +1,448 @@ + + +
    +001    package biweekly.io.text;
    +002    
    +003    import static biweekly.util.IOUtils.utf8Reader;
    +004    import static biweekly.util.StringUtils.NEWLINE;
    +005    
    +006    import java.io.Closeable;
    +007    import java.io.File;
    +008    import java.io.FileNotFoundException;
    +009    import java.io.IOException;
    +010    import java.io.InputStream;
    +011    import java.io.Reader;
    +012    import java.io.StringReader;
    +013    import java.util.ArrayList;
    +014    import java.util.List;
    +015    
    +016    import biweekly.ICalDataType;
    +017    import biweekly.ICalendar;
    +018    import biweekly.component.ICalComponent;
    +019    import biweekly.component.marshaller.ICalComponentMarshaller;
    +020    import biweekly.component.marshaller.ICalendarMarshaller;
    +021    import biweekly.io.CannotParseException;
    +022    import biweekly.io.ICalMarshallerRegistrar;
    +023    import biweekly.io.SkipMeException;
    +024    import biweekly.parameter.ICalParameters;
    +025    import biweekly.property.ICalProperty;
    +026    import biweekly.property.RawProperty;
    +027    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +028    import biweekly.property.marshaller.ICalPropertyMarshaller.Result;
    +029    
    +030    /*
    +031     Copyright (c) 2013, Michael Angstadt
    +032     All rights reserved.
    +033    
    +034     Redistribution and use in source and binary forms, with or without
    +035     modification, are permitted provided that the following conditions are met: 
    +036    
    +037     1. Redistributions of source code must retain the above copyright notice, this
    +038     list of conditions and the following disclaimer. 
    +039     2. Redistributions in binary form must reproduce the above copyright notice,
    +040     this list of conditions and the following disclaimer in the documentation
    +041     and/or other materials provided with the distribution. 
    +042    
    +043     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +044     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +045     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +046     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +047     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +048     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +049     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +050     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +051     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +052     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +053     */
    +054    
    +055    /**
    +056     * <p>
    +057     * Parses {@link ICalendar} objects from an iCalendar data stream.
    +058     * </p>
    +059     * <p>
    +060     * <b>Example:</b>
    +061     * 
    +062     * <pre class="brush:java">
    +063     * InputStream in = ...
    +064     * ICalReader icalReader = new ICalReader(in);
    +065     * ICalendar ical;
    +066     * while ((ical = icalReader.readNext()) != null){
    +067     *   ...
    +068     * }
    +069     * icalReader.close();
    +070     * </pre>
    +071     * 
    +072     * </p>
    +073     * @author Michael Angstadt
    +074     * @rfc 5545
    +075     */
    +076    public class ICalReader implements Closeable {
    +077            private static final ICalendarMarshaller icalMarshaller = ICalMarshallerRegistrar.getICalendarMarshaller();
    +078            private final List<String> warnings = new ArrayList<String>();
    +079            private ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +080            private final ICalRawReader reader;
    +081    
    +082            /**
    +083             * Creates a reader that parses iCalendar objects from a string.
    +084             * @param string the string
    +085             */
    +086            public ICalReader(String string) {
    +087                    this(new StringReader(string));
    +088            }
    +089    
    +090            /**
    +091             * Creates a reader that parses iCalendar objects from an input stream.
    +092             * @param in the input stream
    +093             */
    +094            public ICalReader(InputStream in) {
    +095                    this(utf8Reader(in));
    +096            }
    +097    
    +098            /**
    +099             * Creates a reader that parses iCalendar objects from a file.
    +100             * @param file the file
    +101             * @throws FileNotFoundException if the file doesn't exist
    +102             */
    +103            public ICalReader(File file) throws FileNotFoundException {
    +104                    this(utf8Reader(file));
    +105            }
    +106    
    +107            /**
    +108             * Creates a reader that parses iCalendar objects from a reader.
    +109             * @param reader the reader
    +110             */
    +111            public ICalReader(Reader reader) {
    +112                    this.reader = new ICalRawReader(reader);
    +113            }
    +114    
    +115            /**
    +116             * Gets whether the reader will decode parameter values that use circumflex
    +117             * accent encoding (enabled by default). This escaping mechanism allows
    +118             * newlines and double quotes to be included in parameter values.
    +119             * @return true if circumflex accent decoding is enabled, false if not
    +120             * @see ICalRawReader#isCaretDecodingEnabled()
    +121             */
    +122            public boolean isCaretDecodingEnabled() {
    +123                    return reader.isCaretDecodingEnabled();
    +124            }
    +125    
    +126            /**
    +127             * Sets whether the reader will decode parameter values that use circumflex
    +128             * accent encoding (enabled by default). This escaping mechanism allows
    +129             * newlines and double quotes to be included in parameter values.
    +130             * @param enable true to use circumflex accent decoding, false not to
    +131             * @see ICalRawReader#setCaretDecodingEnabled(boolean)
    +132             */
    +133            public void setCaretDecodingEnabled(boolean enable) {
    +134                    reader.setCaretDecodingEnabled(enable);
    +135            }
    +136    
    +137            /**
    +138             * <p>
    +139             * Registers an experimental property marshaller. Can also be used to
    +140             * override the marshaller of a standard property (such as DTSTART). Calling
    +141             * this method is the same as calling:
    +142             * </p>
    +143             * <p>
    +144             * {@code getRegistrar().register(marshaller)}.
    +145             * </p>
    +146             * @param marshaller the marshaller to register
    +147             */
    +148            public void registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +149                    registrar.register(marshaller);
    +150            }
    +151    
    +152            /**
    +153             * <p>
    +154             * Registers an experimental component marshaller. Can also be used to
    +155             * override the marshaller of a standard component (such as VEVENT). Calling
    +156             * this method is the same as calling:
    +157             * </p>
    +158             * <p>
    +159             * {@code getRegistrar().register(marshaller)}.
    +160             * </p>
    +161             * @param marshaller the marshaller to register
    +162             */
    +163            public void registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +164                    registrar.register(marshaller);
    +165            }
    +166    
    +167            /**
    +168             * Gets the object that manages the component/property marshaller objects.
    +169             * @return the marshaller registrar
    +170             */
    +171            public ICalMarshallerRegistrar getRegistrar() {
    +172                    return registrar;
    +173            }
    +174    
    +175            /**
    +176             * Sets the object that manages the component/property marshaller objects.
    +177             * @param registrar the marshaller registrar
    +178             */
    +179            public void setRegistrar(ICalMarshallerRegistrar registrar) {
    +180                    this.registrar = registrar;
    +181            }
    +182    
    +183            /**
    +184             * Gets the warnings from the last iCalendar object that was unmarshalled.
    +185             * This list is reset every time a new iCalendar object is read.
    +186             * @return the warnings or empty list if there were no warnings
    +187             */
    +188            public List<String> getWarnings() {
    +189                    return new ArrayList<String>(warnings);
    +190            }
    +191    
    +192            /**
    +193             * Reads the next iCalendar object.
    +194             * @return the next iCalendar object or null if there are no more
    +195             * @throws IOException if there's a problem reading from the stream
    +196             */
    +197            public ICalendar readNext() throws IOException {
    +198                    if (reader.eof()) {
    +199                            return null;
    +200                    }
    +201    
    +202                    warnings.clear();
    +203    
    +204                    ICalDataStreamListenerImpl listener = new ICalDataStreamListenerImpl();
    +205                    reader.start(listener);
    +206    
    +207                    if (!listener.dataWasRead) {
    +208                            //EOF was reached without reading anything
    +209                            return null;
    +210                    }
    +211    
    +212                    ICalendar ical;
    +213                    if (listener.orphanedComponents.isEmpty()) {
    +214                            //there were no components in the iCalendar object
    +215                            ical = icalMarshaller.emptyInstance();
    +216                    } else {
    +217                            ICalComponent first = listener.orphanedComponents.get(0);
    +218                            if (first instanceof ICalendar) {
    +219                                    //this is the code-path that valid iCalendar objects should reach
    +220                                    ical = (ICalendar) first;
    +221                            } else {
    +222                                    ical = icalMarshaller.emptyInstance();
    +223                                    for (ICalComponent component : listener.orphanedComponents) {
    +224                                            ical.addComponent(component);
    +225                                    }
    +226                            }
    +227                    }
    +228    
    +229                    //add any properties that were not part of a component (will never happen if the iCalendar object is valid)
    +230                    for (ICalProperty property : listener.orphanedProperties) {
    +231                            ical.addProperty(property);
    +232                    }
    +233    
    +234                    return ical;
    +235            }
    +236    
    +237            //TODO how to unmarshal the alarm components (a different class should be created, depending on the ACTION property)
    +238            //TODO buffer properties in a list before the component class is created
    +239            private class ICalDataStreamListenerImpl implements ICalRawReader.ICalDataStreamListener {
    +240                    private final String icalComponentName = icalMarshaller.getComponentName();
    +241    
    +242                    private List<ICalProperty> orphanedProperties = new ArrayList<ICalProperty>();
    +243                    private List<ICalComponent> orphanedComponents = new ArrayList<ICalComponent>();
    +244    
    +245                    private List<ICalComponent> componentStack = new ArrayList<ICalComponent>();
    +246                    private List<String> componentNamesStack = new ArrayList<String>();
    +247                    private boolean dataWasRead = false;
    +248    
    +249                    public void beginComponent(String name) {
    +250                            dataWasRead = true;
    +251    
    +252                            ICalComponent parentComponent = getCurrentComponent();
    +253    
    +254                            ICalComponentMarshaller<? extends ICalComponent> m = registrar.getComponentMarshaller(name);
    +255                            ICalComponent component = m.emptyInstance();
    +256                            componentStack.add(component);
    +257                            componentNamesStack.add(name);
    +258    
    +259                            if (parentComponent == null) {
    +260                                    orphanedComponents.add(component);
    +261                            } else {
    +262                                    parentComponent.addComponent(component);
    +263                            }
    +264                    }
    +265    
    +266                    public void readProperty(String name, ICalParameters parameters, String value) {
    +267                            dataWasRead = true;
    +268    
    +269                            ICalPropertyMarshaller<? extends ICalProperty> m = registrar.getPropertyMarshaller(name);
    +270    
    +271                            //get the data type
    +272                            ICalDataType dataType = parameters.getValue();
    +273                            if (dataType == null) {
    +274                                    //use the default data type if there is no VALUE parameter
    +275                                    dataType = m.getDefaultDataType();
    +276                            } else {
    +277                                    //remove VALUE parameter if it is set
    +278                                    parameters.setValue(null);
    +279                            }
    +280    
    +281                            ICalProperty property = null;
    +282                            try {
    +283                                    Result<? extends ICalProperty> result = m.parseText(value, dataType, parameters);
    +284    
    +285                                    for (String warning : result.getWarnings()) {
    +286                                            addWarning(warning, name);
    +287                                    }
    +288    
    +289                                    property = result.getProperty();
    +290                            } catch (SkipMeException e) {
    +291                                    if (e.getMessage() == null) {
    +292                                            addWarning("Property has requested that it be skipped.", name);
    +293                                    } else {
    +294                                            addWarning("Property has requested that it be skipped: " + e.getMessage(), name);
    +295                                    }
    +296                            } catch (CannotParseException e) {
    +297                                    if (e.getMessage() == null) {
    +298                                            addWarning("Property value could not be unmarshalled: " + value, name);
    +299                                    } else {
    +300                                            addWarning("Property value could not be unmarshalled." + NEWLINE + "  Value: " + value + NEWLINE + "  Reason: " + e.getMessage(), name);
    +301                                    }
    +302                                    property = new RawProperty(name, dataType, value);
    +303                            }
    +304    
    +305                            if (property != null) {
    +306                                    ICalComponent parentComponent = getCurrentComponent();
    +307                                    if (parentComponent == null) {
    +308                                            orphanedProperties.add(property);
    +309                                    } else {
    +310                                            parentComponent.addProperty(property);
    +311                                    }
    +312                            }
    +313                    }
    +314    
    +315                    public void endComponent(String name) {
    +316                            //stop reading when "END:VCALENDAR" is reached
    +317                            if (icalComponentName.equalsIgnoreCase(name)) {
    +318                                    throw new ICalRawReader.StopReadingException();
    +319                            }
    +320    
    +321                            //find the component that this END property matches up with
    +322                            int popIndex = -1;
    +323                            for (int i = componentStack.size() - 1; i >= 0; i--) {
    +324                                    String n = componentNamesStack.get(i);
    +325                                    if (n.equalsIgnoreCase(name)) {
    +326                                            popIndex = i;
    +327                                            break;
    +328                                    }
    +329                            }
    +330                            if (popIndex == -1) {
    +331                                    //END property does not match up with any BEGIN properties, so ignore
    +332                                    addWarning("Ignoring END property that does not match up with any BEGIN properties: " + name, "END");
    +333                                    return;
    +334                            }
    +335    
    +336                            componentStack = componentStack.subList(0, popIndex);
    +337                            componentNamesStack = componentNamesStack.subList(0, popIndex);
    +338                    }
    +339    
    +340                    public void invalidLine(String line) {
    +341                            addWarning("Skipping malformed line: \"" + line + "\"");
    +342                    }
    +343    
    +344                    public void valuelessParameter(String propertyName, String parameterName) {
    +345                            addWarning("Value-less parameter encountered: " + parameterName, propertyName);
    +346                    }
    +347    
    +348                    private ICalComponent getCurrentComponent() {
    +349                            if (componentStack.isEmpty()) {
    +350                                    return null;
    +351                            }
    +352                            return componentStack.get(componentStack.size() - 1);
    +353                    }
    +354            }
    +355    
    +356            private void addWarning(String message) {
    +357                    addWarning(message, null);
    +358            }
    +359    
    +360            private void addWarning(String message, String propertyName) {
    +361                    addWarning(message, propertyName, reader.getLineNum());
    +362            }
    +363    
    +364            private void addWarning(String message, String propertyName, int lineNum) {
    +365                    StringBuilder sb = new StringBuilder();
    +366                    sb.append("Line ").append(lineNum);
    +367                    if (propertyName != null) {
    +368                            sb.append(" (").append(propertyName).append(" property)");
    +369                    }
    +370                    sb.append(": ").append(message);
    +371    
    +372                    warnings.add(sb.toString());
    +373            }
    +374    
    +375            /**
    +376             * Closes the underlying {@link Reader} object.
    +377             */
    +378            //@Override
    +379            public void close() throws IOException {
    +380                    reader.close();
    +381            }
    +382    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalWriter.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalWriter.html new file mode 100644 index 000000000..4efa22247 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/text/ICalWriter.html @@ -0,0 +1,411 @@ + + +
    +001    package biweekly.io.text;
    +002    
    +003    import static biweekly.util.IOUtils.utf8Writer;
    +004    
    +005    import java.io.Closeable;
    +006    import java.io.File;
    +007    import java.io.FileNotFoundException;
    +008    import java.io.IOException;
    +009    import java.io.OutputStream;
    +010    import java.io.Writer;
    +011    
    +012    import biweekly.ICalDataType;
    +013    import biweekly.ICalendar;
    +014    import biweekly.component.ICalComponent;
    +015    import biweekly.component.marshaller.ICalComponentMarshaller;
    +016    import biweekly.io.ICalMarshallerRegistrar;
    +017    import biweekly.io.SkipMeException;
    +018    import biweekly.parameter.ICalParameters;
    +019    import biweekly.property.ICalProperty;
    +020    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +021    
    +022    /*
    +023     Copyright (c) 2013, Michael Angstadt
    +024     All rights reserved.
    +025    
    +026     Redistribution and use in source and binary forms, with or without
    +027     modification, are permitted provided that the following conditions are met: 
    +028    
    +029     1. Redistributions of source code must retain the above copyright notice, this
    +030     list of conditions and the following disclaimer. 
    +031     2. Redistributions in binary form must reproduce the above copyright notice,
    +032     this list of conditions and the following disclaimer in the documentation
    +033     and/or other materials provided with the distribution. 
    +034    
    +035     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +036     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +037     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +038     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +039     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +040     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +041     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +042     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +043     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +044     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +045     */
    +046    
    +047    /**
    +048     * <p>
    +049     * Writes {@link ICalendar} objects to an iCalendar data stream.
    +050     * </p>
    +051     * <p>
    +052     * <b>Example:</b>
    +053     * 
    +054     * <pre class="brush:java">
    +055     * List&lt;ICalendar&gt; icals = ... 
    +056     * OutputStream out = ...
    +057     * ICalWriter icalWriter = new ICalWriter(out);
    +058     * for (ICalendar ical : icals){
    +059     *   icalWriter.write(ical);
    +060     * }
    +061     * icalWriter.close();
    +062     * </pre>
    +063     * 
    +064     * </p>
    +065     * @author Michael Angstadt
    +066     * @rfc 5545
    +067     */
    +068    public class ICalWriter implements Closeable {
    +069            private ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +070            private final ICalRawWriter writer;
    +071    
    +072            /**
    +073             * Creates an iCalendar writer that writes to an output stream. Uses the
    +074             * standard folding scheme and newline sequence.
    +075             * @param outputStream the output stream to write to
    +076             */
    +077            public ICalWriter(OutputStream outputStream) {
    +078                    this(utf8Writer(outputStream));
    +079            }
    +080    
    +081            /**
    +082             * Creates an iCalendar writer that writes to an output stream. Uses the
    +083             * standard newline sequence.
    +084             * @param outputStream the output stream to write to
    +085             * @param foldingScheme the folding scheme to use or null not to fold at all
    +086             */
    +087            public ICalWriter(OutputStream outputStream, FoldingScheme foldingScheme) {
    +088                    this(utf8Writer(outputStream), foldingScheme);
    +089            }
    +090    
    +091            /**
    +092             * Creates an iCalendar writer that writes to an output stream.
    +093             * @param outputStream the output stream to write to
    +094             * @param foldingScheme the folding scheme to use or null not to fold at all
    +095             * @param newline the newline sequence to use
    +096             */
    +097            public ICalWriter(OutputStream outputStream, FoldingScheme foldingScheme, String newline) {
    +098                    this(utf8Writer(outputStream), foldingScheme, newline);
    +099            }
    +100    
    +101            /**
    +102             * Creates an iCalendar writer that writes to a file. Uses the standard
    +103             * folding scheme and newline sequence.
    +104             * @param file the file to write to
    +105             * @throws FileNotFoundException if the file cannot be written to
    +106             */
    +107            public ICalWriter(File file) throws FileNotFoundException {
    +108                    this(utf8Writer(file));
    +109            }
    +110    
    +111            /**
    +112             * Creates an iCalendar writer that writes to a file. Uses the standard
    +113             * folding scheme and newline sequence.
    +114             * @param file the file to write to
    +115             * @param append true to append to the end of the file, false to overwrite
    +116             * it
    +117             * @throws FileNotFoundException if the file cannot be written to
    +118             */
    +119            public ICalWriter(File file, boolean append) throws FileNotFoundException {
    +120                    this(utf8Writer(file, append));
    +121            }
    +122    
    +123            /**
    +124             * Creates an iCalendar writer that writes to a file. Uses the standard
    +125             * newline sequence.
    +126             * @param file the file to write to
    +127             * @param append true to append to the end of the file, false to overwrite
    +128             * it
    +129             * @param foldingScheme the folding scheme to use or null not to fold at all
    +130             * @throws FileNotFoundException if the file cannot be written to
    +131             */
    +132            public ICalWriter(File file, boolean append, FoldingScheme foldingScheme) throws FileNotFoundException {
    +133                    this(utf8Writer(file, append), foldingScheme);
    +134            }
    +135    
    +136            /**
    +137             * Creates an iCalendar writer that writes to a file.
    +138             * @param file the file to write to
    +139             * @param append true to append to the end of the file, false to overwrite
    +140             * it
    +141             * @param foldingScheme the folding scheme to use or null not to fold at all
    +142             * @param newline the newline sequence to use
    +143             * @throws FileNotFoundException if the file cannot be written to
    +144             */
    +145            public ICalWriter(File file, boolean append, FoldingScheme foldingScheme, String newline) throws FileNotFoundException {
    +146                    this(utf8Writer(file, append), foldingScheme, newline);
    +147            }
    +148    
    +149            /**
    +150             * Creates an iCalendar writer that writes to a writer. Uses the standard
    +151             * folding scheme and newline sequence.
    +152             * @param writer the writer to the data stream
    +153             */
    +154            public ICalWriter(Writer writer) {
    +155                    this(writer, FoldingScheme.DEFAULT);
    +156            }
    +157    
    +158            /**
    +159             * Creates an iCalendar writer that writes to a writer. Uses the standard
    +160             * newline sequence.
    +161             * @param writer the writer to the data stream
    +162             * @param foldingScheme the folding scheme to use or null not to fold at all
    +163             */
    +164            public ICalWriter(Writer writer, FoldingScheme foldingScheme) {
    +165                    this(writer, foldingScheme, "\r\n");
    +166            }
    +167    
    +168            /**
    +169             * Creates an iCalendar writer that writes to a writer.
    +170             * @param writer the writer to the data stream
    +171             * @param foldingScheme the folding scheme to use or null not to fold at all
    +172             * @param newline the newline sequence to use
    +173             */
    +174            public ICalWriter(Writer writer, FoldingScheme foldingScheme, String newline) {
    +175                    this.writer = new ICalRawWriter(writer, foldingScheme, newline);
    +176            }
    +177    
    +178            /**
    +179             * <p>
    +180             * Gets whether the writer will apply circumflex accent encoding on
    +181             * parameter values (disabled by default). This escaping mechanism allows
    +182             * for newlines and double quotes to be included in parameter values.
    +183             * </p>
    +184             * 
    +185             * <p>
    +186             * When disabled, the writer will replace newlines with spaces and double
    +187             * quotes with single quotes.
    +188             * </p>
    +189             * @return true if circumflex accent encoding is enabled, false if not
    +190             * @see ICalRawWriter#isCaretEncodingEnabled()
    +191             */
    +192            public boolean isCaretEncodingEnabled() {
    +193                    return writer.isCaretEncodingEnabled();
    +194            }
    +195    
    +196            /**
    +197             * <p>
    +198             * Sets whether the writer will apply circumflex accent encoding on
    +199             * parameter values (disabled by default). This escaping mechanism allows
    +200             * for newlines and double quotes to be included in parameter values.
    +201             * </p>
    +202             * 
    +203             * <p>
    +204             * When disabled, the writer will replace newlines with spaces and double
    +205             * quotes with single quotes.
    +206             * </p>
    +207             * @param enable true to use circumflex accent encoding, false not to
    +208             * @see ICalRawWriter#setCaretEncodingEnabled(boolean)
    +209             */
    +210            public void setCaretEncodingEnabled(boolean enable) {
    +211                    writer.setCaretEncodingEnabled(enable);
    +212            }
    +213    
    +214            /**
    +215             * Gets the newline sequence that is used to separate lines.
    +216             * @return the newline sequence
    +217             */
    +218            public String getNewline() {
    +219                    return writer.getNewline();
    +220            }
    +221    
    +222            /**
    +223             * Gets the rules for how each line is folded.
    +224             * @return the folding scheme or null if the lines are not folded
    +225             */
    +226            public FoldingScheme getFoldingScheme() {
    +227                    return writer.getFoldingScheme();
    +228            }
    +229    
    +230            /**
    +231             * <p>
    +232             * Registers an experimental property marshaller. Can also be used to
    +233             * override the marshaller of a standard property (such as DTSTART). Calling
    +234             * this method is the same as calling:
    +235             * </p>
    +236             * <p>
    +237             * {@code getRegistrar().register(marshaller)}.
    +238             * </p>
    +239             * @param marshaller the marshaller to register
    +240             */
    +241            public void registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +242                    registrar.register(marshaller);
    +243            }
    +244    
    +245            /**
    +246             * <p>
    +247             * Registers an experimental component marshaller. Can also be used to
    +248             * override the marshaller of a standard component (such as VEVENT). Calling
    +249             * this method is the same as calling:
    +250             * </p>
    +251             * <p>
    +252             * {@code getRegistrar().register(marshaller)}.
    +253             * </p>
    +254             * @param marshaller the marshaller to register
    +255             */
    +256            public void registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +257                    registrar.register(marshaller);
    +258            }
    +259    
    +260            /**
    +261             * Gets the object that manages the component/property marshaller objects.
    +262             * @return the marshaller registrar
    +263             */
    +264            public ICalMarshallerRegistrar getRegistrar() {
    +265                    return registrar;
    +266            }
    +267    
    +268            /**
    +269             * Sets the object that manages the component/property marshaller objects.
    +270             * @param registrar the marshaller registrar
    +271             */
    +272            public void setRegistrar(ICalMarshallerRegistrar registrar) {
    +273                    this.registrar = registrar;
    +274            }
    +275    
    +276            /**
    +277             * Writes an iCalendar object to the data stream.
    +278             * @param ical the iCalendar object to write
    +279             * @throws IllegalArgumentException if the marshaller class for a component
    +280             * or property object cannot be found (only happens when an experimental
    +281             * property/component marshaller is not registered with the
    +282             * {@code registerMarshaller} method.)
    +283             * @throws IOException if there's a problem writing to the data stream
    +284             */
    +285            public void write(ICalendar ical) throws IOException {
    +286                    writeComponent(ical);
    +287            }
    +288    
    +289            /**
    +290             * Writes a component to the data stream.
    +291             * @param component the component to write
    +292             * @throws IOException if there's a problem writing to the data stream
    +293             */
    +294            @SuppressWarnings({ "rawtypes", "unchecked" })
    +295            private void writeComponent(ICalComponent component) throws IOException {
    +296                    ICalComponentMarshaller m = registrar.getComponentMarshaller(component);
    +297                    if (m == null) {
    +298                            throw new IllegalArgumentException("No marshaller found for component class \"" + component.getClass().getName() + "\".");
    +299                    }
    +300    
    +301                    writer.writeBeginComponent(m.getComponentName());
    +302    
    +303                    for (Object obj : m.getProperties(component)) {
    +304                            ICalProperty property = (ICalProperty) obj;
    +305                            ICalPropertyMarshaller pm = registrar.getPropertyMarshaller(property);
    +306                            if (pm == null) {
    +307                                    throw new IllegalArgumentException("No marshaller found for property class \"" + property.getClass().getName() + "\".");
    +308                            }
    +309    
    +310                            //marshal property
    +311                            ICalParameters parameters;
    +312                            String value;
    +313                            try {
    +314                                    parameters = pm.prepareParameters(property);
    +315                                    value = pm.writeText(property);
    +316                            } catch (SkipMeException e) {
    +317                                    continue;
    +318                            }
    +319    
    +320                            //set the data type
    +321                            ICalDataType dataType = pm.dataType(property);
    +322                            if (dataType != null && dataType != pm.getDefaultDataType()) {
    +323                                    //only add a VALUE parameter if the data type is (1) not "unknown" and (2) different from the property's default data type
    +324                                    parameters.setValue(dataType);
    +325                            }
    +326    
    +327                            //write property to data stream
    +328                            writer.writeProperty(pm.getPropertyName(), parameters, value);
    +329                    }
    +330    
    +331                    for (Object obj : m.getComponents(component)) {
    +332                            ICalComponent subComponent = (ICalComponent) obj;
    +333                            writeComponent(subComponent);
    +334                    }
    +335    
    +336                    writer.writeEndComponent(m.getComponentName());
    +337            }
    +338    
    +339            /**
    +340             * Closes the underlying {@link Writer} object.
    +341             */
    +342            public void close() throws IOException {
    +343                    writer.close();
    +344            }
    +345    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/xml/XCalDocument.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/xml/XCalDocument.html new file mode 100644 index 000000000..884265dd4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/xml/XCalDocument.html @@ -0,0 +1,809 @@ + + +
    +001    package biweekly.io.xml;
    +002    
    +003    import static biweekly.io.xml.XCalNamespaceContext.XCAL_NS;
    +004    import static biweekly.util.IOUtils.utf8Writer;
    +005    
    +006    import java.io.File;
    +007    import java.io.FileInputStream;
    +008    import java.io.IOException;
    +009    import java.io.InputStream;
    +010    import java.io.OutputStream;
    +011    import java.io.Reader;
    +012    import java.io.StringWriter;
    +013    import java.io.Writer;
    +014    import java.util.ArrayList;
    +015    import java.util.Collections;
    +016    import java.util.HashMap;
    +017    import java.util.List;
    +018    import java.util.Map;
    +019    
    +020    import javax.xml.namespace.QName;
    +021    import javax.xml.transform.OutputKeys;
    +022    import javax.xml.transform.TransformerException;
    +023    import javax.xml.xpath.XPath;
    +024    import javax.xml.xpath.XPathConstants;
    +025    import javax.xml.xpath.XPathExpressionException;
    +026    import javax.xml.xpath.XPathFactory;
    +027    
    +028    import org.w3c.dom.Document;
    +029    import org.w3c.dom.Element;
    +030    import org.xml.sax.SAXException;
    +031    
    +032    import biweekly.ICalDataType;
    +033    import biweekly.ICalendar;
    +034    import biweekly.component.ICalComponent;
    +035    import biweekly.component.marshaller.ICalComponentMarshaller;
    +036    import biweekly.component.marshaller.ICalendarMarshaller;
    +037    import biweekly.io.CannotParseException;
    +038    import biweekly.io.ICalMarshallerRegistrar;
    +039    import biweekly.io.SkipMeException;
    +040    import biweekly.parameter.ICalParameters;
    +041    import biweekly.property.ICalProperty;
    +042    import biweekly.property.Xml;
    +043    import biweekly.property.marshaller.ICalPropertyMarshaller;
    +044    import biweekly.property.marshaller.ICalPropertyMarshaller.Result;
    +045    import biweekly.util.IOUtils;
    +046    import biweekly.util.XmlUtils;
    +047    
    +048    /*
    +049     Copyright (c) 2013, Michael Angstadt
    +050     All rights reserved.
    +051    
    +052     Redistribution and use in source and binary forms, with or without
    +053     modification, are permitted provided that the following conditions are met: 
    +054    
    +055     1. Redistributions of source code must retain the above copyright notice, this
    +056     list of conditions and the following disclaimer. 
    +057     2. Redistributions in binary form must reproduce the above copyright notice,
    +058     this list of conditions and the following disclaimer in the documentation
    +059     and/or other materials provided with the distribution. 
    +060    
    +061     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +062     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +063     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +064     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +065     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +066     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +067     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +068     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +069     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +070     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +071     */
    +072    
    +073    //@formatter:off
    +074    /**
    +075     * <p>
    +076     * Represents an XML document that contains iCalendar objects ("xCal" standard).
    +077     * This class can be used to read and write xCal documents.
    +078     * </p>
    +079     * <p>
    +080     * <b>Examples:</b>
    +081     * 
    +082     * <pre class="brush:java">
    +083     * String xml =
    +084     * "&lt;?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
    +085     * "&lt;icalendar xmlns=\"urn:ietf:params:xml:ns:icalendar-2.0\"&gt;" +
    +086     *   "&lt;vcalendar&gt;" +
    +087     *     "&lt;properties&gt;" +
    +088     *       "&lt;prodid&gt;&lt;text&gt;-//Example Inc.//Example Client//EN&lt;/text&gt;&lt;/prodid&gt;" +
    +089     *       "&lt;version&gt;&lt;text&gt;2.0&lt;/text&gt;&lt;/version&gt;" +
    +090     *     "&lt;/properties&gt;" +
    +091     *     "&lt;components&gt;" +
    +092     *       "&lt;vevent&gt;" +
    +093     *         "&lt;properties&gt;" +
    +094     *           "&lt;dtstart&gt;&lt;date-time&gt;2013-06-27T13:00:00Z&lt;/date-time&gt;&lt;/dtstart&gt;" +
    +095     *           "&lt;dtend&gt;&lt;date-time&gt;2013-06-27T15:00:00Z&lt;/date-time&gt;&lt;/dtend&gt;" +
    +096     *           "&lt;summary&gt;&lt;text&gt;Team Meeting&lt;/text&gt;&lt;/summary&gt;" +
    +097     *         "&lt;/properties&gt;" +
    +098     *       "&lt;/vevent&gt;" +
    +099     *     "&lt;/components&gt;" +
    +100     *   "&lt;/vcalendar&gt;" +
    +101     * "&lt;/icalendar&gt;";
    +102     *     
    +103     * //parsing an existing xCal document
    +104     * XCalDocument xcal = new XCalDocument(xml);
    +105     * List&lt;ICalendar&gt; icals = xcal.parseAll();
    +106     * 
    +107     * //creating an empty xCal document
    +108     * XCalDocument xcal = new XCalDocument();
    +109     * 
    +110     * //ICalendar objects can be added at any time
    +111     * ICalendar ical = new ICalendar();
    +112     * xcal.add(ical);
    +113     * 
    +114     * //retrieving the raw XML DOM
    +115     * Document document = xcal.getDocument();
    +116     * 
    +117     * //call one of the "write()" methods to output the xCal document
    +118     * File file = new File("meeting.xml");
    +119     * xcal.write(file);
    +120     * </pre>
    +121     * 
    +122     * </p>
    +123     * @author Michael Angstadt
    +124     * @rfc 6321
    +125     */
    +126    //@formatter:on
    +127    public class XCalDocument {
    +128            private static final ICalendarMarshaller icalMarshaller = ICalMarshallerRegistrar.getICalendarMarshaller();
    +129            private static final XCalNamespaceContext nsContext = new XCalNamespaceContext("xcal");
    +130    
    +131            /**
    +132             * Defines the names of the XML elements that are used to hold each
    +133             * parameter's value.
    +134             */
    +135            private final Map<String, ICalDataType> parameterDataTypes = new HashMap<String, ICalDataType>();
    +136            {
    +137                    registerParameterDataType(ICalParameters.CN, ICalDataType.TEXT);
    +138                    registerParameterDataType(ICalParameters.ALTREP, ICalDataType.URI);
    +139                    registerParameterDataType(ICalParameters.CUTYPE, ICalDataType.TEXT);
    +140                    registerParameterDataType(ICalParameters.DELEGATED_FROM, ICalDataType.CAL_ADDRESS);
    +141                    registerParameterDataType(ICalParameters.DELEGATED_TO, ICalDataType.CAL_ADDRESS);
    +142                    registerParameterDataType(ICalParameters.DIR, ICalDataType.URI);
    +143                    registerParameterDataType(ICalParameters.ENCODING, ICalDataType.TEXT);
    +144                    registerParameterDataType(ICalParameters.FMTTYPE, ICalDataType.TEXT);
    +145                    registerParameterDataType(ICalParameters.FBTYPE, ICalDataType.TEXT);
    +146                    registerParameterDataType(ICalParameters.LANGUAGE, ICalDataType.TEXT);
    +147                    registerParameterDataType(ICalParameters.MEMBER, ICalDataType.CAL_ADDRESS);
    +148                    registerParameterDataType(ICalParameters.PARTSTAT, ICalDataType.TEXT);
    +149                    registerParameterDataType(ICalParameters.RANGE, ICalDataType.TEXT);
    +150                    registerParameterDataType(ICalParameters.RELATED, ICalDataType.TEXT);
    +151                    registerParameterDataType(ICalParameters.RELTYPE, ICalDataType.TEXT);
    +152                    registerParameterDataType(ICalParameters.ROLE, ICalDataType.TEXT);
    +153                    registerParameterDataType(ICalParameters.RSVP, ICalDataType.BOOLEAN);
    +154                    registerParameterDataType(ICalParameters.SENT_BY, ICalDataType.CAL_ADDRESS);
    +155                    registerParameterDataType(ICalParameters.TZID, ICalDataType.TEXT);
    +156            }
    +157    
    +158            private ICalMarshallerRegistrar registrar = new ICalMarshallerRegistrar();
    +159            private final List<List<String>> parseWarnings = new ArrayList<List<String>>();
    +160            private Document document;
    +161            private Element root;
    +162    
    +163            /**
    +164             * Parses an xCal document from a string.
    +165             * @param xml the xCal document in the form of a string
    +166             * @throws SAXException if there's a problem parsing the XML
    +167             */
    +168            public XCalDocument(String xml) throws SAXException {
    +169                    this(XmlUtils.toDocument(xml));
    +170            }
    +171    
    +172            /**
    +173             * Parses an xCal document from an input stream.
    +174             * @param in the input stream to read the the xCal document from
    +175             * @throws IOException if there's a problem reading from the input stream
    +176             * @throws SAXException if there's a problem parsing the XML
    +177             */
    +178            public XCalDocument(InputStream in) throws SAXException, IOException {
    +179                    this(XmlUtils.toDocument(in));
    +180            }
    +181    
    +182            /**
    +183             * Parses an xCal document from a file.
    +184             * @param file the file containing the xCal document
    +185             * @throws IOException if there's a problem reading from the file
    +186             * @throws SAXException if there's a problem parsing the XML
    +187             */
    +188            public XCalDocument(File file) throws SAXException, IOException {
    +189                    InputStream in = new FileInputStream(file);
    +190                    try {
    +191                            init(XmlUtils.toDocument(in));
    +192                    } finally {
    +193                            IOUtils.closeQuietly(in);
    +194                    }
    +195            }
    +196    
    +197            /**
    +198             * <p>
    +199             * Parses an xCal document from a reader.
    +200             * </p>
    +201             * <p>
    +202             * Note that use of this constructor is discouraged. It ignores the
    +203             * character encoding that is defined within the XML document itself, and
    +204             * should only be used if the encoding is undefined or if the encoding needs
    +205             * to be ignored for whatever reason. The {@link #XCalDocument(InputStream)}
    +206             * constructor should be used instead, since it takes the XML document's
    +207             * character encoding into account when parsing.
    +208             * </p>
    +209             * @param reader the reader to read the xCal document from
    +210             * @throws IOException if there's a problem reading from the reader
    +211             * @throws SAXException if there's a problem parsing the XML
    +212             */
    +213            public XCalDocument(Reader reader) throws SAXException, IOException {
    +214                    this(XmlUtils.toDocument(reader));
    +215            }
    +216    
    +217            /**
    +218             * Wraps an existing XML DOM object.
    +219             * @param document the XML DOM that contains the xCal document
    +220             */
    +221            public XCalDocument(Document document) {
    +222                    init(document);
    +223            }
    +224    
    +225            /**
    +226             * Creates an empty xCal document.
    +227             */
    +228            public XCalDocument() {
    +229                    document = XmlUtils.createDocument();
    +230                    root = document.createElementNS(XCAL_NS, "icalendar");
    +231                    document.appendChild(root);
    +232            }
    +233    
    +234            private void init(Document document) {
    +235                    this.document = document;
    +236    
    +237                    XPath xpath = XPathFactory.newInstance().newXPath();
    +238                    xpath.setNamespaceContext(nsContext);
    +239    
    +240                    try {
    +241                            //find the <icalendar> element
    +242                            String prefix = nsContext.getPrefix();
    +243                            root = (Element) xpath.evaluate("//" + prefix + ":icalendar", document, XPathConstants.NODE);
    +244                    } catch (XPathExpressionException e) {
    +245                            //never thrown, xpath expression is hard coded
    +246                    }
    +247            }
    +248    
    +249            /**
    +250             * <p>
    +251             * Registers an experimental property marshaller. Can also be used to
    +252             * override the marshaller of a standard property (such as DTSTART). Calling
    +253             * this method is the same as calling:
    +254             * </p>
    +255             * <p>
    +256             * {@code getRegistrar().register(marshaller)}.
    +257             * </p>
    +258             * @param marshaller the marshaller to register
    +259             */
    +260            public void registerMarshaller(ICalPropertyMarshaller<? extends ICalProperty> marshaller) {
    +261                    registrar.register(marshaller);
    +262            }
    +263    
    +264            /**
    +265             * <p>
    +266             * Registers an experimental component marshaller. Can also be used to
    +267             * override the marshaller of a standard component (such as VEVENT). Calling
    +268             * this method is the same as calling:
    +269             * </p>
    +270             * <p>
    +271             * {@code getRegistrar().register(marshaller)}.
    +272             * </p>
    +273             * @param marshaller the marshaller to register
    +274             */
    +275            public void registerMarshaller(ICalComponentMarshaller<? extends ICalComponent> marshaller) {
    +276                    registrar.register(marshaller);
    +277            }
    +278    
    +279            /**
    +280             * Gets the object that manages the component/property marshaller objects.
    +281             * @return the marshaller registrar
    +282             */
    +283            public ICalMarshallerRegistrar getRegistrar() {
    +284                    return registrar;
    +285            }
    +286    
    +287            /**
    +288             * Sets the object that manages the component/property marshaller objects.
    +289             * @param registrar the marshaller registrar
    +290             */
    +291            public void setRegistrar(ICalMarshallerRegistrar registrar) {
    +292                    this.registrar = registrar;
    +293            }
    +294    
    +295            /**
    +296             * Registers the data type of an experimental parameter. Experimental
    +297             * parameters use the "unknown" xCal data type by default.
    +298             * @param parameterName the parameter name (e.g. "x-foo")
    +299             * @param dataType the data type or null to remove
    +300             */
    +301            public void registerParameterDataType(String parameterName, ICalDataType dataType) {
    +302                    parameterName = parameterName.toLowerCase();
    +303                    if (dataType == null) {
    +304                            parameterDataTypes.remove(parameterName);
    +305                    } else {
    +306                            parameterDataTypes.put(parameterName, dataType);
    +307                    }
    +308            }
    +309    
    +310            /**
    +311             * Gets the raw XML DOM object.
    +312             * @return the XML DOM
    +313             */
    +314            public Document getDocument() {
    +315                    return document;
    +316            }
    +317    
    +318            /**
    +319             * Gets the warnings from the last parse operation.
    +320             * @return the warnings (it is a "list of lists"--each parsed
    +321             * {@link ICalendar} object has its own warnings list)
    +322             * @see #parseAll
    +323             * @see #parseFirst
    +324             */
    +325            public List<List<String>> getParseWarnings() {
    +326                    return parseWarnings;
    +327            }
    +328    
    +329            /**
    +330             * Parses all the {@link ICalendar} objects from the xCal document.
    +331             * @return the iCalendar objects
    +332             */
    +333            public List<ICalendar> parseAll() {
    +334                    parseWarnings.clear();
    +335    
    +336                    if (root == null) {
    +337                            return Collections.emptyList();
    +338                    }
    +339    
    +340                    List<ICalendar> icals = new ArrayList<ICalendar>();
    +341                    for (Element vcalendarElement : getVCalendarElements()) {
    +342                            List<String> warnings = new ArrayList<String>();
    +343                            ICalendar ical = parseICal(vcalendarElement, warnings);
    +344                            icals.add(ical);
    +345                            this.parseWarnings.add(warnings);
    +346                    }
    +347    
    +348                    return icals;
    +349            }
    +350    
    +351            /**
    +352             * Parses the first {@link ICalendar} object from the xCal document.
    +353             * @return the iCalendar object or null if there are none
    +354             */
    +355            public ICalendar parseFirst() {
    +356                    parseWarnings.clear();
    +357    
    +358                    if (root == null) {
    +359                            return null;
    +360                    }
    +361    
    +362                    List<String> warnings = new ArrayList<String>();
    +363                    parseWarnings.add(warnings);
    +364    
    +365                    List<Element> vcalendarElements = getVCalendarElements();
    +366                    if (vcalendarElements.isEmpty()) {
    +367                            return null;
    +368                    }
    +369                    return parseICal(vcalendarElements.get(0), warnings);
    +370            }
    +371    
    +372            /**
    +373             * Adds an iCalendar object to the xCal document. This marshals the
    +374             * {@link ICalendar} object to the XML DOM. This means that any changes that
    +375             * are made to the {@link ICalendar} object after calling this method will
    +376             * NOT be applied to the xCal document.
    +377             * @param ical the iCalendar object to add
    +378             * @throws IllegalArgumentException if the marshaller class for a component
    +379             * or property object cannot be found (only happens when an experimental
    +380             * property/component marshaller is not registered with the
    +381             * {@code registerMarshaller} method.)
    +382             */
    +383            public void add(ICalendar ical) {
    +384                    Element element = buildComponentElement(ical);
    +385                    if (root == null) {
    +386                            root = document.createElementNS(XCAL_NS, "icalendar");
    +387                            document.appendChild(root);
    +388                    }
    +389                    root.appendChild(element);
    +390            }
    +391    
    +392            /**
    +393             * Writes the xCal document to a string without pretty-printing it.
    +394             * @return the XML string
    +395             */
    +396            public String write() {
    +397                    return write(-1);
    +398            }
    +399    
    +400            /**
    +401             * Writes the xCal document to a string and pretty-prints it.
    +402             * @param indent the number of indent spaces to use for pretty-printing
    +403             * @return the XML string
    +404             */
    +405            public String write(int indent) {
    +406                    StringWriter sw = new StringWriter();
    +407                    try {
    +408                            write(sw, indent);
    +409                    } catch (TransformerException e) {
    +410                            //writing to string
    +411                    }
    +412                    return sw.toString();
    +413            }
    +414    
    +415            /**
    +416             * Writes the xCal document to an output stream without pretty-printing it.
    +417             * @param out the output stream
    +418             * @throws TransformerException if there's a problem writing to the output
    +419             * stream
    +420             */
    +421            public void write(OutputStream out) throws TransformerException {
    +422                    write(out, -1);
    +423            }
    +424    
    +425            /**
    +426             * Writes the xCal document to an output stream and pretty-prints it.
    +427             * @param out the output stream
    +428             * @param indent the number of indent spaces to use for pretty-printing
    +429             * @throws TransformerException if there's a problem writing to the output
    +430             * stream
    +431             */
    +432            public void write(OutputStream out, int indent) throws TransformerException {
    +433                    write(utf8Writer(out), indent);
    +434            }
    +435    
    +436            /**
    +437             * Writes the xCal document to a file without pretty-printing it.
    +438             * @param file the file
    +439             * @throws IOException if there's a problem writing to the file
    +440             * @throws TransformerException if there's a problem writing the XML
    +441             */
    +442            public void write(File file) throws TransformerException, IOException {
    +443                    write(file, -1);
    +444            }
    +445    
    +446            /**
    +447             * Writes the xCal document to a file and pretty-prints it.
    +448             * @param file the file stream
    +449             * @param indent the number of indent spaces to use for pretty-printing
    +450             * @throws IOException if there's a problem writing to the file
    +451             * @throws TransformerException if there's a problem writing the XML
    +452             */
    +453            public void write(File file, int indent) throws TransformerException, IOException {
    +454                    Writer writer = utf8Writer(file);
    +455                    try {
    +456                            write(writer, indent);
    +457                    } finally {
    +458                            IOUtils.closeQuietly(writer);
    +459                    }
    +460            }
    +461    
    +462            /**
    +463             * Writes the xCal document to a writer without pretty-printing it.
    +464             * @param writer the writer
    +465             * @throws TransformerException if there's a problem writing to the writer
    +466             */
    +467            public void write(Writer writer) throws TransformerException {
    +468                    write(writer, -1);
    +469            }
    +470    
    +471            /**
    +472             * Writes the xCal document to a writer and pretty-prints it.
    +473             * @param writer the writer
    +474             * @param indent the number of indent spaces to use for pretty-printing
    +475             * @throws TransformerException if there's a problem writing to the writer
    +476             */
    +477            public void write(Writer writer, int indent) throws TransformerException {
    +478                    Map<String, String> properties = new HashMap<String, String>();
    +479                    if (indent >= 0) {
    +480                            properties.put(OutputKeys.INDENT, "yes");
    +481                            properties.put("{http://xml.apache.org/xslt}indent-amount", indent + "");
    +482                    }
    +483                    XmlUtils.toWriter(document, writer, properties);
    +484            }
    +485    
    +486            @SuppressWarnings({ "rawtypes", "unchecked" })
    +487            private Element buildComponentElement(ICalComponent component) {
    +488                    ICalComponentMarshaller m = registrar.getComponentMarshaller(component);
    +489                    if (m == null) {
    +490                            throw new IllegalArgumentException("No marshaller found for component class \"" + component.getClass().getName() + "\".");
    +491                    }
    +492    
    +493                    Element componentElement = buildElement(m.getComponentName().toLowerCase());
    +494    
    +495                    Element propertiesWrapperElement = buildElement("properties");
    +496                    for (Object obj : m.getProperties(component)) {
    +497                            ICalProperty property = (ICalProperty) obj;
    +498    
    +499                            //create property element
    +500                            Element propertyElement = buildPropertyElement(property);
    +501                            if (propertyElement != null) {
    +502                                    propertiesWrapperElement.appendChild(propertyElement);
    +503                            }
    +504                    }
    +505                    if (propertiesWrapperElement.hasChildNodes()) {
    +506                            componentElement.appendChild(propertiesWrapperElement);
    +507                    }
    +508    
    +509                    Element componentsWrapperElement = buildElement("components");
    +510                    for (Object obj : m.getComponents(component)) {
    +511                            ICalComponent subComponent = (ICalComponent) obj;
    +512                            Element subComponentElement = buildComponentElement(subComponent);
    +513                            if (subComponentElement != null) {
    +514                                    componentsWrapperElement.appendChild(subComponentElement);
    +515                            }
    +516                    }
    +517                    if (componentsWrapperElement.hasChildNodes()) {
    +518                            componentElement.appendChild(componentsWrapperElement);
    +519                    }
    +520    
    +521                    return componentElement;
    +522            }
    +523    
    +524            @SuppressWarnings({ "rawtypes", "unchecked" })
    +525            private Element buildPropertyElement(ICalProperty property) {
    +526                    Element propertyElement;
    +527                    ICalParameters parameters;
    +528    
    +529                    if (property instanceof Xml) {
    +530                            Xml xml = (Xml) property;
    +531    
    +532                            Document value = xml.getValue();
    +533                            if (value == null) {
    +534                                    return null;
    +535                            }
    +536    
    +537                            //import the XML element into the xCal DOM
    +538                            propertyElement = XmlUtils.getRootElement(value);
    +539                            propertyElement = (Element) document.importNode(propertyElement, true);
    +540    
    +541                            //get parameters
    +542                            parameters = property.getParameters();
    +543                    } else {
    +544                            ICalPropertyMarshaller pm = registrar.getPropertyMarshaller(property);
    +545                            if (pm == null) {
    +546                                    throw new IllegalArgumentException("No marshaller found for property class \"" + property.getClass().getName() + "\".");
    +547                            }
    +548    
    +549                            propertyElement = buildElement(pm.getQName());
    +550    
    +551                            //marshal value
    +552                            try {
    +553                                    pm.writeXml(property, propertyElement);
    +554                            } catch (SkipMeException e) {
    +555                                    return null;
    +556                            }
    +557    
    +558                            //get parameters
    +559                            parameters = pm.prepareParameters(property);
    +560                    }
    +561    
    +562                    //build parameters
    +563                    Element parametersWrapperElement = buildParametersElement(parameters);
    +564                    if (parametersWrapperElement.hasChildNodes()) {
    +565                            propertyElement.insertBefore(parametersWrapperElement, propertyElement.getFirstChild());
    +566                    }
    +567    
    +568                    return propertyElement;
    +569            }
    +570    
    +571            private Element buildParametersElement(ICalParameters parameters) {
    +572                    Element parametersWrapperElement = buildElement("parameters");
    +573    
    +574                    for (Map.Entry<String, List<String>> parameter : parameters) {
    +575                            String name = parameter.getKey().toLowerCase();
    +576                            ICalDataType dataType = parameterDataTypes.get(name);
    +577                            String dataTypeStr = (dataType == null) ? "unknown" : dataType.getName().toLowerCase();
    +578    
    +579                            Element parameterElement = buildAndAppendElement(name, parametersWrapperElement);
    +580                            for (String parameterValue : parameter.getValue()) {
    +581                                    Element parameterValueElement = buildAndAppendElement(dataTypeStr, parameterElement);
    +582                                    parameterValueElement.setTextContent(parameterValue);
    +583                            }
    +584                    }
    +585    
    +586                    return parametersWrapperElement;
    +587            }
    +588    
    +589            private ICalendar parseICal(Element icalElement, List<String> warnings) {
    +590                    ICalComponent root = parseComponent(icalElement, warnings);
    +591    
    +592                    ICalendar ical;
    +593                    if (root instanceof ICalendar) {
    +594                            ical = (ICalendar) root;
    +595                    } else {
    +596                            //shouldn't happen, since only <vcalendar> elements are passed into this method
    +597                            ical = icalMarshaller.emptyInstance();
    +598                            ical.addComponent(root);
    +599                    }
    +600                    return ical;
    +601            }
    +602    
    +603            private ICalComponent parseComponent(Element componentElement, List<String> warnings) {
    +604                    //create the component object
    +605                    ICalComponentMarshaller<? extends ICalComponent> m = registrar.getComponentMarshaller(componentElement.getLocalName());
    +606                    ICalComponent component = m.emptyInstance();
    +607    
    +608                    //parse properties
    +609                    for (Element propertyWrapperElement : getChildElements(componentElement, "properties")) { //there should be only one <properties> element, but parse them all incase there are more
    +610                            for (Element propertyElement : XmlUtils.toElementList(propertyWrapperElement.getChildNodes())) {
    +611                                    ICalProperty property = parseProperty(propertyElement, warnings);
    +612                                    if (property != null) {
    +613                                            component.addProperty(property);
    +614                                    }
    +615                            }
    +616                    }
    +617    
    +618                    //parse sub-components
    +619                    for (Element componentWrapperElement : getChildElements(componentElement, "components")) { //there should be only one <components> element, but parse them all incase there are more
    +620                            for (Element subComponentElement : XmlUtils.toElementList(componentWrapperElement.getChildNodes())) {
    +621                                    if (!XCAL_NS.equals(subComponentElement.getNamespaceURI())) {
    +622                                            continue;
    +623                                    }
    +624    
    +625                                    ICalComponent subComponent = parseComponent(subComponentElement, warnings);
    +626                                    component.addComponent(subComponent);
    +627                            }
    +628                    }
    +629    
    +630                    return component;
    +631            }
    +632    
    +633            private ICalProperty parseProperty(Element propertyElement, List<String> warnings) {
    +634                    ICalParameters parameters = parseParameters(propertyElement);
    +635                    String propertyName = propertyElement.getLocalName();
    +636                    QName qname = new QName(propertyElement.getNamespaceURI(), propertyName);
    +637    
    +638                    ICalPropertyMarshaller<? extends ICalProperty> m = registrar.getPropertyMarshaller(qname);
    +639    
    +640                    ICalProperty property = null;
    +641                    try {
    +642                            Result<? extends ICalProperty> result = m.parseXml(propertyElement, parameters);
    +643    
    +644                            for (String warning : result.getWarnings()) {
    +645                                    addWarning(warning, propertyName, warnings);
    +646                            }
    +647    
    +648                            property = result.getProperty();
    +649                    } catch (SkipMeException e) {
    +650                            if (e.getMessage() == null) {
    +651                                    addWarning("Property has requested that it be skipped.", propertyName, warnings);
    +652                            } else {
    +653                                    addWarning("Property has requested that it be skipped: " + e.getMessage(), propertyName, warnings);
    +654                            }
    +655                            return null;
    +656                    } catch (CannotParseException e) {
    +657                            if (e.getMessage() == null) {
    +658                                    addWarning("Property could not be unmarshalled.  Unmarshalling as an " + Xml.class.getSimpleName() + " property instead.", propertyName, warnings);
    +659                            } else {
    +660                                    addWarning("Property could not be unmarshalled.  Unmarshalling as an " + Xml.class.getSimpleName() + " property instead: " + e.getMessage(), propertyName, warnings);
    +661                            }
    +662                    }
    +663    
    +664                    //unmarshal as an XML property
    +665                    if (property == null) {
    +666                            m = registrar.getPropertyMarshaller(Xml.class);
    +667    
    +668                            Result<? extends ICalProperty> result = m.parseXml(propertyElement, parameters);
    +669    
    +670                            for (String warning : result.getWarnings()) {
    +671                                    addWarning(warning, propertyName, warnings);
    +672                            }
    +673    
    +674                            property = result.getProperty();
    +675                    }
    +676    
    +677                    return property;
    +678            }
    +679    
    +680            private ICalParameters parseParameters(Element propertyElement) {
    +681                    ICalParameters parameters = new ICalParameters();
    +682    
    +683                    for (Element parametersElement : getChildElements(propertyElement, "parameters")) { //there should be only one <parameters> element, but parse them all incase there are more
    +684                            List<Element> paramElements = XmlUtils.toElementList(parametersElement.getChildNodes());
    +685                            for (Element paramElement : paramElements) {
    +686                                    String name = paramElement.getLocalName().toUpperCase();
    +687                                    List<Element> valueElements = XmlUtils.toElementList(paramElement.getChildNodes());
    +688                                    if (valueElements.isEmpty()) { //this should never be true if the xCal follows the specs
    +689                                            String value = paramElement.getTextContent();
    +690                                            parameters.put(name, value);
    +691                                    } else {
    +692                                            for (Element valueElement : valueElements) {
    +693                                                    String value = valueElement.getTextContent();
    +694                                                    parameters.put(name, value);
    +695                                            }
    +696                                    }
    +697                            }
    +698                    }
    +699    
    +700                    return parameters;
    +701            }
    +702    
    +703            private Element buildElement(String localName) {
    +704                    return buildElement(new QName(XCAL_NS, localName));
    +705            }
    +706    
    +707            private Element buildElement(QName qname) {
    +708                    return document.createElementNS(qname.getNamespaceURI(), qname.getLocalPart());
    +709            }
    +710    
    +711            private Element buildAndAppendElement(String localName, Element parent) {
    +712                    return buildAndAppendElement(new QName(XCAL_NS, localName), parent);
    +713            }
    +714    
    +715            private Element buildAndAppendElement(QName qname, Element parent) {
    +716                    Element child = document.createElementNS(qname.getNamespaceURI(), qname.getLocalPart());
    +717                    parent.appendChild(child);
    +718                    return child;
    +719            }
    +720    
    +721            private List<Element> getVCalendarElements() {
    +722                    return getChildElements(root, "vcalendar");
    +723            }
    +724    
    +725            private List<Element> getChildElements(Element parent, String localName) {
    +726                    List<Element> elements = new ArrayList<Element>();
    +727                    for (Element child : XmlUtils.toElementList(parent.getChildNodes())) {
    +728                            if (localName.equals(child.getLocalName()) && XCAL_NS.equals(child.getNamespaceURI())) {
    +729                                    elements.add(child);
    +730                            }
    +731                    }
    +732                    return elements;
    +733            }
    +734    
    +735            private void addWarning(String message, String propertyName, List<String> warnings) {
    +736                    warnings.add("<" + propertyName + "> property: " + message);
    +737            }
    +738    
    +739            @Override
    +740            public String toString() {
    +741                    return write(2);
    +742            }
    +743    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/xml/XCalElement.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/xml/XCalElement.html new file mode 100644 index 000000000..24de24500 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/xml/XCalElement.html @@ -0,0 +1,289 @@ + + +
    +001    package biweekly.io.xml;
    +002    
    +003    import static biweekly.io.xml.XCalNamespaceContext.XCAL_NS;
    +004    
    +005    import java.util.ArrayList;
    +006    import java.util.Collection;
    +007    import java.util.List;
    +008    
    +009    import org.w3c.dom.Document;
    +010    import org.w3c.dom.Element;
    +011    
    +012    import biweekly.ICalDataType;
    +013    import biweekly.util.XmlUtils;
    +014    
    +015    /*
    +016     Copyright (c) 2013, Michael Angstadt
    +017     All rights reserved.
    +018    
    +019     Redistribution and use in source and binary forms, with or without
    +020     modification, are permitted provided that the following conditions are met: 
    +021    
    +022     1. Redistributions of source code must retain the above copyright notice, this
    +023     list of conditions and the following disclaimer. 
    +024     2. Redistributions in binary form must reproduce the above copyright notice,
    +025     this list of conditions and the following disclaimer in the documentation
    +026     and/or other materials provided with the distribution. 
    +027    
    +028     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +029     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +030     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +031     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +032     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +033     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +034     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +035     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +036     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +037     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +038     */
    +039    
    +040    /**
    +041     * Wraps xCal functionality around an XML {@link Element} object.
    +042     * @author Michael Angstadt
    +043     */
    +044    public class XCalElement {
    +045            private final Element element;
    +046            private final Document document;
    +047    
    +048            /**
    +049             * Creates a new xCal element.
    +050             * @param element the XML element to wrap
    +051             */
    +052            public XCalElement(Element element) {
    +053                    this.element = element;
    +054                    document = element.getOwnerDocument();
    +055            }
    +056    
    +057            /**
    +058             * Gets the first value of the given data type.
    +059             * @param dataType the data type to look for or null for the "unknown" data
    +060             * type
    +061             * @return the value or null if not found
    +062             */
    +063            public String first(ICalDataType dataType) {
    +064                    String dataTypeStr = toLocalName(dataType);
    +065                    return first(dataTypeStr);
    +066            }
    +067    
    +068            /**
    +069             * Gets the value of the first child element with the given name.
    +070             * @param localName the name of the element
    +071             * @return the element's text or null if not found
    +072             */
    +073            public String first(String localName) {
    +074                    for (Element child : children()) {
    +075                            if (localName.equals(child.getLocalName()) && XCAL_NS.equals(child.getNamespaceURI())) {
    +076                                    return child.getTextContent();
    +077                            }
    +078                    }
    +079                    return null;
    +080            }
    +081    
    +082            /**
    +083             * Gets all the values of a given data type.
    +084             * @param dataType the data type to look for or null for the "unknown" data
    +085             * type
    +086             * @return the values
    +087             */
    +088            public List<String> all(ICalDataType dataType) {
    +089                    String dataTypeStr = toLocalName(dataType);
    +090                    return all(dataTypeStr);
    +091            }
    +092    
    +093            /**
    +094             * Gets the values of all child elements that have the given name.
    +095             * @param localName the element name
    +096             * @return the values of the child elements
    +097             */
    +098            public List<String> all(String localName) {
    +099                    List<String> childrenText = new ArrayList<String>();
    +100                    for (Element child : children()) {
    +101                            if (localName.equals(child.getLocalName()) && XCAL_NS.equals(child.getNamespaceURI())) {
    +102                                    String text = child.getTextContent();
    +103                                    childrenText.add(text);
    +104                            }
    +105                    }
    +106                    return childrenText;
    +107            }
    +108    
    +109            /**
    +110             * Adds a value.
    +111             * @param dataType the data type or null for the "unknown" data type
    +112             * @param value the value
    +113             * @return the created element
    +114             */
    +115            public Element append(ICalDataType dataType, String value) {
    +116                    String dataTypeStr = toLocalName(dataType);
    +117                    return append(dataTypeStr, value);
    +118            }
    +119    
    +120            /**
    +121             * Adds a child element.
    +122             * @param name the name of the child element
    +123             * @param value the value of the child element.
    +124             * @return the created element
    +125             */
    +126            public Element append(String name, String value) {
    +127                    Element child = document.createElementNS(XCAL_NS, name);
    +128                    child.setTextContent(value);
    +129                    element.appendChild(child);
    +130                    return child;
    +131            }
    +132    
    +133            /**
    +134             * Adds a child element.
    +135             * @param name the name of the child element
    +136             * @return the created element
    +137             */
    +138            public XCalElement append(String name) {
    +139                    return new XCalElement(append(name, (String) null));
    +140            }
    +141    
    +142            /**
    +143             * Adds an empty value.
    +144             * @param dataType the data type
    +145             * @return the created element
    +146             */
    +147            public XCalElement append(ICalDataType dataType) {
    +148                    return append(dataType.getName().toLowerCase());
    +149            }
    +150    
    +151            /**
    +152             * Adds multiple child elements, each with the same name.
    +153             * @param name the name for all the child elements
    +154             * @param values the values of each child element
    +155             * @return the created elements
    +156             */
    +157            public List<Element> append(String name, Collection<String> values) {
    +158                    List<Element> elements = new ArrayList<Element>(values.size());
    +159                    for (String value : values) {
    +160                            elements.add(append(name, value));
    +161                    }
    +162                    return elements;
    +163            }
    +164    
    +165            /**
    +166             * Gets the owner document.
    +167             * @return the owner document
    +168             */
    +169            public Document document() {
    +170                    return document;
    +171            }
    +172    
    +173            /**
    +174             * Gets the wrapped XML element.
    +175             * @return the wrapped XML element
    +176             */
    +177            public Element getElement() {
    +178                    return element;
    +179            }
    +180    
    +181            /**
    +182             * Gets the child elements of the wrapped XML element.
    +183             * @return the child elements
    +184             */
    +185            private List<Element> children() {
    +186                    return XmlUtils.toElementList(element.getChildNodes());
    +187            }
    +188    
    +189            /**
    +190             * Gets all child elements with the given data type.
    +191             * @param dataType the data type
    +192             * @return the child elements
    +193             */
    +194            public List<XCalElement> children(ICalDataType dataType) {
    +195                    String localName = dataType.getName().toLowerCase();
    +196                    List<XCalElement> children = new ArrayList<XCalElement>();
    +197                    for (Element child : children()) {
    +198                            if (localName.equals(child.getLocalName()) && XCAL_NS.equals(child.getNamespaceURI())) {
    +199                                    children.add(new XCalElement(child));
    +200                            }
    +201                    }
    +202                    return children;
    +203            }
    +204    
    +205            /**
    +206             * Gets the first child element with the given data type.
    +207             * @param dataType the data type
    +208             * @return the child element or null if not found
    +209             */
    +210            public XCalElement child(ICalDataType dataType) {
    +211                    String localName = dataType.getName().toLowerCase();
    +212                    for (Element child : children()) {
    +213                            if (localName.equals(child.getLocalName()) && XCAL_NS.equals(child.getNamespaceURI())) {
    +214                                    return new XCalElement(child);
    +215                            }
    +216                    }
    +217                    return null;
    +218            }
    +219    
    +220            private String toLocalName(ICalDataType dataType) {
    +221                    return (dataType == null) ? "unknown" : dataType.getName().toLowerCase();
    +222            }
    +223    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/xml/XCalNamespaceContext.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/xml/XCalNamespaceContext.html new file mode 100644 index 000000000..be6413fb6 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/io/xml/XCalNamespaceContext.html @@ -0,0 +1,152 @@ + + +
    +001    package biweekly.io.xml;
    +002    
    +003    import java.util.Arrays;
    +004    import java.util.Iterator;
    +005    
    +006    import javax.xml.namespace.NamespaceContext;
    +007    import javax.xml.xpath.XPath;
    +008    
    +009    /*
    +010     Copyright (c) 2013, Michael Angstadt
    +011     All rights reserved.
    +012    
    +013     Redistribution and use in source and binary forms, with or without
    +014     modification, are permitted provided that the following conditions are met: 
    +015    
    +016     1. Redistributions of source code must retain the above copyright notice, this
    +017     list of conditions and the following disclaimer. 
    +018     2. Redistributions in binary form must reproduce the above copyright notice,
    +019     this list of conditions and the following disclaimer in the documentation
    +020     and/or other materials provided with the distribution. 
    +021    
    +022     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +023     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +024     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +025     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +026     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +027     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +028     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +029     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +030     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +031     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +032     */
    +033    
    +034    /**
    +035     * Used for xCal xpath expressions.
    +036     * @see XPath#setNamespaceContext(NamespaceContext)
    +037     * @author Michael Angstadt
    +038     */
    +039    public class XCalNamespaceContext implements NamespaceContext {
    +040            /**
    +041             * The XML namespace for xCal documents.
    +042             */
    +043            public static final String XCAL_NS = "urn:ietf:params:xml:ns:icalendar-2.0";
    +044    
    +045            private final String prefix;
    +046    
    +047            /**
    +048             * Creates a new namespace context.
    +049             * @param prefix the prefix to use in xpath expressions
    +050             */
    +051            public XCalNamespaceContext(String prefix) {
    +052                    this.prefix = prefix;
    +053            }
    +054    
    +055            /**
    +056             * Gets the prefix to use in xpath expressions.
    +057             * @return the xpath prefix
    +058             */
    +059            public String getPrefix() {
    +060                    return prefix;
    +061            }
    +062    
    +063            //@Override
    +064            public String getNamespaceURI(String prefix) {
    +065                    if (this.prefix.equals(prefix)) {
    +066                            return XCAL_NS;
    +067                    }
    +068                    return null;
    +069            }
    +070    
    +071            //@Override
    +072            public String getPrefix(String ns) {
    +073                    if (XCAL_NS.equals(ns)) {
    +074                            return prefix;
    +075                    }
    +076                    return null;
    +077            }
    +078    
    +079            //@Override
    +080            public Iterator<String> getPrefixes(String ns) {
    +081                    if (XCAL_NS.equals(ns)) {
    +082                            return Arrays.asList(prefix).iterator();
    +083                    }
    +084                    return null;
    +085            }
    +086    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/CalendarUserType.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/CalendarUserType.html new file mode 100644 index 000000000..982305ef9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/CalendarUserType.html @@ -0,0 +1,143 @@ + + +
    +001    package biweekly.parameter;
    +002    
    +003    import java.util.Collection;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Defines the type of user an entity is.
    +032     * @author Michael Angstadt
    +033     * @rfc 5545 p.16
    +034     */
    +035    public class CalendarUserType extends EnumParameterValue {
    +036            private static final ICalParameterCaseClasses<CalendarUserType> enums = new ICalParameterCaseClasses<CalendarUserType>(CalendarUserType.class);
    +037    
    +038            public static final CalendarUserType INDIVIDUAL = new CalendarUserType("INDIVIDUAL");
    +039            public static final CalendarUserType GROUP = new CalendarUserType("GROUP");
    +040            public static final CalendarUserType RESOURCE = new CalendarUserType("RESOURCE");
    +041            public static final CalendarUserType ROOM = new CalendarUserType("ROOM");
    +042            public static final CalendarUserType UNKNOWN = new CalendarUserType("UNKNOWN");
    +043    
    +044            private CalendarUserType(String value) {
    +045                    super(value);
    +046            }
    +047    
    +048            /**
    +049             * Searches for a parameter value that is defined as a static constant in
    +050             * this class.
    +051             * @param value the parameter value
    +052             * @return the object or null if not found
    +053             */
    +054            public static CalendarUserType find(String value) {
    +055                    return enums.find(value);
    +056            }
    +057    
    +058            /**
    +059             * Searches for a parameter value and creates one if it cannot be found. All
    +060             * objects are guaranteed to be unique, so they can be compared with
    +061             * {@code ==} equality.
    +062             * @param value the parameter value
    +063             * @return the object
    +064             */
    +065            public static CalendarUserType get(String value) {
    +066                    return enums.get(value);
    +067            }
    +068    
    +069            /**
    +070             * Gets all of the parameter values that are defined as static constants in
    +071             * this class.
    +072             * @return the parameter values
    +073             */
    +074            public static Collection<CalendarUserType> all() {
    +075                    return enums.all();
    +076            }
    +077    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Encoding.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Encoding.html new file mode 100644 index 000000000..9078957d5 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Encoding.html @@ -0,0 +1,141 @@ + + +
    +001    package biweekly.parameter;
    +002    
    +003    import java.util.Collection;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Defines how a property value is encoded.
    +032     * @author Michael Angstadt
    +033     * @rfc 5545 p.18-9
    +034     */
    +035    public class Encoding extends EnumParameterValue {
    +036            private static final ICalParameterCaseClasses<Encoding> enums = new ICalParameterCaseClasses<Encoding>(Encoding.class);
    +037    
    +038            public static final Encoding BASE64 = new Encoding("BASE64");
    +039    
    +040            public static final Encoding _8BIT = new Encoding("8BIT");
    +041    
    +042            private Encoding(String value) {
    +043                    super(value);
    +044            }
    +045    
    +046            /**
    +047             * Searches for a parameter value that is defined as a static constant in
    +048             * this class.
    +049             * @param value the parameter value
    +050             * @return the object or null if not found
    +051             */
    +052            public static Encoding find(String value) {
    +053                    return enums.find(value);
    +054            }
    +055    
    +056            /**
    +057             * Searches for a parameter value and creates one if it cannot be found. All
    +058             * objects are guaranteed to be unique, so they can be compared with
    +059             * {@code ==} equality.
    +060             * @param value the parameter value
    +061             * @return the object
    +062             */
    +063            public static Encoding get(String value) {
    +064                    return enums.get(value);
    +065            }
    +066    
    +067            /**
    +068             * Gets all of the parameter values that are defined as static constants in
    +069             * this class.
    +070             * @return the parameter values
    +071             */
    +072            public static Collection<Encoding> all() {
    +073                    return enums.all();
    +074            }
    +075    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/EnumParameterValue.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/EnumParameterValue.html new file mode 100644 index 000000000..ff6943534 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/EnumParameterValue.html @@ -0,0 +1,124 @@ + + +
    +001    package biweekly.parameter;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * Represents a value from a parameter that has a list of pre-defined values
    +030     * (for example, the VALUE or ACTION parameters).
    +031     * @author Michael Angstadt
    +032     */
    +033    public class EnumParameterValue {
    +034            /**
    +035             * The value (for example, "text").
    +036             */
    +037            protected final String value;
    +038    
    +039            /**
    +040             * @param value the value (e.g. "text")
    +041             */
    +042            protected EnumParameterValue(String value) {
    +043                    this.value = value;
    +044            }
    +045    
    +046            /**
    +047             * Gets the value of the parameter.
    +048             * @return the value of the parameter (e.g. "text")
    +049             */
    +050            public String getValue() {
    +051                    return value;
    +052            }
    +053    
    +054            @Override
    +055            public String toString() {
    +056                    return value;
    +057            }
    +058    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/FreeBusyType.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/FreeBusyType.html new file mode 100644 index 000000000..27ec5f86b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/FreeBusyType.html @@ -0,0 +1,142 @@ + + +
    +001    package biweekly.parameter;
    +002    
    +003    import java.util.Collection;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Defines whether a calendar user is free or busy over a time period.
    +032     * @author Michael Angstadt
    +033     * @rfc 5545 p.20-1
    +034     */
    +035    public class FreeBusyType extends EnumParameterValue {
    +036            private static final ICalParameterCaseClasses<FreeBusyType> enums = new ICalParameterCaseClasses<FreeBusyType>(FreeBusyType.class);
    +037    
    +038            public static final FreeBusyType FREE = new FreeBusyType("FREE");
    +039            public static final FreeBusyType BUSY = new FreeBusyType("BUSY");
    +040            public static final FreeBusyType BUSY_UNAVAILABLE = new FreeBusyType("BUSY-UNAVAILABLE");
    +041            public static final FreeBusyType BUSY_TENTATIVE = new FreeBusyType("BUSY-TENTATIVE");
    +042    
    +043            private FreeBusyType(String value) {
    +044                    super(value);
    +045            }
    +046    
    +047            /**
    +048             * Searches for a parameter value that is defined as a static constant in
    +049             * this class.
    +050             * @param value the parameter value
    +051             * @return the object or null if not found
    +052             */
    +053            public static FreeBusyType find(String value) {
    +054                    return enums.find(value);
    +055            }
    +056    
    +057            /**
    +058             * Searches for a parameter value and creates one if it cannot be found. All
    +059             * objects are guaranteed to be unique, so they can be compared with
    +060             * {@code ==} equality.
    +061             * @param value the parameter value
    +062             * @return the object
    +063             */
    +064            public static FreeBusyType get(String value) {
    +065                    return enums.get(value);
    +066            }
    +067    
    +068            /**
    +069             * Gets all of the parameter values that are defined as static constants in
    +070             * this class.
    +071             * @return the parameter values
    +072             */
    +073            public static Collection<FreeBusyType> all() {
    +074                    return enums.all();
    +075            }
    +076    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/ICalParameterCaseClasses.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/ICalParameterCaseClasses.html new file mode 100644 index 000000000..fe3ca839e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/ICalParameterCaseClasses.html @@ -0,0 +1,125 @@ + + +
    +001    package biweekly.parameter;
    +002    
    +003    import java.lang.reflect.Constructor;
    +004    
    +005    import biweekly.util.CaseClasses;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * Manages the list of pre-defined values for a parameter (such as VALUE or
    +034     * ENCODING).
    +035     * @author Michael Angstadt
    +036     * @param <T> the parameter class
    +037     */
    +038    public class ICalParameterCaseClasses<T extends EnumParameterValue> extends CaseClasses<T, String> {
    +039            public ICalParameterCaseClasses(Class<T> clazz) {
    +040                    super(clazz);
    +041            }
    +042    
    +043            @Override
    +044            protected T create(String value) {
    +045                    try {
    +046                            //reflection: return new ClassName(value);
    +047                            Constructor<T> constructor = clazz.getDeclaredConstructor(String.class);
    +048                            constructor.setAccessible(true);
    +049                            return constructor.newInstance(value);
    +050                    } catch (Exception e) {
    +051                            throw new RuntimeException(e);
    +052                    }
    +053            }
    +054    
    +055            @Override
    +056            protected boolean matches(T object, String value) {
    +057                    return object.value.equalsIgnoreCase(value);
    +058            }
    +059    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/ICalParameters.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/ICalParameters.html new file mode 100644 index 000000000..950c01231 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/ICalParameters.html @@ -0,0 +1,691 @@ + + +
    +001    package biweekly.parameter;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.List;
    +005    
    +006    import biweekly.ICalDataType;
    +007    import biweekly.component.VTimezone;
    +008    import biweekly.property.FreeBusy;
    +009    import biweekly.property.RecurrenceId;
    +010    import biweekly.property.RelatedTo;
    +011    import biweekly.property.TimezoneId;
    +012    import biweekly.property.Trigger;
    +013    import biweekly.util.ListMultimap;
    +014    
    +015    /*
    +016     Copyright (c) 2013, Michael Angstadt
    +017     All rights reserved.
    +018    
    +019     Redistribution and use in source and binary forms, with or without
    +020     modification, are permitted provided that the following conditions are met: 
    +021    
    +022     1. Redistributions of source code must retain the above copyright notice, this
    +023     list of conditions and the following disclaimer. 
    +024     2. Redistributions in binary form must reproduce the above copyright notice,
    +025     this list of conditions and the following disclaimer in the documentation
    +026     and/or other materials provided with the distribution. 
    +027    
    +028     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +029     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +030     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +031     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +032     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +033     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +034     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +035     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +036     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +037     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +038     */
    +039    
    +040    /**
    +041     * Contains the list of parameters that belong to a property.
    +042     * @author Michael Angstadt
    +043     */
    +044    public class ICalParameters extends ListMultimap<String, String> {
    +045            public static final String CN = "CN";
    +046            public static final String ALTREP = "ALTREP";
    +047            public static final String CUTYPE = "CUTYPE";
    +048            public static final String DELEGATED_FROM = "DELEGATED-FROM";
    +049            public static final String DELEGATED_TO = "DELEGATED-TO";
    +050            public static final String DIR = "DIR";
    +051            public static final String ENCODING = "ENCODING";
    +052            public static final String FMTTYPE = "FMTTYPE";
    +053            public static final String FBTYPE = "FBTYPE";
    +054            public static final String LANGUAGE = "LANGUAGE";
    +055            public static final String MEMBER = "MEMBER";
    +056            public static final String PARTSTAT = "PARTSTAT";
    +057            public static final String RANGE = "RANGE";
    +058            public static final String RELATED = "RELATED";
    +059            public static final String RELTYPE = "RELTYPE";
    +060            public static final String ROLE = "ROLE";
    +061            public static final String RSVP = "RSVP";
    +062            public static final String SENT_BY = "SENT-BY";
    +063            public static final String TZID = "TZID";
    +064            public static final String VALUE = "VALUE";
    +065    
    +066            /**
    +067             * Creates a parameters list.
    +068             */
    +069            public ICalParameters() {
    +070                    super(0); //initialize map size to 0 because most properties don't use any parameters
    +071            }
    +072    
    +073            /**
    +074             * Copies an existing parameters list.
    +075             * @param parameters the list to copy
    +076             */
    +077            public ICalParameters(ICalParameters parameters) {
    +078                    super(parameters);
    +079            }
    +080    
    +081            /**
    +082             * Gets a URI pointing to additional information about the entity
    +083             * represented by the property.
    +084             * @return the URI or null if not set
    +085             * @rfc 5545 p.14-5
    +086             */
    +087            public String getAltRepresentation() {
    +088                    return first(ALTREP);
    +089            }
    +090    
    +091            /**
    +092             * Sets a URI pointing to additional information about the entity
    +093             * represented by the property.
    +094             * @param uri the URI or null to remove
    +095             * @rfc 5545 p.14-5
    +096             */
    +097            public void setAltRepresentation(String uri) {
    +098                    replace(ALTREP, uri);
    +099            }
    +100    
    +101            /**
    +102             * Gets the display name of a person.
    +103             * @return the display name (e.g. "John Doe") or null if not set
    +104             * @rfc 5545 p.15-6
    +105             */
    +106            public String getCommonName() {
    +107                    return first(CN);
    +108            }
    +109    
    +110            /**
    +111             * Sets the display name of a person.
    +112             * @param cn the display name (e.g. "John Doe") or null to remove
    +113             * @rfc 5545 p.15-6
    +114             */
    +115            public void setCommonName(String cn) {
    +116                    replace(CN, cn);
    +117            }
    +118    
    +119            /**
    +120             * Gets the type of user an attendee is (for example, an "individual" or a
    +121             * "room").
    +122             * @return the calendar user type or null if not set
    +123             * @rfc 5545 p.16
    +124             */
    +125            public CalendarUserType getCalendarUserType() {
    +126                    String value = first(CUTYPE);
    +127                    return (value == null) ? null : CalendarUserType.get(value);
    +128            }
    +129    
    +130            /**
    +131             * Sets the type of user an attendee is (for example, an "individual" or a
    +132             * "room").
    +133             * @param cutype the calendar user type or null to remove
    +134             * @rfc 5545 p.16
    +135             */
    +136            public void setCalendarUserType(CalendarUserType cutype) {
    +137                    replace(CUTYPE, (cutype == null) ? null : cutype.getValue());
    +138            }
    +139    
    +140            /**
    +141             * Gets the people who have delegated their responsibility to an attendee.
    +142             * @return the delegators (typically email URIs, e.g.
    +143             * "mailto:janedoe@example.com")
    +144             * @rfc 5545 p.17
    +145             */
    +146            public List<String> getDelegatedFrom() {
    +147                    return get(DELEGATED_FROM);
    +148            }
    +149    
    +150            /**
    +151             * Adds a person who has delegated his or her responsibility to an attendee.
    +152             * @param uri the delegator (typically an email URI, e.g.
    +153             * "mailto:janedoe@example.com")
    +154             * @rfc 5545 p.17
    +155             */
    +156            public void addDelegatedFrom(String uri) {
    +157                    put(DELEGATED_FROM, uri);
    +158            }
    +159    
    +160            /**
    +161             * Removes a person who has delegated his or her responsibility to an
    +162             * attendee.
    +163             * @param uri the delegator to remove (typically an email URI, e.g.
    +164             * "mailto:janedoe@example.com")
    +165             * @rfc 5545 p.17
    +166             */
    +167            public void removeDelegatedFrom(String uri) {
    +168                    remove(DELEGATED_FROM, uri);
    +169            }
    +170    
    +171            /**
    +172             * Removes everyone who has delegated his or her responsibility to an
    +173             * attendee.
    +174             * @rfc 5545 p.17
    +175             */
    +176            public void removeDelegatedFrom() {
    +177                    removeAll(DELEGATED_FROM);
    +178            }
    +179    
    +180            /**
    +181             * Gets the people to which an attendee has delegated his or her
    +182             * responsibility.
    +183             * @return the delegatees (typically email URIs, e.g.
    +184             * "mailto:janedoe@example.com")
    +185             * @rfc 5545 p.17-8
    +186             */
    +187            public List<String> getDelegatedTo() {
    +188                    return get(DELEGATED_TO);
    +189            }
    +190    
    +191            /**
    +192             * Adds a person to which an attendee has delegated his or her
    +193             * responsibility.
    +194             * @param uri the delegatee (typically an email URI, e.g.
    +195             * "mailto:janedoe@example.com")
    +196             * @rfc 5545 p.17-8
    +197             */
    +198            public void addDelegatedTo(String uri) {
    +199                    put(DELEGATED_TO, uri);
    +200            }
    +201    
    +202            /**
    +203             * Removes a person to which an attendee has delegated his or her
    +204             * responsibility.
    +205             * @param uri the delegatee to remove (typically an email URI, e.g.
    +206             * "mailto:janedoe@example.com")
    +207             * @rfc 5545 p.17-8
    +208             */
    +209            public void removeDelegatedTo(String uri) {
    +210                    remove(DELEGATED_TO, uri);
    +211            }
    +212    
    +213            /**
    +214             * Removes everyone to which an attendee has delegated his or her
    +215             * responsibility.
    +216             * @rfc 5545 p.17-8
    +217             */
    +218            public void removeDelegatedTo() {
    +219                    removeAll(DELEGATED_TO);
    +220            }
    +221    
    +222            /**
    +223             * Gets a URI that contains additional information about the person.
    +224             * @return the URI (e.g. an LDAP URI) or null if not set
    +225             * @rfc 5545 p.18
    +226             */
    +227            public String getDirectoryEntry() {
    +228                    return first(DIR);
    +229            }
    +230    
    +231            /**
    +232             * Sets a URI that contains additional information about the person.
    +233             * @param uri the URI (e.g. an LDAP URI) or null to remove
    +234             * @rfc 5545 p.18
    +235             */
    +236            public void setDirectoryEntry(String uri) {
    +237                    replace(DIR, uri);
    +238            }
    +239    
    +240            /**
    +241             * Gets the encoding of the property value (for example, "base64").
    +242             * @return the encoding or null if not set
    +243             * @rfc 5545 p.18-9
    +244             */
    +245            public Encoding getEncoding() {
    +246                    String value = first(ENCODING);
    +247                    return (value == null) ? null : Encoding.get(value);
    +248            }
    +249    
    +250            /**
    +251             * Sets the encoding of the property value (for example, "base64").
    +252             * @param encoding the encoding or null to remove
    +253             * @rfc 5545 p.18-9
    +254             */
    +255            public void setEncoding(Encoding encoding) {
    +256                    replace(ENCODING, (encoding == null) ? null : encoding.getValue());
    +257            }
    +258    
    +259            /**
    +260             * Gets the content-type of the property's value.
    +261             * @return the content type (e.g. "image/png") or null if not set
    +262             * @rfc 5545 p.19-20
    +263             */
    +264            public String getFormatType() {
    +265                    return first(FMTTYPE);
    +266            }
    +267    
    +268            /**
    +269             * Sets the content-type of the property's value.
    +270             * @param formatType the content type (e.g. "image/png") or null to remove
    +271             * @rfc 5545 p.19-20
    +272             */
    +273            public void setFormatType(String formatType) {
    +274                    replace(FMTTYPE, formatType);
    +275            }
    +276    
    +277            /**
    +278             * Gets the person's status over the time periods that are specified in a
    +279             * {@link FreeBusy} property (for example, "free" or "busy"). If not set,
    +280             * the user should be considered "busy".
    +281             * @return the type or null if not set
    +282             * @rfc 5545 p.20
    +283             */
    +284            public FreeBusyType getFreeBusyType() {
    +285                    String value = first(FBTYPE);
    +286                    return (value == null) ? null : FreeBusyType.get(value);
    +287            }
    +288    
    +289            /**
    +290             * Sets the person's status over the time periods that are specified in a
    +291             * {@link FreeBusy} property (for example, "free" or "busy"). If not set,
    +292             * the user should be considered "busy".
    +293             * @param fbType the type or null to remove
    +294             * @rfc 5545 p.20
    +295             */
    +296            public void setFreeBusyType(FreeBusyType fbType) {
    +297                    replace(FBTYPE, (fbType == null) ? null : fbType.getValue());
    +298            }
    +299    
    +300            /**
    +301             * Gets the language that the property value is written in.
    +302             * @return the language (e.g. "en" for English) or null if not set
    +303             * @rfc 5545 p.21
    +304             */
    +305            public String getLanguage() {
    +306                    return first(LANGUAGE);
    +307            }
    +308    
    +309            /**
    +310             * Sets the language that the property value is written in.
    +311             * @param language the language (e.g. "en" for English) or null to remove
    +312             * @rfc 5545 p.21
    +313             */
    +314            public void setLanguage(String language) {
    +315                    replace(LANGUAGE, language);
    +316            }
    +317    
    +318            /**
    +319             * Adds a group that an attendee is a member of.
    +320             * @param uri the group URI (typically, an email address URI, e.g.
    +321             * "mailto:mailinglist@example.com")
    +322             * @rfc 5545 p.21-2
    +323             */
    +324            public void addMember(String uri) {
    +325                    put(MEMBER, uri);
    +326            }
    +327    
    +328            /**
    +329             * Gets the groups that an attendee is a member of.
    +330             * @return the group URIs (typically, these are email address URIs, e.g.
    +331             * "mailto:mailinglist@example.com")
    +332             * @rfc 5545 p.21-2
    +333             */
    +334            public List<String> getMembers() {
    +335                    return get(MEMBER);
    +336            }
    +337    
    +338            /**
    +339             * Removes a group that an attendee is a member of.
    +340             * @param uri the group URI to remove (typically, an email address URI, e.g.
    +341             * "mailto:mailinglist@example.com")
    +342             * @rfc 5545 p.21-2
    +343             */
    +344            public void removeMember(String uri) {
    +345                    remove(MEMBER, uri);
    +346            }
    +347    
    +348            /**
    +349             * Removes all groups that an attendee is a member of.
    +350             * @rfc 5545 p.21-2
    +351             */
    +352            public void removeMembers() {
    +353                    removeAll(MEMBER);
    +354            }
    +355    
    +356            /**
    +357             * Gets an attendee's level of participation.
    +358             * @return the participation status or null if not set
    +359             * @rfc 5545 p.22-3
    +360             */
    +361            public ParticipationStatus getParticipationStatus() {
    +362                    String value = first(PARTSTAT);
    +363                    return (value == null) ? null : ParticipationStatus.get(value);
    +364            }
    +365    
    +366            /**
    +367             * Sets an attendee's level of participation.
    +368             * @param status the participation status or null to remove
    +369             * @rfc 5545 p.22-3
    +370             */
    +371            public void setParticipationStatus(ParticipationStatus status) {
    +372                    replace(PARTSTAT, (status == null) ? null : status.getValue());
    +373            }
    +374    
    +375            /**
    +376             * Gets the effective range of recurrence instances from the instance
    +377             * specified by a {@link RecurrenceId} property.
    +378             * @return the range or null if not set
    +379             * @rfc 5545 p.23-4
    +380             */
    +381            public Range getRange() {
    +382                    String value = first(RANGE);
    +383                    return (value == null) ? null : Range.get(value);
    +384            }
    +385    
    +386            /**
    +387             * Sets the effective range of recurrence instances from the instance
    +388             * specified by a {@link RecurrenceId} property.
    +389             * @param range the range or null to remove
    +390             * @rfc 5545 p.23-4
    +391             */
    +392            public void setRange(Range range) {
    +393                    replace(RANGE, (range == null) ? null : range.getValue());
    +394            }
    +395    
    +396            /**
    +397             * Gets the date-time field that the duration in a {@link Trigger} property
    +398             * is relative to.
    +399             * @return the field or null if not set
    +400             * @rfc 5545 p.24
    +401             */
    +402            public Related getRelated() {
    +403                    String value = first(RELATED);
    +404                    return (value == null) ? null : Related.get(value);
    +405            }
    +406    
    +407            /**
    +408             * Sets the date-time field that the duration in a {@link Trigger} property
    +409             * is relative to.
    +410             * @param related the field or null to remove
    +411             * @rfc 5545 p.24
    +412             */
    +413            public void setRelated(Related related) {
    +414                    replace(RELATED, (related == null) ? null : related.getValue());
    +415            }
    +416    
    +417            /**
    +418             * Gets the relationship type of a {@link RelatedTo} property.
    +419             * @return the relationship type (e.g. "child") or null if not set
    +420             * @rfc 5545 p.25
    +421             */
    +422            public RelationshipType getRelationshipType() {
    +423                    String value = first(RELTYPE);
    +424                    return (value == null) ? null : RelationshipType.get(value);
    +425            }
    +426    
    +427            /**
    +428             * Sets the relationship type of a {@link RelatedTo} property.
    +429             * @param relationshipType the relationship type (e.g. "child") or null to
    +430             * remove
    +431             * @rfc 5545 p.25
    +432             */
    +433            public void setRelationshipType(RelationshipType relationshipType) {
    +434                    replace(RELTYPE, (relationshipType == null) ? null : relationshipType.getValue());
    +435            }
    +436    
    +437            /**
    +438             * Gets an attendee's role (for example, "chair" or "required participant").
    +439             * @return the role or null if not set
    +440             * @rfc 5545 p.25-6
    +441             */
    +442            public Role getRole() {
    +443                    String value = first(ROLE);
    +444                    return (value == null) ? null : Role.get(value);
    +445            }
    +446    
    +447            /**
    +448             * Sets an attendee's role (for example, "chair" or "required participant").
    +449             * @param role the role or null to remove
    +450             * @rfc 5545 p.25-6
    +451             */
    +452            public void setRole(Role role) {
    +453                    replace(ROLE, (role == null) ? null : role.getValue());
    +454            }
    +455    
    +456            /**
    +457             * Gets whether the organizer requests a response from an attendee.
    +458             * @throws IllegalStateException if the parameter value is malformed and
    +459             * cannot be parsed
    +460             * @return true if an RSVP is requested, false if not, null if not set
    +461             * @rfc 5545 p.26-7
    +462             */
    +463            public Boolean getRsvp() {
    +464                    String value = first(RSVP);
    +465    
    +466                    if (value == null) {
    +467                            return null;
    +468                    }
    +469                    if ("true".equalsIgnoreCase(value)) {
    +470                            return true;
    +471                    }
    +472                    if ("false".equalsIgnoreCase(value)) {
    +473                            return false;
    +474                    }
    +475                    throw new IllegalStateException(RSVP + " parameter value is malformed and could not be parsed. Retrieve its raw text value instead.");
    +476            }
    +477    
    +478            /**
    +479             * Sets whether the organizer requests a response from an attendee.
    +480             * @param rsvp true if an RSVP has been requested, false if not, null to
    +481             * remove
    +482             * @rfc 5545 p.26-7
    +483             */
    +484            public void setRsvp(Boolean rsvp) {
    +485                    replace(RSVP, (rsvp == null) ? null : rsvp.toString().toUpperCase());
    +486            }
    +487    
    +488            /**
    +489             * Gets a person that is acting on behalf of the person defined in the
    +490             * property.
    +491             * @return a URI representing the person (typically, an email URI, e.g.
    +492             * "mailto:janedoe@example.com") or null if not set
    +493             * @rfc 5545 p.27
    +494             */
    +495            public String getSentBy() {
    +496                    return first(SENT_BY);
    +497            }
    +498    
    +499            /**
    +500             * Sets a person that is acting on behalf of the person defined in the
    +501             * property.
    +502             * @param uri a URI representing the person (typically, an email URI, e.g.
    +503             * "mailto:janedoe@example.com") or null to remove
    +504             * @rfc 5545 p.27
    +505             */
    +506            public void setSentBy(String uri) {
    +507                    replace(SENT_BY, uri);
    +508            }
    +509    
    +510            /**
    +511             * Gets the timezone identifier. This either (a) references the
    +512             * {@link TimezoneId} property of a {@link VTimezone} component, or (b)
    +513             * specifies a globally-defined timezone (e.g. "America/New_York"). For a
    +514             * list of globally-defined timezones, see the <a
    +515             * href="http://www.twinsun.com/tz/tz-link.htm">TZ database</a>.
    +516             * @return the timezone identifier or null if not set
    +517             * @rfc 5545 p.27-8
    +518             */
    +519            public String getTimezoneId() {
    +520                    return first(TZID);
    +521            }
    +522    
    +523            /**
    +524             * Sets the timezone identifier. This either (a) references the
    +525             * {@link TimezoneId} property of a {@link VTimezone} component, or (b)
    +526             * specifies a globally-defined timezone (e.g. "America/New_York"). For a
    +527             * list of globally-defined timezones, see the <a
    +528             * href="http://www.twinsun.com/tz/tz-link.htm">TZ database</a>.
    +529             * @param timezoneId the timezone identifier or null to remove
    +530             * @rfc 5545 p.27-8
    +531             */
    +532            public void setTimezoneId(String timezoneId) {
    +533                    replace(TZID, timezoneId);
    +534            }
    +535    
    +536            /**
    +537             * Gets the data type of the property's value (for example, "text" or
    +538             * "datetime").
    +539             * @return the data type or null if not set
    +540             * @rfc 5545 p.29-50
    +541             */
    +542            public ICalDataType getValue() {
    +543                    String value = first(VALUE);
    +544                    return (value == null) ? null : ICalDataType.get(value);
    +545            }
    +546    
    +547            /**
    +548             * Sets the data type of the property's value (for example, "text" or
    +549             * "datetime").
    +550             * @param value the data type or null to remove
    +551             * @rfc 5545 p.29-50
    +552             */
    +553            public void setValue(ICalDataType value) {
    +554                    replace(VALUE, (value == null) ? null : value.getName());
    +555            }
    +556    
    +557            /**
    +558             * Checks this parameters list for data consistency problems or deviations
    +559             * from the spec. These problems will not prevent the iCalendar object from
    +560             * being written to a data stream, but may prevent it from being parsed
    +561             * correctly by the consuming application.
    +562             * @return a list of warnings or an empty list if no problems were found
    +563             */
    +564            public List<String> validate() {
    +565                    List<String> warnings = new ArrayList<String>(0);
    +566                    String message = "%s parameter has a non-standard value (\"%s\").  Standard values are: %s";
    +567    
    +568                    String value = first(RSVP);
    +569                    if (value != null && !value.equalsIgnoreCase("true") && !value.equalsIgnoreCase("false")) {
    +570                            warnings.add(String.format(message, RSVP, value, "[TRUE, FALSE]"));
    +571                    }
    +572    
    +573                    value = first(CUTYPE);
    +574                    if (value != null && CalendarUserType.find(value) == null) {
    +575                            warnings.add(String.format(message, CUTYPE, value, CalendarUserType.all()));
    +576                    }
    +577    
    +578                    value = first(ENCODING);
    +579                    if (value != null && Encoding.find(value) == null) {
    +580                            warnings.add(String.format(message, ENCODING, value, Encoding.all()));
    +581                    }
    +582    
    +583                    value = first(FBTYPE);
    +584                    if (value != null && FreeBusyType.find(value) == null) {
    +585                            warnings.add(String.format(message, FBTYPE, value, FreeBusyType.all()));
    +586                    }
    +587    
    +588                    value = first(PARTSTAT);
    +589                    if (value != null && ParticipationStatus.find(value) == null) {
    +590                            warnings.add(String.format(message, PARTSTAT, value, ParticipationStatus.all()));
    +591                    }
    +592    
    +593                    value = first(RANGE);
    +594                    if (value != null && Range.find(value) == null) {
    +595                            warnings.add(String.format(message, RANGE, value, Range.all()));
    +596                    }
    +597    
    +598                    value = first(RELATED);
    +599                    if (value != null && Related.find(value) == null) {
    +600                            warnings.add(String.format(message, RELATED, value, Related.all()));
    +601                    }
    +602    
    +603                    value = first(RELTYPE);
    +604                    if (value != null && RelationshipType.find(value) == null) {
    +605                            warnings.add(String.format(message, RELTYPE, value, RelationshipType.all()));
    +606                    }
    +607    
    +608                    value = first(ROLE);
    +609                    if (value != null && Role.find(value) == null) {
    +610                            warnings.add(String.format(message, ROLE, value, Role.all()));
    +611                    }
    +612    
    +613                    value = first(VALUE);
    +614                    if (value != null && ICalDataType.find(value) == null) {
    +615                            warnings.add(String.format(message, VALUE, value, ICalDataType.all()));
    +616                    }
    +617    
    +618                    return warnings;
    +619            }
    +620    
    +621            @Override
    +622            protected String sanitizeKey(String key) {
    +623                    return (key == null) ? null : key.toUpperCase();
    +624            }
    +625    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/ParticipationStatus.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/ParticipationStatus.html new file mode 100644 index 000000000..8a6f25a64 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/ParticipationStatus.html @@ -0,0 +1,145 @@ + + +
    +001    package biweekly.parameter;
    +002    
    +003    import java.util.Collection;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Defines a calendar user's level of participation.
    +032     * @author Michael Angstadt
    +033     * @rfc 5545 p.22-3
    +034     */
    +035    public class ParticipationStatus extends EnumParameterValue {
    +036            private static final ICalParameterCaseClasses<ParticipationStatus> enums = new ICalParameterCaseClasses<ParticipationStatus>(ParticipationStatus.class);
    +037    
    +038            public static final ParticipationStatus NEEDS_ACTION = new ParticipationStatus("NEEDS-ACTION"); //VEVENT, VTODO, VJOURNAL
    +039            public static final ParticipationStatus ACCEPTED = new ParticipationStatus("ACCEPTED"); //VEVENT, VTODO, VJOURNAL
    +040            public static final ParticipationStatus DECLINED = new ParticipationStatus("DECLINED"); //VEVENT, VTODO, VJOURNAL
    +041            public static final ParticipationStatus TENTATIVE = new ParticipationStatus("TENTATIVE"); //VEVENT, VTODO
    +042            public static final ParticipationStatus DELEGATED = new ParticipationStatus("DELEGATED"); //VEVENT, VTODO
    +043            public static final ParticipationStatus COMPLETED = new ParticipationStatus("COMPLETED"); //VTODO
    +044            public static final ParticipationStatus IN_PROGRESS = new ParticipationStatus("IN_PROGRESS"); //VTODO
    +045    
    +046            private ParticipationStatus(String value) {
    +047                    super(value);
    +048            }
    +049    
    +050            /**
    +051             * Searches for a parameter value that is defined as a static constant in
    +052             * this class.
    +053             * @param value the parameter value
    +054             * @return the object or null if not found
    +055             */
    +056            public static ParticipationStatus find(String value) {
    +057                    return enums.find(value);
    +058            }
    +059    
    +060            /**
    +061             * Searches for a parameter value and creates one if it cannot be found. All
    +062             * objects are guaranteed to be unique, so they can be compared with
    +063             * {@code ==} equality.
    +064             * @param value the parameter value
    +065             * @return the object
    +066             */
    +067            public static ParticipationStatus get(String value) {
    +068                    return enums.get(value);
    +069            }
    +070    
    +071            /**
    +072             * Gets all of the parameter values that are defined as static constants in
    +073             * this class.
    +074             * @return the parameter values
    +075             */
    +076            public static Collection<ParticipationStatus> all() {
    +077                    return enums.all();
    +078            }
    +079    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Range.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Range.html new file mode 100644 index 000000000..1023ee5cf --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Range.html @@ -0,0 +1,147 @@ + + +
    +001    package biweekly.parameter;
    +002    
    +003    import java.util.Collection;
    +004    
    +005    import biweekly.property.RecurrenceId;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * Defines the effective range of recurrence instances specified by the
    +034     * {@link RecurrenceId} property. This parameter is essentially deprecated.
    +035     * @author Michael Angstadt
    +036     * @rfc 5545 p.23-4
    +037     */
    +038    public class Range extends EnumParameterValue {
    +039            private static final ICalParameterCaseClasses<Range> enums = new ICalParameterCaseClasses<Range>(Range.class);
    +040    
    +041            public static final Range THIS_AND_FUTURE = new Range("THISANDFUTURE");
    +042    
    +043            /**
    +044             * Deprecated in the latest iCal specification.
    +045             */
    +046            public static final Range THIS_AND_PRIOR = new Range("THISANDPRIOR");
    +047    
    +048            private Range(String value) {
    +049                    super(value);
    +050            }
    +051    
    +052            /**
    +053             * Searches for a parameter value that is defined as a static constant in
    +054             * this class.
    +055             * @param value the parameter value
    +056             * @return the object or null if not found
    +057             */
    +058            public static Range find(String value) {
    +059                    return enums.find(value);
    +060            }
    +061    
    +062            /**
    +063             * Searches for a parameter value and creates one if it cannot be found. All
    +064             * objects are guaranteed to be unique, so they can be compared with
    +065             * {@code ==} equality.
    +066             * @param value the parameter value
    +067             * @return the object
    +068             */
    +069            public static Range get(String value) {
    +070                    return enums.get(value);
    +071            }
    +072    
    +073            /**
    +074             * Gets all of the parameter values that are defined as static constants in
    +075             * this class.
    +076             * @return the parameter values
    +077             */
    +078            public static Collection<Range> all() {
    +079                    return enums.all();
    +080            }
    +081    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Related.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Related.html new file mode 100644 index 000000000..c48fcb994 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Related.html @@ -0,0 +1,141 @@ + + +
    +001    package biweekly.parameter;
    +002    
    +003    import java.util.Collection;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Defines the date that an alarm trigger is relative to.
    +032     * @author Michael Angstadt
    +033     * @rfc 5545 p.24
    +034     */
    +035    public class Related extends EnumParameterValue {
    +036            private static final ICalParameterCaseClasses<Related> enums = new ICalParameterCaseClasses<Related>(Related.class);
    +037    
    +038            public static final Related START = new Related("START");
    +039    
    +040            public static final Related END = new Related("END");
    +041    
    +042            private Related(String value) {
    +043                    super(value);
    +044            }
    +045    
    +046            /**
    +047             * Searches for a parameter value that is defined as a static constant in
    +048             * this class.
    +049             * @param value the parameter value
    +050             * @return the object or null if not found
    +051             */
    +052            public static Related find(String value) {
    +053                    return enums.find(value);
    +054            }
    +055    
    +056            /**
    +057             * Searches for a parameter value and creates one if it cannot be found. All
    +058             * objects are guaranteed to be unique, so they can be compared with
    +059             * {@code ==} equality.
    +060             * @param value the parameter value
    +061             * @return the object
    +062             */
    +063            public static Related get(String value) {
    +064                    return enums.get(value);
    +065            }
    +066    
    +067            /**
    +068             * Gets all of the parameter values that are defined as static constants in
    +069             * this class.
    +070             * @return the parameter values
    +071             */
    +072            public static Collection<Related> all() {
    +073                    return enums.all();
    +074            }
    +075    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/RelationshipType.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/RelationshipType.html new file mode 100644 index 000000000..04c12d5fd --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/RelationshipType.html @@ -0,0 +1,144 @@ + + +
    +001    package biweekly.parameter;
    +002    
    +003    import java.util.Collection;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Defines the hierarchical relationship that a component has with another
    +032     * component.
    +033     * @author Michael Angstadt
    +034     * @rfc 5545 p.25
    +035     */
    +036    public class RelationshipType extends EnumParameterValue {
    +037            private static final ICalParameterCaseClasses<RelationshipType> enums = new ICalParameterCaseClasses<RelationshipType>(RelationshipType.class);
    +038    
    +039            public static final RelationshipType PARENT = new RelationshipType("PARENT");
    +040    
    +041            public static final RelationshipType CHILD = new RelationshipType("CHILD");
    +042    
    +043            public static final RelationshipType SIBLING = new RelationshipType("SIBLING");
    +044    
    +045            private RelationshipType(String value) {
    +046                    super(value);
    +047            }
    +048    
    +049            /**
    +050             * Searches for a parameter value that is defined as a static constant in
    +051             * this class.
    +052             * @param value the parameter value
    +053             * @return the object or null if not found
    +054             */
    +055            public static RelationshipType find(String value) {
    +056                    return enums.find(value);
    +057            }
    +058    
    +059            /**
    +060             * Searches for a parameter value and creates one if it cannot be found. All
    +061             * objects are guaranteed to be unique, so they can be compared with
    +062             * {@code ==} equality.
    +063             * @param value the parameter value
    +064             * @return the object
    +065             */
    +066            public static RelationshipType get(String value) {
    +067                    return enums.get(value);
    +068            }
    +069    
    +070            /**
    +071             * Gets all of the parameter values that are defined as static constants in
    +072             * this class.
    +073             * @return the parameter values
    +074             */
    +075            public static Collection<RelationshipType> all() {
    +076                    return enums.all();
    +077            }
    +078    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Role.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Role.html new file mode 100644 index 000000000..b2e3bd972 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/parameter/Role.html @@ -0,0 +1,145 @@ + + +
    +001    package biweekly.parameter;
    +002    
    +003    import java.util.Collection;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Defines the role that a calendar user holds.
    +032     * @author Michael Angstadt
    +033     * @rfc 5545 p.25-6
    +034     */
    +035    public class Role extends EnumParameterValue {
    +036            private static final ICalParameterCaseClasses<Role> enums = new ICalParameterCaseClasses<Role>(Role.class);
    +037    
    +038            public static final Role CHAIR = new Role("CHAIR");
    +039    
    +040            public static final Role REQ_PARTICIPANT = new Role("REQ-PARTICIPANT");
    +041    
    +042            public static final Role OPT_PARTICIPANT = new Role("OPT-PARTICIPANT");
    +043    
    +044            public static final Role NON_PARTICIPANT = new Role("NON-PARTICIPANT");
    +045    
    +046            private Role(String value) {
    +047                    super(value);
    +048            }
    +049    
    +050            /**
    +051             * Searches for a parameter value that is defined as a static constant in
    +052             * this class.
    +053             * @param value the parameter value
    +054             * @return the object or null if not found
    +055             */
    +056            public static Role find(String value) {
    +057                    return enums.find(value);
    +058            }
    +059    
    +060            /**
    +061             * Searches for a parameter value and creates one if it cannot be found. All
    +062             * objects are guaranteed to be unique, so they can be compared with
    +063             * {@code ==} equality.
    +064             * @param value the parameter value
    +065             * @return the object
    +066             */
    +067            public static Role get(String value) {
    +068                    return enums.get(value);
    +069            }
    +070    
    +071            /**
    +072             * Gets all of the parameter values that are defined as static constants in
    +073             * this class.
    +074             * @return the parameter values
    +075             */
    +076            public static Collection<Role> all() {
    +077                    return enums.all();
    +078            }
    +079    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Action.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Action.html new file mode 100644 index 000000000..83b7dca7b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Action.html @@ -0,0 +1,189 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Arrays;
    +004    import java.util.Collection;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * <p>
    +033     * Defines the type of action to invoke when an alarm is triggered.
    +034     * </p>
    +035     * 
    +036     * <p>
    +037     * <b>Examples:</b>
    +038     * 
    +039     * <pre class="brush:java">
    +040     * //creating a new property
    +041     * Action action = Action.audio();
    +042     * 
    +043     * if (action.isAudio()) {
    +044     *      //it's an &quot;AUDIO&quot; alarm
    +045     * }
    +046     * </pre>
    +047     * 
    +048     * </p>
    +049     * @author Michael Angstadt
    +050     * @rfc 5545 p.132-3
    +051     */
    +052    public class Action extends EnumProperty {
    +053            private static final String AUDIO = "AUDIO";
    +054            private static final String DISPLAY = "DISPLAY";
    +055            private static final String EMAIL = "EMAIL";
    +056    
    +057            /**
    +058             * Creates an action property. Use of this constructor is discouraged and
    +059             * may put the property in an invalid state. Use one of the static factory
    +060             * methods instead.
    +061             * @param value the value (e.g. "AUDIO")
    +062             */
    +063            public Action(String value) {
    +064                    super(value);
    +065            }
    +066    
    +067            /**
    +068             * Creates an "audio" action property.
    +069             * @return the property
    +070             */
    +071            public static Action audio() {
    +072                    return create(AUDIO);
    +073            }
    +074    
    +075            /**
    +076             * Determines if this property is an "audio" action.
    +077             * @return true if it's an "audio" action, false if not
    +078             */
    +079            public boolean isAudio() {
    +080                    return is(AUDIO);
    +081            }
    +082    
    +083            /**
    +084             * Creates an "display" action property.
    +085             * @return the property
    +086             */
    +087            public static Action display() {
    +088                    return create(DISPLAY);
    +089            }
    +090    
    +091            /**
    +092             * Determines if this property is an "display" action.
    +093             * @return true if it's an "display" action, false if not
    +094             */
    +095            public boolean isDisplay() {
    +096                    return is(DISPLAY);
    +097            }
    +098    
    +099            /**
    +100             * Creates an "email" action property.
    +101             * @return the property
    +102             */
    +103            public static Action email() {
    +104                    return create(EMAIL);
    +105            }
    +106    
    +107            /**
    +108             * Determines if this property is an "email" action.
    +109             * @return true if it's an "email" action, false if not
    +110             */
    +111            public boolean isEmail() {
    +112                    return is(EMAIL);
    +113            }
    +114    
    +115            private static Action create(String value) {
    +116                    return new Action(value);
    +117            }
    +118    
    +119            @Override
    +120            protected Collection<String> getStandardValues() {
    +121                    return Arrays.asList(AUDIO, DISPLAY, EMAIL);
    +122            }
    +123    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Attachment.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Attachment.html new file mode 100644 index 000000000..e4115c4cf --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Attachment.html @@ -0,0 +1,215 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.io.File;
    +004    import java.io.FileInputStream;
    +005    import java.io.IOException;
    +006    import java.util.List;
    +007    
    +008    import biweekly.component.ICalComponent;
    +009    import biweekly.util.IOUtils;
    +010    
    +011    /*
    +012     Copyright (c) 2013, Michael Angstadt
    +013     All rights reserved.
    +014    
    +015     Redistribution and use in source and binary forms, with or without
    +016     modification, are permitted provided that the following conditions are met: 
    +017    
    +018     1. Redistributions of source code must retain the above copyright notice, this
    +019     list of conditions and the following disclaimer. 
    +020     2. Redistributions in binary form must reproduce the above copyright notice,
    +021     this list of conditions and the following disclaimer in the documentation
    +022     and/or other materials provided with the distribution. 
    +023    
    +024     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +025     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +026     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +027     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +028     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +029     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +030     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +031     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +032     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +033     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +034     */
    +035    
    +036    /**
    +037     * <p>
    +038     * Represents a binary resource that is associated with an event, to-do, journal
    +039     * entry, or alarm.
    +040     * </p>
    +041     * 
    +042     * <p>
    +043     * <b>Examples:</b>
    +044     * 
    +045     * <pre class="brush:java">
    +046     * //from a byte array
    +047     * byte[] data = ...
    +048     * Attachment attach = new Attachment("image/png", data);
    +049     * 
    +050     * //reading from a file 
    +051     * Attachment attach = new Attachment(&quot;image/png&quot;, new File(&quot;image.png&quot;));
    +052     * 
    +053     * //referencing a URL
    +054     * Attachment attach = new Attachment(&quot;image/png&quot;, &quot;http://example.com/image.png&quot;);
    +055     * </pre>
    +056     * 
    +057     * </p>
    +058     * @author Michael Angstadt
    +059     * @rfc 5545 p.80-1
    +060     */
    +061    public class Attachment extends ICalProperty {
    +062            private byte[] data;
    +063            private String uri;
    +064    
    +065            /**
    +066             * Creates a new attachment.
    +067             * @param formatType the content-type of the data (e.g. "image/png")
    +068             * @param file the file to attach
    +069             * @throws IOException if there's a problem reading from the file
    +070             */
    +071            public Attachment(String formatType, File file) throws IOException {
    +072                    this.data = IOUtils.toByteArray(new FileInputStream(file), true);
    +073                    setFormatType(formatType);
    +074            }
    +075    
    +076            /**
    +077             * Creates a new attachment.
    +078             * @param formatType the content-type of the data (e.g. "image/png")
    +079             * @param data the binary data
    +080             */
    +081            public Attachment(String formatType, byte[] data) {
    +082                    this.data = data;
    +083                    setFormatType(formatType);
    +084            }
    +085    
    +086            /**
    +087             * Creates a new attachment.
    +088             * @param formatType the content-type of the data (e.g. "image/png")
    +089             * @param uri a URL pointing to the resource (e.g.
    +090             * "http://example.com/image.png")
    +091             */
    +092            public Attachment(String formatType, String uri) {
    +093                    this.uri = uri;
    +094                    setFormatType(formatType);
    +095            }
    +096    
    +097            /**
    +098             * Gets the attachment's binary data.
    +099             * @return the binary data or null if not set
    +100             */
    +101            public byte[] getData() {
    +102                    return data;
    +103            }
    +104    
    +105            /**
    +106             * Sets the attachment's binary data. If the attachment has a URI associated
    +107             * with it, the URI will be set to null.
    +108             * @param data the binary data
    +109             */
    +110            public void setData(byte[] data) {
    +111                    this.data = data;
    +112                    uri = null;
    +113            }
    +114    
    +115            /**
    +116             * Gets the attachment's URI.
    +117             * @return the URI (e.g. "http://example.com/image.png") or null if not set
    +118             */
    +119            public String getUri() {
    +120                    return uri;
    +121            }
    +122    
    +123            /**
    +124             * Sets the attachment's URI. If the attachment has binary data associated
    +125             * with it, the binary data will be set to null.
    +126             * @param uri the URI (e.g. "http://example.com/image.png")
    +127             */
    +128            public void setUri(String uri) {
    +129                    this.uri = uri;
    +130                    data = null;
    +131            }
    +132    
    +133            @Override
    +134            public String getFormatType() {
    +135                    return super.getFormatType();
    +136            }
    +137    
    +138            @Override
    +139            public void setFormatType(String formatType) {
    +140                    super.setFormatType(formatType);
    +141            }
    +142    
    +143            @Override
    +144            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +145                    if (uri == null && data == null) {
    +146                            warnings.add("No URI or data specified.");
    +147                    }
    +148            }
    +149    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Attendee.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Attendee.html new file mode 100644 index 000000000..f9381cae7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Attendee.html @@ -0,0 +1,332 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.component.VAlarm;
    +006    import biweekly.parameter.CalendarUserType;
    +007    import biweekly.parameter.ParticipationStatus;
    +008    import biweekly.parameter.Role;
    +009    
    +010    /*
    +011     Copyright (c) 2013, Michael Angstadt
    +012     All rights reserved.
    +013    
    +014     Redistribution and use in source and binary forms, with or without
    +015     modification, are permitted provided that the following conditions are met: 
    +016    
    +017     1. Redistributions of source code must retain the above copyright notice, this
    +018     list of conditions and the following disclaimer. 
    +019     2. Redistributions in binary form must reproduce the above copyright notice,
    +020     this list of conditions and the following disclaimer in the documentation
    +021     and/or other materials provided with the distribution. 
    +022    
    +023     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +024     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +025     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +026     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +027     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +028     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +029     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +030     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +031     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +032     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +033     */
    +034    
    +035    /**
    +036     * <p>
    +037     * Defines an attendee (such as a person attending an event). This property has
    +038     * different meanings depending on the component that it belongs to:
    +039     * <ul>
    +040     * <li>{@link VAlarm} (with "EMAIL" action) - An email address that is to
    +041     * receive the alarm.</li>
    +042     * <li>All others - An attendee of the event.</li>
    +043     * </ul>
    +044     * </p>
    +045     * 
    +046     * <p>
    +047     * <b>Examples:</b>
    +048     * 
    +049     * <pre class="brush:java">
    +050     * Attendee attendee = Attendee.email("johndoe@example.com")
    +051     * attendee.setCommonName("John Doe");
    +052     * attendee.setRsvp(true);
    +053     * attendee.setRole(Role.CHAIR);
    +054     * attendee.setParticipationStatus(ParticipationStatus.ACCEPTED);
    +055     * </pre>
    +056     * 
    +057     * </p>
    +058     * @author Michael Angstadt
    +059     * @rfc 5545 p.107-9
    +060     */
    +061    public class Attendee extends TextProperty {
    +062            /**
    +063             * Creates an attendee property.
    +064             * @param uri a URI representing the attendee (typically, an email address,
    +065             * e.g. "mailto:johndoe@example.com")
    +066             */
    +067            public Attendee(String uri) {
    +068                    super(uri);
    +069            }
    +070    
    +071            /**
    +072             * Creates an attendee property using an email address as its value.
    +073             * @param email the email address (e.g. "johndoe@example.com")
    +074             * @return the property
    +075             */
    +076            public static Attendee email(String email) {
    +077                    return new Attendee("mailto:" + email);
    +078            }
    +079    
    +080            /**
    +081             * Gets the type of user the attendee is (for example, an "individual" or a
    +082             * "room").
    +083             * @return the calendar user type or null if not set
    +084             * @rfc 5545 p.16
    +085             */
    +086            public CalendarUserType getCalendarUserType() {
    +087                    return parameters.getCalendarUserType();
    +088            }
    +089    
    +090            /**
    +091             * Sets the type of user the attendee is (for example, an "individual" or a
    +092             * "room").
    +093             * @param cutype the calendar user type or null to remove
    +094             * @rfc 5545 p.16
    +095             */
    +096            public void setCalendarUserType(CalendarUserType cutype) {
    +097                    parameters.setCalendarUserType(cutype);
    +098            }
    +099    
    +100            /**
    +101             * Gets the groups that the attendee is a member of.
    +102             * @return the group URIs (typically, these are email address URIs, e.g.
    +103             * "mailto:mailinglist@example.com")
    +104             * @rfc 5545 p.21-2
    +105             */
    +106            public List<String> getMembers() {
    +107                    return parameters.getMembers();
    +108            }
    +109    
    +110            /**
    +111             * Adds a group that the attendee is a member of.
    +112             * @param uri the group URI (typically, an email address URI, e.g.
    +113             * "mailto:mailinglist@example.com")
    +114             * @rfc 5545 p.21-2
    +115             */
    +116            public void addMember(String uri) {
    +117                    parameters.addMember(uri);
    +118            }
    +119    
    +120            /**
    +121             * Gets the attendee's role (for example, "chair" or
    +122             * "required participant").
    +123             * @return the role or null if not set
    +124             * @rfc 5545 p.25-6
    +125             */
    +126            public Role getRole() {
    +127                    return parameters.getRole();
    +128            }
    +129    
    +130            /**
    +131             * Sets the attendee's role (for example, "chair" or
    +132             * "required participant").
    +133             * @param role the role or null to remove
    +134             * @rfc 5545 p.25-6
    +135             */
    +136            public void setRole(Role role) {
    +137                    parameters.setRole(role);
    +138            }
    +139    
    +140            /**
    +141             * Gets the attendee's level of participation.
    +142             * @return the participation status or null if not set
    +143             * @rfc 5545 p.22-3
    +144             */
    +145            public ParticipationStatus getParticipationStatus() {
    +146                    return parameters.getParticipationStatus();
    +147            }
    +148    
    +149            /**
    +150             * Sets the attendee's level of participation.
    +151             * @param status the participation status or null to remove
    +152             * @rfc 5545 p.22-3
    +153             */
    +154            public void setParticipationStatus(ParticipationStatus status) {
    +155                    parameters.setParticipationStatus(status);
    +156            }
    +157    
    +158            /**
    +159             * Gets whether the organizer requests a response from the attendee.
    +160             * @return true if an RSVP is requested, false if not, null if not set
    +161             * @rfc 5545 p.26-7
    +162             */
    +163            public Boolean getRsvp() {
    +164                    return parameters.getRsvp();
    +165            }
    +166    
    +167            /**
    +168             * Sets whether the organizer requests a response from the attendee.
    +169             * @param rsvp true if an RSVP has been requested, false if not, null to
    +170             * remove
    +171             * @rfc 5545 p.26-7
    +172             */
    +173            public void setRsvp(Boolean rsvp) {
    +174                    parameters.setRsvp(rsvp);
    +175            }
    +176    
    +177            /**
    +178             * Gets the people who have delegated their responsibility to the attendee.
    +179             * @return the delegators (typically email URIs, e.g.
    +180             * "mailto:janedoe@example.com")
    +181             * @rfc 5545 p.17
    +182             */
    +183            public List<String> getDelegatedFrom() {
    +184                    return parameters.getDelegatedFrom();
    +185            }
    +186    
    +187            /**
    +188             * Adds a person who has delegated his or her responsibility to the
    +189             * attendee.
    +190             * @param uri the delegator (typically an email URI, e.g.
    +191             * "mailto:janedoe@example.com")
    +192             * @rfc 5545 p.17
    +193             */
    +194            public void addDelegatedFrom(String uri) {
    +195                    parameters.addDelegatedFrom(uri);
    +196            }
    +197    
    +198            /**
    +199             * Gets the people to which the attendee has delegated his or her
    +200             * responsibility.
    +201             * @return the delegatees (typically email URIs, e.g.
    +202             * "mailto:janedoe@example.com")
    +203             * @rfc 5545 p.17-8
    +204             */
    +205            public List<String> getDelegatedTo() {
    +206                    return parameters.getDelegatedTo();
    +207            }
    +208    
    +209            /**
    +210             * Adds a person to which the attendee has delegated his or her
    +211             * responsibility.
    +212             * @param uri the delegatee (typically an email URI, e.g.
    +213             * "mailto:janedoe@example.com")
    +214             * @rfc 5545 p.17-8
    +215             */
    +216            public void addDelegatedTo(String uri) {
    +217                    parameters.addDelegatedTo(uri);
    +218            }
    +219    
    +220            @Override
    +221            public String getSentBy() {
    +222                    return super.getSentBy();
    +223            }
    +224    
    +225            @Override
    +226            public void setSentBy(String uri) {
    +227                    super.setSentBy(uri);
    +228            }
    +229    
    +230            @Override
    +231            public String getCommonName() {
    +232                    return super.getCommonName();
    +233            }
    +234    
    +235            @Override
    +236            public void setCommonName(String commonName) {
    +237                    super.setCommonName(commonName);
    +238            }
    +239    
    +240            @Override
    +241            public String getDirectoryEntry() {
    +242                    return super.getDirectoryEntry();
    +243            }
    +244    
    +245            @Override
    +246            public void setDirectoryEntry(String uri) {
    +247                    super.setDirectoryEntry(uri);
    +248            }
    +249    
    +250            /**
    +251             * Gets the language that the common name parameter is written in.
    +252             */
    +253            @Override
    +254            public String getLanguage() {
    +255                    return super.getLanguage();
    +256            }
    +257    
    +258            /**
    +259             * Sets the language that the common name parameter is written in.
    +260             */
    +261            @Override
    +262            public void setLanguage(String language) {
    +263                    super.setLanguage(language);
    +264            }
    +265    
    +266    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/CalendarScale.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/CalendarScale.html new file mode 100644 index 000000000..46a16de78 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/CalendarScale.html @@ -0,0 +1,151 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Arrays;
    +004    import java.util.Collection;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * <p>
    +033     * Specifies the calendar system that this iCalendar object uses. If none is
    +034     * specified, then the calendar is assumed to be in "gregorian" format.
    +035     * </p>
    +036     * <p>
    +037     * <b>Examples:</b>
    +038     * 
    +039     * <pre class="brush:java">
    +040     * //creating a new property
    +041     * CalendarScale calscale = CalendarScale.gregorian();
    +042     * 
    +043     * if (calscale.isGregorian()) {
    +044     *      //its value is &quot;GREGORIAN&quot;
    +045     * }
    +046     * </pre>
    +047     * 
    +048     * </p>
    +049     * @author Michael Angstadt
    +050     * @rfc 5545 p.76-7
    +051     */
    +052    public class CalendarScale extends EnumProperty {
    +053            private static final String GREGORIAN = "GREGORIAN";
    +054    
    +055            /**
    +056             * Creates a new calendar scale property. Use of this constructor is
    +057             * discouraged and may put the property in an invalid state. Use one of the
    +058             * static factory methods instead.
    +059             * @param value the value of the property (e.g. "gregorian")
    +060             */
    +061            public CalendarScale(String value) {
    +062                    super(value);
    +063            }
    +064    
    +065            /**
    +066             * Creates a new property whose value is set to "gregorian".
    +067             * @return the new property
    +068             */
    +069            public static CalendarScale gregorian() {
    +070                    return new CalendarScale(GREGORIAN);
    +071            }
    +072    
    +073            /**
    +074             * Determines whether the property is set to "gregorian".
    +075             * @return true if it's set to "gregorian", false if not
    +076             */
    +077            public boolean isGregorian() {
    +078                    return is(GREGORIAN);
    +079            }
    +080    
    +081            @Override
    +082            protected Collection<String> getStandardValues() {
    +083                    return Arrays.asList(GREGORIAN);
    +084            }
    +085    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Categories.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Categories.html new file mode 100644 index 000000000..901150474 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Categories.html @@ -0,0 +1,145 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.List;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * <p>
    +032     * Defines a list of "tags" or "keywords" that describe the component.
    +033     * </p>
    +034     * <p>
    +035     * <b>Examples:</b>
    +036     * 
    +037     * <pre class="brush:java">
    +038     * //creating a new property (multi-valued)
    +039     * Categories categories = new Categories(&quot;conference&quot;, &quot;meeting&quot;);
    +040     * </pre>
    +041     * 
    +042     * </p>
    +043     * @author Michael Angstadt
    +044     * @rfc 5545 p.81-2
    +045     */
    +046    public class Categories extends ListProperty<String> {
    +047            /**
    +048             * Creates a new categories property.
    +049             */
    +050            public Categories() {
    +051                    super();
    +052            }
    +053    
    +054            /**
    +055             * Creates a new categories property.
    +056             * @param categories the categories to initialize the property with
    +057             */
    +058            public Categories(String... categories) {
    +059                    super(categories);
    +060            }
    +061    
    +062            /**
    +063             * Creates a new categories property.
    +064             * @param categories the categories to initialize the property with
    +065             */
    +066            public Categories(List<String> categories) {
    +067                    super(categories);
    +068            }
    +069    
    +070            @Override
    +071            public String getLanguage() {
    +072                    return super.getLanguage();
    +073            }
    +074    
    +075            @Override
    +076            public void setLanguage(String language) {
    +077                    super.setLanguage(language);
    +078            }
    +079    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Classification.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Classification.html new file mode 100644 index 000000000..ab9f62cc3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Classification.html @@ -0,0 +1,188 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Arrays;
    +004    import java.util.Collection;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * <p>
    +033     * Defines the level of sensitivity of the iCalendar data. If not specified, the
    +034     * data should be considered "public".
    +035     * </p>
    +036     * <p>
    +037     * <b>Examples:</b>
    +038     * 
    +039     * <pre class="brush:java">
    +040     * //creating a new property
    +041     * Classification classification = Classification.public_();
    +042     * 
    +043     * if (classification.isPublic()) {
    +044     *      //its value is &quot;PUBLIC&quot;
    +045     * }
    +046     * </pre>
    +047     * 
    +048     * </p>
    +049     * @author Michael Angstadt
    +050     * @rfc 5545 p.82-3
    +051     */
    +052    public class Classification extends EnumProperty {
    +053            private static final String PUBLIC = "PUBLIC";
    +054            private static final String PRIVATE = "PRIVATE";
    +055            private static final String CONFIDENTIAL = "CONFIDENTIAL";
    +056    
    +057            /**
    +058             * Creates a new classification property. Use the static factory methods to
    +059             * create a property with a standard classification level.
    +060             * @param classification the classification level (e.g. "PUBLIC")
    +061             */
    +062            public Classification(String classification) {
    +063                    super(classification);
    +064            }
    +065    
    +066            /**
    +067             * Creates a "public" classification property.
    +068             * @return the property
    +069             */
    +070            public static Classification public_() {
    +071                    return create(PUBLIC);
    +072            }
    +073    
    +074            /**
    +075             * Determines if the classification level is "public".
    +076             * @return true if it's "public", false if not
    +077             */
    +078            public boolean isPublic() {
    +079                    return is(PUBLIC);
    +080            }
    +081    
    +082            /**
    +083             * Creates a "private" classification property.
    +084             * @return the property
    +085             */
    +086            public static Classification private_() {
    +087                    return create(PRIVATE);
    +088            }
    +089    
    +090            /**
    +091             * Determines if the classification level is "private".
    +092             * @return true if it's "private", false if not
    +093             */
    +094            public boolean isPrivate() {
    +095                    return is(PRIVATE);
    +096            }
    +097    
    +098            /**
    +099             * Creates a "confidential" classification property.
    +100             * @return the property
    +101             */
    +102            public static Classification confidential() {
    +103                    return create(CONFIDENTIAL);
    +104            }
    +105    
    +106            /**
    +107             * Determines if the classification level is "confidential".
    +108             * @return true if it's "confidential", false if not
    +109             */
    +110            public boolean isConfidential() {
    +111                    return is(CONFIDENTIAL);
    +112            }
    +113    
    +114            private static Classification create(String classification) {
    +115                    return new Classification(classification);
    +116            }
    +117    
    +118            @Override
    +119            protected Collection<String> getStandardValues() {
    +120                    return Arrays.asList(PUBLIC, PRIVATE, CONFIDENTIAL);
    +121            }
    +122    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Comment.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Comment.html new file mode 100644 index 000000000..baa127ce3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Comment.html @@ -0,0 +1,137 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * <p>
    +030     * Defines a free-text comment to be read by the user.
    +031     * </p>
    +032     * <p>
    +033     * <b>Examples:</b>
    +034     * 
    +035     * <pre class="brush:java">
    +036     * Comment comment = new Comment(&quot;Free text&quot;);
    +037     * </pre>
    +038     * 
    +039     * </p>
    +040     * @author Michael Angstadt
    +041     * @rfc 5545 p.83-4
    +042     */
    +043    public class Comment extends TextProperty {
    +044            /**
    +045             * Creates a comment property.
    +046             * @param comment the comment
    +047             */
    +048            public Comment(String comment) {
    +049                    super(comment);
    +050            }
    +051    
    +052            @Override
    +053            public String getAltRepresentation() {
    +054                    return super.getAltRepresentation();
    +055            }
    +056    
    +057            @Override
    +058            public void setAltRepresentation(String uri) {
    +059                    super.setAltRepresentation(uri);
    +060            }
    +061    
    +062            @Override
    +063            public String getLanguage() {
    +064                    return super.getLanguage();
    +065            }
    +066    
    +067            @Override
    +068            public void setLanguage(String language) {
    +069                    super.setLanguage(language);
    +070            }
    +071    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Completed.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Completed.html new file mode 100644 index 000000000..aed34db01 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Completed.html @@ -0,0 +1,120 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Date;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * <p>
    +032     * Defines the date and time that a to-do task was completed.
    +033     * </p>
    +034     * <p>
    +035     * <b>Examples:</b>
    +036     * 
    +037     * <pre class="brush:java">
    +038     * Date datetime = ...
    +039     * Completed completed = new Completed(datetime);
    +040     * </pre>
    +041     * 
    +042     * </p>
    +043     * @author Michael Angstadt
    +044     * @rfc 5545 p.94-5
    +045     */
    +046    public class Completed extends DateTimeProperty {
    +047            /**
    +048             * Creates a completed property.
    +049             * @param completed the completion date
    +050             */
    +051            public Completed(Date completed) {
    +052                    super(completed);
    +053            }
    +054    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Contact.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Contact.html new file mode 100644 index 000000000..aa4aa714e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Contact.html @@ -0,0 +1,145 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * <p>
    +030     * Defines contact information for a person or other entity (for example, the
    +031     * name of a business and its phone number).
    +032     * </p>
    +033     * <p>
    +034     * <b>Examples:</b>
    +035     * 
    +036     * <pre class="brush:java">
    +037     * Contact contact = new Contact(&quot;Acme Co: (212) 555-1234&quot;);
    +038     * </pre>
    +039     * 
    +040     * </p>
    +041     * @author Michael Angstadt
    +042     * @rfc 5545 p.109-11
    +043     */
    +044    public class Contact extends TextProperty {
    +045            //TODO override get/setValue methods to customize the Javadocs?
    +046            /**
    +047             * Creates a contact property.
    +048             * @param contact the contact information (e.g. "Acme Co: (212) 555-1234")
    +049             */
    +050            public Contact(String contact) {
    +051                    super(contact);
    +052            }
    +053    
    +054            /**
    +055             * @return the URI (such as a URL to a vCard) or null if not set
    +056             */
    +057            @Override
    +058            public String getAltRepresentation() {
    +059                    return super.getAltRepresentation();
    +060            }
    +061    
    +062            /**
    +063             * @param uri the URI (such as a URL to a vCard) or null to remove
    +064             */
    +065            @Override
    +066            public void setAltRepresentation(String uri) {
    +067                    super.setAltRepresentation(uri);
    +068            }
    +069    
    +070            @Override
    +071            public String getLanguage() {
    +072                    return super.getLanguage();
    +073            }
    +074    
    +075            @Override
    +076            public void setLanguage(String language) {
    +077                    super.setLanguage(language);
    +078            }
    +079    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Created.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Created.html new file mode 100644 index 000000000..8bb8afdc8 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Created.html @@ -0,0 +1,120 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Date;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * <p>
    +032     * Defines the date-time that the calendar information was initially created.
    +033     * </p>
    +034     * <p>
    +035     * <b>Examples:</b>
    +036     * 
    +037     * <pre class="brush:java">
    +038     * Date datetime = ...
    +039     * Created created = new Created(datetime);
    +040     * </pre>
    +041     * 
    +042     * </p>
    +043     * @author Michael Angstadt
    +044     * @rfc 5545 p.136
    +045     */
    +046    public class Created extends DateTimeProperty {
    +047            /**
    +048             * Creates a created property.
    +049             * @param date the creation date
    +050             */
    +051            public Created(Date date) {
    +052                    super(date);
    +053            }
    +054    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateDue.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateDue.html new file mode 100644 index 000000000..fc068abf6 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateDue.html @@ -0,0 +1,140 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Date;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * <p>
    +032     * Defines the date that a to-do task is due by.
    +033     * </p>
    +034     * <p>
    +035     * <b>Examples:</b>
    +036     * 
    +037     * <pre class="brush:java">
    +038     * //date and time
    +039     * Date datetime = ...
    +040     * DateDue due = new DateDue(datetime);
    +041     * 
    +042     * //date
    +043     * Date date = ...
    +044     * DateDue due = new DateDue(date, false);
    +045     * 
    +046     * //with timezone 
    +047     * Date datetime = ... 
    +048     * DateDue due = new DateDue(datetime); 
    +049     * due.setTimezoneId("America/New_York");
    +050     * </pre>
    +051     * 
    +052     * </p>
    +053     * @author Michael Angstadt
    +054     * @rfc 5545 p.96-7
    +055     */
    +056    public class DateDue extends DateOrDateTimeProperty {
    +057            /**
    +058             * Creates a due date property.
    +059             * @param dueDate the due date
    +060             */
    +061            public DateDue(Date dueDate) {
    +062                    this(dueDate, true);
    +063            }
    +064    
    +065            /**
    +066             * Creates a due date property.
    +067             * @param dueDate the due date
    +068             * @param hasTime true to include the time component of the date, false not
    +069             * to
    +070             */
    +071            public DateDue(Date dueDate, boolean hasTime) {
    +072                    super(dueDate, hasTime);
    +073            }
    +074    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateEnd.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateEnd.html new file mode 100644 index 000000000..28d19a790 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateEnd.html @@ -0,0 +1,140 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Date;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * <p>
    +032     * Defines the date that an event or free/busy component ends.
    +033     * </p>
    +034     * <p>
    +035     * <b>Examples:</b>
    +036     * 
    +037     * <pre class="brush:java">
    +038     * //date and time
    +039     * Date datetime = ...
    +040     * DateEnd dtend = new DateEnd(datetime);
    +041     * 
    +042     * //date
    +043     * Date date = ...
    +044     * DateEnd dtend = new DateEnd(date, false);
    +045     * 
    +046     * //with timezone 
    +047     * Date datetime = ... 
    +048     * DateEnd dtend = new DateEnd(datetime); 
    +049     * dtend.setTimezoneId("America/New_York");
    +050     * </pre>
    +051     * 
    +052     * </p>
    +053     * @author Michael Angstadt
    +054     * @rfc 5545 p.95-6
    +055     */
    +056    public class DateEnd extends DateOrDateTimeProperty {
    +057            /**
    +058             * Creates a date end property.
    +059             * @param endDate the end date
    +060             */
    +061            public DateEnd(Date endDate) {
    +062                    this(endDate, true);
    +063            }
    +064    
    +065            /**
    +066             * Creates a date end property.
    +067             * @param endDate the end date
    +068             * @param hasTime true to include the time component of the date, false not
    +069             * to
    +070             */
    +071            public DateEnd(Date endDate, boolean hasTime) {
    +072                    super(endDate, hasTime);
    +073            }
    +074    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateOrDateTimeProperty.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateOrDateTimeProperty.html new file mode 100644 index 000000000..2282088aa --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateOrDateTimeProperty.html @@ -0,0 +1,224 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Date;
    +004    import java.util.List;
    +005    
    +006    import biweekly.component.ICalComponent;
    +007    import biweekly.component.VTimezone;
    +008    import biweekly.util.DateTimeComponents;
    +009    import biweekly.util.ICalDateFormatter;
    +010    
    +011    /*
    +012     Copyright (c) 2013, Michael Angstadt
    +013     All rights reserved.
    +014    
    +015     Redistribution and use in source and binary forms, with or without
    +016     modification, are permitted provided that the following conditions are met: 
    +017    
    +018     1. Redistributions of source code must retain the above copyright notice, this
    +019     list of conditions and the following disclaimer. 
    +020     2. Redistributions in binary form must reproduce the above copyright notice,
    +021     this list of conditions and the following disclaimer in the documentation
    +022     and/or other materials provided with the distribution. 
    +023    
    +024     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +025     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +026     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +027     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +028     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +029     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +030     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +031     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +032     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +033     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +034     */
    +035    
    +036    /**
    +037     * Represents a property whose value is a date or a date-time.
    +038     * @author Michael Angstadt
    +039     */
    +040    public class DateOrDateTimeProperty extends ICalProperty {
    +041            protected Date value;
    +042            protected DateTimeComponents rawComponents;
    +043            protected boolean hasTime;
    +044            protected boolean localTime;
    +045    
    +046            /**
    +047             * Creates a new property.
    +048             * @param rawComponents the raw components of the date-time value
    +049             */
    +050            public DateOrDateTimeProperty(DateTimeComponents rawComponents) {
    +051                    setRawComponents(rawComponents);
    +052            }
    +053    
    +054            /**
    +055             * Creates a new property.
    +056             * @param value the date-time value
    +057             * @param hasTime true if the value has a time component, false if it is
    +058             * strictly a date
    +059             */
    +060            public DateOrDateTimeProperty(Date value, boolean hasTime) {
    +061                    setValue(value, hasTime);
    +062            }
    +063    
    +064            /**
    +065             * Gets the date-time value.
    +066             * @return the date-time value
    +067             */
    +068            public Date getValue() {
    +069                    return value;
    +070            }
    +071    
    +072            /**
    +073             * Sets the date-time value.
    +074             * @param value the date-time value
    +075             * @param hasTime true if the value has a time component, false if it is
    +076             * strictly a date
    +077             */
    +078            public void setValue(Date value, boolean hasTime) {
    +079                    this.value = value;
    +080                    this.hasTime = hasTime;
    +081            }
    +082    
    +083            /**
    +084             * Gets the raw components of the date-time value.
    +085             * @return the raw components
    +086             */
    +087            public DateTimeComponents getRawComponents() {
    +088                    return rawComponents;
    +089            }
    +090    
    +091            /**
    +092             * Sets the raw components of the date-time value.
    +093             * @param rawComponents the raw components
    +094             */
    +095            public void setRawComponents(DateTimeComponents rawComponents) {
    +096                    this.rawComponents = rawComponents;
    +097            }
    +098    
    +099            /**
    +100             * Determines whether the date-time value has a time component.
    +101             * @return true if the value has a time component, false if it is strictly a
    +102             * date
    +103             */
    +104            public boolean hasTime() {
    +105                    return hasTime;
    +106            }
    +107    
    +108            /**
    +109             * Gets whether the date should be outputted in local time (without a
    +110             * timezone).
    +111             * @return true to output the date without a timezone, false to include a
    +112             * timezone
    +113             */
    +114            public boolean isLocalTime() {
    +115                    return localTime;
    +116            }
    +117    
    +118            /**
    +119             * Sets whether the date should be outputted in local time (without a
    +120             * timezone). Use {@link #setTimezoneId(String)} to specify a timezone.
    +121             * Dates are written in UTC time by default.
    +122             * @param localTime true to output the date without a timezone, false to
    +123             * include a timezone (defaults to false)
    +124             */
    +125            public void setLocalTime(boolean localTime) {
    +126                    this.localTime = localTime;
    +127                    if (localTime) {
    +128                            setTimezoneId(null);
    +129                    }
    +130            }
    +131    
    +132            @Override
    +133            public String getTimezoneId() {
    +134                    return super.getTimezoneId();
    +135            }
    +136    
    +137            @Override
    +138            public void setTimezoneId(String timezoneId) {
    +139                    super.setTimezoneId(timezoneId);
    +140            }
    +141    
    +142            @Override
    +143            public void setTimezone(VTimezone timezone) {
    +144                    super.setTimezone(timezone);
    +145            }
    +146    
    +147            @Override
    +148            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +149                    if (value == null && components == null) {
    +150                            warnings.add("No value set.");
    +151                    }
    +152    
    +153                    String tzid = getTimezoneId();
    +154                    if (tzid != null && tzid.contains("/") && ICalDateFormatter.parseTimeZoneId(tzid) == null) {
    +155                            warnings.add("Unrecognized timezone ID: " + tzid);
    +156                    }
    +157            }
    +158    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateStart.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateStart.html new file mode 100644 index 000000000..4c125386f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateStart.html @@ -0,0 +1,160 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Date;
    +004    
    +005    import biweekly.util.DateTimeComponents;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * <p>
    +034     * Defines the date that an event, free/busy component, or timezone component
    +035     * starts.
    +036     * </p>
    +037     * <p>
    +038     * <b>Examples:</b>
    +039     * 
    +040     * <pre class="brush:java">
    +041     * //date and time
    +042     * Date datetime = ...
    +043     * DateStart dtstart = new DateStart(datetime);
    +044     * 
    +045     * //date
    +046     * Date date = ...
    +047     * DateStart dtstart = new DateStart(date, false);
    +048     * 
    +049     * //local date and time (don't print a timezone)
    +050     * Date datetime = ...
    +051     * DateStart dtstart = new DateStart(datetime);
    +052     * dtstart.setLocalTime(true);
    +053     * 
    +054     * //with timezone 
    +055     * Date datetime = ... 
    +056     * DateStart dtstart = new DateStart(datetime); 
    +057     * dtstart.setTimezoneId("America/New_York");
    +058     * 
    +059     * //raw components 
    +060     * DateTimeComponents components = new DateTimeComponents(1999, 4, 4, 2, 0, 0, false);
    +061     * DateStart dtstart = new DateStart(components);
    +062     * </pre>
    +063     * 
    +064     * </p>
    +065     * @author Michael Angstadt
    +066     * @rfc 5545 p.97-8
    +067     */
    +068    public class DateStart extends DateOrDateTimeProperty {
    +069            /**
    +070             * Creates a start date property.
    +071             * @param startDate the start date
    +072             */
    +073            public DateStart(Date startDate) {
    +074                    this(startDate, true);
    +075            }
    +076    
    +077            /**
    +078             * Creates a start date property.
    +079             * @param startDate the start date
    +080             * @param hasTime true to include the time component of the date, false not
    +081             * to
    +082             */
    +083            public DateStart(Date startDate, boolean hasTime) {
    +084                    super(startDate, hasTime);
    +085            }
    +086    
    +087            /**
    +088             * Creates a start date property.
    +089             * @param components the raw components of the date-time value
    +090             */
    +091            public DateStart(DateTimeComponents components) {
    +092                    super(components);
    +093            }
    +094    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateTimeProperty.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateTimeProperty.html new file mode 100644 index 000000000..7450c8e89 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateTimeProperty.html @@ -0,0 +1,108 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Date;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Represents a property whose value is a date-time.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class DateTimeProperty extends ValuedProperty<Date> {
    +035            /**
    +036             * Creates a new property.
    +037             * @param value the date
    +038             */
    +039            public DateTimeProperty(Date value) {
    +040                    super(value);
    +041            }
    +042    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateTimeStamp.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateTimeStamp.html new file mode 100644 index 000000000..80e3ddad2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DateTimeStamp.html @@ -0,0 +1,129 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Date;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * <p>
    +032     * The meaning of this property varies depending on the state of the iCalendar
    +033     * object:
    +034     * <ul>
    +035     * <li><b>If a {@link Method} property exists</b>: Defines the creation date of
    +036     * the iCalendar object (not the creation date of the actual calendar data). Use
    +037     * the {@link Created} property to define the date that the calendar data was
    +038     * last created.</li>
    +039     * <li><b>Otherwise</b> - Defines the date that the calendar data was last
    +040     * modified (the {@link LastModified} property also holds this information).</li>
    +041     * </ul>
    +042     * </p>
    +043     * <p>
    +044     * <b>Examples:</b>
    +045     * 
    +046     * <pre class="brush:java">
    +047     * Date datetime = ... 
    +048     * DateTimeStamp dtstamp = new DateTimeStamp(datetime);
    +049     * </pre>
    +050     * 
    +051     * </p>
    +052     * @author Michael Angstadt
    +053     * @rfc 5545 p.137-8
    +054     */
    +055    public class DateTimeStamp extends DateTimeProperty {
    +056            /**
    +057             * Creates a date time stamp property.
    +058             * @param date the date
    +059             */
    +060            public DateTimeStamp(Date date) {
    +061                    super(date);
    +062            }
    +063    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Description.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Description.html new file mode 100644 index 000000000..2aaa18eeb --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Description.html @@ -0,0 +1,140 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * <p>
    +030     * A detailed description of the component that this property belongs to. The
    +031     * description should be a more detailed version of the text provided by the
    +032     * {@link Summary} property.
    +033     * </p>
    +034     * <p>
    +035     * <b>Examples:</b>
    +036     * 
    +037     * <pre class="brush:java">
    +038     * Description description = new Description(&quot;description text&quot;);
    +039     * </pre>
    +040     * 
    +041     * </p>
    +042     * 
    +043     * @author Michael Angstadt
    +044     * @rfc 5545 p.84-5
    +045     */
    +046    public class Description extends TextProperty {
    +047            /**
    +048             * Creates a description property.
    +049             * @param description the description
    +050             */
    +051            public Description(String description) {
    +052                    super(description);
    +053            }
    +054    
    +055            @Override
    +056            public String getAltRepresentation() {
    +057                    return super.getAltRepresentation();
    +058            }
    +059    
    +060            @Override
    +061            public void setAltRepresentation(String uri) {
    +062                    super.setAltRepresentation(uri);
    +063            }
    +064    
    +065            @Override
    +066            public String getLanguage() {
    +067                    return super.getLanguage();
    +068            }
    +069    
    +070            @Override
    +071            public void setLanguage(String language) {
    +072                    super.setLanguage(language);
    +073            }
    +074    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DurationProperty.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DurationProperty.html new file mode 100644 index 000000000..6108cfa70 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/DurationProperty.html @@ -0,0 +1,132 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import biweekly.component.VAlarm;
    +004    import biweekly.component.VEvent;
    +005    import biweekly.component.VTodo;
    +006    import biweekly.util.Duration;
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * <p>
    +035     * Defines a duration of time (for example, "2 hours and 30 minutes"). It has
    +036     * different meanings depending on the component it belongs to:
    +037     * <ul>
    +038     * <li>{@link VEvent} - The duration of the event (used in place of a
    +039     * {@link DateEnd} property).</li>
    +040     * <li>{@link VTodo} - The duration of the to-do task (used in place of a
    +041     * {@link DateEnd} property).</li>
    +042     * <li>{@link VAlarm} - The pause between alarm repetitions.</li>
    +043     * </ul>
    +044     * </p>
    +045     * 
    +046     * <p>
    +047     * <b>Examples:</b>
    +048     * 
    +049     * <pre class="brush:java">
    +050     * Duration duration = Duration.builder().hours(2).minutes(30).build();
    +051     * DurationProperty prop = new DurationProperty(duration);
    +052     * </pre>
    +053     * 
    +054     * </p>
    +055     * @author Michael Angstadt
    +056     * @rfc 5545 p.99
    +057     */
    +058    public class DurationProperty extends ValuedProperty<Duration> {
    +059            /**
    +060             * Creates a duration property.
    +061             * @param duration the duration value (e.g. "2 hours nad 30 minutes")
    +062             */
    +063            public DurationProperty(Duration duration) {
    +064                    super(duration);
    +065            }
    +066    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/EnumProperty.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/EnumProperty.html new file mode 100644 index 000000000..e5c4a7ce8 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/EnumProperty.html @@ -0,0 +1,145 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Collection;
    +004    import java.util.List;
    +005    
    +006    import biweekly.component.ICalComponent;
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * Parent class for properties that have a defined set of acceptable values (for
    +035     * example, {@link Action}).
    +036     * @author Michael Angstadt
    +037     */
    +038    public abstract class EnumProperty extends TextProperty {
    +039            /**
    +040             * Creates an enum property.
    +041             * @param value the property value
    +042             */
    +043            public EnumProperty(String value) {
    +044                    super(value);
    +045            }
    +046    
    +047            /**
    +048             * Compares the property's value with a given string (case-insensitive).
    +049             * @param value the string
    +050             * @return true if it's equal, false if not
    +051             */
    +052            protected boolean is(String value) {
    +053                    return value.equalsIgnoreCase(this.value);
    +054            }
    +055    
    +056            /**
    +057             * Gets the list of acceptable values for this property.
    +058             * @return the list of acceptable values
    +059             */
    +060            protected abstract Collection<String> getStandardValues();
    +061    
    +062            @Override
    +063            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +064                    super.validate(components, warnings);
    +065                    if (value == null) {
    +066                            return;
    +067                    }
    +068    
    +069                    Collection<String> standardValues = getStandardValues();
    +070                    for (String standardValue : standardValues) {
    +071                            if (value.equalsIgnoreCase(standardValue)) {
    +072                                    //found, value is OK
    +073                                    return;
    +074                            }
    +075                    }
    +076    
    +077                    warnings.add("Non-standard value \"" + value + "\".  Standard values are: " + standardValues);
    +078            }
    +079    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ExceptionDates.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ExceptionDates.html new file mode 100644 index 000000000..e50f42de1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ExceptionDates.html @@ -0,0 +1,180 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Date;
    +004    import java.util.List;
    +005    
    +006    import biweekly.component.ICalComponent;
    +007    import biweekly.component.VTimezone;
    +008    import biweekly.util.ICalDateFormatter;
    +009    
    +010    /*
    +011     Copyright (c) 2013, Michael Angstadt
    +012     All rights reserved.
    +013    
    +014     Redistribution and use in source and binary forms, with or without
    +015     modification, are permitted provided that the following conditions are met: 
    +016    
    +017     1. Redistributions of source code must retain the above copyright notice, this
    +018     list of conditions and the following disclaimer. 
    +019     2. Redistributions in binary form must reproduce the above copyright notice,
    +020     this list of conditions and the following disclaimer in the documentation
    +021     and/or other materials provided with the distribution. 
    +022    
    +023     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +024     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +025     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +026     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +027     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +028     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +029     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +030     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +031     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +032     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +033     */
    +034    
    +035    /**
    +036     * <p>
    +037     * Defines a list of exceptions to the recurrence rule defined in a component.
    +038     * </p>
    +039     * <p>
    +040     * <b>Examples:</b>
    +041     * 
    +042     * <pre class="brush:java">
    +043     * //date and times
    +044     * ExceptionDates exdate = new ExceptionDates(true);
    +045     * Date datetime1 = ...;
    +046     * exdate.addValue(datetime1);
    +047     * Date datetime2 = ...;
    +048     * exdate.addValue(datetime2);
    +049     * 
    +050     * //dates
    +051     * ExceptionDates exdate = new ExceptionDates(false);
    +052     * Date date1 = ...;
    +053     * exdate.addValue(date1);
    +054     * Date date2 = ...;
    +055     * exdate.addValue(date2);
    +056     * </pre>
    +057     * 
    +058     * </p>
    +059     * @author Michael Angstadt
    +060     * @rfc 5545 p.118-20
    +061     */
    +062    public class ExceptionDates extends ListProperty<Date> {
    +063            private boolean hasTime = true;
    +064    
    +065            /**
    +066             * Creates an exception dates property.
    +067             * @param hasTime true if the dates have a time component, false if they are
    +068             * strictly dates
    +069             */
    +070            public ExceptionDates(boolean hasTime) {
    +071                    setHasTime(hasTime);
    +072            }
    +073    
    +074            /**
    +075             * Gets whether the dates have time components.
    +076             * @return true if the dates have time components, false if they are
    +077             * strictly dates
    +078             */
    +079            public boolean hasTime() {
    +080                    return hasTime;
    +081            }
    +082    
    +083            /**
    +084             * Sets whether the dates have time components.
    +085             * @param hasTime true if the dates have time components, false if they are
    +086             * strictly dates
    +087             */
    +088            public void setHasTime(boolean hasTime) {
    +089                    this.hasTime = hasTime;
    +090            }
    +091    
    +092            @Override
    +093            public String getTimezoneId() {
    +094                    return super.getTimezoneId();
    +095            }
    +096    
    +097            @Override
    +098            public void setTimezoneId(String timezoneId) {
    +099                    super.setTimezoneId(timezoneId);
    +100            }
    +101    
    +102            @Override
    +103            public void setTimezone(VTimezone timezone) {
    +104                    super.setTimezone(timezone);
    +105            }
    +106    
    +107            @Override
    +108            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +109                    String tzid = getTimezoneId();
    +110                    if (tzid != null && tzid.contains("/") && ICalDateFormatter.parseTimeZoneId(tzid) == null) {
    +111                            warnings.add("Unrecognized timezone ID: " + tzid);
    +112                    }
    +113            }
    +114    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ExceptionRule.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ExceptionRule.html new file mode 100644 index 000000000..57f4b7196 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ExceptionRule.html @@ -0,0 +1,134 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.component.ICalComponent;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * <p>
    +034     * Defines an exception to a {@link RecurrenceRule}.
    +035     * </p>
    +036     * <p>
    +037     * Note that this property has been removed from the latest version of the iCal
    +038     * specification. Its use should be avoided.
    +039     * </p>
    +040     * <p>
    +041     * <b>Examples:</b>
    +042     * 
    +043     * <pre class="brush:java">
    +044     * //&quot;bi-weekly&quot;
    +045     * Recurrence recur = new Recurrence.Builder(Frequency.WEEKLY).interval(2).build();
    +046     * ExceptionRule exrule = new ExceptionRule(recur);
    +047     * </pre>
    +048     * 
    +049     * </p>
    +050     * @author Michael Angstadt
    +051     * @rfc 2445 p.114-15
    +052     */
    +053    public class ExceptionRule extends RecurrenceProperty {
    +054            /**
    +055             * Creates a new exception rule property.
    +056             * @param recur the recurrence rule
    +057             */
    +058            public ExceptionRule(biweekly.util.Recurrence recur) {
    +059                    super(recur);
    +060            }
    +061    
    +062            @Override
    +063            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +064                    super.validate(components, warnings);
    +065    
    +066                    warnings.add("Property has been removed from the latest iCal specification.  Its use should be avoided.");
    +067            }
    +068    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/FreeBusy.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/FreeBusy.html new file mode 100644 index 000000000..d70b9b666 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/FreeBusy.html @@ -0,0 +1,201 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.Date;
    +005    import java.util.List;
    +006    
    +007    import biweekly.component.ICalComponent;
    +008    import biweekly.parameter.FreeBusyType;
    +009    import biweekly.util.Duration;
    +010    import biweekly.util.Period;
    +011    
    +012    /*
    +013     Copyright (c) 2013, Michael Angstadt
    +014     All rights reserved.
    +015    
    +016     Redistribution and use in source and binary forms, with or without
    +017     modification, are permitted provided that the following conditions are met: 
    +018    
    +019     1. Redistributions of source code must retain the above copyright notice, this
    +020     list of conditions and the following disclaimer. 
    +021     2. Redistributions in binary form must reproduce the above copyright notice,
    +022     this list of conditions and the following disclaimer in the documentation
    +023     and/or other materials provided with the distribution. 
    +024    
    +025     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +026     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +027     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +028     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +029     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +030     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +031     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +032     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +033     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +034     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +035     */
    +036    
    +037    /**
    +038     * <p>
    +039     * Defines a person's availability over certain time periods (for example,
    +040     * "busy" between 1pm-3pm and 4pm-5pm). Note that this property can contain
    +041     * multiple time periods, but only one availability type may be defined (e.g.
    +042     * "busy" or "free").
    +043     * </p>
    +044     * <p>
    +045     * <b>Examples:</b>
    +046     * 
    +047     * <pre class="brush:java">
    +048     * FreeBusy freebusy = new FreeBusy();
    +049     * freebusy.setType(FreeBusyType.BUSY);
    +050     * 
    +051     * Date onePM = ...
    +052     * Date threePM = ...
    +053     * freebusy.addValue(onePM, threePM);
    +054     * 
    +055     * Date fourPM = ...
    +056     * Duration oneHour = Duration.builder().hours(1).build();
    +057     * freeBusy.addValue(fourPM, oneHour);
    +058     * </pre>
    +059     * 
    +060     * </p>
    +061     * @author Michael Angstadt
    +062     * @rfc 5545 p.100-1
    +063     */
    +064    public class FreeBusy extends ICalProperty {
    +065            private final List<Period> values = new ArrayList<Period>();
    +066    
    +067            /**
    +068             * Adds a time period.
    +069             * @param start the start date
    +070             * @param end the end date
    +071             */
    +072            public void addValue(Date start, Date end) {
    +073                    values.add(new Period(start, end));
    +074            }
    +075    
    +076            /**
    +077             * Adds a time period.
    +078             * @param start the start date
    +079             * @param duration the duration
    +080             */
    +081            public void addValue(Date start, Duration duration) {
    +082                    values.add(new Period(start, duration));
    +083            }
    +084    
    +085            /**
    +086             * Gets all time periods.
    +087             * @return the time periods
    +088             */
    +089            public List<Period> getValues() {
    +090                    return values;
    +091            }
    +092    
    +093            /**
    +094             * Gets the person's status over the time periods that are specified in this
    +095             * property (for example, "free" or "busy"). If not set, the user should be
    +096             * considered "busy".
    +097             * @return the type or null if not set
    +098             * @rfc 5545 p.20
    +099             */
    +100            public FreeBusyType getType() {
    +101                    return parameters.getFreeBusyType();
    +102            }
    +103    
    +104            /**
    +105             * Sets the person's status over the time periods that are specified in this
    +106             * property (for example, "free" or "busy"). If not set, the user should be
    +107             * considered "busy".
    +108             * @param fbType the type or null to remove
    +109             * @rfc 5545 p.20
    +110             */
    +111            public void setType(FreeBusyType fbType) {
    +112                    parameters.setFreeBusyType(fbType);
    +113            }
    +114    
    +115            @Override
    +116            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +117                    if (values.isEmpty()) {
    +118                            warnings.add("No time periods are defined.");
    +119                    } else {
    +120                            for (Period timePeriod : values) {
    +121                                    if (timePeriod.getStartDate() == null) {
    +122                                            warnings.add("One or more time periods do not have start dates.");
    +123                                            break;
    +124                                    }
    +125                            }
    +126    
    +127                            for (Period timePeriod : values) {
    +128                                    if (timePeriod.getEndDate() == null && timePeriod.getDuration() == null) {
    +129                                            warnings.add("One or more time periods do not have either an end date or a duration.");
    +130                                            break;
    +131                                    }
    +132                            }
    +133                    }
    +134            }
    +135    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Geo.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Geo.html new file mode 100644 index 000000000..36b0c3948 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Geo.html @@ -0,0 +1,180 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.component.ICalComponent;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * <p>
    +034     * Defines a set of geographical coordinates.
    +035     * </p>
    +036     * <p>
    +037     * <b>Examples:</b>
    +038     * 
    +039     * <pre class="brush:java">
    +040     * Geo geo = new Geo(40.714623, -74.006605);
    +041     * </pre>
    +042     * 
    +043     * </p>
    +044     * @author Michael Angstadt
    +045     * @rfc 5545 p.85-7
    +046     */
    +047    public class Geo extends ICalProperty {
    +048            private Double latitude;
    +049            private Double longitude;
    +050    
    +051            /**
    +052             * Creates a new geo property.
    +053             * @param latitude the latitude
    +054             * @param longitude the longitude
    +055             */
    +056            public Geo(Double latitude, Double longitude) {
    +057                    this.latitude = latitude;
    +058                    this.longitude = longitude;
    +059            }
    +060    
    +061            /**
    +062             * Gets the latitude.
    +063             * @return the latitude
    +064             */
    +065            public Double getLatitude() {
    +066                    return latitude;
    +067            }
    +068    
    +069            /**
    +070             * Sets the latitude.
    +071             * @param latitude the latitude
    +072             */
    +073            public void setLatitude(Double latitude) {
    +074                    this.latitude = latitude;
    +075            }
    +076    
    +077            /**
    +078             * Gets the longitude.
    +079             * @return the longitude
    +080             */
    +081            public Double getLongitude() {
    +082                    return longitude;
    +083            }
    +084    
    +085            /**
    +086             * Sets the longitude.
    +087             * @param longitude the longitude
    +088             */
    +089            public void setLongitude(Double longitude) {
    +090                    this.longitude = longitude;
    +091            }
    +092    
    +093            /**
    +094             * Converts a coordinate in the degrees-minutes-seconds format into its
    +095             * decimal equivalent.
    +096             * @param degrees the degrees
    +097             * @param minutes the minutes
    +098             * @param seconds the seconds
    +099             * @return the decimal value
    +100             */
    +101            public static double toDecimal(int degrees, int minutes, int seconds) {
    +102                    return degrees + (minutes / 60.0) + (seconds / 3600.0);
    +103            }
    +104    
    +105            @Override
    +106            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +107                    if (latitude == null) {
    +108                            warnings.add("Latitude is not set.");
    +109                    }
    +110                    if (longitude == null) {
    +111                            warnings.add("Longitude is not set.");
    +112                    }
    +113            }
    +114    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ICalProperty.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ICalProperty.html new file mode 100644 index 000000000..9e09b8a1f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ICalProperty.html @@ -0,0 +1,378 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.Collection;
    +005    import java.util.List;
    +006    
    +007    import biweekly.ICalendar;
    +008    import biweekly.component.ICalComponent;
    +009    import biweekly.component.VTimezone;
    +010    import biweekly.parameter.ICalParameters;
    +011    
    +012    /*
    +013     Copyright (c) 2013, Michael Angstadt
    +014     All rights reserved.
    +015    
    +016     Redistribution and use in source and binary forms, with or without
    +017     modification, are permitted provided that the following conditions are met: 
    +018    
    +019     1. Redistributions of source code must retain the above copyright notice, this
    +020     list of conditions and the following disclaimer. 
    +021     2. Redistributions in binary form must reproduce the above copyright notice,
    +022     this list of conditions and the following disclaimer in the documentation
    +023     and/or other materials provided with the distribution. 
    +024    
    +025     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +026     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +027     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +028     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +029     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +030     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +031     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +032     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +033     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +034     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +035     */
    +036    
    +037    /**
    +038     * Base class for all iCalendar properties.
    +039     * @author Michael Angstadt
    +040     */
    +041    public abstract class ICalProperty {
    +042            /**
    +043             * The property parameters.
    +044             */
    +045            protected ICalParameters parameters = new ICalParameters();
    +046    
    +047            /**
    +048             * Gets the property's parameters.
    +049             * @return the parameters
    +050             */
    +051            public ICalParameters getParameters() {
    +052                    return parameters;
    +053            }
    +054    
    +055            /**
    +056             * Sets the property's parameters
    +057             * @param parameters the parameters
    +058             */
    +059            public void setParameters(ICalParameters parameters) {
    +060                    this.parameters = parameters;
    +061            }
    +062    
    +063            /**
    +064             * Gets the first value of a parameter with the given name.
    +065             * @param name the parameter name (case insensitive, e.g. "LANGUAGE")
    +066             * @return the parameter value or null if not found
    +067             */
    +068            public String getParameter(String name) {
    +069                    return parameters.first(name);
    +070            }
    +071    
    +072            /**
    +073             * Gets all values of a parameter with the given name.
    +074             * @param name the parameter name (case insensitive, e.g. "LANGUAGE")
    +075             * @return the parameter values
    +076             */
    +077            public List<String> getParameters(String name) {
    +078                    return parameters.get(name);
    +079            }
    +080    
    +081            /**
    +082             * Adds a value to a parameter.
    +083             * @param name the parameter name (case insensitive, e.g. "LANGUAGE")
    +084             * @param value the parameter value
    +085             */
    +086            public void addParameter(String name, String value) {
    +087                    parameters.put(name, value);
    +088            }
    +089    
    +090            /**
    +091             * Replaces all existing values of a parameter with the given value.
    +092             * @param name the parameter name (case insensitive, e.g. "LANGUAGE")
    +093             * @param value the parameter value
    +094             */
    +095            public void setParameter(String name, String value) {
    +096                    parameters.replace(name, value);
    +097            }
    +098    
    +099            /**
    +100             * Replaces all existing values of a parameter with the given values.
    +101             * @param name the parameter name (case insensitive, e.g. "LANGUAGE")
    +102             * @param values the parameter values
    +103             */
    +104            public void setParameter(String name, Collection<String> values) {
    +105                    parameters.replace(name, values);
    +106            }
    +107    
    +108            /**
    +109             * Removes a parameter from the property.
    +110             * @param name the parameter name (case insensitive, e.g. "LANGUAGE")
    +111             */
    +112            public void removeParameter(String name) {
    +113                    parameters.removeAll(name);
    +114            }
    +115    
    +116            //Note: The following parameter helper methods are package-scoped to prevent them from cluttering up the Javadocs
    +117    
    +118            /**
    +119             * Gets a URI pointing to additional information about the entity
    +120             * represented by the property.
    +121             * @return the URI or null if not set
    +122             * @rfc 5545 p.14-5
    +123             */
    +124            String getAltRepresentation() {
    +125                    return parameters.getAltRepresentation();
    +126            }
    +127    
    +128            /**
    +129             * Sets a URI pointing to additional information about the entity
    +130             * represented by the property.
    +131             * @param uri the URI or null to remove
    +132             * @rfc 5545 p.14-5
    +133             */
    +134            void setAltRepresentation(String uri) {
    +135                    parameters.setAltRepresentation(uri);
    +136            }
    +137    
    +138            /**
    +139             * Gets the content-type of the property's value.
    +140             * @return the content type (e.g. "image/png") or null if not set
    +141             * @rfc 5545 p.19-20
    +142             */
    +143            String getFormatType() {
    +144                    return parameters.getFormatType();
    +145            }
    +146    
    +147            /**
    +148             * Sets the content-type of the property's value.
    +149             * @param formatType the content type (e.g. "image/png") or null to remove
    +150             * @rfc 5545 p.19-20
    +151             */
    +152            void setFormatType(String formatType) {
    +153                    parameters.setFormatType(formatType);
    +154            }
    +155    
    +156            /**
    +157             * Gets the language that the property value is written in.
    +158             * @return the language (e.g. "en" for English) or null if not set
    +159             * @rfc 5545 p.21
    +160             */
    +161            String getLanguage() {
    +162                    return parameters.getLanguage();
    +163            }
    +164    
    +165            /**
    +166             * Sets the language that the property value is written in.
    +167             * @param language the language (e.g. "en" for English) or null to remove
    +168             * @rfc 5545 p.21
    +169             */
    +170            void setLanguage(String language) {
    +171                    parameters.setLanguage(language);
    +172            }
    +173    
    +174            /**
    +175             * Gets the timezone identifier. This either (a) references the
    +176             * {@link TimezoneId} property of a {@link VTimezone} component, or (b)
    +177             * specifies a globally-defined timezone (e.g. "America/New_York"). For a
    +178             * list of globally-defined timezones, see the <a
    +179             * href="http://www.twinsun.com/tz/tz-link.htm">TZ database</a>.
    +180             * @return the timezone identifier or null if not set
    +181             * @rfc 5545 p.27-8
    +182             */
    +183            String getTimezoneId() {
    +184                    return parameters.getTimezoneId();
    +185            }
    +186    
    +187            /**
    +188             * Sets the timezone identifier. This either (a) references the
    +189             * {@link TimezoneId} property of a {@link VTimezone} component, or (b)
    +190             * specifies a globally-defined timezone (e.g. "America/New_York"). For a
    +191             * list of globally-defined timezones, see the <a
    +192             * href="http://www.twinsun.com/tz/tz-link.htm">TZ database</a>.
    +193             * @param timezoneId the timezone identifier (e.g. "America/New_York") or
    +194             * null to remove
    +195             * @rfc 5545 p.27-8
    +196             */
    +197            void setTimezoneId(String timezoneId) {
    +198                    parameters.setTimezoneId(timezoneId);
    +199            }
    +200    
    +201            /**
    +202             * Sets the property's timezone to a timezone that is defined within the
    +203             * iCalendar object. Use {@link #setTimezoneId(String)} to use a
    +204             * globally-defined timezone (e.g. "America/New_York").
    +205             * @param timezone the timezone component to reference or null to remove
    +206             * @rfc 5545 p.27-8
    +207             */
    +208            void setTimezone(VTimezone timezone) {
    +209                    if (timezone == null) {
    +210                            setTimezoneId(null);
    +211                            return;
    +212                    }
    +213    
    +214                    TimezoneId tzid = timezone.getTimezoneId();
    +215                    if (tzid != null) {
    +216                            setTimezoneId(tzid.getValue());
    +217                    }
    +218            }
    +219    
    +220            /**
    +221             * Gets a person that is acting on behalf of the person defined in the
    +222             * property.
    +223             * @return a URI representing the person (typically, an email URI, e.g.
    +224             * "mailto:janedoe@example.com") or null if not set
    +225             * @rfc 5545 p.27
    +226             */
    +227            String getSentBy() {
    +228                    return parameters.getSentBy();
    +229            }
    +230    
    +231            /**
    +232             * Sets a person that is acting on behalf of the person defined in the
    +233             * property.
    +234             * @param uri a URI representing the person (typically, an email URI, e.g.
    +235             * "mailto:janedoe@example.com") or null to remove
    +236             * @rfc 5545 p.27
    +237             */
    +238            void setSentBy(String uri) {
    +239                    parameters.setSentBy(uri);
    +240            }
    +241    
    +242            /**
    +243             * Gets the display name of the person.
    +244             * @return the display name (e.g. "John Doe") or null if not set
    +245             * @rfc 5545 p.15-6
    +246             */
    +247            String getCommonName() {
    +248                    return parameters.getCommonName();
    +249            }
    +250    
    +251            /**
    +252             * Sets the display name of the person.
    +253             * @param commonName the display name (e.g. "John Doe") or null to remove
    +254             * @rfc 5545 p.15-6
    +255             */
    +256            void setCommonName(String commonName) {
    +257                    parameters.setCommonName(commonName);
    +258            }
    +259    
    +260            /**
    +261             * Gets a URI that contains additional information about the person.
    +262             * @return the URI (e.g. an LDAP URI) or null if not set
    +263             * @rfc 5545 p.18
    +264             */
    +265            String getDirectoryEntry() {
    +266                    return parameters.getDirectoryEntry();
    +267            }
    +268    
    +269            /**
    +270             * Sets a URI that contains additional information about the person.
    +271             * @param uri the URI (e.g. an LDAP URI) or null to remove
    +272             * @rfc 5545 p.18
    +273             */
    +274            void setDirectoryEntry(String uri) {
    +275                    parameters.setDirectoryEntry(uri);
    +276            }
    +277    
    +278            /**
    +279             * Checks the property for data consistency problems or deviations from the
    +280             * spec. These problems will not prevent the property from being written to
    +281             * a data stream, but may prevent it from being parsed correctly by the
    +282             * consuming application. These problems can largely be avoided by reading
    +283             * the Javadocs of the property class, or by being familiar with the
    +284             * iCalendar standard.
    +285             * @param components the hierarchy of components that the property belongs
    +286             * to
    +287             * @see ICalendar#validate
    +288             * @return a list of warnings or an empty list if no problems were found
    +289             */
    +290            public final List<String> validate(List<ICalComponent> components) {
    +291                    //validate property value
    +292                    List<String> warnings = new ArrayList<String>(0);
    +293                    validate(components, warnings);
    +294    
    +295                    //validate parameters
    +296                    warnings.addAll(parameters.validate());
    +297    
    +298                    return warnings;
    +299            }
    +300    
    +301            /**
    +302             * Checks the property for data consistency problems or deviations from the
    +303             * spec. Meant to be overridden by child classes that wish to provide
    +304             * validation logic.
    +305             * @param components the hierarchy of components that the property belongs
    +306             * to
    +307             * @param warnings the list to add the warnings to
    +308             */
    +309            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +310                    //do nothing
    +311            }
    +312    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/IntegerProperty.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/IntegerProperty.html new file mode 100644 index 000000000..a8e1a4766 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/IntegerProperty.html @@ -0,0 +1,106 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * Represents a property whose value is an integer.
    +030     * @author Michael Angstadt
    +031     */
    +032    public class IntegerProperty extends ValuedProperty<Integer> {
    +033            /**
    +034             * Creates a new integer property.
    +035             * @param value the property's value
    +036             */
    +037            public IntegerProperty(Integer value) {
    +038                    super(value);
    +039            }
    +040    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/LastModified.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/LastModified.html new file mode 100644 index 000000000..ad09db164 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/LastModified.html @@ -0,0 +1,121 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Date;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * <p>
    +032     * Defines the date and time that the calendar data in a component was last
    +033     * changed.
    +034     * </p>
    +035     * <p>
    +036     * <b>Examples:</b>
    +037     * 
    +038     * <pre class="brush:java">
    +039     * Date datetime = ...
    +040     * LastModified lastModified = new LastModified(datetime);
    +041     * </pre>
    +042     * 
    +043     * </p>
    +044     * @author Michael Angstadt
    +045     * @rfc 5545 p.138
    +046     */
    +047    public class LastModified extends DateTimeProperty {
    +048            /**
    +049             * Creates a last modified property.
    +050             * @param date the date
    +051             */
    +052            public LastModified(Date date) {
    +053                    super(date);
    +054            }
    +055    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ListProperty.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ListProperty.html new file mode 100644 index 000000000..c1aadafb2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ListProperty.html @@ -0,0 +1,155 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.List;
    +005    
    +006    import biweekly.component.ICalComponent;
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * Represents a property whose value is a list of values.
    +035     * @author Michael Angstadt
    +036     * @param <T> the value type
    +037     */
    +038    public class ListProperty<T> extends ICalProperty {
    +039            private final List<T> values;
    +040    
    +041            /**
    +042             * Creates a new list property.
    +043             */
    +044            public ListProperty() {
    +045                    values = new ArrayList<T>();
    +046            }
    +047    
    +048            /**
    +049             * Creates a new list property.
    +050             * @param values the values to initialize the property with
    +051             */
    +052            public ListProperty(T... values) {
    +053                    this();
    +054                    for (T value : values) {
    +055                            this.values.add(value);
    +056                    }
    +057            }
    +058    
    +059            /**
    +060             * Creates a new list property.
    +061             * @param values the values to initialize the property with
    +062             */
    +063            public ListProperty(List<T> values) {
    +064                    this.values = values;
    +065            }
    +066    
    +067            /**
    +068             * Adds a value to this property.
    +069             * @param value the value to add
    +070             */
    +071            public void addValue(T value) {
    +072                    values.add(value);
    +073            }
    +074    
    +075            /**
    +076             * Gets the values of this property.
    +077             * @return the values
    +078             */
    +079            public List<T> getValues() {
    +080                    return values;
    +081            }
    +082    
    +083            @Override
    +084            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +085                    if (values.isEmpty()) {
    +086                            warnings.add("Value list is empty.");
    +087                    }
    +088            }
    +089    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Location.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Location.html new file mode 100644 index 000000000..64f817ad6 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Location.html @@ -0,0 +1,137 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * <p>
    +030     * Defines the physical location of an event.
    +031     * </p>
    +032     * <p>
    +033     * <b>Examples:</b>
    +034     * 
    +035     * <pre class="brush:java">
    +036     * Location location = new Location(&quot;Room 32B&quot;);
    +037     * </pre>
    +038     * 
    +039     * </p>
    +040     * @author Michael Angstadt
    +041     * @rfc 5545 p.87-8
    +042     */
    +043    public class Location extends TextProperty {
    +044            /**
    +045             * Creates a location property.
    +046             * @param location the location (e.g. "Room 101")
    +047             */
    +048            public Location(String location) {
    +049                    super(location);
    +050            }
    +051    
    +052            @Override
    +053            public String getAltRepresentation() {
    +054                    return super.getAltRepresentation();
    +055            }
    +056    
    +057            @Override
    +058            public void setAltRepresentation(String uri) {
    +059                    super.setAltRepresentation(uri);
    +060            }
    +061    
    +062            @Override
    +063            public String getLanguage() {
    +064                    return super.getLanguage();
    +065            }
    +066    
    +067            @Override
    +068            public void setLanguage(String language) {
    +069                    super.setLanguage(language);
    +070            }
    +071    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Method.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Method.html new file mode 100644 index 000000000..35bad9f61 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Method.html @@ -0,0 +1,118 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * <p>
    +030     * Specifies the value of the Content-Type "method" parameter if the iCalendar
    +031     * object is defined as a MIME message entity.
    +032     * </p>
    +033     * <p>
    +034     * <b>Examples:</b>
    +035     * 
    +036     * <pre class="brush:java">
    +037     * Method method = new Method(&quot;value&quot;);
    +038     * </pre>
    +039     * 
    +040     * </p>
    +041     * @author Michael Angstadt
    +042     * @rfc 5545 p.77-8
    +043     */
    +044    public class Method extends TextProperty {
    +045            /**
    +046             * Creates a new method property.
    +047             * @param value the property value
    +048             */
    +049            public Method(String value) {
    +050                    super(value);
    +051            }
    +052    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Organizer.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Organizer.html new file mode 100644 index 000000000..1845f5641 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Organizer.html @@ -0,0 +1,186 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import biweekly.component.VEvent;
    +004    import biweekly.component.VFreeBusy;
    +005    import biweekly.component.VJournal;
    +006    import biweekly.component.VTodo;
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * <p>
    +035     * Defines an organizer. This property has different meanings depending on the
    +036     * component it belongs to:
    +037     * <ul>
    +038     * <li>{@link VEvent} - The organizer of the event.</li>
    +039     * <li>{@link VTodo} - The creator of the to-do task.</li>
    +040     * <li>{@link VJournal} - The owner of the journal entry.</li>
    +041     * <li>{@link VFreeBusy} - The person requesting the free/busy time.</li>
    +042     * </ul>
    +043     * </p>
    +044     * <p>
    +045     * <b>Examples:</b>
    +046     * 
    +047     * <pre class="brush:java">
    +048     * Organizer organizer = Organizer.email(&quot;johndoe@example.com&quot;);
    +049     * organizer.setCommonName(&quot;John Doe&quot;);
    +050     * </pre>
    +051     * 
    +052     * </p>
    +053     * @author Michael Angstadt
    +054     * @rfc 5545 p.111-2
    +055     */
    +056    public class Organizer extends TextProperty {
    +057            /**
    +058             * Creates an organizer property
    +059             * @param uri a URI representing the organizer (typically, an email address,
    +060             * e.g. "mailto:johndoe@example.com")
    +061             */
    +062            public Organizer(String uri) {
    +063                    super(uri);
    +064            }
    +065    
    +066            /**
    +067             * Creates an organizer property using an email address as its value.
    +068             * @param email the email address (e.g. "johndoe@example.com")
    +069             * @return the property
    +070             */
    +071            public static Organizer email(String email) {
    +072                    return new Organizer("mailto:" + email);
    +073            }
    +074    
    +075            @Override
    +076            public String getSentBy() {
    +077                    return super.getSentBy();
    +078            }
    +079    
    +080            @Override
    +081            public void setSentBy(String sentBy) {
    +082                    super.setSentBy(sentBy);
    +083            }
    +084    
    +085            @Override
    +086            public String getCommonName() {
    +087                    return super.getCommonName();
    +088            }
    +089    
    +090            @Override
    +091            public void setCommonName(String commonName) {
    +092                    super.setCommonName(commonName);
    +093            }
    +094    
    +095            @Override
    +096            public String getDirectoryEntry() {
    +097                    return super.getDirectoryEntry();
    +098            }
    +099    
    +100            @Override
    +101            public void setDirectoryEntry(String directoryEntry) {
    +102                    super.setDirectoryEntry(directoryEntry);
    +103            }
    +104    
    +105            /**
    +106             * Gets the language that the common name parameter is written in.
    +107             */
    +108            @Override
    +109            public String getLanguage() {
    +110                    return super.getLanguage();
    +111            }
    +112    
    +113            /**
    +114             * Sets the language that the common name parameter is written in.
    +115             */
    +116            @Override
    +117            public void setLanguage(String language) {
    +118                    super.setLanguage(language);
    +119            }
    +120    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/PercentComplete.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/PercentComplete.html new file mode 100644 index 000000000..d233fd04f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/PercentComplete.html @@ -0,0 +1,132 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.component.ICalComponent;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * <p>
    +034     * Defines a to-do task's level of completion.
    +035     * </p>
    +036     * <p>
    +037     * <b>Examples:</b>
    +038     * 
    +039     * <pre class="brush:java">
    +040     * PercentComplete percentComplete = new PercentComplete(50); //50%
    +041     * 
    +042     * VTodo todo = new VTodo();
    +043     * todo.setPercentComplete(50);
    +044     * </pre>
    +045     * 
    +046     * </p>
    +047     * @author Michael Angstadt
    +048     * @rfc 5545 p.88-9
    +049     */
    +050    public class PercentComplete extends IntegerProperty {
    +051            /**
    +052             * Creates a percent complete property.
    +053             * @param percent the percentage (e.g. "50" for 50%)
    +054             */
    +055            public PercentComplete(Integer percent) {
    +056                    super(percent);
    +057            }
    +058    
    +059            @Override
    +060            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +061                    super.validate(components, warnings);
    +062                    if (value != null && (value < 0 || value > 100)) {
    +063                            warnings.add("Value should be between 1 and 100 inclusive: " + value);
    +064                    }
    +065            }
    +066    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Priority.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Priority.html new file mode 100644 index 000000000..a9b385645 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Priority.html @@ -0,0 +1,171 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * <p>
    +030     * Defines the priority of an event or to-do task.
    +031     * </p>
    +032     * <p>
    +033     * <b>Examples:</b>
    +034     * 
    +035     * <pre class="brush:java">
    +036     * //highest
    +037     * Priority priority = new Priority(1);
    +038     * 
    +039     * //lowest
    +040     * Priority priority = new Priority(9);
    +041     * 
    +042     * VTodo todo = new VTodo();
    +043     * todo.setPriority(1);
    +044     * </pre>
    +045     * 
    +046     * </p>
    +047     * @author Michael Angstadt
    +048     * @rfc 5545 p.89-90
    +049     */
    +050    public class Priority extends IntegerProperty {
    +051            /**
    +052             * Creates a priority property.
    +053             * @param priority the priority ("0" is undefined, "1" is the highest, "9"
    +054             * is the lowest)
    +055             */
    +056            public Priority(Integer priority) {
    +057                    super(priority);
    +058            }
    +059    
    +060            /**
    +061             * Determines if this priority is considered "high" priority.
    +062             * @return true if the priority is between 1 and 4, false if not
    +063             */
    +064            public boolean isHigh() {
    +065                    return value != null && value >= 1 && value <= 4;
    +066            }
    +067    
    +068            /**
    +069             * Determines if this priority is considered "medium" priority.
    +070             * @return true if the priority is "5", false if not
    +071             */
    +072            public boolean isMedium() {
    +073                    return value != null && value == 5;
    +074            }
    +075    
    +076            /**
    +077             * Determines if this priority is considered "low" priority.
    +078             * @return true if the priority is between 6 and 9, false if not
    +079             */
    +080            public boolean isLow() {
    +081                    return value != null && value >= 6 && value <= 9;
    +082            }
    +083    
    +084            /**
    +085             * Determines if this priority has an "undefined" value.
    +086             * @return true if the priority is "0", false if not
    +087             */
    +088            public boolean isUndefined() {
    +089                    return value != null && value == 0;
    +090            }
    +091    
    +092            /**
    +093             * Converts this priority to its two-character CUA code.
    +094             * @return the CUA code (e.g. "B1" for "4") or null if the priority cannot
    +095             * be converted to a CUA code
    +096             */
    +097            public String toCuaPriority() {
    +098                    if (value == null || value < 1 || value > 9) {
    +099                            return null;
    +100                    }
    +101                    int letter = ((value - 1) / 3) + 'A';
    +102                    int number = ((value - 1) % 3) + 1;
    +103                    return (char) letter + "" + number;
    +104            }
    +105    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ProductId.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ProductId.html new file mode 100644 index 000000000..80079c22a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ProductId.html @@ -0,0 +1,131 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import biweekly.Biweekly;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * <p>
    +032     * Identifies the application that created the iCalendar object.
    +033     * </p>
    +034     * <p>
    +035     * <b>Examples:</b>
    +036     * 
    +037     * <pre class="brush:java">
    +038     * ProductId prodid = new ProductId(&quot;-//Company//Application Name//EN&quot;);
    +039     * 
    +040     * ICalendar ical = new ICalendar();
    +041     * ical.setProductId(&quot;-//Company//Application Name//EN&quot;);
    +042     * </pre>
    +043     * 
    +044     * </p>
    +045     * @author Michael Angstadt
    +046     * @rfc 5545 p.78-9
    +047     */
    +048    public class ProductId extends TextProperty {
    +049            /**
    +050             * Creates a new product identifier property.
    +051             * @param value a unique string representing the application (e.g.
    +052             * "-//Company//Application Name//EN")
    +053             */
    +054            public ProductId(String value) {
    +055                    super(value);
    +056            }
    +057    
    +058            /**
    +059             * Creates a new product identifier property that represents this library.
    +060             * @return the property
    +061             */
    +062            public static ProductId biweekly() {
    +063                    return new ProductId("-//Michael Angstadt//biweekly " + Biweekly.VERSION + "//EN");
    +064            }
    +065    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RawProperty.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RawProperty.html new file mode 100644 index 000000000..338badd03 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RawProperty.html @@ -0,0 +1,126 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import biweekly.ICalDataType;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * A property that does not have a marshaller associated with it.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class RawProperty extends ICalProperty {
    +035            private String name;
    +036            private ICalDataType dataType;
    +037            private String value;
    +038    
    +039            public RawProperty(String name, String value) {
    +040                    this(name, null, value);
    +041            }
    +042    
    +043            public RawProperty(String name, ICalDataType dataType, String value) {
    +044                    this.name = name;
    +045                    this.dataType = dataType;
    +046                    this.value = value;
    +047            }
    +048    
    +049            public String getValue() {
    +050                    return value;
    +051            }
    +052    
    +053            public ICalDataType getDataType() {
    +054                    return dataType;
    +055            }
    +056    
    +057            public String getName() {
    +058                    return name;
    +059            }
    +060    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceDates.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceDates.html new file mode 100644 index 000000000..91eff3354 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceDates.html @@ -0,0 +1,206 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Date;
    +004    import java.util.List;
    +005    
    +006    import biweekly.component.ICalComponent;
    +007    import biweekly.component.VTimezone;
    +008    import biweekly.util.ICalDateFormatter;
    +009    import biweekly.util.Period;
    +010    
    +011    /*
    +012     Copyright (c) 2013, Michael Angstadt
    +013     All rights reserved.
    +014    
    +015     Redistribution and use in source and binary forms, with or without
    +016     modification, are permitted provided that the following conditions are met: 
    +017    
    +018     1. Redistributions of source code must retain the above copyright notice, this
    +019     list of conditions and the following disclaimer. 
    +020     2. Redistributions in binary form must reproduce the above copyright notice,
    +021     this list of conditions and the following disclaimer in the documentation
    +022     and/or other materials provided with the distribution. 
    +023    
    +024     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +025     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +026     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +027     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +028     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +029     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +030     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +031     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +032     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +033     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +034     */
    +035    
    +036    /**
    +037     * <p>
    +038     * Defines a list of dates or periods that help define a recurrence rule. It
    +039     * must contain either dates or time periods. It cannot contain a combination of
    +040     * both.
    +041     * </p>
    +042     * <p>
    +043     * <b>Examples:</b>
    +044     * 
    +045     * <pre class="brush:java">
    +046     * //date-time values
    +047     * Date datetime1 = ...
    +048     * Date datetime2 = ...
    +049     * List&lt;Date&gt; datetimes = Arrays.asList(datetime1, datetime2);
    +050     * RecurrenceDates prop = new RecurrenceDates(datetimes, true);
    +051     * 
    +052     * //date values
    +053     * Date date1 = ...
    +054     * Date date2 = ...
    +055     * List&lt;Date&gt; dates = Arrays.asList(date1, date2);
    +056     * RecurrenceDates prop = new RecurrenceDates(dates, false);
    +057     * 
    +058     * //periods
    +059     * Period period1 = ...
    +060     * Period period2 = ...
    +061     * List&lt;Period&gt; periods = Arrays.asList(period1, period2);
    +062     * RecurrenceDates prop = new RecurrenceDates(periods, true);
    +063     * </pre>
    +064     * 
    +065     * </p>
    +066     * @author Michael Angstadt
    +067     * @rfc 5545 p.120-2
    +068     */
    +069    public class RecurrenceDates extends ICalProperty {
    +070            private List<Date> dates;
    +071            private boolean hasTime;
    +072            private List<Period> periods;
    +073    
    +074            /**
    +075             * Creates a recurrence dates property.
    +076             * @param dates the recurrence dates
    +077             * @param hasTime true if the dates have a time component, false if they are
    +078             * strictly dates
    +079             */
    +080            public RecurrenceDates(List<Date> dates, boolean hasTime) {
    +081                    this.dates = dates;
    +082                    this.hasTime = hasTime;
    +083            }
    +084    
    +085            /**
    +086             * Creates a recurrence dates property.
    +087             * @param periods the time periods
    +088             */
    +089            public RecurrenceDates(List<Period> periods) {
    +090                    this.periods = periods;
    +091            }
    +092    
    +093            /**
    +094             * Gets the recurrence dates.
    +095             * @return the dates or null if this property contains periods
    +096             */
    +097            public List<Date> getDates() {
    +098                    return dates;
    +099            }
    +100    
    +101            /**
    +102             * Gets whether the recurrence dates have time components.
    +103             * @return true if the dates have a time component, false if they are
    +104             * strictly dates
    +105             */
    +106            public boolean hasTime() {
    +107                    return hasTime;
    +108            }
    +109    
    +110            /**
    +111             * Gets the time periods.
    +112             * @return the time periods or null if this property contains dates
    +113             */
    +114            public List<Period> getPeriods() {
    +115                    return periods;
    +116            }
    +117    
    +118            @Override
    +119            public String getTimezoneId() {
    +120                    return super.getTimezoneId();
    +121            }
    +122    
    +123            @Override
    +124            public void setTimezoneId(String timezoneId) {
    +125                    super.setTimezoneId(timezoneId);
    +126            }
    +127    
    +128            @Override
    +129            public void setTimezone(VTimezone timezone) {
    +130                    super.setTimezone(timezone);
    +131            }
    +132    
    +133            @Override
    +134            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +135                    String tzid = getTimezoneId();
    +136                    if (tzid != null && tzid.contains("/") && ICalDateFormatter.parseTimeZoneId(tzid) == null) {
    +137                            warnings.add("Unrecognized timezone ID: " + tzid);
    +138                    }
    +139            }
    +140    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceId.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceId.html new file mode 100644 index 000000000..255ab14dd --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceId.html @@ -0,0 +1,159 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Date;
    +004    
    +005    import biweekly.parameter.Range;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * <p>
    +034     * Records the original value of the {@link DateStart} property if a recurrence
    +035     * instance has been modified. Used in conjunction with the {@link Uid} and
    +036     * {@link Sequence} properties to uniquely identify a recurrence instance.
    +037     * </p>
    +038     * <p>
    +039     * <b>Examples:</b>
    +040     * 
    +041     * <pre class="brush:java">
    +042     * //date-time value
    +043     * Date datetime = ...
    +044     * RecurrenceId recurrenceId = new RecurrenceId(datetime);
    +045     * 
    +046     * //datevalue
    +047     * Date date = ...
    +048     * RecurrenceId recurrenceId = new RecurrenceId(date, false);
    +049     * </pre>
    +050     * 
    +051     * </p>
    +052     * @author Michael Angstadt
    +053     * @rfc 5545 p.112-4
    +054     */
    +055    public class RecurrenceId extends DateOrDateTimeProperty {
    +056            /**
    +057             * Creates a recurrence ID property.
    +058             * @param originalStartDate the original start date
    +059             */
    +060            public RecurrenceId(Date originalStartDate) {
    +061                    this(originalStartDate, true);
    +062            }
    +063    
    +064            /**
    +065             * Creates a recurrence ID property.
    +066             * @param originalStartDate the original start date
    +067             * @param hasTime true to include the time component of the date, false not
    +068             * to
    +069             */
    +070            public RecurrenceId(Date originalStartDate, boolean hasTime) {
    +071                    super(originalStartDate, hasTime);
    +072            }
    +073    
    +074            /**
    +075             * Gets the effective range of recurrence instances from the instance
    +076             * specified by this property.
    +077             * @return the range or null if not set
    +078             * @rfc 5545 p.23-4
    +079             */
    +080            public Range getRange() {
    +081                    return parameters.getRange();
    +082            }
    +083    
    +084            /**
    +085             * Sets the effective range of recurrence instances from the instance
    +086             * specified by this property.
    +087             * @param range the range or null to remove
    +088             * @rfc 5545 p.23-4
    +089             */
    +090            public void setRange(Range range) {
    +091                    parameters.setRange(range);
    +092            }
    +093    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceProperty.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceProperty.html new file mode 100644 index 000000000..4c0f52bfb --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceProperty.html @@ -0,0 +1,127 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.component.ICalComponent;
    +006    import biweekly.util.Recurrence;
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * Defines a property whose value is a recurrence rule.
    +035     * @author Michael Angstadt
    +036     */
    +037    public class RecurrenceProperty extends ValuedProperty<Recurrence> {
    +038            /**
    +039             * Creates a new recurrence property.
    +040             * @param recur the recurrence value
    +041             */
    +042            public RecurrenceProperty(Recurrence recur) {
    +043                    super(recur);
    +044            }
    +045    
    +046            @Override
    +047            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +048                    super.validate(components, warnings);
    +049                    if (value == null) {
    +050                            return;
    +051                    }
    +052    
    +053                    if (value.getFrequency() == null) {
    +054                            warnings.add("Frequency is not set (it is a required field).");
    +055                    }
    +056    
    +057                    if (value.getUntil() != null && value.getCount() != null) {
    +058                            warnings.add("\"UNTIL\" and \"COUNT\" cannot both be set.");
    +059                    }
    +060            }
    +061    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceRule.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceRule.html new file mode 100644 index 000000000..700321ba0 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RecurrenceRule.html @@ -0,0 +1,136 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.component.ICalComponent;
    +006    import biweekly.util.Recurrence;
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * <p>
    +035     * Defines how often a component repeats.
    +036     * </p>
    +037     * <p>
    +038     * <b>Examples:</b>
    +039     * 
    +040     * <pre class="brush:java">
    +041     * //&quot;bi-weekly&quot;
    +042     * Recurrence recur = new Recurrence.Builder(Frequency.WEEKLY).interval(2).build();
    +043     * RecurrenceRule rrule = new RecurrenceRule(recur);
    +044     * </pre>
    +045     * 
    +046     * </p>
    +047     * @author Michael Angstadt
    +048     * @rfc 5545 p.122-32
    +049     */
    +050    public class RecurrenceRule extends RecurrenceProperty {
    +051            /**
    +052             * Creates a new recurrence rule property.
    +053             * @param recur the recurrence rule
    +054             */
    +055            public RecurrenceRule(Recurrence recur) {
    +056                    super(recur);
    +057            }
    +058    
    +059            @Override
    +060            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +061                    super.validate(components, warnings);
    +062                    if (value == null) {
    +063                            return;
    +064                    }
    +065    
    +066                    if (!value.getXRules().isEmpty()) {
    +067                            warnings.add("Non-standard rule parts are not allowed in the latest iCal specification.");
    +068                    }
    +069            }
    +070    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RelatedTo.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RelatedTo.html new file mode 100644 index 000000000..f4a9e1552 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RelatedTo.html @@ -0,0 +1,140 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import biweekly.parameter.RelationshipType;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * <p>
    +032     * Defines a relationship between the component that this property belongs to
    +033     * and another component.
    +034     * </p>
    +035     * <p>
    +036     * <b>Examples:</b>
    +037     * 
    +038     * <pre class="brush:java">
    +039     * RelatedTo relatedTo = new RelatedTo(&quot;uid-value&quot;);
    +040     * </pre>
    +041     * 
    +042     * </p>
    +043     * @author Michael Angstadt
    +044     * @rfc 5545 p.115-6
    +045     */
    +046    public class RelatedTo extends TextProperty {
    +047            /**
    +048             * Creates a related-to property.
    +049             * @param uid the value of the {@link Uid} property of the component that
    +050             * this property is referencing
    +051             */
    +052            public RelatedTo(String uid) {
    +053                    super(uid);
    +054            }
    +055    
    +056            /**
    +057             * Gets the relationship type.
    +058             * @return the relationship type (e.g. "child") or null if not set
    +059             * @rfc 5545 p.25
    +060             */
    +061            public RelationshipType getRelationshipType() {
    +062                    return parameters.getRelationshipType();
    +063            }
    +064    
    +065            /**
    +066             * Sets the relationship type.
    +067             * @param relationshipType the relationship type (e.g. "child") or null to
    +068             * remove
    +069             * @rfc 5545 p.25
    +070             */
    +071            public void setRelationshipType(RelationshipType relationshipType) {
    +072                    parameters.setRelationshipType(relationshipType);
    +073            }
    +074    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Repeat.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Repeat.html new file mode 100644 index 000000000..b48d88836 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Repeat.html @@ -0,0 +1,125 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * <p>
    +030     * Defines the number of times an alarm should be repeated after its initial
    +031     * trigger. Used in conjunction with {@link DurationProperty}, which defines the
    +032     * length of the pause between repeats.
    +033     * </p>
    +034     * <p>
    +035     * <b>Examples:</b>
    +036     * 
    +037     * <pre class="brush:java">
    +038     * //repeat 5 more times after the first time
    +039     * Repeat relatedTo = new Repeat(5);
    +040     * 
    +041     * VAlarm alarm = ...;
    +042     * alarm.setRepeat(5);
    +043     * </pre>
    +044     * 
    +045     * </p>
    +046     * @author Michael Angstadt
    +047     * @rfc 5545 p.133
    +048     */
    +049    public class Repeat extends IntegerProperty {
    +050            /**
    +051             * Creates a repeat property.
    +052             * @param count the number of times to repeat the alarm (e.g. "2" to repeat
    +053             * it two more times after it was initially triggered, for a total of three
    +054             * times)
    +055             */
    +056            public Repeat(Integer count) {
    +057                    super(count);
    +058            }
    +059    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RequestStatus.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RequestStatus.html new file mode 100644 index 000000000..5347e24ad --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/RequestStatus.html @@ -0,0 +1,218 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.component.ICalComponent;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * <p>
    +034     * Represents a response to a scheduling request, describing whether the request
    +035     * was successfully processed or not.
    +036     * </p>
    +037     * <p>
    +038     * Each property instance has a status code. The following status code families
    +039     * are defined:
    +040     * <ul>
    +041     * <li><b>1.x</b> - The request has been received, but is still being processed.
    +042     * </li>
    +043     * <li><b>2.x</b> - The request was processed successfully.</li>
    +044     * <li><b>3.x</b> - There is a client-side problem with the request (such as
    +045     * some incorrect syntax).</li>
    +046     * <li><b>4.x</b> - A server-side error occurred.</li>
    +047     * </ul>
    +048     * </p>
    +049     * <p>
    +050     * <b>Examples:</b>
    +051     * 
    +052     * <pre class="brush:java">
    +053     * RequestStatus requestStatus = new RequestStatus(&quot;2.0&quot;);
    +054     * requestStatus.setDescription(&quot;Success&quot;);
    +055     * </pre>
    +056     * 
    +057     * </p>
    +058     * @author Michael Angstadt
    +059     * @rfc 5545 p.141-3
    +060     */
    +061    public class RequestStatus extends ICalProperty {
    +062            private String statusCode, description, exceptionText;
    +063    
    +064            /**
    +065             * Creates a request status property.
    +066             * @param statusCode the status code (e.g. "1.1.3")
    +067             */
    +068            public RequestStatus(String statusCode) {
    +069                    setStatusCode(statusCode);
    +070            }
    +071    
    +072            /**
    +073             * Gets the status code. The following status code families are defined:
    +074             * <ul>
    +075             * <li><b>1.x</b> - The request has been received, but is still being
    +076             * processed.</li>
    +077             * <li><b>2.x</b> - The request was processed successfully.</li>
    +078             * <li><b>3.x</b> - There is a client-side problem with the request (such as
    +079             * some incorrect syntax).</li>
    +080             * <li><b>4.x</b> - A server-side error occurred.</li>
    +081             * </ul>
    +082             * @return the status code (e.g. "1.1.3")
    +083             */
    +084            public String getStatusCode() {
    +085                    return statusCode;
    +086            }
    +087    
    +088            /**
    +089             * Sets a status code. The following status code families are defined:
    +090             * <ul>
    +091             * <li><b>1.x</b> - The request has been received, but is still being
    +092             * processed.</li>
    +093             * <li><b>2.x</b> - The request was processed successfully.</li>
    +094             * <li><b>3.x</b> - There is a client-side problem with the request (such as
    +095             * some incorrect syntax).</li>
    +096             * <li><b>4.x</b> - A server-side error occurred.</li>
    +097             * </ul>
    +098             * @param statusCode the status code (e.g. "1.1.3")
    +099             */
    +100            public void setStatusCode(String statusCode) {
    +101                    this.statusCode = statusCode;
    +102            }
    +103    
    +104            /**
    +105             * Gets the human-readable description of the status.
    +106             * @return the description (e.g. "Success") or null if not set
    +107             */
    +108            public String getDescription() {
    +109                    return description;
    +110            }
    +111    
    +112            /**
    +113             * Sets a human-readable description of the status.
    +114             * @param description the description (e.g. "Success") or null to remove
    +115             */
    +116            public void setDescription(String description) {
    +117                    this.description = description;
    +118            }
    +119    
    +120            /**
    +121             * Gets any additional data related to the response.
    +122             * @return the additional data or null if not set
    +123             */
    +124            public String getExceptionText() {
    +125                    return exceptionText;
    +126            }
    +127    
    +128            /**
    +129             * Sets any additional data related to the response.
    +130             * @param exceptionText the additional data or null to remove
    +131             */
    +132            public void setExceptionText(String exceptionText) {
    +133                    this.exceptionText = exceptionText;
    +134            }
    +135    
    +136            @Override
    +137            public String getLanguage() {
    +138                    return super.getLanguage();
    +139            }
    +140    
    +141            @Override
    +142            public void setLanguage(String language) {
    +143                    super.setLanguage(language);
    +144            }
    +145    
    +146            @Override
    +147            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +148                    if (statusCode == null) {
    +149                            warnings.add("No status code is set.");
    +150                    }
    +151            }
    +152    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Resources.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Resources.html new file mode 100644 index 000000000..066dd9b7e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Resources.html @@ -0,0 +1,157 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.List;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * <p>
    +032     * Defines a list of resources that are needed for an event or to-do task (for
    +033     * example a projector or DVD player).
    +034     * </p>
    +035     * <p>
    +036     * <b>Examples:</b>
    +037     * 
    +038     * <pre class="brush:java">
    +039     * Resources resources = new Resources(&quot;projector&quot;, &quot;DVD player&quot;);
    +040     * </pre>
    +041     * 
    +042     * </p>
    +043     * @author Michael Angstadt
    +044     * @rfc 5545 p.91
    +045     */
    +046    public class Resources extends ListProperty<String> {
    +047            /**
    +048             * Creates a new resources property.
    +049             */
    +050            public Resources() {
    +051                    super();
    +052            }
    +053    
    +054            /**
    +055             * Creates a new resources property.
    +056             * @param values the values to initialize the property with (e.g. "easel",
    +057             * "projector")
    +058             */
    +059            public Resources(String... values) {
    +060                    super(values);
    +061            }
    +062    
    +063            /**
    +064             * Creates a new resources property.
    +065             * @param values the values to initialize the property with (e.g. "easel",
    +066             * "projector")
    +067             */
    +068            public Resources(List<String> values) {
    +069                    super(values);
    +070            }
    +071    
    +072            @Override
    +073            public String getAltRepresentation() {
    +074                    return super.getAltRepresentation();
    +075            }
    +076    
    +077            @Override
    +078            public void setAltRepresentation(String uri) {
    +079                    super.setAltRepresentation(uri);
    +080            }
    +081    
    +082            @Override
    +083            public String getLanguage() {
    +084                    return super.getLanguage();
    +085            }
    +086    
    +087            @Override
    +088            public void setLanguage(String language) {
    +089                    super.setLanguage(language);
    +090            }
    +091    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Sequence.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Sequence.html new file mode 100644 index 000000000..d3caf944a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Sequence.html @@ -0,0 +1,134 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * <p>
    +030     * Defines a revision number for an event, to-do task, or journal entry. This
    +031     * number can be incremented every time a significant change is made to the
    +032     * component.
    +033     * </p>
    +034     * <p>
    +035     * <b>Examples:</b>
    +036     * 
    +037     * <pre class="brush:java">
    +038     * Sequence sequence = new Sequence(2);
    +039     * 
    +040     * VEvent event = ...
    +041     * event.setSequence(2);
    +042     * </pre>
    +043     * 
    +044     * </p>
    +045     * @author Michael Angstadt
    +046     * @rfc 5545 p.138-9
    +047     */
    +048    public class Sequence extends IntegerProperty {
    +049            /**
    +050             * Creates a sequence property.
    +051             * @param sequence the sequence number (e.g. "0" for the initial version,
    +052             * "1" for the first revision, etc)
    +053             */
    +054            public Sequence(Integer sequence) {
    +055                    super(sequence);
    +056            }
    +057    
    +058            /**
    +059             * Increments the sequence number.
    +060             */
    +061            public void increment() {
    +062                    if (value == null) {
    +063                            value = 1;
    +064                    } else {
    +065                            value++;
    +066                    }
    +067            }
    +068    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Status.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Status.html new file mode 100644 index 000000000..5d203ec3d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Status.html @@ -0,0 +1,277 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Arrays;
    +004    import java.util.Collection;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * <p>
    +033     * Defines the status of the component that this property belongs to, such as a
    +034     * to-do task being in a "completed" state.
    +035     * </p>
    +036     * <p>
    +037     * <b>Examples:</b>
    +038     * 
    +039     * <pre class="brush:java">
    +040     * //creating a new property
    +041     * Status status = Status.completed();
    +042     * 
    +043     * if (status.isCompleted()) {
    +044     *      //its value is &quot;COMPLETED&quot;
    +045     * }
    +046     * </pre>
    +047     * 
    +048     * </p>
    +049     * @author Michael Angstadt
    +050     * @rfc 5545 p.92-3
    +051     */
    +052    public class Status extends EnumProperty {
    +053            private static final String TENTATIVE = "TENTATIVE";
    +054            private static final String CONFIRMED = "CONFIRMED";
    +055            private static final String CANCELLED = "CANCELLED";
    +056            private static final String NEEDS_ACTION = "NEEDS-ACTION";
    +057            private static final String COMPLETED = "COMPLETED";
    +058            private static final String IN_PROGRESS = "IN-PROGRESS";
    +059            private static final String DRAFT = "DRAFT";
    +060            private static final String FINAL = "FINAL";
    +061    
    +062            /**
    +063             * Creates a status property. Use of this constructor is discouraged and may
    +064             * put the property in an invalid state. Use one of the static factory
    +065             * methods instead.
    +066             * @param status the status (e.g. "TENTATIVE")
    +067             */
    +068            public Status(String status) {
    +069                    super(status);
    +070            }
    +071    
    +072            /**
    +073             * Creates a "tentative" status property (only valid for event components).
    +074             * @return the property
    +075             */
    +076            public static Status tentative() {
    +077                    return create(TENTATIVE);
    +078            }
    +079    
    +080            /**
    +081             * Determines if the status is set to "tentative".
    +082             * @return true if set to "tentative", false if not
    +083             */
    +084            public boolean isTentative() {
    +085                    return is(TENTATIVE);
    +086            }
    +087    
    +088            /**
    +089             * Creates a "confirmed" status property (only valid for event components).
    +090             * @return the property
    +091             */
    +092            public static Status confirmed() {
    +093                    return create(CONFIRMED);
    +094            }
    +095    
    +096            /**
    +097             * Determines if the status is set to "confirmed".
    +098             * @return true if set to "confirmed", false if not
    +099             */
    +100            public boolean isConfirmed() {
    +101                    return is(CONFIRMED);
    +102            }
    +103    
    +104            /**
    +105             * Creates a "cancelled" status property (only valid for event, to-do, and
    +106             * journal components).
    +107             * @return the property
    +108             */
    +109            public static Status cancelled() {
    +110                    return create(CANCELLED);
    +111            }
    +112    
    +113            /**
    +114             * Determines if the status is set to "cancelled".
    +115             * @return true if set to "cancelled", false if not
    +116             */
    +117            public boolean isCancelled() {
    +118                    return is(CANCELLED);
    +119            }
    +120    
    +121            /**
    +122             * Creates a "needs-action" status property (only valid for to-do
    +123             * components).
    +124             * @return the property
    +125             */
    +126            public static Status needsAction() {
    +127                    return create(NEEDS_ACTION);
    +128            }
    +129    
    +130            /**
    +131             * Determines if the status is set to "needs-action".
    +132             * @return true if set to "needs-action", false if not
    +133             */
    +134            public boolean isNeedsAction() {
    +135                    return is(NEEDS_ACTION);
    +136            }
    +137    
    +138            /**
    +139             * Creates a "completed" status property (only valid for to-do components).
    +140             * @return the property
    +141             */
    +142            public static Status completed() {
    +143                    return create(COMPLETED);
    +144            }
    +145    
    +146            /**
    +147             * Determines if the status is set to "completed".
    +148             * @return true if set to "completed", false if not
    +149             */
    +150            public boolean isCompleted() {
    +151                    return is(COMPLETED);
    +152            }
    +153    
    +154            /**
    +155             * Creates a "in-progress" status property (only valid for to-do
    +156             * components).
    +157             * @return the property
    +158             */
    +159            public static Status inProgress() {
    +160                    return create(IN_PROGRESS);
    +161            }
    +162    
    +163            /**
    +164             * Determines if the status is set to "in-progress".
    +165             * @return true if set to "in-progress", false if not
    +166             */
    +167            public boolean isInProgress() {
    +168                    return is(IN_PROGRESS);
    +169            }
    +170    
    +171            /**
    +172             * Creates a "draft" status property (only valid for journal components).
    +173             * @return the property
    +174             */
    +175            public static Status draft() {
    +176                    return create(DRAFT);
    +177            }
    +178    
    +179            /**
    +180             * Determines if the status is set to "draft".
    +181             * @return true if set to "draft", false if not
    +182             */
    +183            public boolean isDraft() {
    +184                    return is(DRAFT);
    +185            }
    +186    
    +187            /**
    +188             * Creates a "final" status property (only valid for journal components).
    +189             * @return the property
    +190             */
    +191            public static Status final_() {
    +192                    return create(FINAL);
    +193            }
    +194    
    +195            /**
    +196             * Determines if the status is set to "final".
    +197             * @return true if set to "final", false if not
    +198             */
    +199            public boolean isFinal() {
    +200                    return is(FINAL);
    +201            }
    +202    
    +203            private static Status create(String status) {
    +204                    return new Status(status);
    +205            }
    +206    
    +207            @Override
    +208            protected Collection<String> getStandardValues() {
    +209                    return Arrays.asList(TENTATIVE, CONFIRMED, CANCELLED, NEEDS_ACTION, COMPLETED, IN_PROGRESS, DRAFT, FINAL);
    +210            }
    +211    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Summary.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Summary.html new file mode 100644 index 000000000..f7672db83 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Summary.html @@ -0,0 +1,142 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * <p>
    +030     * Defines a short, one line summary of the component that this property belongs
    +031     * to. The summary should be a more concise version of the text provided by the
    +032     * {@link Description} property.
    +033     * </p>
    +034     * <p>
    +035     * <b>Examples:</b>
    +036     * 
    +037     * <pre class="brush:java">
    +038     * Summary summary = new Summary("summary text");
    +039     * 
    +040     * VEvent event = ...;
    +041     * event.setSummary("summary text");
    +042     * </pre>
    +043     * 
    +044     * </p>
    +045     * @author Michael Angstadt
    +046     * @rfc 5545 p.93-4
    +047     */
    +048    public class Summary extends TextProperty {
    +049            /**
    +050             * Creates a new summary property.
    +051             * @param summary the summary
    +052             */
    +053            public Summary(String summary) {
    +054                    super(summary);
    +055            }
    +056    
    +057            @Override
    +058            public String getAltRepresentation() {
    +059                    return super.getAltRepresentation();
    +060            }
    +061    
    +062            @Override
    +063            public void setAltRepresentation(String uri) {
    +064                    super.setAltRepresentation(uri);
    +065            }
    +066    
    +067            @Override
    +068            public String getLanguage() {
    +069                    return super.getLanguage();
    +070            }
    +071    
    +072            @Override
    +073            public void setLanguage(String language) {
    +074                    super.setLanguage(language);
    +075            }
    +076    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TextProperty.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TextProperty.html new file mode 100644 index 000000000..6c2b71c4a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TextProperty.html @@ -0,0 +1,107 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * Represents a property whose value is a plain-text string. Note that this does
    +030     * not always mean that the property has a data type of "text".
    +031     * @author Michael Angstadt
    +032     */
    +033    public class TextProperty extends ValuedProperty<String> {
    +034            /**
    +035             * Creates a new text property.
    +036             * @param value the property's value
    +037             */
    +038            public TextProperty(String value) {
    +039                    super(value);
    +040            }
    +041    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneId.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneId.html new file mode 100644 index 000000000..a207ce771 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneId.html @@ -0,0 +1,135 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import biweekly.component.VTimezone;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * <p>
    +032     * Defines a unique identifier for a {@link VTimezone} component. The identifier
    +033     * must be unique within the scope of the iCalendar object.
    +034     * </p>
    +035     * <p>
    +036     * Date-time properties that support timezones (such as {@link DateStart}) can
    +037     * format their date-time values according to the rules defined in the
    +038     * {@link VTimezone} component, and then use this ID to reference the component
    +039     * by assigning the ID to a TZID parameter.
    +040     * </p>
    +041     * <p>
    +042     * All properties that support timezones will have
    +043     * {@code get/setTimezoneId()} methods. If a property has no timezone
    +044     * assigned to it, it is written in UTC.
    +045     * </p>
    +046     * <p>
    +047     * <b>Examples:</b>
    +048     * 
    +049     * <pre class="brush:java">
    +050     * VTimezone timezone = new VTimezone(&quot;Eastern&quot;);
    +051     * 
    +052     * Date start = ...;
    +053     * DateStart dtstart = new DateStart(start);
    +054     * dtStart.setTimezoneId(&quot;Eastern&quot;);
    +055     * </pre>
    +056     * 
    +057     * </p>
    +058     * @author Michael Angstadt
    +059     * @rfc 5545 p.102-3
    +060     */
    +061    public class TimezoneId extends TextProperty {
    +062            /**
    +063             * Creates a timezone identifier property.
    +064             * @param timezone the timezone identifier
    +065             */
    +066            public TimezoneId(String timezone) {
    +067                    super(timezone);
    +068            }
    +069    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneName.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneName.html new file mode 100644 index 000000000..c20e34ee8 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneName.html @@ -0,0 +1,137 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * <p>
    +030     * Defines a traditional, non-standard name for a timezone observance (for
    +031     * example, "Eastern Standard Time" for standard time on the US east coast).
    +032     * </p>
    +033     * <p>
    +034     * <b>Examples:</b>
    +035     * 
    +036     * <pre class="brush:java">
    +037     * //creating a new property
    +038     * TimezoneName tzname = new TimezoneName("Eastern Standard Time");
    +039     * 
    +040     * //usage in a VTIMEZONE component
    +041     * VTimezone timezone = new VTimezone("East Coast");
    +042     * 
    +043     * StandardTime standard = new StandardTime();
    +044     * standard.setTimezoneName("Eastern Standard Time");
    +045     * ...
    +046     * timezone.addStandardTime(standard);
    +047     * </pre>
    +048     * 
    +049     * </p>
    +050     * @author Michael Angstadt
    +051     * @rfc 5545 p.103-4
    +052     */
    +053    public class TimezoneName extends TextProperty {
    +054            /**
    +055             * Creates a timezone name property.
    +056             * @param name the timezone name (e.g. "EST")
    +057             */
    +058            public TimezoneName(String name) {
    +059                    super(name);
    +060            }
    +061    
    +062            @Override
    +063            public String getLanguage() {
    +064                    return super.getLanguage();
    +065            }
    +066    
    +067            @Override
    +068            public void setLanguage(String language) {
    +069                    super.setLanguage(language);
    +070            }
    +071    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneOffsetFrom.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneOffsetFrom.html new file mode 100644 index 000000000..01702b6d9 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneOffsetFrom.html @@ -0,0 +1,136 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import biweekly.util.UtcOffset;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * <p>
    +032     * Defines the timezone offset that was in use before a timezone observance.
    +033     * </p>
    +034     * <p>
    +035     * <b>Examples:</b>
    +036     * 
    +037     * <pre class="brush:java">
    +038     * //creating a new property
    +039     * TimezoneOffsetFrom tzname = new TimezoneOffsetFrom(-5, 0);
    +040     * 
    +041     * //usage in a VTIMEZONE component
    +042     * VTimezone timezone = ...
    +043     * StandardTime standard = new StandardTime();
    +044     * standard.setTimezoneOffsetFrom(-5, 0);
    +045     * ...
    +046     * timezone.addStandardTime(standard);
    +047     * </pre>
    +048     * 
    +049     * </p>
    +050     * @author Michael Angstadt
    +051     * @rfc 5545 p.104-5
    +052     */
    +053    public class TimezoneOffsetFrom extends UtcOffsetProperty {
    +054            /**
    +055             * Creates a new timezone offset from property.
    +056             * @param hourOffset the hour offset (e.g. "-5")
    +057             * @param minuteOffset the minute offset (e.g. "0")
    +058             */
    +059            public TimezoneOffsetFrom(Integer hourOffset, Integer minuteOffset) {
    +060                    super(hourOffset, minuteOffset);
    +061            }
    +062    
    +063            /**
    +064             * Creates a new timezone offset from property.
    +065             * @param offset the UTC offset
    +066             */
    +067            public TimezoneOffsetFrom(UtcOffset offset) {
    +068                    super(offset);
    +069            }
    +070    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneOffsetTo.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneOffsetTo.html new file mode 100644 index 000000000..62adf0787 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneOffsetTo.html @@ -0,0 +1,137 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import biweekly.util.UtcOffset;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * <p>
    +032     * Defines the timezone offset that is currently in use in a timezone
    +033     * observance.
    +034     * </p>
    +035     * <p>
    +036     * <b>Examples:</b>
    +037     * 
    +038     * <pre class="brush:java">
    +039     * //creating a new property
    +040     * TimezoneOffsetTo tzname = new TimezoneOffsetTo(-4, 0);
    +041     * 
    +042     * //usage in a VTIMEZONE component
    +043     * VTimezone timezone = ...
    +044     * StandardTime standard = new StandardTime();
    +045     * standard.setTimezoneOffsetTo(-4, 0);
    +046     * ...
    +047     * timezone.addStandardTime(standard);
    +048     * </pre>
    +049     * 
    +050     * </p>
    +051     * @author Michael Angstadt
    +052     * @rfc 5545 p.105-6
    +053     */
    +054    public class TimezoneOffsetTo extends UtcOffsetProperty {
    +055            /**
    +056             * Creates a new timezone offset to property.
    +057             * @param hourOffset the hour offset (e.g. "-5")
    +058             * @param minuteOffset the minute offset (e.g. "0")
    +059             */
    +060            public TimezoneOffsetTo(int hourOffset, int minuteOffset) {
    +061                    super(hourOffset, minuteOffset);
    +062            }
    +063    
    +064            /**
    +065             * Creates a new timezone offset to property.
    +066             * @param offset the UTC offset
    +067             */
    +068            public TimezoneOffsetTo(UtcOffset offset) {
    +069                    super(offset);
    +070            }
    +071    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneUrl.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneUrl.html new file mode 100644 index 000000000..935f751c4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/TimezoneUrl.html @@ -0,0 +1,124 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * <p>
    +030     * Defines a URL that points to an iCalendar object that contains further
    +031     * information on a timezone.
    +032     * </p>
    +033     * <p>
    +034     * <b>Examples:</b>
    +035     * 
    +036     * <pre class="brush:java">
    +037     * //creating a new property
    +038     * TimezoneUrl tzurl = new TimezoneUrl("http://example.com/tz.ics");
    +039     * 
    +040     * //usage in a VTIMEZONE component
    +041     * VTimezone timezone = ...
    +042     * timezone.getTimezoneUrl("http://example.com/tz.ics");
    +043     * </pre>
    +044     * 
    +045     * </p>
    +046     * @author Michael Angstadt
    +047     * @rfc 5545 p.106
    +048     */
    +049    public class TimezoneUrl extends TextProperty {
    +050            /**
    +051             * Creates a timezone URL property.
    +052             * @param url the timezone URL (e.g.
    +053             * "http://example.com/America-New_York.ics")
    +054             */
    +055            public TimezoneUrl(String url) {
    +056                    super(url);
    +057            }
    +058    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Transparency.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Transparency.html new file mode 100644 index 000000000..0a47d81c0 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Transparency.html @@ -0,0 +1,178 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Arrays;
    +004    import java.util.Collection;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * <p>
    +033     * Defines whether an event is visible to free/busy time searches. If an event
    +034     * does not have this property, the event should be considered visible
    +035     * ("opaque").
    +036     * </p>
    +037     * <p>
    +038     * <b>Examples:</b>
    +039     * 
    +040     * <pre class="brush:java">
    +041     * //creating a new property
    +042     * Transparency transp = Transparency.opaque();
    +043     * 
    +044     * if (transp.isOpaque()) {
    +045     *   //its value is "OPAQUE"
    +046     * }
    +047     * 
    +048     * //usage in a VEVENT component
    +049     * VEvent event = ...
    +050     * event.setTransparency(true); //hidden from searches ("TRANSPARENT")
    +051     * event.setTransparency(false); //visible to searches ("OPAQUE")
    +052     * </pre>
    +053     * 
    +054     * </p>
    +055     * @author Michael Angstadt
    +056     * @rfc 5545 p.101-2
    +057     */
    +058    public class Transparency extends EnumProperty {
    +059            private static final String OPAQUE = "OPAQUE";
    +060            private static final String TRANSPARENT = "TRANSPARENT";
    +061    
    +062            /**
    +063             * Creates a new transparency property.
    +064             * @param value the value
    +065             */
    +066            public Transparency(String value) {
    +067                    super(value);
    +068            }
    +069    
    +070            /**
    +071             * Creates a property that marks the event as being visible to free/busy
    +072             * time searches.
    +073             * @return the property
    +074             */
    +075            public static Transparency opaque() {
    +076                    return create(OPAQUE);
    +077            }
    +078    
    +079            /**
    +080             * Determines if the event is visible to free/busy time searches.
    +081             * @return true if it's visible, false if not
    +082             */
    +083            public boolean isOpaque() {
    +084                    return is(OPAQUE);
    +085            }
    +086    
    +087            /**
    +088             * Creates a property that marks the event as being hidden from free/busy
    +089             * time searches.
    +090             * @return the property
    +091             */
    +092            public static Transparency transparent() {
    +093                    return create(TRANSPARENT);
    +094            }
    +095    
    +096            /**
    +097             * Determines if the event is hidden from free/busy time searches.
    +098             * @return true if it's hidden, false if not
    +099             */
    +100            public boolean isTransparent() {
    +101                    return is(TRANSPARENT);
    +102            }
    +103    
    +104            private static Transparency create(String value) {
    +105                    return new Transparency(value);
    +106            }
    +107    
    +108            @Override
    +109            protected Collection<String> getStandardValues() {
    +110                    return Arrays.asList(OPAQUE, TRANSPARENT);
    +111            }
    +112    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Trigger.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Trigger.html new file mode 100644 index 000000000..ca4a36e09 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Trigger.html @@ -0,0 +1,201 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.Date;
    +004    import java.util.List;
    +005    
    +006    import biweekly.component.ICalComponent;
    +007    import biweekly.parameter.Related;
    +008    import biweekly.util.Duration;
    +009    
    +010    /*
    +011     Copyright (c) 2013, Michael Angstadt
    +012     All rights reserved.
    +013    
    +014     Redistribution and use in source and binary forms, with or without
    +015     modification, are permitted provided that the following conditions are met: 
    +016    
    +017     1. Redistributions of source code must retain the above copyright notice, this
    +018     list of conditions and the following disclaimer. 
    +019     2. Redistributions in binary form must reproduce the above copyright notice,
    +020     this list of conditions and the following disclaimer in the documentation
    +021     and/or other materials provided with the distribution. 
    +022    
    +023     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +024     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +025     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +026     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +027     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +028     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +029     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +030     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +031     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +032     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +033     */
    +034    
    +035    /**
    +036     * <p>
    +037     * Defines when an alarm will be triggered.
    +038     * </p>
    +039     * <p>
    +040     * <b>Examples:</b>
    +041     * 
    +042     * <pre class="brush:java">
    +043     * //15 minutes before the start time
    +044     * Duration duration = Duration.builder().prior(true).minutes(15).build();
    +045     * Trigger trigger = new Trigger(duration, Related.START);
    +046     * VAlarm alarm = VAlarm.display(trigger, &quot;Meeting in 15 minutes&quot;);
    +047     * </pre>
    +048     * 
    +049     * </p>
    +050     * @author Michael Angstadt
    +051     * @rfc 5545 p.133-6
    +052     */
    +053    public class Trigger extends ICalProperty {
    +054            private Duration duration;
    +055            private Date date;
    +056    
    +057            /**
    +058             * Creates a trigger property.
    +059             * @param duration the relative time
    +060             * @param related the date-time field that the duration is relative to
    +061             */
    +062            public Trigger(Duration duration, Related related) {
    +063                    setDuration(duration, related);
    +064            }
    +065    
    +066            /**
    +067             * Creates a trigger property.
    +068             * @param date the date-time the alarm will trigger.
    +069             */
    +070            public Trigger(Date date) {
    +071                    setDate(date);
    +072            }
    +073    
    +074            /**
    +075             * Gets the relative time at which the alarm will trigger.
    +076             * @return the relative time or null if an absolute time is set
    +077             */
    +078            public Duration getDuration() {
    +079                    return duration;
    +080            }
    +081    
    +082            /**
    +083             * Sets a relative time at which the alarm will trigger.
    +084             * @param duration the relative time
    +085             * @param related the date-time field that the duration is relative to
    +086             */
    +087            public void setDuration(Duration duration, Related related) {
    +088                    this.date = null;
    +089                    this.duration = duration;
    +090                    setRelated(related);
    +091            }
    +092    
    +093            /**
    +094             * Gets the date-time that the alarm will trigger.
    +095             * @return the date-time or null if a relative duration is set
    +096             */
    +097            public Date getDate() {
    +098                    return date;
    +099            }
    +100    
    +101            /**
    +102             * Sets the date-time that the alarm will trigger.
    +103             * @param date the date-time the alarm will trigger.
    +104             */
    +105            public void setDate(Date date) {
    +106                    this.date = date;
    +107                    this.duration = null;
    +108                    setRelated(null);
    +109            }
    +110    
    +111            /**
    +112             * Gets the date-time field that the duration is relative to.
    +113             * @return the field or null if not set
    +114             * @rfc 5545 p.24
    +115             */
    +116            public Related getRelated() {
    +117                    return parameters.getRelated();
    +118            }
    +119    
    +120            /**
    +121             * Sets the date-time field that the duration is relative to.
    +122             * @param related the field or null to remove
    +123             * @rfc 5545 p.24
    +124             */
    +125            public void setRelated(Related related) {
    +126                    parameters.setRelated(related);
    +127            }
    +128    
    +129            @Override
    +130            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +131                    if (duration == null && date == null) {
    +132                            warnings.add("No duration or date defined.");
    +133                    }
    +134            }
    +135    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Uid.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Uid.html new file mode 100644 index 000000000..1392ce9cb --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Uid.html @@ -0,0 +1,131 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.UUID;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * <p>
    +032     * Defines a unique identifier for a component.
    +033     * </p>
    +034     * <p>
    +035     * <b>Examples:</b>
    +036     * 
    +037     * <pre class="brush:java">
    +038     * Uid uid = new Uid(&quot;...&quot;);
    +039     * 
    +040     * //random UID
    +041     * Uid uid = Uid.random();
    +042     * </pre>
    +043     * 
    +044     * </p>
    +045     * @author Michael Angstadt
    +046     * @rfc 5545 p.117-8
    +047     */
    +048    public class Uid extends TextProperty {
    +049            /**
    +050             * Creates a UID property.
    +051             * @param uid the UID
    +052             */
    +053            public Uid(String uid) {
    +054                    super(uid);
    +055            }
    +056    
    +057            /**
    +058             * Creates a UID property that contains a random UID.
    +059             * @return the property
    +060             */
    +061            public static Uid random() {
    +062                    String uuid = UUID.randomUUID().toString();
    +063                    return new Uid(uuid);
    +064            }
    +065    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Url.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Url.html new file mode 100644 index 000000000..057d226a6 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Url.html @@ -0,0 +1,117 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    /*
    +004     Copyright (c) 2013, Michael Angstadt
    +005     All rights reserved.
    +006    
    +007     Redistribution and use in source and binary forms, with or without
    +008     modification, are permitted provided that the following conditions are met: 
    +009    
    +010     1. Redistributions of source code must retain the above copyright notice, this
    +011     list of conditions and the following disclaimer. 
    +012     2. Redistributions in binary form must reproduce the above copyright notice,
    +013     this list of conditions and the following disclaimer in the documentation
    +014     and/or other materials provided with the distribution. 
    +015    
    +016     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +017     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +018     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +019     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +020     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +021     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +022     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +023     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +024     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +025     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +026     */
    +027    
    +028    /**
    +029     * <p>
    +030     * Points to a resource that contains additional information about a component.
    +031     * </p>
    +032     * <p>
    +033     * <b>Examples:</b>
    +034     * 
    +035     * <pre class="brush:java">
    +036     * Url url = new Url(&quot;http://example.com&quot;);
    +037     * </pre>
    +038     * 
    +039     * </p>
    +040     * @author Michael Angstadt
    +041     * @rfc 5545 p.116-7
    +042     */
    +043    public class Url extends TextProperty {
    +044            /**
    +045             * Creates a URL property.
    +046             * @param url the URL (e.g. "http://example.com/resource.ics")
    +047             */
    +048            public Url(String url) {
    +049                    super(url);
    +050            }
    +051    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/UtcOffsetProperty.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/UtcOffsetProperty.html new file mode 100644 index 000000000..09d37e011 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/UtcOffsetProperty.html @@ -0,0 +1,143 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.component.ICalComponent;
    +006    import biweekly.util.UtcOffset;
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * Represents a property whose value is a timezone offset.
    +035     * @author Michael Angstadt
    +036     */
    +037    public class UtcOffsetProperty extends ICalProperty {
    +038            protected UtcOffset offset;
    +039    
    +040            public UtcOffsetProperty(int hourOffset, int minuteOffset) {
    +041                    this(new UtcOffset(hourOffset, minuteOffset));
    +042            }
    +043    
    +044            public UtcOffsetProperty(UtcOffset offset) {
    +045                    this.offset = offset;
    +046            }
    +047    
    +048            public int getHourOffset() {
    +049                    return (offset == null) ? null : offset.getHour();
    +050            }
    +051    
    +052            public int getMinuteOffset() {
    +053                    return (offset == null) ? null : offset.getMinute();
    +054            }
    +055    
    +056            public UtcOffset getOffset() {
    +057                    return offset;
    +058            }
    +059    
    +060            public void setOffset(int hourOffset, int minuteOffset) {
    +061                    setOffset(new UtcOffset(hourOffset, minuteOffset));
    +062            }
    +063    
    +064            public void setOffset(UtcOffset offset) {
    +065                    this.offset = offset;
    +066            }
    +067    
    +068            @Override
    +069            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +070                    if (offset == null) {
    +071                            warnings.add("Value is null.");
    +072                    }
    +073                    if (offset != null && (offset.getMinute() < 0 || offset.getMinute() > 59)) {
    +074                            warnings.add("Minute offset must be between 0 and 59 inclusive.");
    +075                    }
    +076            }
    +077    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ValuedProperty.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ValuedProperty.html new file mode 100644 index 000000000..08daf10f6 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/ValuedProperty.html @@ -0,0 +1,137 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.component.ICalComponent;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * Represents a property whose data model consists of a single object (such as a
    +034     * String).
    +035     * @author Michael Angstadt
    +036     * @param <T> the value type (e.g. String)
    +037     */
    +038    public class ValuedProperty<T> extends ICalProperty {
    +039            protected T value;
    +040    
    +041            /**
    +042             * Creates a new valued property.
    +043             * @param value the property's value
    +044             */
    +045            public ValuedProperty(T value) {
    +046                    setValue(value);
    +047            }
    +048    
    +049            /**
    +050             * Gets the value of this property.
    +051             * @return the value
    +052             */
    +053            public T getValue() {
    +054                    return value;
    +055            }
    +056    
    +057            /**
    +058             * Sets the value of this property.
    +059             * @param value the value
    +060             */
    +061            public void setValue(T value) {
    +062                    this.value = value;
    +063            }
    +064    
    +065            @Override
    +066            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +067                    if (value == null) {
    +068                            warnings.add("Value is null.");
    +069                    }
    +070            }
    +071    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Version.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Version.html new file mode 100644 index 000000000..63d164b91 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Version.html @@ -0,0 +1,204 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.component.ICalComponent;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * <p>
    +034     * Specifies the min/max versions a consumer must support in order to
    +035     * successfully parse the iCalendar object.
    +036     * </p>
    +037     * <p>
    +038     * <b>Examples:</b>
    +039     * 
    +040     * <pre class="brush:java">
    +041     * //the default iCal version
    +042     * Version version = Version.v2_0();
    +043     * 
    +044     * if (verison.isV2_0()) {
    +045     *      //version is &quot;2.0&quot;
    +046     * }
    +047     * </pre>
    +048     * 
    +049     * </p>
    +050     * @author Michael Angstadt
    +051     * @rfc 5545 p.79-80
    +052     */
    +053    public class Version extends ICalProperty {
    +054            private static final String DEFAULT = "2.0";
    +055    
    +056            private String minVersion, maxVersion;
    +057    
    +058            /**
    +059             * Creates a new version property.
    +060             * @param version the version that a consumer must support in order to
    +061             * successfully parse the iCalendar object
    +062             */
    +063            public Version(String version) {
    +064                    this(null, version);
    +065            }
    +066    
    +067            /**
    +068             * Creates a new version property.
    +069             * @param minVersion the minimum version that a consumer must support in
    +070             * order to successfully parse the iCalendar object
    +071             * @param maxVersion the maximum version that a consumer must support in
    +072             * order to successfully parse the iCalendar object
    +073             */
    +074            public Version(String minVersion, String maxVersion) {
    +075                    this.minVersion = minVersion;
    +076                    this.maxVersion = maxVersion;
    +077            }
    +078    
    +079            /**
    +080             * Creates a version property that is set to the default iCalendar version
    +081             * (2.0).
    +082             * @return the property instance
    +083             */
    +084            public static Version v2_0() {
    +085                    return new Version(DEFAULT);
    +086            }
    +087    
    +088            /**
    +089             * Determines if this version is the default iCalendar version.
    +090             * @return true if the version is "2.0", false if not
    +091             */
    +092            public boolean isV2_0() {
    +093                    return DEFAULT.equalsIgnoreCase(maxVersion);
    +094            }
    +095    
    +096            /**
    +097             * Gets the minimum version that a consumer must support in order to
    +098             * successfully parse the iCalendar object.
    +099             * @return the minimum version or null if not set
    +100             */
    +101            public String getMinVersion() {
    +102                    return minVersion;
    +103            }
    +104    
    +105            /**
    +106             * Sets the minimum version that a consumer must support in order to
    +107             * successfully parse the iCalendar object.
    +108             * @param minVersion the minimum version or null to remove
    +109             */
    +110            public void setMinVersion(String minVersion) {
    +111                    this.minVersion = minVersion;
    +112            }
    +113    
    +114            /**
    +115             * Gets the maximum version that a consumer must support in order to
    +116             * successfully parse the iCalendar object.
    +117             * @return the maximum version or null if not set
    +118             */
    +119            public String getMaxVersion() {
    +120                    return maxVersion;
    +121            }
    +122    
    +123            /**
    +124             * Sets the maximum version that a consumer must support in order to
    +125             * successfully parse the iCalendar object.
    +126             * @param maxVersion the maximum version (this field is <b>required</b>)
    +127             */
    +128            public void setMaxVersion(String maxVersion) {
    +129                    this.maxVersion = maxVersion;
    +130            }
    +131    
    +132            @Override
    +133            protected void validate(List<ICalComponent> components, List<String> warnings) {
    +134                    if (maxVersion == null) {
    +135                            warnings.add("A maximum version must be specified.");
    +136                    }
    +137            }
    +138    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Xml.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Xml.html new file mode 100644 index 000000000..29a59e027 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/Xml.html @@ -0,0 +1,149 @@ + + +
    +001    package biweekly.property;
    +002    
    +003    import org.w3c.dom.Document;
    +004    import org.w3c.dom.Element;
    +005    import org.w3c.dom.Node;
    +006    import org.xml.sax.SAXException;
    +007    
    +008    import biweekly.util.XmlUtils;
    +009    
    +010    /*
    +011     Copyright (c) 2013, Michael Angstadt
    +012     All rights reserved.
    +013    
    +014     Redistribution and use in source and binary forms, with or without
    +015     modification, are permitted provided that the following conditions are met: 
    +016    
    +017     1. Redistributions of source code must retain the above copyright notice, this
    +018     list of conditions and the following disclaimer. 
    +019     2. Redistributions in binary form must reproduce the above copyright notice,
    +020     this list of conditions and the following disclaimer in the documentation
    +021     and/or other materials provided with the distribution. 
    +022    
    +023     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +024     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +025     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +026     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +027     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +028     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +029     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +030     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +031     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +032     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +033     */
    +034    
    +035    /**
    +036     * <p>
    +037     * Used for storing properties parsed from xCal documents whose XML namespaces
    +038     * are not part of the xCal XML namespace.
    +039     * </p>
    +040     * <p>
    +041     * <b>Examples:</b>
    +042     * 
    +043     * <pre class="brush:java">
    +044     * //creating a new property
    +045     * Xml xml = new Xml(&quot;&lt;company xmlns=\&quot;http://example.com\&quot;&gt;&lt;ceo&gt;John Doe&lt;/ceo&gt;&lt;name&gt;Acme Co&lt;/name&gt;&lt;/company&gt;&quot;);
    +046     * 
    +047     * //getting the parsed DOM
    +048     * org.w3c.dom.Document document = xml.getValue();
    +049     * </pre>
    +050     * 
    +051     * </p>
    +052     * @author Michael Angstadt
    +053     * @rfc 6321 p.17-8
    +054     */
    +055    public class Xml extends ValuedProperty<Document> {
    +056            /**
    +057             * Creates an XML property.
    +058             * @param xml the XML to use as the property's value
    +059             * @throws SAXException if the XML cannot be parsed
    +060             */
    +061            public Xml(String xml) throws SAXException {
    +062                    super(XmlUtils.toDocument(xml));
    +063            }
    +064    
    +065            /**
    +066             * Creates an XML property.
    +067             * @param element the XML element to use as the property's value (the
    +068             * element is imported into an empty {@link Document} object)
    +069             */
    +070            public Xml(Element element) {
    +071                    super(XmlUtils.createDocument());
    +072                    Node imported = value.importNode(element, true);
    +073                    value.appendChild(imported);
    +074            }
    +075    
    +076            /**
    +077             * Creates an XML property.
    +078             * @param document the XML document to use as the property's value
    +079             */
    +080            public Xml(Document document) {
    +081                    super(document);
    +082            }
    +083    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ActionMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ActionMarshaller.html new file mode 100644 index 000000000..007971dd0 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ActionMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.Action;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link Action} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class ActionMarshaller extends TextPropertyMarshaller<Action> {
    +035            public ActionMarshaller() {
    +036                    super(Action.class, "ACTION");
    +037            }
    +038    
    +039            @Override
    +040            protected Action newInstance(String value) {
    +041                    return new Action(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/AttachmentMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/AttachmentMarshaller.html new file mode 100644 index 000000000..32b217a9e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/AttachmentMarshaller.html @@ -0,0 +1,214 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.ICalDataType;
    +006    import biweekly.io.json.JCalValue;
    +007    import biweekly.io.xml.XCalElement;
    +008    import biweekly.parameter.Encoding;
    +009    import biweekly.parameter.ICalParameters;
    +010    import biweekly.property.Attachment;
    +011    import biweekly.util.Base64;
    +012    
    +013    /*
    +014     Copyright (c) 2013, Michael Angstadt
    +015     All rights reserved.
    +016    
    +017     Redistribution and use in source and binary forms, with or without
    +018     modification, are permitted provided that the following conditions are met: 
    +019    
    +020     1. Redistributions of source code must retain the above copyright notice, this
    +021     list of conditions and the following disclaimer. 
    +022     2. Redistributions in binary form must reproduce the above copyright notice,
    +023     this list of conditions and the following disclaimer in the documentation
    +024     and/or other materials provided with the distribution. 
    +025    
    +026     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +027     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +028     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +029     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +030     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +031     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +032     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +033     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +034     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +035     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +036     */
    +037    
    +038    /**
    +039     * Marshals {@link Attachment} properties.
    +040     * @author Michael Angstadt
    +041     */
    +042    public class AttachmentMarshaller extends ICalPropertyMarshaller<Attachment> {
    +043            public AttachmentMarshaller() {
    +044                    super(Attachment.class, "ATTACH", ICalDataType.URI);
    +045            }
    +046    
    +047            @Override
    +048            protected void _prepareParameters(Attachment property, ICalParameters copy) {
    +049                    if (property.getUri() != null) {
    +050                            copy.setEncoding(null);
    +051                    } else if (property.getData() != null) {
    +052                            copy.setEncoding(Encoding.BASE64);
    +053                    }
    +054            }
    +055    
    +056            @Override
    +057            protected ICalDataType _dataType(Attachment property) {
    +058                    if (property.getUri() != null) {
    +059                            return ICalDataType.URI;
    +060                    }
    +061                    if (property.getData() != null) {
    +062                            return ICalDataType.BINARY;
    +063                    }
    +064                    return defaultDataType;
    +065            }
    +066    
    +067            @Override
    +068            protected String _writeText(Attachment property) {
    +069                    String uri = property.getUri();
    +070                    if (uri != null) {
    +071                            return uri;
    +072                    }
    +073    
    +074                    byte data[] = property.getData();
    +075                    if (data != null) {
    +076                            return Base64.encode(data);
    +077                    }
    +078    
    +079                    return "";
    +080            }
    +081    
    +082            @Override
    +083            protected Attachment _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +084                    value = unescape(value);
    +085    
    +086                    if (dataType == ICalDataType.BINARY || parameters.getEncoding() == Encoding.BASE64) {
    +087                            return new Attachment(null, Base64.decode(value));
    +088                    }
    +089                    return new Attachment(null, value);
    +090            }
    +091    
    +092            @Override
    +093            protected void _writeXml(Attachment property, XCalElement element) {
    +094                    String uri = property.getUri();
    +095                    if (uri != null) {
    +096                            element.append(ICalDataType.URI, uri);
    +097                            return;
    +098                    }
    +099    
    +100                    byte data[] = property.getData();
    +101                    if (data != null) {
    +102                            element.append(ICalDataType.BINARY, Base64.encode(data));
    +103                            return;
    +104                    }
    +105    
    +106                    element.append(defaultDataType, "");
    +107            }
    +108    
    +109            @Override
    +110            protected Attachment _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +111                    String uri = element.first(ICalDataType.URI);
    +112                    if (uri != null) {
    +113                            return new Attachment(null, uri);
    +114                    }
    +115    
    +116                    String base64Data = element.first(ICalDataType.BINARY);
    +117                    if (base64Data != null) {
    +118                            return new Attachment(null, Base64.decode(base64Data)); //formatType will be set when the parameters are assigned to the property object
    +119                    }
    +120    
    +121                    throw missingXmlElements(ICalDataType.URI, ICalDataType.BINARY);
    +122            }
    +123    
    +124            @Override
    +125            protected JCalValue _writeJson(Attachment property) {
    +126                    String uri = property.getUri();
    +127                    if (uri != null) {
    +128                            return JCalValue.single(uri);
    +129                    }
    +130    
    +131                    byte data[] = property.getData();
    +132                    if (data != null) {
    +133                            return JCalValue.single(Base64.encode(data));
    +134                    }
    +135    
    +136                    return JCalValue.single("");
    +137            }
    +138    
    +139            @Override
    +140            protected Attachment _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +141                    String valueStr = value.asSingle();
    +142    
    +143                    if (dataType == ICalDataType.BINARY) {
    +144                            return new Attachment(null, Base64.decode(valueStr));
    +145                    }
    +146                    return new Attachment(null, valueStr);
    +147            }
    +148    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/AttendeeMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/AttendeeMarshaller.html new file mode 100644 index 000000000..b1c80d77f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/AttendeeMarshaller.html @@ -0,0 +1,110 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.ICalDataType;
    +004    import biweekly.property.Attendee;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Marshals {@link Attendee} properties.
    +033     * @author Michael Angstadt
    +034     */
    +035    public class AttendeeMarshaller extends TextPropertyMarshaller<Attendee> {
    +036            public AttendeeMarshaller() {
    +037                    super(Attendee.class, "ATTENDEE", ICalDataType.CAL_ADDRESS);
    +038            }
    +039    
    +040            @Override
    +041            protected Attendee newInstance(String value) {
    +042                    return new Attendee(value);
    +043            }
    +044    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CalendarScaleMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CalendarScaleMarshaller.html new file mode 100644 index 000000000..e2d6b7a93 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CalendarScaleMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.CalendarScale;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link CalendarScale} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class CalendarScaleMarshaller extends TextPropertyMarshaller<CalendarScale> {
    +035            public CalendarScaleMarshaller() {
    +036                    super(CalendarScale.class, "CALSCALE");
    +037            }
    +038    
    +039            @Override
    +040            protected CalendarScale newInstance(String value) {
    +041                    return new CalendarScale(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CategoriesMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CategoriesMarshaller.html new file mode 100644 index 000000000..226cf6531 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CategoriesMarshaller.html @@ -0,0 +1,111 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.ICalDataType;
    +004    import biweekly.parameter.ICalParameters;
    +005    import biweekly.property.Categories;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * Marshals {@link Categories} properties.
    +034     * @author Michael Angstadt
    +035     */
    +036    public class CategoriesMarshaller extends TextListPropertyMarshaller<Categories> {
    +037            public CategoriesMarshaller() {
    +038                    super(Categories.class, "CATEGORIES");
    +039            }
    +040    
    +041            @Override
    +042            public Categories newInstance(ICalDataType dataType, ICalParameters parameters) {
    +043                    return new Categories();
    +044            }
    +045    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ClassificationMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ClassificationMarshaller.html new file mode 100644 index 000000000..4ffc42ac7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ClassificationMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.Classification;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link Classification} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class ClassificationMarshaller extends TextPropertyMarshaller<Classification> {
    +035            public ClassificationMarshaller() {
    +036                    super(Classification.class, "CLASS");
    +037            }
    +038    
    +039            @Override
    +040            protected Classification newInstance(String value) {
    +041                    return new Classification(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CommentMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CommentMarshaller.html new file mode 100644 index 000000000..3228f604e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CommentMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.Comment;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link Comment} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class CommentMarshaller extends TextPropertyMarshaller<Comment> {
    +035            public CommentMarshaller() {
    +036                    super(Comment.class, "COMMENT");
    +037            }
    +038    
    +039            @Override
    +040            protected Comment newInstance(String value) {
    +041                    return new Comment(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CompletedMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CompletedMarshaller.html new file mode 100644 index 000000000..7bc5c381c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CompletedMarshaller.html @@ -0,0 +1,112 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.Date;
    +004    
    +005    import biweekly.property.Completed;
    +006    
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * Marshals {@link Completed} properties.
    +035     * @author Michael Angstadt
    +036     */
    +037    public class CompletedMarshaller extends DateTimePropertyMarshaller<Completed> {
    +038            public CompletedMarshaller() {
    +039                    super(Completed.class, "COMPLETED");
    +040            }
    +041    
    +042            @Override
    +043            protected Completed newInstance(Date date) {
    +044                    return new Completed(date);
    +045            }
    +046    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ContactMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ContactMarshaller.html new file mode 100644 index 000000000..1e33f406a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ContactMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.Contact;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link Contact} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class ContactMarshaller extends TextPropertyMarshaller<Contact> {
    +035            public ContactMarshaller() {
    +036                    super(Contact.class, "CONTACT");
    +037            }
    +038    
    +039            @Override
    +040            protected Contact newInstance(String value) {
    +041                    return new Contact(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CreatedMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CreatedMarshaller.html new file mode 100644 index 000000000..354865cc4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/CreatedMarshaller.html @@ -0,0 +1,111 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.Date;
    +004    
    +005    import biweekly.property.Created;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * Marshals {@link Created} properties.
    +034     * @author Michael Angstadt
    +035     */
    +036    public class CreatedMarshaller extends DateTimePropertyMarshaller<Created> {
    +037            public CreatedMarshaller() {
    +038                    super(Created.class, "CREATED");
    +039            }
    +040    
    +041            @Override
    +042            protected Created newInstance(Date date) {
    +043                    return new Created(date);
    +044            }
    +045    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateDueMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateDueMarshaller.html new file mode 100644 index 000000000..2d938bca4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateDueMarshaller.html @@ -0,0 +1,112 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.Date;
    +004    
    +005    import biweekly.property.DateDue;
    +006    
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * Marshals {@link DateDue} properties.
    +035     * @author Michael Angstadt
    +036     */
    +037    public class DateDueMarshaller extends DateOrDateTimePropertyMarshaller<DateDue> {
    +038            public DateDueMarshaller() {
    +039                    super(DateDue.class, "DUE");
    +040            }
    +041    
    +042            @Override
    +043            protected DateDue newInstance(Date date, boolean hasTime) {
    +044                    return new DateDue(date, hasTime);
    +045            }
    +046    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateEndMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateEndMarshaller.html new file mode 100644 index 000000000..77f7d5942 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateEndMarshaller.html @@ -0,0 +1,112 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.Date;
    +004    
    +005    import biweekly.property.DateEnd;
    +006    
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * Marshals {@link DateEnd} properties.
    +035     * @author Michael Angstadt
    +036     */
    +037    public class DateEndMarshaller extends DateOrDateTimePropertyMarshaller<DateEnd> {
    +038            public DateEndMarshaller() {
    +039                    super(DateEnd.class, "DTEND");
    +040            }
    +041    
    +042            @Override
    +043            protected DateEnd newInstance(Date date, boolean hasTime) {
    +044                    return new DateEnd(date, hasTime);
    +045            }
    +046    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateOrDateTimePropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateOrDateTimePropertyMarshaller.html new file mode 100644 index 000000000..3649a634b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateOrDateTimePropertyMarshaller.html @@ -0,0 +1,222 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.Date;
    +004    import java.util.List;
    +005    
    +006    import biweekly.ICalDataType;
    +007    import biweekly.io.CannotParseException;
    +008    import biweekly.io.json.JCalValue;
    +009    import biweekly.io.xml.XCalElement;
    +010    import biweekly.parameter.ICalParameters;
    +011    import biweekly.property.DateOrDateTimeProperty;
    +012    import biweekly.util.DateTimeComponents;
    +013    import biweekly.util.ICalDateFormatter;
    +014    
    +015    /*
    +016     Copyright (c) 2013, Michael Angstadt
    +017     All rights reserved.
    +018    
    +019     Redistribution and use in source and binary forms, with or without
    +020     modification, are permitted provided that the following conditions are met: 
    +021    
    +022     1. Redistributions of source code must retain the above copyright notice, this
    +023     list of conditions and the following disclaimer. 
    +024     2. Redistributions in binary form must reproduce the above copyright notice,
    +025     this list of conditions and the following disclaimer in the documentation
    +026     and/or other materials provided with the distribution. 
    +027    
    +028     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +029     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +030     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +031     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +032     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +033     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +034     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +035     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +036     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +037     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +038     */
    +039    
    +040    /**
    +041     * Marshals properties that have either "date" or "date-time" values.
    +042     * @param <T> the property class
    +043     * @author Michael Angstadt
    +044     */
    +045    public abstract class DateOrDateTimePropertyMarshaller<T extends DateOrDateTimeProperty> extends ICalPropertyMarshaller<T> {
    +046            public DateOrDateTimePropertyMarshaller(Class<T> clazz, String propertyName) {
    +047                    super(clazz, propertyName, ICalDataType.DATE_TIME);
    +048            }
    +049    
    +050            @Override
    +051            protected ICalDataType _dataType(T property) {
    +052                    return (property.getRawComponents() != null || property.getValue() == null || property.hasTime()) ? ICalDataType.DATE_TIME : ICalDataType.DATE;
    +053            }
    +054    
    +055            @Override
    +056            protected String _writeText(T property) {
    +057                    DateTimeComponents components = property.getRawComponents();
    +058                    if (components != null) {
    +059                            return components.toString(false);
    +060                    }
    +061    
    +062                    Date value = property.getValue();
    +063                    if (value != null) {
    +064                            return date(value).time(property.hasTime()).tz(property.isLocalTime(), property.getTimezoneId()).write();
    +065                    }
    +066    
    +067                    return "";
    +068            }
    +069    
    +070            @Override
    +071            protected T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +072                    value = unescape(value);
    +073                    return parse(value, parameters, warnings);
    +074            }
    +075    
    +076            @Override
    +077            protected void _writeXml(T property, XCalElement element) {
    +078                    String dateStr = null;
    +079    
    +080                    Date value = property.getValue();
    +081                    DateTimeComponents components = property.getRawComponents();
    +082                    if (components != null) {
    +083                            dateStr = components.toString(true);
    +084                    } else if (value != null) {
    +085                            dateStr = date(value).time(property.hasTime()).tz(property.isLocalTime(), property.getTimezoneId()).extended(true).write();
    +086                    }
    +087    
    +088                    element.append(dataType(property), dateStr);
    +089            }
    +090    
    +091            @Override
    +092            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +093                    String value = element.first(ICalDataType.DATE_TIME);
    +094                    if (value == null) {
    +095                            value = element.first(ICalDataType.DATE);
    +096                    }
    +097    
    +098                    if (value != null) {
    +099                            return parse(value, parameters, warnings);
    +100                    }
    +101    
    +102                    throw missingXmlElements(ICalDataType.DATE_TIME, ICalDataType.DATE);
    +103            }
    +104    
    +105            @Override
    +106            protected JCalValue _writeJson(T property) {
    +107                    DateTimeComponents components = property.getRawComponents();
    +108                    if (components != null) {
    +109                            return JCalValue.single(components.toString(true));
    +110                    }
    +111    
    +112                    Date value = property.getValue();
    +113                    if (value != null) {
    +114                            return JCalValue.single(date(value).time(property.hasTime()).tz(property.isLocalTime(), property.getTimezoneId()).extended(true).write());
    +115                    }
    +116    
    +117                    return JCalValue.single("");
    +118            }
    +119    
    +120            @Override
    +121            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +122                    String valueStr = value.asSingle();
    +123                    return parse(valueStr, parameters, warnings);
    +124            }
    +125    
    +126            protected abstract T newInstance(Date date, boolean hasTime);
    +127    
    +128            private T parse(String value, ICalParameters parameters, List<String> warnings) {
    +129                    if (value == null) {
    +130                            return newInstance(null, true);
    +131                    }
    +132    
    +133                    Date date;
    +134                    try {
    +135                            date = date(value).tzid(parameters.getTimezoneId(), warnings).parse();
    +136                    } catch (IllegalArgumentException e) {
    +137                            throw new CannotParseException("Could not parse date-time value.");
    +138                    }
    +139    
    +140                    DateTimeComponents components;
    +141                    try {
    +142                            components = DateTimeComponents.parse(value);
    +143                    } catch (IllegalArgumentException e) {
    +144                            warnings.add("Could not parse the raw date-time components: " + value);
    +145                            components = null;
    +146                    }
    +147    
    +148                    boolean hasTime = ICalDateFormatter.dateHasTime(value);
    +149                    boolean localTz = !ICalDateFormatter.dateHasTimezone(value) && parameters.getTimezoneId() == null;
    +150    
    +151                    T prop = newInstance(date, hasTime);
    +152                    prop.setRawComponents(components);
    +153                    prop.setLocalTime(localTz);
    +154                    return prop;
    +155            }
    +156    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateStartMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateStartMarshaller.html new file mode 100644 index 000000000..cbdce011c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateStartMarshaller.html @@ -0,0 +1,112 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.Date;
    +004    
    +005    import biweekly.property.DateStart;
    +006    
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * Marshals {@link DateStart} properties.
    +035     * @author Michael Angstadt
    +036     */
    +037    public class DateStartMarshaller extends DateOrDateTimePropertyMarshaller<DateStart> {
    +038            public DateStartMarshaller() {
    +039                    super(DateStart.class, "DTSTART");
    +040            }
    +041    
    +042            @Override
    +043            protected DateStart newInstance(Date date, boolean hasTime) {
    +044                    return new DateStart(date, hasTime);
    +045            }
    +046    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateTimePropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateTimePropertyMarshaller.html new file mode 100644 index 000000000..c7d472f80 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateTimePropertyMarshaller.html @@ -0,0 +1,178 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.Date;
    +004    import java.util.List;
    +005    
    +006    import biweekly.ICalDataType;
    +007    import biweekly.io.CannotParseException;
    +008    import biweekly.io.json.JCalValue;
    +009    import biweekly.io.xml.XCalElement;
    +010    import biweekly.parameter.ICalParameters;
    +011    import biweekly.property.DateTimeProperty;
    +012    
    +013    /*
    +014     Copyright (c) 2013, Michael Angstadt
    +015     All rights reserved.
    +016    
    +017     Redistribution and use in source and binary forms, with or without
    +018     modification, are permitted provided that the following conditions are met: 
    +019    
    +020     1. Redistributions of source code must retain the above copyright notice, this
    +021     list of conditions and the following disclaimer. 
    +022     2. Redistributions in binary form must reproduce the above copyright notice,
    +023     this list of conditions and the following disclaimer in the documentation
    +024     and/or other materials provided with the distribution. 
    +025    
    +026     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +027     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +028     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +029     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +030     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +031     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +032     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +033     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +034     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +035     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +036     */
    +037    
    +038    /**
    +039     * Marshals properties that have "date-time" values.
    +040     * @param <T> the property class
    +041     * @author Michael Angstadt
    +042     */
    +043    public abstract class DateTimePropertyMarshaller<T extends DateTimeProperty> extends ICalPropertyMarshaller<T> {
    +044            public DateTimePropertyMarshaller(Class<T> clazz, String propertyName) {
    +045                    super(clazz, propertyName, ICalDataType.DATE_TIME);
    +046            }
    +047    
    +048            @Override
    +049            protected String _writeText(T property) {
    +050                    Date value = property.getValue();
    +051                    if (value != null) {
    +052                            return date(value).write(); //should always be in UTC time
    +053                    }
    +054    
    +055                    return "";
    +056            }
    +057    
    +058            @Override
    +059            protected T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +060                    value = unescape(value);
    +061                    return parse(value, parameters, warnings);
    +062            }
    +063    
    +064            @Override
    +065            protected void _writeXml(T property, XCalElement element) {
    +066                    String dateStr = null;
    +067    
    +068                    Date value = property.getValue();
    +069                    if (value != null) {
    +070                            dateStr = date(value).extended(true).write(); //should always be in UTC time
    +071                    }
    +072    
    +073                    element.append(dataType(property), dateStr);
    +074            }
    +075    
    +076            @Override
    +077            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +078                    String value = element.first(defaultDataType);
    +079                    if (value != null) {
    +080                            return parse(value, parameters, warnings);
    +081                    }
    +082    
    +083                    throw missingXmlElements(defaultDataType);
    +084            }
    +085    
    +086            @Override
    +087            protected JCalValue _writeJson(T property) {
    +088                    Date value = property.getValue();
    +089                    if (value != null) {
    +090                            return JCalValue.single(date(value).extended(true).write());
    +091                    }
    +092    
    +093                    return JCalValue.single("");
    +094            }
    +095    
    +096            @Override
    +097            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +098                    String valueStr = value.asSingle();
    +099                    return parse(valueStr, parameters, warnings);
    +100            }
    +101    
    +102            private T parse(String value, ICalParameters parameters, List<String> warnings) {
    +103                    try {
    +104                            Date date = date(value).tzid(parameters.getTimezoneId(), warnings).parse();
    +105                            return newInstance(date);
    +106                    } catch (IllegalArgumentException e) {
    +107                            throw new CannotParseException("Could not parse date-time value.");
    +108                    }
    +109            }
    +110    
    +111            protected abstract T newInstance(Date date);
    +112    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateTimeStampMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateTimeStampMarshaller.html new file mode 100644 index 000000000..12659afd3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DateTimeStampMarshaller.html @@ -0,0 +1,112 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.Date;
    +004    
    +005    import biweekly.property.DateTimeStamp;
    +006    
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * Marshals {@link DateTimeStamp} properties.
    +035     * @author Michael Angstadt
    +036     */
    +037    public class DateTimeStampMarshaller extends DateTimePropertyMarshaller<DateTimeStamp> {
    +038            public DateTimeStampMarshaller() {
    +039                    super(DateTimeStamp.class, "DTSTAMP");
    +040            }
    +041    
    +042            @Override
    +043            protected DateTimeStamp newInstance(Date date) {
    +044                    return new DateTimeStamp(date);
    +045            }
    +046    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DescriptionMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DescriptionMarshaller.html new file mode 100644 index 000000000..523cb75bf --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DescriptionMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.Description;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link Description} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class DescriptionMarshaller extends TextPropertyMarshaller<Description> {
    +035            public DescriptionMarshaller() {
    +036                    super(Description.class, "DESCRIPTION");
    +037            }
    +038    
    +039            @Override
    +040            protected Description newInstance(String value) {
    +041                    return new Description(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DurationPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DurationPropertyMarshaller.html new file mode 100644 index 000000000..1c4551114 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/DurationPropertyMarshaller.html @@ -0,0 +1,179 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.ICalDataType;
    +006    import biweekly.io.CannotParseException;
    +007    import biweekly.io.json.JCalValue;
    +008    import biweekly.io.xml.XCalElement;
    +009    import biweekly.parameter.ICalParameters;
    +010    import biweekly.property.DurationProperty;
    +011    import biweekly.util.Duration;
    +012    
    +013    /*
    +014     Copyright (c) 2013, Michael Angstadt
    +015     All rights reserved.
    +016    
    +017     Redistribution and use in source and binary forms, with or without
    +018     modification, are permitted provided that the following conditions are met: 
    +019    
    +020     1. Redistributions of source code must retain the above copyright notice, this
    +021     list of conditions and the following disclaimer. 
    +022     2. Redistributions in binary form must reproduce the above copyright notice,
    +023     this list of conditions and the following disclaimer in the documentation
    +024     and/or other materials provided with the distribution. 
    +025    
    +026     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +027     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +028     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +029     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +030     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +031     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +032     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +033     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +034     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +035     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +036     */
    +037    
    +038    /**
    +039     * Marshals {@link DurationProperty} properties.
    +040     * @author Michael Angstadt
    +041     */
    +042    public class DurationPropertyMarshaller extends ICalPropertyMarshaller<DurationProperty> {
    +043            public DurationPropertyMarshaller() {
    +044                    super(DurationProperty.class, "DURATION", ICalDataType.DURATION);
    +045            }
    +046    
    +047            @Override
    +048            protected String _writeText(DurationProperty property) {
    +049                    Duration duration = property.getValue();
    +050                    if (duration != null) {
    +051                            return duration.toString();
    +052                    }
    +053    
    +054                    return "";
    +055            }
    +056    
    +057            @Override
    +058            protected DurationProperty _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +059                    value = unescape(value);
    +060                    return parse(value);
    +061            }
    +062    
    +063            @Override
    +064            protected void _writeXml(DurationProperty property, XCalElement element) {
    +065                    String durationStr = null;
    +066    
    +067                    Duration duration = property.getValue();
    +068                    if (duration != null) {
    +069                            durationStr = duration.toString();
    +070                    }
    +071    
    +072                    element.append(dataType(property), durationStr);
    +073            }
    +074    
    +075            @Override
    +076            protected DurationProperty _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +077                    String value = element.first(defaultDataType);
    +078                    if (value != null) {
    +079                            return parse(value);
    +080                    }
    +081    
    +082                    throw missingXmlElements(defaultDataType);
    +083            }
    +084    
    +085            @Override
    +086            protected JCalValue _writeJson(DurationProperty property) {
    +087                    Duration value = property.getValue();
    +088                    if (value != null) {
    +089                            return JCalValue.single(value.toString());
    +090                    }
    +091    
    +092                    return JCalValue.single("");
    +093            }
    +094    
    +095            @Override
    +096            protected DurationProperty _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +097                    String valueStr = value.asSingle();
    +098                    return parse(valueStr);
    +099            }
    +100    
    +101            private DurationProperty parse(String value) {
    +102                    if (value == null) {
    +103                            return new DurationProperty(null);
    +104                    }
    +105    
    +106                    try {
    +107                            Duration duration = Duration.parse(value);
    +108                            return new DurationProperty(duration);
    +109                    } catch (IllegalArgumentException e) {
    +110                            throw new CannotParseException("Could not parse duration value.");
    +111                    }
    +112            }
    +113    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ExceptionDatesMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ExceptionDatesMarshaller.html new file mode 100644 index 000000000..139593e74 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ExceptionDatesMarshaller.html @@ -0,0 +1,190 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.Date;
    +005    import java.util.List;
    +006    
    +007    import biweekly.ICalDataType;
    +008    import biweekly.io.CannotParseException;
    +009    import biweekly.io.json.JCalValue;
    +010    import biweekly.io.xml.XCalElement;
    +011    import biweekly.parameter.ICalParameters;
    +012    import biweekly.property.ExceptionDates;
    +013    
    +014    /*
    +015     Copyright (c) 2013, Michael Angstadt
    +016     All rights reserved.
    +017    
    +018     Redistribution and use in source and binary forms, with or without
    +019     modification, are permitted provided that the following conditions are met: 
    +020    
    +021     1. Redistributions of source code must retain the above copyright notice, this
    +022     list of conditions and the following disclaimer. 
    +023     2. Redistributions in binary form must reproduce the above copyright notice,
    +024     this list of conditions and the following disclaimer in the documentation
    +025     and/or other materials provided with the distribution. 
    +026    
    +027     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +028     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +029     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +030     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +031     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +032     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +033     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +034     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +035     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +036     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +037     */
    +038    
    +039    /**
    +040     * Marshals {@link ExceptionDates} properties.
    +041     * @author Michael Angstadt
    +042     */
    +043    public class ExceptionDatesMarshaller extends ListPropertyMarshaller<ExceptionDates, Date> {
    +044            public ExceptionDatesMarshaller() {
    +045                    super(ExceptionDates.class, "EXDATE", ICalDataType.DATE_TIME);
    +046            }
    +047    
    +048            @Override
    +049            protected ICalDataType _dataType(ExceptionDates property) {
    +050                    return property.hasTime() ? ICalDataType.DATE_TIME : ICalDataType.DATE;
    +051            }
    +052    
    +053            @Override
    +054            protected ExceptionDates newInstance(ICalDataType dataType, ICalParameters parameters) {
    +055                    return new ExceptionDates(dataType != ICalDataType.DATE);
    +056            }
    +057    
    +058            @Override
    +059            protected String writeValue(ExceptionDates property, Date value) {
    +060                    return date(value).time(property.hasTime()).tzid(property.getParameters().getTimezoneId()).write();
    +061            }
    +062    
    +063            @Override
    +064            protected Date readValue(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +065                    try {
    +066                            return date(value).tzid(parameters.getTimezoneId(), warnings).parse();
    +067                    } catch (IllegalArgumentException e) {
    +068                            throw new CannotParseException("Could not parse date value.");
    +069                    }
    +070            }
    +071    
    +072            @Override
    +073            protected void _writeXml(ExceptionDates property, XCalElement element) {
    +074                    ICalDataType dataType = dataType(property);
    +075                    for (Date value : property.getValues()) {
    +076                            String dateStr = date(value).time(property.hasTime()).tzid(property.getParameters().getTimezoneId()).extended(true).write();
    +077                            element.append(dataType, dateStr);
    +078                    }
    +079            }
    +080    
    +081            @Override
    +082            protected ExceptionDates _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +083                    List<String> values = element.all(ICalDataType.DATE_TIME);
    +084                    ICalDataType dataType = values.isEmpty() ? ICalDataType.DATE : ICalDataType.DATE_TIME;
    +085                    values.addAll(element.all(ICalDataType.DATE));
    +086                    if (values.isEmpty()) {
    +087                            throw missingXmlElements(ICalDataType.DATE_TIME, ICalDataType.DATE);
    +088                    }
    +089    
    +090                    ExceptionDates prop = new ExceptionDates(dataType == ICalDataType.DATE_TIME);
    +091                    for (String value : values) {
    +092                            Date date = readValue(value, dataType, parameters, warnings);
    +093                            prop.addValue(date);
    +094                    }
    +095                    return prop;
    +096            }
    +097    
    +098            @Override
    +099            protected JCalValue _writeJson(ExceptionDates property) {
    +100                    List<Date> values = property.getValues();
    +101                    if (values.isEmpty()) {
    +102                            return JCalValue.single("");
    +103                    }
    +104    
    +105                    List<String> valuesStr = new ArrayList<String>();
    +106                    for (Date value : values) {
    +107                            String dateStr = date(value).time(property.hasTime()).tzid(property.getParameters().getTimezoneId()).extended(true).write();
    +108                            valuesStr.add(dateStr);
    +109                    }
    +110                    return JCalValue.multi(valuesStr);
    +111            }
    +112    
    +113            @Override
    +114            protected ExceptionDates _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +115                    List<String> valueStrs = value.asMulti();
    +116    
    +117                    ExceptionDates prop = new ExceptionDates(dataType == ICalDataType.DATE_TIME);
    +118                    for (String valueStr : valueStrs) {
    +119                            Date date = readValue(valueStr, dataType, parameters, warnings);
    +120                            prop.addValue(date);
    +121                    }
    +122                    return prop;
    +123            }
    +124    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ExceptionRuleMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ExceptionRuleMarshaller.html new file mode 100644 index 000000000..b526b595a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ExceptionRuleMarshaller.html @@ -0,0 +1,110 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.ExceptionRule;
    +004    import biweekly.util.Recurrence;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Marshals {@link ExceptionRule} properties.
    +033     * @author Michael Angstadt
    +034     */
    +035    public class ExceptionRuleMarshaller extends RecurrencePropertyMarshaller<ExceptionRule> {
    +036            public ExceptionRuleMarshaller() {
    +037                    super(ExceptionRule.class, "EXRULE");
    +038            }
    +039    
    +040            @Override
    +041            protected ExceptionRule newInstance(Recurrence recur) {
    +042                    return new ExceptionRule(recur);
    +043            }
    +044    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/FreeBusyMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/FreeBusyMarshaller.html new file mode 100644 index 000000000..adce4c24d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/FreeBusyMarshaller.html @@ -0,0 +1,292 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.Date;
    +005    import java.util.List;
    +006    
    +007    import biweekly.ICalDataType;
    +008    import biweekly.io.json.JCalValue;
    +009    import biweekly.io.xml.XCalElement;
    +010    import biweekly.parameter.ICalParameters;
    +011    import biweekly.property.FreeBusy;
    +012    import biweekly.util.Duration;
    +013    import biweekly.util.Period;
    +014    
    +015    /*
    +016     Copyright (c) 2013, Michael Angstadt
    +017     All rights reserved.
    +018    
    +019     Redistribution and use in source and binary forms, with or without
    +020     modification, are permitted provided that the following conditions are met: 
    +021    
    +022     1. Redistributions of source code must retain the above copyright notice, this
    +023     list of conditions and the following disclaimer. 
    +024     2. Redistributions in binary form must reproduce the above copyright notice,
    +025     this list of conditions and the following disclaimer in the documentation
    +026     and/or other materials provided with the distribution. 
    +027    
    +028     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +029     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +030     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +031     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +032     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +033     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +034     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +035     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +036     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +037     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +038     */
    +039    
    +040    /**
    +041     * Marshals {@link FreeBusy} properties.
    +042     * @author Michael Angstadt
    +043     */
    +044    public class FreeBusyMarshaller extends ICalPropertyMarshaller<FreeBusy> {
    +045            public FreeBusyMarshaller() {
    +046                    super(FreeBusy.class, "FREEBUSY", ICalDataType.PERIOD);
    +047            }
    +048    
    +049            @Override
    +050            protected String _writeText(FreeBusy property) {
    +051                    List<Period> values = property.getValues();
    +052    
    +053                    return list(values, new ListCallback<Period>() {
    +054                            public String asString(Period period) {
    +055                                    StringBuilder sb = new StringBuilder();
    +056    
    +057                                    if (period.getStartDate() != null) {
    +058                                            String date = date(period.getStartDate()).write();
    +059                                            sb.append(date);
    +060                                    }
    +061    
    +062                                    sb.append('/');
    +063    
    +064                                    if (period.getEndDate() != null) {
    +065                                            String date = date(period.getEndDate()).write();
    +066                                            sb.append(date);
    +067                                    } else if (period.getDuration() != null) {
    +068                                            sb.append(period.getDuration());
    +069                                    }
    +070    
    +071                                    return sb.toString();
    +072                            }
    +073                    });
    +074            }
    +075    
    +076            @Override
    +077            protected FreeBusy _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +078                    return parse(list(value), parameters, warnings);
    +079            }
    +080    
    +081            @Override
    +082            protected void _writeXml(FreeBusy property, XCalElement element) {
    +083                    for (Period period : property.getValues()) {
    +084                            XCalElement periodElement = element.append(ICalDataType.PERIOD);
    +085    
    +086                            Date start = period.getStartDate();
    +087                            if (start != null) {
    +088                                    periodElement.append("start", date(start).extended(true).write());
    +089                            }
    +090    
    +091                            Date end = period.getEndDate();
    +092                            if (end != null) {
    +093                                    periodElement.append("end", date(end).extended(true).write());
    +094                            }
    +095    
    +096                            Duration duration = period.getDuration();
    +097                            if (duration != null) {
    +098                                    periodElement.append("duration", duration.toString());
    +099                            }
    +100                    }
    +101            }
    +102    
    +103            @Override
    +104            protected FreeBusy _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +105                    List<XCalElement> periodElements = element.children(ICalDataType.PERIOD);
    +106                    if (periodElements.isEmpty()) {
    +107                            throw missingXmlElements(ICalDataType.PERIOD);
    +108                    }
    +109    
    +110                    FreeBusy prop = new FreeBusy();
    +111                    for (XCalElement periodElement : periodElements) {
    +112                            String startStr = periodElement.first("start");
    +113                            if (startStr == null) {
    +114                                    warnings.add("No start date found in time period, skipping.");
    +115                                    continue;
    +116                            }
    +117    
    +118                            Date start = null;
    +119                            try {
    +120                                    start = date(startStr).tzid(parameters.getTimezoneId(), warnings).parse();
    +121                            } catch (IllegalArgumentException e) {
    +122                                    warnings.add("Could not parse start date, skipping time period: " + startStr);
    +123                                    continue;
    +124                            }
    +125    
    +126                            String endStr = periodElement.first("end");
    +127                            if (endStr != null) {
    +128                                    try {
    +129                                            Date end = date(endStr).tzid(parameters.getTimezoneId(), warnings).parse();
    +130                                            prop.addValue(start, end);
    +131                                    } catch (IllegalArgumentException e) {
    +132                                            warnings.add("Could not parse end date, skipping time period: " + endStr);
    +133                                    }
    +134                                    continue;
    +135                            }
    +136    
    +137                            String durationStr = periodElement.first("duration");
    +138                            if (durationStr != null) {
    +139                                    try {
    +140                                            Duration duration = Duration.parse(durationStr);
    +141                                            prop.addValue(start, duration);
    +142                                    } catch (IllegalArgumentException e) {
    +143                                            warnings.add("Could not parse duration, skipping time period: " + durationStr);
    +144                                    }
    +145                                    continue;
    +146                            }
    +147    
    +148                            warnings.add("Start date has no accompanying end date or duration, skipping.");
    +149                    }
    +150                    return prop;
    +151            }
    +152    
    +153            @Override
    +154            protected JCalValue _writeJson(FreeBusy property) {
    +155                    List<Period> values = property.getValues();
    +156                    if (values.isEmpty()) {
    +157                            return JCalValue.single("");
    +158                    }
    +159    
    +160                    List<String> valuesStr = new ArrayList<String>();
    +161                    for (Period period : values) {
    +162                            StringBuilder sb = new StringBuilder();
    +163                            if (period.getStartDate() != null) {
    +164                                    String date = date(period.getStartDate()).extended(true).write();
    +165                                    sb.append(date);
    +166                            }
    +167    
    +168                            sb.append('/');
    +169    
    +170                            if (period.getEndDate() != null) {
    +171                                    String date = date(period.getEndDate()).extended(true).write();
    +172                                    sb.append(date);
    +173                            } else if (period.getDuration() != null) {
    +174                                    sb.append(period.getDuration());
    +175                            }
    +176    
    +177                            valuesStr.add(sb.toString());
    +178                    }
    +179    
    +180                    return JCalValue.multi(valuesStr);
    +181            }
    +182    
    +183            @Override
    +184            protected FreeBusy _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +185                    return parse(value.asMulti(), parameters, warnings);
    +186            }
    +187    
    +188            private FreeBusy parse(List<String> periods, ICalParameters parameters, List<String> warnings) {
    +189                    FreeBusy freebusy = new FreeBusy();
    +190    
    +191                    for (String period : periods) {
    +192                            String periodSplit[] = period.split("/");
    +193    
    +194                            if (periodSplit.length < 2) {
    +195                                    warnings.add("No end date or duration found, skipping time period: " + period);
    +196                                    continue;
    +197                            }
    +198    
    +199                            String startStr = periodSplit[0];
    +200                            Date start = null;
    +201                            try {
    +202                                    start = date(startStr).tzid(parameters.getTimezoneId(), warnings).parse();
    +203                            } catch (IllegalArgumentException e) {
    +204                                    warnings.add("Could not parse start date, skipping time period: " + period);
    +205                                    continue;
    +206                            }
    +207    
    +208                            String endStr = periodSplit[1];
    +209                            try {
    +210                                    Date end = date(endStr).tzid(parameters.getTimezoneId(), warnings).parse();
    +211                                    freebusy.addValue(start, end);
    +212                            } catch (IllegalArgumentException e) {
    +213                                    //must be a duration
    +214                                    try {
    +215                                            Duration duration = Duration.parse(endStr);
    +216                                            freebusy.addValue(start, duration);
    +217                                    } catch (IllegalArgumentException e2) {
    +218                                            warnings.add("Could not parse end date or duration value, skipping time period: " + period);
    +219                                            continue;
    +220                                    }
    +221                            }
    +222                    }
    +223    
    +224                    return freebusy;
    +225            }
    +226    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/GeoMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/GeoMarshaller.html new file mode 100644 index 000000000..3c8227dc0 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/GeoMarshaller.html @@ -0,0 +1,226 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.ICalDataType;
    +006    import biweekly.io.CannotParseException;
    +007    import biweekly.io.json.JCalValue;
    +008    import biweekly.io.xml.XCalElement;
    +009    import biweekly.parameter.ICalParameters;
    +010    import biweekly.property.Geo;
    +011    import biweekly.util.ICalFloatFormatter;
    +012    
    +013    /*
    +014     Copyright (c) 2013, Michael Angstadt
    +015     All rights reserved.
    +016    
    +017     Redistribution and use in source and binary forms, with or without
    +018     modification, are permitted provided that the following conditions are met: 
    +019    
    +020     1. Redistributions of source code must retain the above copyright notice, this
    +021     list of conditions and the following disclaimer. 
    +022     2. Redistributions in binary form must reproduce the above copyright notice,
    +023     this list of conditions and the following disclaimer in the documentation
    +024     and/or other materials provided with the distribution. 
    +025    
    +026     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +027     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +028     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +029     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +030     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +031     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +032     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +033     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +034     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +035     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +036     */
    +037    
    +038    /**
    +039     * Marshals {@link Geo} properties.
    +040     * @author Michael Angstadt
    +041     */
    +042    public class GeoMarshaller extends ICalPropertyMarshaller<Geo> {
    +043            public GeoMarshaller() {
    +044                    super(Geo.class, "GEO", ICalDataType.FLOAT);
    +045            }
    +046    
    +047            @Override
    +048            protected String _writeText(Geo property) {
    +049                    ICalFloatFormatter formatter = new ICalFloatFormatter();
    +050                    StringBuilder sb = new StringBuilder();
    +051    
    +052                    Double latitude = property.getLatitude();
    +053                    if (latitude == null) {
    +054                            latitude = 0.0;
    +055                    }
    +056                    sb.append(formatter.format(latitude));
    +057    
    +058                    sb.append(';');
    +059    
    +060                    Double longitude = property.getLongitude();
    +061                    if (longitude == null) {
    +062                            longitude = 0.0;
    +063                    }
    +064                    sb.append(formatter.format(longitude));
    +065    
    +066                    return sb.toString();
    +067            }
    +068    
    +069            @Override
    +070            protected Geo _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +071                    SemiStructuredIterator it = semistructured(value);
    +072                    String latitudeStr = it.next();
    +073                    String longitudeStr = it.next();
    +074    
    +075                    if (latitudeStr == null || longitudeStr == null) {
    +076                            throw new CannotParseException("Could not parse value.");
    +077                    }
    +078    
    +079                    return parse(latitudeStr, longitudeStr);
    +080            }
    +081    
    +082            @Override
    +083            protected void _writeXml(Geo property, XCalElement element) {
    +084                    ICalFloatFormatter formatter = new ICalFloatFormatter();
    +085    
    +086                    Double latitude = property.getLatitude();
    +087                    if (latitude == null) {
    +088                            latitude = 0.0;
    +089                    }
    +090                    element.append("latitude", formatter.format(latitude));
    +091    
    +092                    Double longitude = property.getLongitude();
    +093                    if (longitude == null) {
    +094                            longitude = 0.0;
    +095                    }
    +096                    element.append("longitude", formatter.format(longitude));
    +097            }
    +098    
    +099            @Override
    +100            protected Geo _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +101                    String latitudeStr = element.first("latitude");
    +102                    String longitudeStr = element.first("longitude");
    +103                    if (latitudeStr == null && longitudeStr == null) {
    +104                            throw missingXmlElements("latitude", "longitude");
    +105                    }
    +106                    if (latitudeStr == null) {
    +107                            throw missingXmlElements("latitude");
    +108                    }
    +109                    if (longitudeStr == null) {
    +110                            throw missingXmlElements("longitude");
    +111                    }
    +112    
    +113                    return parse(latitudeStr, longitudeStr);
    +114            }
    +115    
    +116            @Override
    +117            protected JCalValue _writeJson(Geo property) {
    +118                    Double latitude = property.getLatitude();
    +119                    if (latitude == null) {
    +120                            latitude = 0.0;
    +121                    }
    +122    
    +123                    Double longitude = property.getLongitude();
    +124                    if (longitude == null) {
    +125                            longitude = 0.0;
    +126                    }
    +127    
    +128                    return JCalValue.structured(latitude, longitude);
    +129            }
    +130    
    +131            @Override
    +132            protected Geo _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +133                    StructuredIterator it = structured(value);
    +134                    String latitudeStr = it.nextString();
    +135                    String longitudeStr = it.nextString();
    +136                    return parse(latitudeStr, longitudeStr);
    +137            }
    +138    
    +139            private Geo parse(String latitudeStr, String longitudeStr) {
    +140                    Double latitude = null;
    +141                    if (latitudeStr != null) {
    +142                            try {
    +143                                    latitude = Double.valueOf(latitudeStr);
    +144                            } catch (NumberFormatException e) {
    +145                                    throw new CannotParseException("Could not parse latitude: " + latitudeStr);
    +146                            }
    +147                    }
    +148    
    +149                    Double longitude = null;
    +150                    if (longitudeStr != null) {
    +151                            try {
    +152                                    longitude = Double.valueOf(longitudeStr);
    +153                            } catch (NumberFormatException e) {
    +154                                    throw new CannotParseException("Could not parse longitude: " + longitudeStr);
    +155                            }
    +156                    }
    +157    
    +158                    return new Geo(latitude, longitude);
    +159            }
    +160    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.DateParser.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.DateParser.html new file mode 100644 index 000000000..40770513e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.DateParser.html @@ -0,0 +1,1330 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import static biweekly.io.xml.XCalNamespaceContext.XCAL_NS;
    +004    import static biweekly.util.StringUtils.join;
    +005    
    +006    import java.util.ArrayList;
    +007    import java.util.Arrays;
    +008    import java.util.Collection;
    +009    import java.util.Date;
    +010    import java.util.Iterator;
    +011    import java.util.List;
    +012    import java.util.Map;
    +013    import java.util.TimeZone;
    +014    import java.util.regex.Pattern;
    +015    
    +016    import javax.xml.namespace.QName;
    +017    
    +018    import org.w3c.dom.Element;
    +019    
    +020    import biweekly.ICalDataType;
    +021    import biweekly.ICalendar;
    +022    import biweekly.io.CannotParseException;
    +023    import biweekly.io.SkipMeException;
    +024    import biweekly.io.json.JCalValue;
    +025    import biweekly.io.text.ICalRawWriter;
    +026    import biweekly.io.xml.XCalElement;
    +027    import biweekly.parameter.ICalParameters;
    +028    import biweekly.property.ICalProperty;
    +029    import biweekly.util.ICalDateFormatter;
    +030    import biweekly.util.ISOFormat;
    +031    import biweekly.util.ListMultimap;
    +032    import biweekly.util.StringUtils;
    +033    import biweekly.util.StringUtils.JoinCallback;
    +034    import biweekly.util.StringUtils.JoinMapCallback;
    +035    import biweekly.util.XmlUtils;
    +036    
    +037    /*
    +038     Copyright (c) 2013, Michael Angstadt
    +039     All rights reserved.
    +040    
    +041     Redistribution and use in source and binary forms, with or without
    +042     modification, are permitted provided that the following conditions are met: 
    +043    
    +044     1. Redistributions of source code must retain the above copyright notice, this
    +045     list of conditions and the following disclaimer. 
    +046     2. Redistributions in binary form must reproduce the above copyright notice,
    +047     this list of conditions and the following disclaimer in the documentation
    +048     and/or other materials provided with the distribution. 
    +049    
    +050     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +051     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +052     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +053     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +054     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +055     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +056     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +057     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +058     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +059     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +060     */
    +061    
    +062    /**
    +063     * Base class for iCalendar property marshallers.
    +064     * @param <T> the property class
    +065     * @author Michael Angstadt
    +066     */
    +067    public abstract class ICalPropertyMarshaller<T extends ICalProperty> {
    +068            protected final Class<T> clazz;
    +069            protected final String propertyName;
    +070            protected final ICalDataType defaultDataType;
    +071            protected final QName qname;
    +072    
    +073            /**
    +074             * Creates a new marshaller.
    +075             * @param clazz the property class
    +076             * @param propertyName the property name (e.g. "VERSION")
    +077             * @param defaultDataType the property's default data type (e.g. "text") or
    +078             * null if unknown
    +079             */
    +080            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType) {
    +081                    this(clazz, propertyName, defaultDataType, new QName(XCAL_NS, propertyName.toLowerCase()));
    +082            }
    +083    
    +084            /**
    +085             * Creates a new marshaller.
    +086             * @param clazz the property class
    +087             * @param propertyName the property name (e.g. "VERSION")
    +088             * @param defaultDataType the property's default data type (e.g. "text") or
    +089             * null if unknown
    +090             * @param qname the XML element name and namespace to use for xCal documents
    +091             * (by default, the XML element name is set to the lower-cased property
    +092             * name, and the element namespace is set to the xCal namespace)
    +093             */
    +094            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType, QName qname) {
    +095                    this.clazz = clazz;
    +096                    this.propertyName = propertyName;
    +097                    this.defaultDataType = defaultDataType;
    +098                    this.qname = qname;
    +099            }
    +100    
    +101            /**
    +102             * Gets the property class.
    +103             * @return the property class
    +104             */
    +105            public Class<T> getPropertyClass() {
    +106                    return clazz;
    +107            }
    +108    
    +109            /**
    +110             * Gets the property name.
    +111             * @return the property name (e.g. "VERSION")
    +112             */
    +113            public String getPropertyName() {
    +114                    return propertyName;
    +115            }
    +116    
    +117            /**
    +118             * Gets the property's default data type.
    +119             * @return the default data type (e.g. "text") or null if unknown
    +120             */
    +121            public ICalDataType getDefaultDataType() {
    +122                    return defaultDataType;
    +123            }
    +124    
    +125            /**
    +126             * Gets this property's local name and namespace for xCal documents.
    +127             * @return the XML local name and namespace
    +128             */
    +129            public QName getQName() {
    +130                    return qname;
    +131            }
    +132    
    +133            /**
    +134             * Sanitizes a property's parameters (called before the property is
    +135             * written). Note that a copy of the parameters is returned so that the
    +136             * property object does not get modified.
    +137             * @param property the property
    +138             * @return the sanitized parameters
    +139             */
    +140            public final ICalParameters prepareParameters(T property) {
    +141                    //make a copy because the property should not get modified when it is marshalled
    +142                    ICalParameters copy = new ICalParameters(property.getParameters());
    +143                    _prepareParameters(property, copy);
    +144                    return copy;
    +145            }
    +146    
    +147            /**
    +148             * Determines the data type of a property instance.
    +149             * @param property the property
    +150             * @return the data type or null if unknown
    +151             */
    +152            public final ICalDataType dataType(T property) {
    +153                    return _dataType(property);
    +154            }
    +155    
    +156            /**
    +157             * Marshals a property's value to a string.
    +158             * @param property the property
    +159             * @return the marshalled value
    +160             * @throws SkipMeException if the property should not be written to the data
    +161             * stream
    +162             */
    +163            public final String writeText(T property) {
    +164                    return _writeText(property);
    +165            }
    +166    
    +167            /**
    +168             * Marshals a property's value to an XML element (xCal).
    +169             * @param property the property
    +170             * @param element the property's XML element
    +171             * @throws SkipMeException if the property should not be written to the data
    +172             * stream
    +173             */
    +174            public final void writeXml(T property, Element element) {
    +175                    XCalElement xcalElement = new XCalElement(element);
    +176                    _writeXml(property, xcalElement);
    +177            }
    +178    
    +179            /**
    +180             * Marshals a property's value to a JSON data stream (jCal).
    +181             * @param property the property
    +182             * @return the marshalled value
    +183             * @throws SkipMeException if the property should not be written to the data
    +184             * stream
    +185             */
    +186            public final JCalValue writeJson(T property) {
    +187                    return _writeJson(property);
    +188            }
    +189    
    +190            /**
    +191             * Unmarshals a property from a plain-text iCalendar data stream.
    +192             * @param value the value as read off the wire
    +193             * @param dataType the data type of the property value. The property's VALUE
    +194             * parameter is used to determine the data type. If the property has no
    +195             * VALUE parameter, then this parameter will be set to the property's
    +196             * default datatype. Note that the VALUE parameter is removed from the
    +197             * property's parameter list after it has been read.
    +198             * @param parameters the parsed parameters
    +199             * @return the unmarshalled property and its warnings
    +200             * @throws CannotParseException if the marshaller could not parse the
    +201             * property's value
    +202             * @throws SkipMeException if the property should not be added to the final
    +203             * {@link ICalendar} object
    +204             */
    +205            public final Result<T> parseText(String value, ICalDataType dataType, ICalParameters parameters) {
    +206                    List<String> warnings = new ArrayList<String>(0);
    +207                    T property = _parseText(value, dataType, parameters, warnings);
    +208                    property.setParameters(parameters);
    +209                    return new Result<T>(property, warnings);
    +210            }
    +211    
    +212            /**
    +213             * Unmarshals a property's value from an XML document (xCal).
    +214             * @param element the property's XML element
    +215             * @param parameters the property's parameters
    +216             * @return the unmarshalled property and its warnings
    +217             * @throws CannotParseException if the marshaller could not parse the
    +218             * property's value
    +219             * @throws SkipMeException if the property should not be added to the final
    +220             * {@link ICalendar} object
    +221             */
    +222            public final Result<T> parseXml(Element element, ICalParameters parameters) {
    +223                    List<String> warnings = new ArrayList<String>(0);
    +224                    T property = _parseXml(new XCalElement(element), parameters, warnings);
    +225                    property.setParameters(parameters);
    +226                    return new Result<T>(property, warnings);
    +227            }
    +228    
    +229            /**
    +230             * Unmarshals a property's value from a JSON data stream (jCal).
    +231             * @param value the property's JSON value
    +232             * @param dataType the data type
    +233             * @param parameters the parsed parameters
    +234             * @return the unmarshalled property and its warnings
    +235             * @throws CannotParseException if the marshaller could not parse the
    +236             * property's value
    +237             * @throws SkipMeException if the property should not be added to the final
    +238             * {@link ICalendar} object
    +239             */
    +240            public final Result<T> parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters) {
    +241                    List<String> warnings = new ArrayList<String>(0);
    +242                    T property = _parseJson(value, dataType, parameters, warnings);
    +243                    property.setParameters(parameters);
    +244                    return new Result<T>(property, warnings);
    +245            }
    +246    
    +247            /**
    +248             * <p>
    +249             * Sanitizes a property's parameters before the property is written.
    +250             * </p>
    +251             * <p>
    +252             * This method should be overridden by child classes that wish to tweak the
    +253             * property's parameters before the property is written. The default
    +254             * implementation of this method does nothing.
    +255             * </p>
    +256             * @param property the property
    +257             * @param copy the list of parameters to make modifications to (it is a copy
    +258             * of the property's parameters)
    +259             */
    +260            protected void _prepareParameters(T property, ICalParameters copy) {
    +261                    //do nothing
    +262            }
    +263    
    +264            /**
    +265             * <p>
    +266             * Determines the data type of a property instance.
    +267             * </p>
    +268             * <p>
    +269             * This method should be overridden by child classes if a property's data
    +270             * type changes depending on its value. The default implementation of this
    +271             * method returns the property's default data type.
    +272             * </p>
    +273             * @param property the property
    +274             * @return the data type or null if unknown
    +275             */
    +276            protected ICalDataType _dataType(T property) {
    +277                    return defaultDataType;
    +278            }
    +279    
    +280            /**
    +281             * Marshals a property's value to a string.
    +282             * @param property the property
    +283             * @return the marshalled value
    +284             * @throws SkipMeException if the property should not be written to the data
    +285             * stream
    +286             */
    +287            protected abstract String _writeText(T property);
    +288    
    +289            /**
    +290             * <p>
    +291             * Marshals a property's value to an XML element (xCal).
    +292             * <p>
    +293             * <p>
    +294             * This method should be overridden by child classes that wish to support
    +295             * xCal. The default implementation of this method will append one child
    +296             * element to the property's XML element. The child element's name will be
    +297             * that of the property's data type (retrieved using the {@link #dataType}
    +298             * method), and the child element's text content will be set to the
    +299             * property's marshalled plain-text value (retrieved using the
    +300             * {@link #writeText} method).
    +301             * </p>
    +302             * @param property the property
    +303             * @param element the property's XML element
    +304             * @throws SkipMeException if the property should not be written to the data
    +305             * stream
    +306             */
    +307            protected void _writeXml(T property, XCalElement element) {
    +308                    String value = writeText(property);
    +309                    ICalDataType dataType = dataType(property);
    +310                    element.append(dataType, value);
    +311            }
    +312    
    +313            /**
    +314             * <p>
    +315             * Marshals a property's value to a JSON data stream (jCal).
    +316             * </p>
    +317             * <p>
    +318             * This method should be overridden by child classes that wish to support
    +319             * jCal. The default implementation of this method will create a jCard
    +320             * property that has a single JSON string value (generated by the
    +321             * {@link #writeText} method).
    +322             * </p>
    +323             * @param property the property
    +324             * @return the marshalled value
    +325             * @throws SkipMeException if the property should not be written to the data
    +326             * stream
    +327             */
    +328            protected JCalValue _writeJson(T property) {
    +329                    String value = writeText(property);
    +330                    return JCalValue.single(value);
    +331            }
    +332    
    +333            /**
    +334             * Unmarshals a property from a plain-text iCalendar data stream.
    +335             * @param value the value as read off the wire
    +336             * @param dataType the data type of the property value. The property's VALUE
    +337             * parameter is used to determine the data type. If the property has no
    +338             * VALUE parameter, then this parameter will be set to the property's
    +339             * default datatype. Note that the VALUE parameter is removed from the
    +340             * property's parameter list after it has been read.
    +341             * @param parameters the parsed parameters. These parameters will be
    +342             * assigned to the property object once this method returns. Therefore, do
    +343             * not assign any parameters to the property object itself whilst inside of
    +344             * this method, or else they will be overwritten.
    +345             * @param warnings allows the programmer to alert the user to any
    +346             * note-worthy (but non-critical) issues that occurred during the
    +347             * unmarshalling process
    +348             * @return the unmarshalled property object
    +349             * @throws CannotParseException if the marshaller could not parse the
    +350             * property's value
    +351             * @throws SkipMeException if the property should not be added to the final
    +352             * {@link ICalendar} object
    +353             */
    +354            protected abstract T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings);
    +355    
    +356            /**
    +357             * <p>
    +358             * Unmarshals a property from an XML document (xCal).
    +359             * </p>
    +360             * <p>
    +361             * This method should be overridden by child classes that wish to support
    +362             * xCal. The default implementation of this method will find the first child
    +363             * element with the xCal namespace. The element's name will be used as the
    +364             * property's data type and its text content will be passed into the
    +365             * {@link #_parseText} method. If no such child element is found, then the
    +366             * parent element's text content will be passed into {@link #_parseText} and
    +367             * the data type will be null.
    +368             * </p>
    +369             * @param element the property's XML element
    +370             * @param parameters the parsed parameters. These parameters will be
    +371             * assigned to the property object once this method returns. Therefore, do
    +372             * not assign any parameters to the property object itself whilst inside of
    +373             * this method, or else they will be overwritten.
    +374             * @param warnings allows the programmer to alert the user to any
    +375             * note-worthy (but non-critical) issues that occurred during the
    +376             * unmarshalling process
    +377             * @return the unmarshalled property object
    +378             * @throws CannotParseException if the marshaller could not parse the
    +379             * property's value
    +380             * @throws SkipMeException if the property should not be added to the final
    +381             * {@link ICalendar} object
    +382             */
    +383            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +384                    String value = null;
    +385                    ICalDataType dataType = null;
    +386                    Element rawElement = element.getElement();
    +387    
    +388                    //get the text content of the first child element with the xCard namespace
    +389                    List<Element> children = XmlUtils.toElementList(rawElement.getChildNodes());
    +390                    for (Element child : children) {
    +391                            if (!XCAL_NS.equals(child.getNamespaceURI())) {
    +392                                    continue;
    +393                            }
    +394    
    +395                            dataType = ICalDataType.get(child.getLocalName());
    +396                            value = child.getTextContent();
    +397                            break;
    +398                    }
    +399    
    +400                    if (dataType == null) {
    +401                            //get the text content of the property element
    +402                            value = rawElement.getTextContent();
    +403                    }
    +404    
    +405                    value = escape(value);
    +406                    return _parseText(value, dataType, parameters, warnings);
    +407            }
    +408    
    +409            /**
    +410             * /**
    +411             * <p>
    +412             * Unmarshals a property from a JSON data stream (jCal).
    +413             * </p>
    +414             * <p>
    +415             * This method should be overridden by child classes that wish to support
    +416             * jCal. The default implementation of this method will convert the jCal
    +417             * property value to a string and pass it into the {@link #_parseText}
    +418             * method.
    +419             * </p>
    +420             * 
    +421             * <hr>
    +422             * 
    +423             * <p>
    +424             * The following paragraphs describe the way in which this method's default
    +425             * implementation converts a jCal value to a string:
    +426             * </p>
    +427             * <p>
    +428             * If the jCal value consists of a single, non-array, non-object value, then
    +429             * the value is converted to a string. Special characters (backslashes,
    +430             * commas, and semicolons) are escaped in order to simulate what the value
    +431             * might look like in a plain-text iCalendar object.<br>
    +432             * <code>["x-foo", {}, "text", "the;value"] --&gt; "the\;value"</code><br>
    +433             * <code>["x-foo", {}, "text", 2] --&gt; "2"</code>
    +434             * </p>
    +435             * <p>
    +436             * If the jCal value consists of multiple, non-array, non-object values,
    +437             * then all the values are appended together in a single string, separated
    +438             * by commas. Special characters (backslashes, commas, and semicolons) are
    +439             * escaped for each value in order to prevent commas from being treated as
    +440             * delimiters, and to simulate what the value might look like in a
    +441             * plain-text iCalendar object.<br>
    +442             * <code>["x-foo", {}, "text", "one", "two,three"] --&gt;
    +443             * "one,two\,three"</code>
    +444             * </p>
    +445             * <p>
    +446             * If the jCal value is a single array, then this array is treated as a
    +447             * "structured value", and converted its plain-text representation. Special
    +448             * characters (backslashes, commas, and semicolons) are escaped for each
    +449             * value in order to prevent commas and semicolons from being treated as
    +450             * delimiters.<br>
    +451             * <code>["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]]
    +452             * --&gt; "one;two,three;four\;five"</code>
    +453             * </p>
    +454             * <p>
    +455             * If the jCal value starts with a JSON object, then the object is converted
    +456             * to a format identical to the one used in the RRULE and EXRULE properties.
    +457             * Special characters (backslashes, commas, semicolons, and equal signs) are
    +458             * escaped for each value in order to preserve the syntax of the string
    +459             * value.<br>
    +460             * <code>["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --&gt; "ONE=1;TWO=2,2.5"</code>
    +461             * </p>
    +462             * <p>
    +463             * For all other cases, behavior is undefined.
    +464             * </p>
    +465             * @param value the property's JSON value
    +466             * @param dataType the data type
    +467             * @param parameters the parsed parameters. These parameters will be
    +468             * assigned to the property object once this method returns. Therefore, do
    +469             * not assign any parameters to the property object itself whilst inside of
    +470             * this method, or else they will be overwritten.
    +471             * @param warnings allows the programmer to alert the user to any
    +472             * note-worthy (but non-critical) issues that occurred during the
    +473             * unmarshalling process
    +474             * @return the unmarshalled property object
    +475             * @throws CannotParseException if the marshaller could not parse the
    +476             * property's value
    +477             * @throws SkipMeException if the property should not be added to the final
    +478             * {@link ICalendar} object
    +479             */
    +480            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +481                    return _parseText(jcalValueToString(value), dataType, parameters, warnings);
    +482            }
    +483    
    +484            private String jcalValueToString(JCalValue value) {
    +485                    if (value.getValues().size() > 1) {
    +486                            List<String> multi = value.asMulti();
    +487                            if (!multi.isEmpty()) {
    +488                                    return list(multi);
    +489                            }
    +490                    }
    +491    
    +492                    if (!value.getValues().isEmpty() && value.getValues().get(0).getArray() != null) {
    +493                            List<List<String>> structured = value.asStructured();
    +494                            if (!structured.isEmpty()) {
    +495                                    return structured(structured.toArray());
    +496                            }
    +497                    }
    +498    
    +499                    if (value.getValues().get(0).getObject() != null) {
    +500                            ListMultimap<String, String> object = value.asObject();
    +501                            if (!object.isEmpty()) {
    +502                                    return object(object.getMap());
    +503                            }
    +504                    }
    +505    
    +506                    return escape(value.asSingle());
    +507            }
    +508    
    +509            /**
    +510             * Unescapes all special characters that are escaped with a backslash, as
    +511             * well as escaped newlines.
    +512             * @param text the text to unescape
    +513             * @return the unescaped text
    +514             */
    +515            protected static String unescape(String text) {
    +516                    if (text == null) {
    +517                            return text;
    +518                    }
    +519    
    +520                    StringBuilder sb = null;
    +521                    boolean escaped = false;
    +522                    for (int i = 0; i < text.length(); i++) {
    +523                            char ch = text.charAt(i);
    +524    
    +525                            if (escaped) {
    +526                                    if (sb == null) {
    +527                                            sb = new StringBuilder(text.length());
    +528                                            sb.append(text.substring(0, i - 1));
    +529                                    }
    +530    
    +531                                    escaped = false;
    +532    
    +533                                    if (ch == 'n' || ch == 'N') {
    +534                                            //newlines appear as "\n" or "\N" (see RFC 5545 p.46)
    +535                                            sb.append(StringUtils.NEWLINE);
    +536                                            continue;
    +537                                    }
    +538    
    +539                                    sb.append(ch);
    +540                                    continue;
    +541                            }
    +542    
    +543                            if (ch == '\\') {
    +544                                    escaped = true;
    +545                                    continue;
    +546                            }
    +547    
    +548                            if (sb != null) {
    +549                                    sb.append(ch);
    +550                            }
    +551                    }
    +552                    return (sb == null) ? text : sb.toString();
    +553            }
    +554    
    +555            /**
    +556             * <p>
    +557             * Escapes all special characters within a iCalendar value. These characters
    +558             * are:
    +559             * </p>
    +560             * <ul>
    +561             * <li>backslashes ({@code \})</li>
    +562             * <li>commas ({@code ,})</li>
    +563             * <li>semi-colons ({@code ;})</li>
    +564             * </ul>
    +565             * <p>
    +566             * Newlines are not escaped by this method. They are escaped when the
    +567             * iCalendar object is serialized (in the {@link ICalRawWriter} class).
    +568             * </p>
    +569             * @param text the text to escape
    +570             * @return the escaped text
    +571             */
    +572            protected static String escape(String text) {
    +573                    if (text == null) {
    +574                            return text;
    +575                    }
    +576    
    +577                    String chars = "\\,;";
    +578                    StringBuilder sb = null;
    +579                    for (int i = 0; i < text.length(); i++) {
    +580                            char ch = text.charAt(i);
    +581                            if (chars.indexOf(ch) >= 0) {
    +582                                    if (sb == null) {
    +583                                            sb = new StringBuilder(text.length());
    +584                                            sb.append(text.substring(0, i));
    +585                                    }
    +586                                    sb.append('\\');
    +587                            }
    +588    
    +589                            if (sb != null) {
    +590                                    sb.append(ch);
    +591                            }
    +592                    }
    +593                    return (sb == null) ? text : sb.toString();
    +594            }
    +595    
    +596            /**
    +597             * Splits a string by a delimiter, taking escaped characters into account.
    +598             * @param string the string to split (e.g. "one,two,three")
    +599             * @param delimiter the delimiter (e.g. ",")
    +600             * @return the factory object
    +601             */
    +602            protected static Splitter split(String string, String delimiter) {
    +603                    return new Splitter(string, delimiter);
    +604            }
    +605    
    +606            /**
    +607             * Factory class for splitting strings.
    +608             */
    +609            protected static class Splitter {
    +610                    private String string;
    +611                    private String delimiter;
    +612                    private boolean removeEmpties = false;
    +613                    private boolean unescape = false;
    +614                    private int limit = -1;
    +615    
    +616                    /**
    +617                     * Creates a new splitter object.
    +618                     * @param string the string to split (e.g. "one,two,three")
    +619                     * @param delimiter the delimiter (e.g. ",")
    +620                     */
    +621                    public Splitter(String string, String delimiter) {
    +622                            this.string = string;
    +623                            this.delimiter = delimiter;
    +624                    }
    +625    
    +626                    /**
    +627                     * Sets whether to remove empty elements.
    +628                     * @param removeEmpties true to remove empty elements, false not to
    +629                     * (default is false)
    +630                     * @return this
    +631                     */
    +632                    public Splitter removeEmpties(boolean removeEmpties) {
    +633                            this.removeEmpties = removeEmpties;
    +634                            return this;
    +635                    }
    +636    
    +637                    /**
    +638                     * Sets whether to unescape each split string.
    +639                     * @param unescape true to unescape, false not to (default is false)
    +640                     * @return this
    +641                     */
    +642                    public Splitter unescape(boolean unescape) {
    +643                            this.unescape = unescape;
    +644                            return this;
    +645                    }
    +646    
    +647                    /**
    +648                     * Sets the max number of split strings it should parse.
    +649                     * @param limit the max number of split strings
    +650                     * @return this
    +651                     */
    +652                    public Splitter limit(int limit) {
    +653                            this.limit = limit;
    +654                            return this;
    +655                    }
    +656    
    +657                    /**
    +658                     * Performs the split operation.
    +659                     * @return the split string
    +660                     */
    +661                    public List<String> split() {
    +662                            //from: http://stackoverflow.com/q/820172">http://stackoverflow.com/q/820172
    +663                            String split[] = string.split("\\s*(?<!\\\\)" + Pattern.quote(delimiter) + "\\s*", limit);
    +664    
    +665                            List<String> list = new ArrayList<String>(split.length);
    +666                            for (String s : split) {
    +667                                    if (s.length() == 0 && removeEmpties) {
    +668                                            continue;
    +669                                    }
    +670    
    +671                                    if (unescape) {
    +672                                            s = ICalPropertyMarshaller.unescape(s);
    +673                                    }
    +674    
    +675                                    list.add(s);
    +676                            }
    +677                            return list;
    +678                    }
    +679            }
    +680    
    +681            /**
    +682             * Parses a comma-separated list of values.
    +683             * @param value the string to parse (e.g. "one,two,th\,ree")
    +684             * @return the parsed values
    +685             */
    +686            protected static List<String> list(String value) {
    +687                    if (value.length() == 0) {
    +688                            return new ArrayList<String>(0);
    +689                    }
    +690                    return split(value, ",").unescape(true).split();
    +691            }
    +692    
    +693            /**
    +694             * Writes a comma-separated list of values.
    +695             * @param values the values to write
    +696             * @return the list
    +697             */
    +698            protected static String list(Object... values) {
    +699                    return list(Arrays.asList(values));
    +700            }
    +701    
    +702            /**
    +703             * Writes a comma-separated list of values.
    +704             * @param values the values to write
    +705             * @return the list
    +706             */
    +707            protected static <T> String list(Collection<T> values) {
    +708                    return list(values, new ListCallback<T>() {
    +709                            public String asString(T value) {
    +710                                    return value.toString();
    +711                            }
    +712                    });
    +713            }
    +714    
    +715            /**
    +716             * Writes a comma-separated list of values.
    +717             * @param values the values to write
    +718             * @param callback callback function used for converting each value to a
    +719             * string
    +720             * @return the list
    +721             */
    +722            protected static <T> String list(Collection<T> values, final ListCallback<T> callback) {
    +723                    return join(values, ",", new JoinCallback<T>() {
    +724                            public void handle(StringBuilder sb, T value) {
    +725                                    if (value == null) {
    +726                                            return;
    +727                                    }
    +728    
    +729                                    String valueStr = callback.asString(value);
    +730                                    sb.append(escape(valueStr));
    +731                            }
    +732                    });
    +733            }
    +734    
    +735            /**
    +736             * Callback function used in conjunction with the
    +737             * {@link ICalPropertyMarshaller#list(Collection, ListCallback) list} method
    +738             * @param <T> the value class
    +739             */
    +740            protected static interface ListCallback<T> {
    +741                    /**
    +742                     * Converts a value to a string.
    +743                     * @param value the value (null values are not passed to this method, so
    +744                     * this parameter will never be null)
    +745                     * @return the string
    +746                     */
    +747                    String asString(T value);
    +748            }
    +749    
    +750            /**
    +751             * Parses a list of values that are delimited by semicolons. Unlike
    +752             * structured value components, semi-structured components cannot be
    +753             * multi-valued.
    +754             * @param value the string to parse (e.g. "one;two;three")
    +755             * @return the parsed values
    +756             */
    +757            protected static SemiStructuredIterator semistructured(String value) {
    +758                    return semistructured(value, -1);
    +759            }
    +760    
    +761            /**
    +762             * Parses a list of values that are delimited by semicolons. Unlike
    +763             * structured value components, semi-structured components cannot be
    +764             * multi-valued.
    +765             * @param value the string to parse (e.g. "one;two;three")
    +766             * @param limit the max number of components to parse
    +767             * @return the parsed values
    +768             */
    +769            protected static SemiStructuredIterator semistructured(String value, int limit) {
    +770                    List<String> split = split(value, ";").unescape(true).limit(limit).split();
    +771                    return new SemiStructuredIterator(split.iterator());
    +772            }
    +773    
    +774            /**
    +775             * Parses a structured value.
    +776             * @param value the string to parse (e.g. "one;two,three;four")
    +777             * @return the parsed values
    +778             */
    +779            protected static StructuredIterator structured(String value) {
    +780                    List<String> split = split(value, ";").split();
    +781                    List<List<String>> components = new ArrayList<List<String>>(split.size());
    +782                    for (String s : split) {
    +783                            components.add(list(s));
    +784                    }
    +785                    return new StructuredIterator(components.iterator());
    +786            }
    +787    
    +788            /**
    +789             * Provides an iterator for a jCard structured value.
    +790             * @param value the jCard value
    +791             * @return the parsed values
    +792             */
    +793            protected static StructuredIterator structured(JCalValue value) {
    +794                    return new StructuredIterator(value.asStructured().iterator());
    +795            }
    +796    
    +797            /**
    +798             * <p>
    +799             * Writes a structured value.
    +800             * </p>
    +801             * <p>
    +802             * This method accepts a list of {@link Object} instances.
    +803             * {@link Collection} objects will be treated as multi-valued components.
    +804             * Null objects will be treated as empty components. All other objects will
    +805             * have their {@code toString()} method invoked to generate the string
    +806             * value.
    +807             * </p>
    +808             * @param values the values to write
    +809             * @return the structured value string
    +810             */
    +811            protected static String structured(Object... values) {
    +812                    return join(Arrays.asList(values), ";", new JoinCallback<Object>() {
    +813                            public void handle(StringBuilder sb, Object value) {
    +814                                    if (value == null) {
    +815                                            return;
    +816                                    }
    +817    
    +818                                    if (value instanceof Collection) {
    +819                                            Collection<?> list = (Collection<?>) value;
    +820                                            sb.append(list(list));
    +821                                            return;
    +822                                    }
    +823    
    +824                                    sb.append(escape(value.toString()));
    +825                            }
    +826                    });
    +827            }
    +828    
    +829            /**
    +830             * Iterates over the fields in a structured value.
    +831             */
    +832            protected static class StructuredIterator {
    +833                    private final Iterator<List<String>> it;
    +834    
    +835                    /**
    +836                     * Constructs a new structured iterator.
    +837                     * @param it the iterator to wrap
    +838                     */
    +839                    public StructuredIterator(Iterator<List<String>> it) {
    +840                            this.it = it;
    +841                    }
    +842    
    +843                    /**
    +844                     * Gets the first value of the next component.
    +845                     * @return the first value, null if the value is an empty string, or
    +846                     * null if there are no more components
    +847                     */
    +848                    public String nextString() {
    +849                            if (!hasNext()) {
    +850                                    return null;
    +851                            }
    +852    
    +853                            List<String> list = it.next();
    +854                            if (list.isEmpty()) {
    +855                                    return null;
    +856                            }
    +857    
    +858                            String value = list.get(0);
    +859                            return (value.length() == 0) ? null : value;
    +860                    }
    +861    
    +862                    /**
    +863                     * Gets the next component.
    +864                     * @return the next component, an empty list if the component is empty,
    +865                     * or an empty list of there are no more components
    +866                     */
    +867                    public List<String> nextComponent() {
    +868                            if (!hasNext()) {
    +869                                    return new ArrayList<String>(0); //the lists should be mutable so they can be directly assigned to the property object's fields
    +870                            }
    +871    
    +872                            List<String> list = it.next();
    +873                            if (list.size() == 1 && list.get(0).length() == 0) {
    +874                                    return new ArrayList<String>(0);
    +875                            }
    +876    
    +877                            return list;
    +878                    }
    +879    
    +880                    /**
    +881                     * Determines if there are any elements left in the value.
    +882                     * @return true if there are elements left, false if not
    +883                     */
    +884                    public boolean hasNext() {
    +885                            return it.hasNext();
    +886                    }
    +887            }
    +888    
    +889            /**
    +890             * Iterates over the fields in a semi-structured value (a structured value
    +891             * whose components cannot be multi-valued).
    +892             */
    +893            protected static class SemiStructuredIterator {
    +894                    private final Iterator<String> it;
    +895    
    +896                    /**
    +897                     * Constructs a new structured iterator.
    +898                     * @param it the iterator to wrap
    +899                     */
    +900                    public SemiStructuredIterator(Iterator<String> it) {
    +901                            this.it = it;
    +902                    }
    +903    
    +904                    /**
    +905                     * Gets the next value.
    +906                     * @return the next value, null if the value is an empty string, or null
    +907                     * if there are no more values
    +908                     */
    +909                    public String next() {
    +910                            if (!hasNext()) {
    +911                                    return null;
    +912                            }
    +913    
    +914                            String value = it.next();
    +915                            return (value.length() == 0) ? null : value;
    +916                    }
    +917    
    +918                    /**
    +919                     * Determines if there are any elements left in the value.
    +920                     * @return true if there are elements left, false if not
    +921                     */
    +922                    public boolean hasNext() {
    +923                            return it.hasNext();
    +924                    }
    +925            }
    +926    
    +927            /**
    +928             * Writes an object property value to a string.
    +929             * @param value the value
    +930             * @return the string
    +931             */
    +932            protected static <T> String object(Map<String, List<T>> value) {
    +933                    return join(value, ";", new JoinMapCallback<String, List<T>>() {
    +934                            public void handle(StringBuilder sb, String key, List<T> value) {
    +935                                    sb.append(key.toUpperCase()).append('=').append(list(value));
    +936                            }
    +937                    });
    +938            }
    +939    
    +940            /**
    +941             * Parses an object property value.
    +942             * @param value the value to parse
    +943             * @return the parsed value
    +944             */
    +945            protected static ListMultimap<String, String> object(String value) {
    +946                    ListMultimap<String, String> map = new ListMultimap<String, String>();
    +947    
    +948                    for (String component : split(value, ";").unescape(false).removeEmpties(true).split()) {
    +949                            String[] split = component.split("=", 2);
    +950    
    +951                            String name = unescape(split[0].toUpperCase());
    +952                            List<String> values = (split.length > 1) ? list(split[1]) : Arrays.asList("");
    +953    
    +954                            map.putAll(name, values);
    +955                    }
    +956    
    +957                    return map;
    +958            }
    +959    
    +960            /**
    +961             * Parses a date string.
    +962             * @param value the date string
    +963             * @return the factory object
    +964             */
    +965            protected static DateParser date(String value) {
    +966                    return new DateParser(value);
    +967            }
    +968    
    +969            /**
    +970             * Formats a {@link Date} object as a string.
    +971             * @param date the date
    +972             * @return the factory object
    +973             */
    +974            protected static DateWriter date(Date date) {
    +975                    return new DateWriter(date);
    +976            }
    +977    
    +978            /**
    +979             * Factory class for parsing dates.
    +980             */
    +981            protected static class DateParser {
    +982                    private String value;
    +983                    private TimeZone timezone;
    +984    
    +985                    /**
    +986                     * Creates a new date writer object.
    +987                     * @param value the date string to parse
    +988                     */
    +989                    public DateParser(String value) {
    +990                            this.value = value;
    +991                    }
    +992    
    +993                    /**
    +994                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +995                     * value). If the ID does not contain a "/" character, it will be
    +996                     * ignored.
    +997                     * @param timezoneId the timezone ID
    +998                     * @return this
    +999                     */
    +1000                    public DateParser tzid(String timezoneId) {
    +1001                            return tzid(timezoneId, null);
    +1002                    }
    +1003    
    +1004                    /**
    +1005                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +1006                     * value).
    +1007                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1008                     * "/" character), it will attempt to look up the timezone in Java's
    +1009                     * timezone registry and parse the date according to that timezone. If
    +1010                     * the timezone is not found, the date will be parsed according to the
    +1011                     * JVM's default timezone and a warning message will be added to the
    +1012                     * provided warnings list. If the ID is not global, it will be parsed
    +1013                     * according to the JVM's default timezone. Whichever timezone is chosen
    +1014                     * here, it will be ignored if the date string is in UTC time or
    +1015                     * contains an offset.
    +1016                     * @param warnings if the ID is global and is not recognized, a warning
    +1017                     * message will be added to this list
    +1018                     * @return this
    +1019                     */
    +1020                    public DateParser tzid(String timezoneId, List<String> warnings) {
    +1021                            if (timezoneId == null) {
    +1022                                    return tz(null);
    +1023                            }
    +1024    
    +1025                            if (timezoneId.contains("/")) {
    +1026                                    TimeZone timezone = ICalDateFormatter.parseTimeZoneId(timezoneId);
    +1027                                    if (timezone == null) {
    +1028                                            timezone = TimeZone.getDefault();
    +1029                                            if (warnings != null) {
    +1030                                                    warnings.add("Timezone ID not recognized, parsing with default timezone instead: " + timezoneId);
    +1031                                            }
    +1032                                    }
    +1033                                    return tz(timezone);
    +1034                            }
    +1035    
    +1036                            //TODO parse according to the associated VTIMEZONE component
    +1037                            return tz(TimeZone.getDefault());
    +1038                    }
    +1039    
    +1040                    /**
    +1041                     * Sets the timezone to parse the date as.
    +1042                     * @param timezone the timezone
    +1043                     * @return this
    +1044                     */
    +1045                    public DateParser tz(TimeZone timezone) {
    +1046                            this.timezone = timezone;
    +1047                            return this;
    +1048                    }
    +1049    
    +1050                    /**
    +1051                     * Parses the date string.
    +1052                     * @return the parsed date
    +1053                     * @throws IllegalArgumentException if the date string is invalid
    +1054                     */
    +1055                    public Date parse() {
    +1056                            return ICalDateFormatter.parse(value, timezone);
    +1057                    }
    +1058            }
    +1059    
    +1060            /**
    +1061             * Factory class for writing dates.
    +1062             */
    +1063            protected static class DateWriter {
    +1064                    private Date date;
    +1065                    private boolean hasTime = true;
    +1066                    private TimeZone timezone;
    +1067                    private boolean extended = false;
    +1068    
    +1069                    /**
    +1070                     * Creates a new date writer object.
    +1071                     * @param date the date to format
    +1072                     */
    +1073                    public DateWriter(Date date) {
    +1074                            this.date = date;
    +1075                    }
    +1076    
    +1077                    /**
    +1078                     * Sets whether to output the date's time component.
    +1079                     * @param hasTime true include the time, false if it's strictly a date
    +1080                     * (defaults to "true")
    +1081                     * @return this
    +1082                     */
    +1083                    public DateWriter time(boolean hasTime) {
    +1084                            this.hasTime = hasTime;
    +1085                            return this;
    +1086                    }
    +1087    
    +1088                    /**
    +1089                     * Sets the ID of the timezone to format the date as (TZID parameter
    +1090                     * value).
    +1091                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1092                     * "/" character), it will attempt to look up the timezone in Java's
    +1093                     * timezone registry and format the date according to that timezone. If
    +1094                     * the timezone is not found, the date will be formatted in UTC. If the
    +1095                     * ID is not global, it will be formatted according to the JVM's default
    +1096                     * timezone. If no timezone preference is specified, the date will be
    +1097                     * formatted as UTC.
    +1098                     * @return this
    +1099                     */
    +1100                    public DateWriter tzid(String timezoneId) {
    +1101                            if (timezoneId == null) {
    +1102                                    return tz(null);
    +1103                            }
    +1104    
    +1105                            if (timezoneId.contains("/")) {
    +1106                                    return tz(ICalDateFormatter.parseTimeZoneId(timezoneId));
    +1107                            }
    +1108    
    +1109                            //TODO format according to the associated VTIMEZONE component
    +1110                            return tz(TimeZone.getDefault());
    +1111                    }
    +1112    
    +1113                    /**
    +1114                     * Outputs the date in local time (without a timezone). If no timezone
    +1115                     * preference is specified, the date will be formatted as UTC.
    +1116                     * @param localTz true to use local time, false not to
    +1117                     * @return this
    +1118                     */
    +1119                    public DateWriter localTz(boolean localTz) {
    +1120                            return localTz ? tz(TimeZone.getDefault()) : this;
    +1121                    }
    +1122    
    +1123                    /**
    +1124                     * Convenience method that combines {@link #localTz(boolean)} and
    +1125                     * {@link #tzid(String)} into one method.
    +1126                     * @param localTz true to use local time, false not to
    +1127                     * @param timezoneId the timezone ID
    +1128                     * @return this
    +1129                     */
    +1130                    public DateWriter tz(boolean localTz, String timezoneId) {
    +1131                            return localTz ? localTz(true) : tzid(timezoneId);
    +1132                    }
    +1133    
    +1134                    /**
    +1135                     * Sets the timezone to format the date as. If no timezone preference is
    +1136                     * specified, the date will be formatted as UTC.
    +1137                     * @param timezone the timezone
    +1138                     * @return this
    +1139                     */
    +1140                    public DateWriter tz(TimeZone timezone) {
    +1141                            this.timezone = timezone;
    +1142                            return this;
    +1143                    }
    +1144    
    +1145                    /**
    +1146                     * Sets whether to use extended format or basic.
    +1147                     * @param extended true to use extended format, false to use basic
    +1148                     * (defaults to "false")
    +1149                     * @return this
    +1150                     */
    +1151                    public DateWriter extended(boolean extended) {
    +1152                            this.extended = extended;
    +1153                            return this;
    +1154                    }
    +1155    
    +1156                    /**
    +1157                     * Creates the date string.
    +1158                     * @return the date string
    +1159                     */
    +1160                    public String write() {
    +1161                            ISOFormat format;
    +1162                            TimeZone timezone = this.timezone;
    +1163                            if (hasTime) {
    +1164                                    if (timezone == null) {
    +1165                                            format = extended ? ISOFormat.UTC_TIME_EXTENDED : ISOFormat.UTC_TIME_BASIC;
    +1166                                    } else {
    +1167                                            format = extended ? ISOFormat.TIME_EXTENDED_WITHOUT_TZ : ISOFormat.TIME_BASIC_WITHOUT_TZ;
    +1168                                    }
    +1169                            } else {
    +1170                                    format = extended ? ISOFormat.DATE_EXTENDED : ISOFormat.DATE_BASIC;
    +1171                                    timezone = null;
    +1172                            }
    +1173    
    +1174                            return ICalDateFormatter.format(date, format, timezone);
    +1175                    }
    +1176            }
    +1177    
    +1178            /**
    +1179             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1180             * that the parser expected to find are missing from the property's XML
    +1181             * element.
    +1182             * @param dataTypes the expected data types (null for "unknown")
    +1183             */
    +1184            protected static CannotParseException missingXmlElements(ICalDataType... dataTypes) {
    +1185                    String[] elements = new String[dataTypes.length];
    +1186                    for (int i = 0; i < dataTypes.length; i++) {
    +1187                            ICalDataType dataType = dataTypes[i];
    +1188                            elements[i] = (dataType == null) ? "unknown" : dataType.getName().toLowerCase();
    +1189                    }
    +1190                    return missingXmlElements(elements);
    +1191            }
    +1192    
    +1193            /**
    +1194             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1195             * that the parser expected to find are missing from property's XML element.
    +1196             * @param elements the names of the expected XML elements.
    +1197             */
    +1198            protected static CannotParseException missingXmlElements(String... elements) {
    +1199                    String message;
    +1200    
    +1201                    switch (elements.length) {
    +1202                    case 0:
    +1203                            message = "Property value empty.";
    +1204                            break;
    +1205                    case 1:
    +1206                            message = "Property value empty (no <" + elements[0] + "> element found).";
    +1207                            break;
    +1208                    case 2:
    +1209                            message = "Property value empty (no <" + elements[0] + "> or <" + elements[1] + "> elements found).";
    +1210                            break;
    +1211                    default:
    +1212                            StringBuilder sb = new StringBuilder();
    +1213    
    +1214                            sb.append("Property value empty (no ");
    +1215                            join(Arrays.asList(elements).subList(0, elements.length - 1), ", ", sb, new JoinCallback<String>() {
    +1216                                    public void handle(StringBuilder sb, String value) {
    +1217                                            sb.append('<').append(value).append('>');
    +1218                                    }
    +1219                            });
    +1220                            sb.append(", or <").append(elements[elements.length - 1]).append("> elements found).");
    +1221    
    +1222                            message = sb.toString();
    +1223                            break;
    +1224                    }
    +1225    
    +1226                    return new CannotParseException(message);
    +1227            }
    +1228    
    +1229            /**
    +1230             * Represents the result of an unmarshal operation.
    +1231             * @author Michael Angstadt
    +1232             * @param <T> the unmarshalled property class
    +1233             */
    +1234            public static class Result<T extends ICalProperty> {
    +1235                    private final T property;
    +1236                    private final List<String> warnings;
    +1237    
    +1238                    /**
    +1239                     * Creates a new result.
    +1240                     * @param property the property object
    +1241                     * @param warnings the warnings
    +1242                     */
    +1243                    public Result(T property, List<String> warnings) {
    +1244                            this.property = property;
    +1245                            this.warnings = warnings;
    +1246                    }
    +1247    
    +1248                    /**
    +1249                     * Gets the warnings.
    +1250                     * @return the warnings
    +1251                     */
    +1252                    public List<String> getWarnings() {
    +1253                            return warnings;
    +1254                    }
    +1255    
    +1256                    /**
    +1257                     * Gets the property object.
    +1258                     * @return the property object
    +1259                     */
    +1260                    public T getProperty() {
    +1261                            return property;
    +1262                    }
    +1263            }
    +1264    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.DateWriter.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.DateWriter.html new file mode 100644 index 000000000..40770513e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.DateWriter.html @@ -0,0 +1,1330 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import static biweekly.io.xml.XCalNamespaceContext.XCAL_NS;
    +004    import static biweekly.util.StringUtils.join;
    +005    
    +006    import java.util.ArrayList;
    +007    import java.util.Arrays;
    +008    import java.util.Collection;
    +009    import java.util.Date;
    +010    import java.util.Iterator;
    +011    import java.util.List;
    +012    import java.util.Map;
    +013    import java.util.TimeZone;
    +014    import java.util.regex.Pattern;
    +015    
    +016    import javax.xml.namespace.QName;
    +017    
    +018    import org.w3c.dom.Element;
    +019    
    +020    import biweekly.ICalDataType;
    +021    import biweekly.ICalendar;
    +022    import biweekly.io.CannotParseException;
    +023    import biweekly.io.SkipMeException;
    +024    import biweekly.io.json.JCalValue;
    +025    import biweekly.io.text.ICalRawWriter;
    +026    import biweekly.io.xml.XCalElement;
    +027    import biweekly.parameter.ICalParameters;
    +028    import biweekly.property.ICalProperty;
    +029    import biweekly.util.ICalDateFormatter;
    +030    import biweekly.util.ISOFormat;
    +031    import biweekly.util.ListMultimap;
    +032    import biweekly.util.StringUtils;
    +033    import biweekly.util.StringUtils.JoinCallback;
    +034    import biweekly.util.StringUtils.JoinMapCallback;
    +035    import biweekly.util.XmlUtils;
    +036    
    +037    /*
    +038     Copyright (c) 2013, Michael Angstadt
    +039     All rights reserved.
    +040    
    +041     Redistribution and use in source and binary forms, with or without
    +042     modification, are permitted provided that the following conditions are met: 
    +043    
    +044     1. Redistributions of source code must retain the above copyright notice, this
    +045     list of conditions and the following disclaimer. 
    +046     2. Redistributions in binary form must reproduce the above copyright notice,
    +047     this list of conditions and the following disclaimer in the documentation
    +048     and/or other materials provided with the distribution. 
    +049    
    +050     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +051     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +052     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +053     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +054     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +055     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +056     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +057     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +058     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +059     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +060     */
    +061    
    +062    /**
    +063     * Base class for iCalendar property marshallers.
    +064     * @param <T> the property class
    +065     * @author Michael Angstadt
    +066     */
    +067    public abstract class ICalPropertyMarshaller<T extends ICalProperty> {
    +068            protected final Class<T> clazz;
    +069            protected final String propertyName;
    +070            protected final ICalDataType defaultDataType;
    +071            protected final QName qname;
    +072    
    +073            /**
    +074             * Creates a new marshaller.
    +075             * @param clazz the property class
    +076             * @param propertyName the property name (e.g. "VERSION")
    +077             * @param defaultDataType the property's default data type (e.g. "text") or
    +078             * null if unknown
    +079             */
    +080            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType) {
    +081                    this(clazz, propertyName, defaultDataType, new QName(XCAL_NS, propertyName.toLowerCase()));
    +082            }
    +083    
    +084            /**
    +085             * Creates a new marshaller.
    +086             * @param clazz the property class
    +087             * @param propertyName the property name (e.g. "VERSION")
    +088             * @param defaultDataType the property's default data type (e.g. "text") or
    +089             * null if unknown
    +090             * @param qname the XML element name and namespace to use for xCal documents
    +091             * (by default, the XML element name is set to the lower-cased property
    +092             * name, and the element namespace is set to the xCal namespace)
    +093             */
    +094            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType, QName qname) {
    +095                    this.clazz = clazz;
    +096                    this.propertyName = propertyName;
    +097                    this.defaultDataType = defaultDataType;
    +098                    this.qname = qname;
    +099            }
    +100    
    +101            /**
    +102             * Gets the property class.
    +103             * @return the property class
    +104             */
    +105            public Class<T> getPropertyClass() {
    +106                    return clazz;
    +107            }
    +108    
    +109            /**
    +110             * Gets the property name.
    +111             * @return the property name (e.g. "VERSION")
    +112             */
    +113            public String getPropertyName() {
    +114                    return propertyName;
    +115            }
    +116    
    +117            /**
    +118             * Gets the property's default data type.
    +119             * @return the default data type (e.g. "text") or null if unknown
    +120             */
    +121            public ICalDataType getDefaultDataType() {
    +122                    return defaultDataType;
    +123            }
    +124    
    +125            /**
    +126             * Gets this property's local name and namespace for xCal documents.
    +127             * @return the XML local name and namespace
    +128             */
    +129            public QName getQName() {
    +130                    return qname;
    +131            }
    +132    
    +133            /**
    +134             * Sanitizes a property's parameters (called before the property is
    +135             * written). Note that a copy of the parameters is returned so that the
    +136             * property object does not get modified.
    +137             * @param property the property
    +138             * @return the sanitized parameters
    +139             */
    +140            public final ICalParameters prepareParameters(T property) {
    +141                    //make a copy because the property should not get modified when it is marshalled
    +142                    ICalParameters copy = new ICalParameters(property.getParameters());
    +143                    _prepareParameters(property, copy);
    +144                    return copy;
    +145            }
    +146    
    +147            /**
    +148             * Determines the data type of a property instance.
    +149             * @param property the property
    +150             * @return the data type or null if unknown
    +151             */
    +152            public final ICalDataType dataType(T property) {
    +153                    return _dataType(property);
    +154            }
    +155    
    +156            /**
    +157             * Marshals a property's value to a string.
    +158             * @param property the property
    +159             * @return the marshalled value
    +160             * @throws SkipMeException if the property should not be written to the data
    +161             * stream
    +162             */
    +163            public final String writeText(T property) {
    +164                    return _writeText(property);
    +165            }
    +166    
    +167            /**
    +168             * Marshals a property's value to an XML element (xCal).
    +169             * @param property the property
    +170             * @param element the property's XML element
    +171             * @throws SkipMeException if the property should not be written to the data
    +172             * stream
    +173             */
    +174            public final void writeXml(T property, Element element) {
    +175                    XCalElement xcalElement = new XCalElement(element);
    +176                    _writeXml(property, xcalElement);
    +177            }
    +178    
    +179            /**
    +180             * Marshals a property's value to a JSON data stream (jCal).
    +181             * @param property the property
    +182             * @return the marshalled value
    +183             * @throws SkipMeException if the property should not be written to the data
    +184             * stream
    +185             */
    +186            public final JCalValue writeJson(T property) {
    +187                    return _writeJson(property);
    +188            }
    +189    
    +190            /**
    +191             * Unmarshals a property from a plain-text iCalendar data stream.
    +192             * @param value the value as read off the wire
    +193             * @param dataType the data type of the property value. The property's VALUE
    +194             * parameter is used to determine the data type. If the property has no
    +195             * VALUE parameter, then this parameter will be set to the property's
    +196             * default datatype. Note that the VALUE parameter is removed from the
    +197             * property's parameter list after it has been read.
    +198             * @param parameters the parsed parameters
    +199             * @return the unmarshalled property and its warnings
    +200             * @throws CannotParseException if the marshaller could not parse the
    +201             * property's value
    +202             * @throws SkipMeException if the property should not be added to the final
    +203             * {@link ICalendar} object
    +204             */
    +205            public final Result<T> parseText(String value, ICalDataType dataType, ICalParameters parameters) {
    +206                    List<String> warnings = new ArrayList<String>(0);
    +207                    T property = _parseText(value, dataType, parameters, warnings);
    +208                    property.setParameters(parameters);
    +209                    return new Result<T>(property, warnings);
    +210            }
    +211    
    +212            /**
    +213             * Unmarshals a property's value from an XML document (xCal).
    +214             * @param element the property's XML element
    +215             * @param parameters the property's parameters
    +216             * @return the unmarshalled property and its warnings
    +217             * @throws CannotParseException if the marshaller could not parse the
    +218             * property's value
    +219             * @throws SkipMeException if the property should not be added to the final
    +220             * {@link ICalendar} object
    +221             */
    +222            public final Result<T> parseXml(Element element, ICalParameters parameters) {
    +223                    List<String> warnings = new ArrayList<String>(0);
    +224                    T property = _parseXml(new XCalElement(element), parameters, warnings);
    +225                    property.setParameters(parameters);
    +226                    return new Result<T>(property, warnings);
    +227            }
    +228    
    +229            /**
    +230             * Unmarshals a property's value from a JSON data stream (jCal).
    +231             * @param value the property's JSON value
    +232             * @param dataType the data type
    +233             * @param parameters the parsed parameters
    +234             * @return the unmarshalled property and its warnings
    +235             * @throws CannotParseException if the marshaller could not parse the
    +236             * property's value
    +237             * @throws SkipMeException if the property should not be added to the final
    +238             * {@link ICalendar} object
    +239             */
    +240            public final Result<T> parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters) {
    +241                    List<String> warnings = new ArrayList<String>(0);
    +242                    T property = _parseJson(value, dataType, parameters, warnings);
    +243                    property.setParameters(parameters);
    +244                    return new Result<T>(property, warnings);
    +245            }
    +246    
    +247            /**
    +248             * <p>
    +249             * Sanitizes a property's parameters before the property is written.
    +250             * </p>
    +251             * <p>
    +252             * This method should be overridden by child classes that wish to tweak the
    +253             * property's parameters before the property is written. The default
    +254             * implementation of this method does nothing.
    +255             * </p>
    +256             * @param property the property
    +257             * @param copy the list of parameters to make modifications to (it is a copy
    +258             * of the property's parameters)
    +259             */
    +260            protected void _prepareParameters(T property, ICalParameters copy) {
    +261                    //do nothing
    +262            }
    +263    
    +264            /**
    +265             * <p>
    +266             * Determines the data type of a property instance.
    +267             * </p>
    +268             * <p>
    +269             * This method should be overridden by child classes if a property's data
    +270             * type changes depending on its value. The default implementation of this
    +271             * method returns the property's default data type.
    +272             * </p>
    +273             * @param property the property
    +274             * @return the data type or null if unknown
    +275             */
    +276            protected ICalDataType _dataType(T property) {
    +277                    return defaultDataType;
    +278            }
    +279    
    +280            /**
    +281             * Marshals a property's value to a string.
    +282             * @param property the property
    +283             * @return the marshalled value
    +284             * @throws SkipMeException if the property should not be written to the data
    +285             * stream
    +286             */
    +287            protected abstract String _writeText(T property);
    +288    
    +289            /**
    +290             * <p>
    +291             * Marshals a property's value to an XML element (xCal).
    +292             * <p>
    +293             * <p>
    +294             * This method should be overridden by child classes that wish to support
    +295             * xCal. The default implementation of this method will append one child
    +296             * element to the property's XML element. The child element's name will be
    +297             * that of the property's data type (retrieved using the {@link #dataType}
    +298             * method), and the child element's text content will be set to the
    +299             * property's marshalled plain-text value (retrieved using the
    +300             * {@link #writeText} method).
    +301             * </p>
    +302             * @param property the property
    +303             * @param element the property's XML element
    +304             * @throws SkipMeException if the property should not be written to the data
    +305             * stream
    +306             */
    +307            protected void _writeXml(T property, XCalElement element) {
    +308                    String value = writeText(property);
    +309                    ICalDataType dataType = dataType(property);
    +310                    element.append(dataType, value);
    +311            }
    +312    
    +313            /**
    +314             * <p>
    +315             * Marshals a property's value to a JSON data stream (jCal).
    +316             * </p>
    +317             * <p>
    +318             * This method should be overridden by child classes that wish to support
    +319             * jCal. The default implementation of this method will create a jCard
    +320             * property that has a single JSON string value (generated by the
    +321             * {@link #writeText} method).
    +322             * </p>
    +323             * @param property the property
    +324             * @return the marshalled value
    +325             * @throws SkipMeException if the property should not be written to the data
    +326             * stream
    +327             */
    +328            protected JCalValue _writeJson(T property) {
    +329                    String value = writeText(property);
    +330                    return JCalValue.single(value);
    +331            }
    +332    
    +333            /**
    +334             * Unmarshals a property from a plain-text iCalendar data stream.
    +335             * @param value the value as read off the wire
    +336             * @param dataType the data type of the property value. The property's VALUE
    +337             * parameter is used to determine the data type. If the property has no
    +338             * VALUE parameter, then this parameter will be set to the property's
    +339             * default datatype. Note that the VALUE parameter is removed from the
    +340             * property's parameter list after it has been read.
    +341             * @param parameters the parsed parameters. These parameters will be
    +342             * assigned to the property object once this method returns. Therefore, do
    +343             * not assign any parameters to the property object itself whilst inside of
    +344             * this method, or else they will be overwritten.
    +345             * @param warnings allows the programmer to alert the user to any
    +346             * note-worthy (but non-critical) issues that occurred during the
    +347             * unmarshalling process
    +348             * @return the unmarshalled property object
    +349             * @throws CannotParseException if the marshaller could not parse the
    +350             * property's value
    +351             * @throws SkipMeException if the property should not be added to the final
    +352             * {@link ICalendar} object
    +353             */
    +354            protected abstract T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings);
    +355    
    +356            /**
    +357             * <p>
    +358             * Unmarshals a property from an XML document (xCal).
    +359             * </p>
    +360             * <p>
    +361             * This method should be overridden by child classes that wish to support
    +362             * xCal. The default implementation of this method will find the first child
    +363             * element with the xCal namespace. The element's name will be used as the
    +364             * property's data type and its text content will be passed into the
    +365             * {@link #_parseText} method. If no such child element is found, then the
    +366             * parent element's text content will be passed into {@link #_parseText} and
    +367             * the data type will be null.
    +368             * </p>
    +369             * @param element the property's XML element
    +370             * @param parameters the parsed parameters. These parameters will be
    +371             * assigned to the property object once this method returns. Therefore, do
    +372             * not assign any parameters to the property object itself whilst inside of
    +373             * this method, or else they will be overwritten.
    +374             * @param warnings allows the programmer to alert the user to any
    +375             * note-worthy (but non-critical) issues that occurred during the
    +376             * unmarshalling process
    +377             * @return the unmarshalled property object
    +378             * @throws CannotParseException if the marshaller could not parse the
    +379             * property's value
    +380             * @throws SkipMeException if the property should not be added to the final
    +381             * {@link ICalendar} object
    +382             */
    +383            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +384                    String value = null;
    +385                    ICalDataType dataType = null;
    +386                    Element rawElement = element.getElement();
    +387    
    +388                    //get the text content of the first child element with the xCard namespace
    +389                    List<Element> children = XmlUtils.toElementList(rawElement.getChildNodes());
    +390                    for (Element child : children) {
    +391                            if (!XCAL_NS.equals(child.getNamespaceURI())) {
    +392                                    continue;
    +393                            }
    +394    
    +395                            dataType = ICalDataType.get(child.getLocalName());
    +396                            value = child.getTextContent();
    +397                            break;
    +398                    }
    +399    
    +400                    if (dataType == null) {
    +401                            //get the text content of the property element
    +402                            value = rawElement.getTextContent();
    +403                    }
    +404    
    +405                    value = escape(value);
    +406                    return _parseText(value, dataType, parameters, warnings);
    +407            }
    +408    
    +409            /**
    +410             * /**
    +411             * <p>
    +412             * Unmarshals a property from a JSON data stream (jCal).
    +413             * </p>
    +414             * <p>
    +415             * This method should be overridden by child classes that wish to support
    +416             * jCal. The default implementation of this method will convert the jCal
    +417             * property value to a string and pass it into the {@link #_parseText}
    +418             * method.
    +419             * </p>
    +420             * 
    +421             * <hr>
    +422             * 
    +423             * <p>
    +424             * The following paragraphs describe the way in which this method's default
    +425             * implementation converts a jCal value to a string:
    +426             * </p>
    +427             * <p>
    +428             * If the jCal value consists of a single, non-array, non-object value, then
    +429             * the value is converted to a string. Special characters (backslashes,
    +430             * commas, and semicolons) are escaped in order to simulate what the value
    +431             * might look like in a plain-text iCalendar object.<br>
    +432             * <code>["x-foo", {}, "text", "the;value"] --&gt; "the\;value"</code><br>
    +433             * <code>["x-foo", {}, "text", 2] --&gt; "2"</code>
    +434             * </p>
    +435             * <p>
    +436             * If the jCal value consists of multiple, non-array, non-object values,
    +437             * then all the values are appended together in a single string, separated
    +438             * by commas. Special characters (backslashes, commas, and semicolons) are
    +439             * escaped for each value in order to prevent commas from being treated as
    +440             * delimiters, and to simulate what the value might look like in a
    +441             * plain-text iCalendar object.<br>
    +442             * <code>["x-foo", {}, "text", "one", "two,three"] --&gt;
    +443             * "one,two\,three"</code>
    +444             * </p>
    +445             * <p>
    +446             * If the jCal value is a single array, then this array is treated as a
    +447             * "structured value", and converted its plain-text representation. Special
    +448             * characters (backslashes, commas, and semicolons) are escaped for each
    +449             * value in order to prevent commas and semicolons from being treated as
    +450             * delimiters.<br>
    +451             * <code>["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]]
    +452             * --&gt; "one;two,three;four\;five"</code>
    +453             * </p>
    +454             * <p>
    +455             * If the jCal value starts with a JSON object, then the object is converted
    +456             * to a format identical to the one used in the RRULE and EXRULE properties.
    +457             * Special characters (backslashes, commas, semicolons, and equal signs) are
    +458             * escaped for each value in order to preserve the syntax of the string
    +459             * value.<br>
    +460             * <code>["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --&gt; "ONE=1;TWO=2,2.5"</code>
    +461             * </p>
    +462             * <p>
    +463             * For all other cases, behavior is undefined.
    +464             * </p>
    +465             * @param value the property's JSON value
    +466             * @param dataType the data type
    +467             * @param parameters the parsed parameters. These parameters will be
    +468             * assigned to the property object once this method returns. Therefore, do
    +469             * not assign any parameters to the property object itself whilst inside of
    +470             * this method, or else they will be overwritten.
    +471             * @param warnings allows the programmer to alert the user to any
    +472             * note-worthy (but non-critical) issues that occurred during the
    +473             * unmarshalling process
    +474             * @return the unmarshalled property object
    +475             * @throws CannotParseException if the marshaller could not parse the
    +476             * property's value
    +477             * @throws SkipMeException if the property should not be added to the final
    +478             * {@link ICalendar} object
    +479             */
    +480            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +481                    return _parseText(jcalValueToString(value), dataType, parameters, warnings);
    +482            }
    +483    
    +484            private String jcalValueToString(JCalValue value) {
    +485                    if (value.getValues().size() > 1) {
    +486                            List<String> multi = value.asMulti();
    +487                            if (!multi.isEmpty()) {
    +488                                    return list(multi);
    +489                            }
    +490                    }
    +491    
    +492                    if (!value.getValues().isEmpty() && value.getValues().get(0).getArray() != null) {
    +493                            List<List<String>> structured = value.asStructured();
    +494                            if (!structured.isEmpty()) {
    +495                                    return structured(structured.toArray());
    +496                            }
    +497                    }
    +498    
    +499                    if (value.getValues().get(0).getObject() != null) {
    +500                            ListMultimap<String, String> object = value.asObject();
    +501                            if (!object.isEmpty()) {
    +502                                    return object(object.getMap());
    +503                            }
    +504                    }
    +505    
    +506                    return escape(value.asSingle());
    +507            }
    +508    
    +509            /**
    +510             * Unescapes all special characters that are escaped with a backslash, as
    +511             * well as escaped newlines.
    +512             * @param text the text to unescape
    +513             * @return the unescaped text
    +514             */
    +515            protected static String unescape(String text) {
    +516                    if (text == null) {
    +517                            return text;
    +518                    }
    +519    
    +520                    StringBuilder sb = null;
    +521                    boolean escaped = false;
    +522                    for (int i = 0; i < text.length(); i++) {
    +523                            char ch = text.charAt(i);
    +524    
    +525                            if (escaped) {
    +526                                    if (sb == null) {
    +527                                            sb = new StringBuilder(text.length());
    +528                                            sb.append(text.substring(0, i - 1));
    +529                                    }
    +530    
    +531                                    escaped = false;
    +532    
    +533                                    if (ch == 'n' || ch == 'N') {
    +534                                            //newlines appear as "\n" or "\N" (see RFC 5545 p.46)
    +535                                            sb.append(StringUtils.NEWLINE);
    +536                                            continue;
    +537                                    }
    +538    
    +539                                    sb.append(ch);
    +540                                    continue;
    +541                            }
    +542    
    +543                            if (ch == '\\') {
    +544                                    escaped = true;
    +545                                    continue;
    +546                            }
    +547    
    +548                            if (sb != null) {
    +549                                    sb.append(ch);
    +550                            }
    +551                    }
    +552                    return (sb == null) ? text : sb.toString();
    +553            }
    +554    
    +555            /**
    +556             * <p>
    +557             * Escapes all special characters within a iCalendar value. These characters
    +558             * are:
    +559             * </p>
    +560             * <ul>
    +561             * <li>backslashes ({@code \})</li>
    +562             * <li>commas ({@code ,})</li>
    +563             * <li>semi-colons ({@code ;})</li>
    +564             * </ul>
    +565             * <p>
    +566             * Newlines are not escaped by this method. They are escaped when the
    +567             * iCalendar object is serialized (in the {@link ICalRawWriter} class).
    +568             * </p>
    +569             * @param text the text to escape
    +570             * @return the escaped text
    +571             */
    +572            protected static String escape(String text) {
    +573                    if (text == null) {
    +574                            return text;
    +575                    }
    +576    
    +577                    String chars = "\\,;";
    +578                    StringBuilder sb = null;
    +579                    for (int i = 0; i < text.length(); i++) {
    +580                            char ch = text.charAt(i);
    +581                            if (chars.indexOf(ch) >= 0) {
    +582                                    if (sb == null) {
    +583                                            sb = new StringBuilder(text.length());
    +584                                            sb.append(text.substring(0, i));
    +585                                    }
    +586                                    sb.append('\\');
    +587                            }
    +588    
    +589                            if (sb != null) {
    +590                                    sb.append(ch);
    +591                            }
    +592                    }
    +593                    return (sb == null) ? text : sb.toString();
    +594            }
    +595    
    +596            /**
    +597             * Splits a string by a delimiter, taking escaped characters into account.
    +598             * @param string the string to split (e.g. "one,two,three")
    +599             * @param delimiter the delimiter (e.g. ",")
    +600             * @return the factory object
    +601             */
    +602            protected static Splitter split(String string, String delimiter) {
    +603                    return new Splitter(string, delimiter);
    +604            }
    +605    
    +606            /**
    +607             * Factory class for splitting strings.
    +608             */
    +609            protected static class Splitter {
    +610                    private String string;
    +611                    private String delimiter;
    +612                    private boolean removeEmpties = false;
    +613                    private boolean unescape = false;
    +614                    private int limit = -1;
    +615    
    +616                    /**
    +617                     * Creates a new splitter object.
    +618                     * @param string the string to split (e.g. "one,two,three")
    +619                     * @param delimiter the delimiter (e.g. ",")
    +620                     */
    +621                    public Splitter(String string, String delimiter) {
    +622                            this.string = string;
    +623                            this.delimiter = delimiter;
    +624                    }
    +625    
    +626                    /**
    +627                     * Sets whether to remove empty elements.
    +628                     * @param removeEmpties true to remove empty elements, false not to
    +629                     * (default is false)
    +630                     * @return this
    +631                     */
    +632                    public Splitter removeEmpties(boolean removeEmpties) {
    +633                            this.removeEmpties = removeEmpties;
    +634                            return this;
    +635                    }
    +636    
    +637                    /**
    +638                     * Sets whether to unescape each split string.
    +639                     * @param unescape true to unescape, false not to (default is false)
    +640                     * @return this
    +641                     */
    +642                    public Splitter unescape(boolean unescape) {
    +643                            this.unescape = unescape;
    +644                            return this;
    +645                    }
    +646    
    +647                    /**
    +648                     * Sets the max number of split strings it should parse.
    +649                     * @param limit the max number of split strings
    +650                     * @return this
    +651                     */
    +652                    public Splitter limit(int limit) {
    +653                            this.limit = limit;
    +654                            return this;
    +655                    }
    +656    
    +657                    /**
    +658                     * Performs the split operation.
    +659                     * @return the split string
    +660                     */
    +661                    public List<String> split() {
    +662                            //from: http://stackoverflow.com/q/820172">http://stackoverflow.com/q/820172
    +663                            String split[] = string.split("\\s*(?<!\\\\)" + Pattern.quote(delimiter) + "\\s*", limit);
    +664    
    +665                            List<String> list = new ArrayList<String>(split.length);
    +666                            for (String s : split) {
    +667                                    if (s.length() == 0 && removeEmpties) {
    +668                                            continue;
    +669                                    }
    +670    
    +671                                    if (unescape) {
    +672                                            s = ICalPropertyMarshaller.unescape(s);
    +673                                    }
    +674    
    +675                                    list.add(s);
    +676                            }
    +677                            return list;
    +678                    }
    +679            }
    +680    
    +681            /**
    +682             * Parses a comma-separated list of values.
    +683             * @param value the string to parse (e.g. "one,two,th\,ree")
    +684             * @return the parsed values
    +685             */
    +686            protected static List<String> list(String value) {
    +687                    if (value.length() == 0) {
    +688                            return new ArrayList<String>(0);
    +689                    }
    +690                    return split(value, ",").unescape(true).split();
    +691            }
    +692    
    +693            /**
    +694             * Writes a comma-separated list of values.
    +695             * @param values the values to write
    +696             * @return the list
    +697             */
    +698            protected static String list(Object... values) {
    +699                    return list(Arrays.asList(values));
    +700            }
    +701    
    +702            /**
    +703             * Writes a comma-separated list of values.
    +704             * @param values the values to write
    +705             * @return the list
    +706             */
    +707            protected static <T> String list(Collection<T> values) {
    +708                    return list(values, new ListCallback<T>() {
    +709                            public String asString(T value) {
    +710                                    return value.toString();
    +711                            }
    +712                    });
    +713            }
    +714    
    +715            /**
    +716             * Writes a comma-separated list of values.
    +717             * @param values the values to write
    +718             * @param callback callback function used for converting each value to a
    +719             * string
    +720             * @return the list
    +721             */
    +722            protected static <T> String list(Collection<T> values, final ListCallback<T> callback) {
    +723                    return join(values, ",", new JoinCallback<T>() {
    +724                            public void handle(StringBuilder sb, T value) {
    +725                                    if (value == null) {
    +726                                            return;
    +727                                    }
    +728    
    +729                                    String valueStr = callback.asString(value);
    +730                                    sb.append(escape(valueStr));
    +731                            }
    +732                    });
    +733            }
    +734    
    +735            /**
    +736             * Callback function used in conjunction with the
    +737             * {@link ICalPropertyMarshaller#list(Collection, ListCallback) list} method
    +738             * @param <T> the value class
    +739             */
    +740            protected static interface ListCallback<T> {
    +741                    /**
    +742                     * Converts a value to a string.
    +743                     * @param value the value (null values are not passed to this method, so
    +744                     * this parameter will never be null)
    +745                     * @return the string
    +746                     */
    +747                    String asString(T value);
    +748            }
    +749    
    +750            /**
    +751             * Parses a list of values that are delimited by semicolons. Unlike
    +752             * structured value components, semi-structured components cannot be
    +753             * multi-valued.
    +754             * @param value the string to parse (e.g. "one;two;three")
    +755             * @return the parsed values
    +756             */
    +757            protected static SemiStructuredIterator semistructured(String value) {
    +758                    return semistructured(value, -1);
    +759            }
    +760    
    +761            /**
    +762             * Parses a list of values that are delimited by semicolons. Unlike
    +763             * structured value components, semi-structured components cannot be
    +764             * multi-valued.
    +765             * @param value the string to parse (e.g. "one;two;three")
    +766             * @param limit the max number of components to parse
    +767             * @return the parsed values
    +768             */
    +769            protected static SemiStructuredIterator semistructured(String value, int limit) {
    +770                    List<String> split = split(value, ";").unescape(true).limit(limit).split();
    +771                    return new SemiStructuredIterator(split.iterator());
    +772            }
    +773    
    +774            /**
    +775             * Parses a structured value.
    +776             * @param value the string to parse (e.g. "one;two,three;four")
    +777             * @return the parsed values
    +778             */
    +779            protected static StructuredIterator structured(String value) {
    +780                    List<String> split = split(value, ";").split();
    +781                    List<List<String>> components = new ArrayList<List<String>>(split.size());
    +782                    for (String s : split) {
    +783                            components.add(list(s));
    +784                    }
    +785                    return new StructuredIterator(components.iterator());
    +786            }
    +787    
    +788            /**
    +789             * Provides an iterator for a jCard structured value.
    +790             * @param value the jCard value
    +791             * @return the parsed values
    +792             */
    +793            protected static StructuredIterator structured(JCalValue value) {
    +794                    return new StructuredIterator(value.asStructured().iterator());
    +795            }
    +796    
    +797            /**
    +798             * <p>
    +799             * Writes a structured value.
    +800             * </p>
    +801             * <p>
    +802             * This method accepts a list of {@link Object} instances.
    +803             * {@link Collection} objects will be treated as multi-valued components.
    +804             * Null objects will be treated as empty components. All other objects will
    +805             * have their {@code toString()} method invoked to generate the string
    +806             * value.
    +807             * </p>
    +808             * @param values the values to write
    +809             * @return the structured value string
    +810             */
    +811            protected static String structured(Object... values) {
    +812                    return join(Arrays.asList(values), ";", new JoinCallback<Object>() {
    +813                            public void handle(StringBuilder sb, Object value) {
    +814                                    if (value == null) {
    +815                                            return;
    +816                                    }
    +817    
    +818                                    if (value instanceof Collection) {
    +819                                            Collection<?> list = (Collection<?>) value;
    +820                                            sb.append(list(list));
    +821                                            return;
    +822                                    }
    +823    
    +824                                    sb.append(escape(value.toString()));
    +825                            }
    +826                    });
    +827            }
    +828    
    +829            /**
    +830             * Iterates over the fields in a structured value.
    +831             */
    +832            protected static class StructuredIterator {
    +833                    private final Iterator<List<String>> it;
    +834    
    +835                    /**
    +836                     * Constructs a new structured iterator.
    +837                     * @param it the iterator to wrap
    +838                     */
    +839                    public StructuredIterator(Iterator<List<String>> it) {
    +840                            this.it = it;
    +841                    }
    +842    
    +843                    /**
    +844                     * Gets the first value of the next component.
    +845                     * @return the first value, null if the value is an empty string, or
    +846                     * null if there are no more components
    +847                     */
    +848                    public String nextString() {
    +849                            if (!hasNext()) {
    +850                                    return null;
    +851                            }
    +852    
    +853                            List<String> list = it.next();
    +854                            if (list.isEmpty()) {
    +855                                    return null;
    +856                            }
    +857    
    +858                            String value = list.get(0);
    +859                            return (value.length() == 0) ? null : value;
    +860                    }
    +861    
    +862                    /**
    +863                     * Gets the next component.
    +864                     * @return the next component, an empty list if the component is empty,
    +865                     * or an empty list of there are no more components
    +866                     */
    +867                    public List<String> nextComponent() {
    +868                            if (!hasNext()) {
    +869                                    return new ArrayList<String>(0); //the lists should be mutable so they can be directly assigned to the property object's fields
    +870                            }
    +871    
    +872                            List<String> list = it.next();
    +873                            if (list.size() == 1 && list.get(0).length() == 0) {
    +874                                    return new ArrayList<String>(0);
    +875                            }
    +876    
    +877                            return list;
    +878                    }
    +879    
    +880                    /**
    +881                     * Determines if there are any elements left in the value.
    +882                     * @return true if there are elements left, false if not
    +883                     */
    +884                    public boolean hasNext() {
    +885                            return it.hasNext();
    +886                    }
    +887            }
    +888    
    +889            /**
    +890             * Iterates over the fields in a semi-structured value (a structured value
    +891             * whose components cannot be multi-valued).
    +892             */
    +893            protected static class SemiStructuredIterator {
    +894                    private final Iterator<String> it;
    +895    
    +896                    /**
    +897                     * Constructs a new structured iterator.
    +898                     * @param it the iterator to wrap
    +899                     */
    +900                    public SemiStructuredIterator(Iterator<String> it) {
    +901                            this.it = it;
    +902                    }
    +903    
    +904                    /**
    +905                     * Gets the next value.
    +906                     * @return the next value, null if the value is an empty string, or null
    +907                     * if there are no more values
    +908                     */
    +909                    public String next() {
    +910                            if (!hasNext()) {
    +911                                    return null;
    +912                            }
    +913    
    +914                            String value = it.next();
    +915                            return (value.length() == 0) ? null : value;
    +916                    }
    +917    
    +918                    /**
    +919                     * Determines if there are any elements left in the value.
    +920                     * @return true if there are elements left, false if not
    +921                     */
    +922                    public boolean hasNext() {
    +923                            return it.hasNext();
    +924                    }
    +925            }
    +926    
    +927            /**
    +928             * Writes an object property value to a string.
    +929             * @param value the value
    +930             * @return the string
    +931             */
    +932            protected static <T> String object(Map<String, List<T>> value) {
    +933                    return join(value, ";", new JoinMapCallback<String, List<T>>() {
    +934                            public void handle(StringBuilder sb, String key, List<T> value) {
    +935                                    sb.append(key.toUpperCase()).append('=').append(list(value));
    +936                            }
    +937                    });
    +938            }
    +939    
    +940            /**
    +941             * Parses an object property value.
    +942             * @param value the value to parse
    +943             * @return the parsed value
    +944             */
    +945            protected static ListMultimap<String, String> object(String value) {
    +946                    ListMultimap<String, String> map = new ListMultimap<String, String>();
    +947    
    +948                    for (String component : split(value, ";").unescape(false).removeEmpties(true).split()) {
    +949                            String[] split = component.split("=", 2);
    +950    
    +951                            String name = unescape(split[0].toUpperCase());
    +952                            List<String> values = (split.length > 1) ? list(split[1]) : Arrays.asList("");
    +953    
    +954                            map.putAll(name, values);
    +955                    }
    +956    
    +957                    return map;
    +958            }
    +959    
    +960            /**
    +961             * Parses a date string.
    +962             * @param value the date string
    +963             * @return the factory object
    +964             */
    +965            protected static DateParser date(String value) {
    +966                    return new DateParser(value);
    +967            }
    +968    
    +969            /**
    +970             * Formats a {@link Date} object as a string.
    +971             * @param date the date
    +972             * @return the factory object
    +973             */
    +974            protected static DateWriter date(Date date) {
    +975                    return new DateWriter(date);
    +976            }
    +977    
    +978            /**
    +979             * Factory class for parsing dates.
    +980             */
    +981            protected static class DateParser {
    +982                    private String value;
    +983                    private TimeZone timezone;
    +984    
    +985                    /**
    +986                     * Creates a new date writer object.
    +987                     * @param value the date string to parse
    +988                     */
    +989                    public DateParser(String value) {
    +990                            this.value = value;
    +991                    }
    +992    
    +993                    /**
    +994                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +995                     * value). If the ID does not contain a "/" character, it will be
    +996                     * ignored.
    +997                     * @param timezoneId the timezone ID
    +998                     * @return this
    +999                     */
    +1000                    public DateParser tzid(String timezoneId) {
    +1001                            return tzid(timezoneId, null);
    +1002                    }
    +1003    
    +1004                    /**
    +1005                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +1006                     * value).
    +1007                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1008                     * "/" character), it will attempt to look up the timezone in Java's
    +1009                     * timezone registry and parse the date according to that timezone. If
    +1010                     * the timezone is not found, the date will be parsed according to the
    +1011                     * JVM's default timezone and a warning message will be added to the
    +1012                     * provided warnings list. If the ID is not global, it will be parsed
    +1013                     * according to the JVM's default timezone. Whichever timezone is chosen
    +1014                     * here, it will be ignored if the date string is in UTC time or
    +1015                     * contains an offset.
    +1016                     * @param warnings if the ID is global and is not recognized, a warning
    +1017                     * message will be added to this list
    +1018                     * @return this
    +1019                     */
    +1020                    public DateParser tzid(String timezoneId, List<String> warnings) {
    +1021                            if (timezoneId == null) {
    +1022                                    return tz(null);
    +1023                            }
    +1024    
    +1025                            if (timezoneId.contains("/")) {
    +1026                                    TimeZone timezone = ICalDateFormatter.parseTimeZoneId(timezoneId);
    +1027                                    if (timezone == null) {
    +1028                                            timezone = TimeZone.getDefault();
    +1029                                            if (warnings != null) {
    +1030                                                    warnings.add("Timezone ID not recognized, parsing with default timezone instead: " + timezoneId);
    +1031                                            }
    +1032                                    }
    +1033                                    return tz(timezone);
    +1034                            }
    +1035    
    +1036                            //TODO parse according to the associated VTIMEZONE component
    +1037                            return tz(TimeZone.getDefault());
    +1038                    }
    +1039    
    +1040                    /**
    +1041                     * Sets the timezone to parse the date as.
    +1042                     * @param timezone the timezone
    +1043                     * @return this
    +1044                     */
    +1045                    public DateParser tz(TimeZone timezone) {
    +1046                            this.timezone = timezone;
    +1047                            return this;
    +1048                    }
    +1049    
    +1050                    /**
    +1051                     * Parses the date string.
    +1052                     * @return the parsed date
    +1053                     * @throws IllegalArgumentException if the date string is invalid
    +1054                     */
    +1055                    public Date parse() {
    +1056                            return ICalDateFormatter.parse(value, timezone);
    +1057                    }
    +1058            }
    +1059    
    +1060            /**
    +1061             * Factory class for writing dates.
    +1062             */
    +1063            protected static class DateWriter {
    +1064                    private Date date;
    +1065                    private boolean hasTime = true;
    +1066                    private TimeZone timezone;
    +1067                    private boolean extended = false;
    +1068    
    +1069                    /**
    +1070                     * Creates a new date writer object.
    +1071                     * @param date the date to format
    +1072                     */
    +1073                    public DateWriter(Date date) {
    +1074                            this.date = date;
    +1075                    }
    +1076    
    +1077                    /**
    +1078                     * Sets whether to output the date's time component.
    +1079                     * @param hasTime true include the time, false if it's strictly a date
    +1080                     * (defaults to "true")
    +1081                     * @return this
    +1082                     */
    +1083                    public DateWriter time(boolean hasTime) {
    +1084                            this.hasTime = hasTime;
    +1085                            return this;
    +1086                    }
    +1087    
    +1088                    /**
    +1089                     * Sets the ID of the timezone to format the date as (TZID parameter
    +1090                     * value).
    +1091                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1092                     * "/" character), it will attempt to look up the timezone in Java's
    +1093                     * timezone registry and format the date according to that timezone. If
    +1094                     * the timezone is not found, the date will be formatted in UTC. If the
    +1095                     * ID is not global, it will be formatted according to the JVM's default
    +1096                     * timezone. If no timezone preference is specified, the date will be
    +1097                     * formatted as UTC.
    +1098                     * @return this
    +1099                     */
    +1100                    public DateWriter tzid(String timezoneId) {
    +1101                            if (timezoneId == null) {
    +1102                                    return tz(null);
    +1103                            }
    +1104    
    +1105                            if (timezoneId.contains("/")) {
    +1106                                    return tz(ICalDateFormatter.parseTimeZoneId(timezoneId));
    +1107                            }
    +1108    
    +1109                            //TODO format according to the associated VTIMEZONE component
    +1110                            return tz(TimeZone.getDefault());
    +1111                    }
    +1112    
    +1113                    /**
    +1114                     * Outputs the date in local time (without a timezone). If no timezone
    +1115                     * preference is specified, the date will be formatted as UTC.
    +1116                     * @param localTz true to use local time, false not to
    +1117                     * @return this
    +1118                     */
    +1119                    public DateWriter localTz(boolean localTz) {
    +1120                            return localTz ? tz(TimeZone.getDefault()) : this;
    +1121                    }
    +1122    
    +1123                    /**
    +1124                     * Convenience method that combines {@link #localTz(boolean)} and
    +1125                     * {@link #tzid(String)} into one method.
    +1126                     * @param localTz true to use local time, false not to
    +1127                     * @param timezoneId the timezone ID
    +1128                     * @return this
    +1129                     */
    +1130                    public DateWriter tz(boolean localTz, String timezoneId) {
    +1131                            return localTz ? localTz(true) : tzid(timezoneId);
    +1132                    }
    +1133    
    +1134                    /**
    +1135                     * Sets the timezone to format the date as. If no timezone preference is
    +1136                     * specified, the date will be formatted as UTC.
    +1137                     * @param timezone the timezone
    +1138                     * @return this
    +1139                     */
    +1140                    public DateWriter tz(TimeZone timezone) {
    +1141                            this.timezone = timezone;
    +1142                            return this;
    +1143                    }
    +1144    
    +1145                    /**
    +1146                     * Sets whether to use extended format or basic.
    +1147                     * @param extended true to use extended format, false to use basic
    +1148                     * (defaults to "false")
    +1149                     * @return this
    +1150                     */
    +1151                    public DateWriter extended(boolean extended) {
    +1152                            this.extended = extended;
    +1153                            return this;
    +1154                    }
    +1155    
    +1156                    /**
    +1157                     * Creates the date string.
    +1158                     * @return the date string
    +1159                     */
    +1160                    public String write() {
    +1161                            ISOFormat format;
    +1162                            TimeZone timezone = this.timezone;
    +1163                            if (hasTime) {
    +1164                                    if (timezone == null) {
    +1165                                            format = extended ? ISOFormat.UTC_TIME_EXTENDED : ISOFormat.UTC_TIME_BASIC;
    +1166                                    } else {
    +1167                                            format = extended ? ISOFormat.TIME_EXTENDED_WITHOUT_TZ : ISOFormat.TIME_BASIC_WITHOUT_TZ;
    +1168                                    }
    +1169                            } else {
    +1170                                    format = extended ? ISOFormat.DATE_EXTENDED : ISOFormat.DATE_BASIC;
    +1171                                    timezone = null;
    +1172                            }
    +1173    
    +1174                            return ICalDateFormatter.format(date, format, timezone);
    +1175                    }
    +1176            }
    +1177    
    +1178            /**
    +1179             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1180             * that the parser expected to find are missing from the property's XML
    +1181             * element.
    +1182             * @param dataTypes the expected data types (null for "unknown")
    +1183             */
    +1184            protected static CannotParseException missingXmlElements(ICalDataType... dataTypes) {
    +1185                    String[] elements = new String[dataTypes.length];
    +1186                    for (int i = 0; i < dataTypes.length; i++) {
    +1187                            ICalDataType dataType = dataTypes[i];
    +1188                            elements[i] = (dataType == null) ? "unknown" : dataType.getName().toLowerCase();
    +1189                    }
    +1190                    return missingXmlElements(elements);
    +1191            }
    +1192    
    +1193            /**
    +1194             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1195             * that the parser expected to find are missing from property's XML element.
    +1196             * @param elements the names of the expected XML elements.
    +1197             */
    +1198            protected static CannotParseException missingXmlElements(String... elements) {
    +1199                    String message;
    +1200    
    +1201                    switch (elements.length) {
    +1202                    case 0:
    +1203                            message = "Property value empty.";
    +1204                            break;
    +1205                    case 1:
    +1206                            message = "Property value empty (no <" + elements[0] + "> element found).";
    +1207                            break;
    +1208                    case 2:
    +1209                            message = "Property value empty (no <" + elements[0] + "> or <" + elements[1] + "> elements found).";
    +1210                            break;
    +1211                    default:
    +1212                            StringBuilder sb = new StringBuilder();
    +1213    
    +1214                            sb.append("Property value empty (no ");
    +1215                            join(Arrays.asList(elements).subList(0, elements.length - 1), ", ", sb, new JoinCallback<String>() {
    +1216                                    public void handle(StringBuilder sb, String value) {
    +1217                                            sb.append('<').append(value).append('>');
    +1218                                    }
    +1219                            });
    +1220                            sb.append(", or <").append(elements[elements.length - 1]).append("> elements found).");
    +1221    
    +1222                            message = sb.toString();
    +1223                            break;
    +1224                    }
    +1225    
    +1226                    return new CannotParseException(message);
    +1227            }
    +1228    
    +1229            /**
    +1230             * Represents the result of an unmarshal operation.
    +1231             * @author Michael Angstadt
    +1232             * @param <T> the unmarshalled property class
    +1233             */
    +1234            public static class Result<T extends ICalProperty> {
    +1235                    private final T property;
    +1236                    private final List<String> warnings;
    +1237    
    +1238                    /**
    +1239                     * Creates a new result.
    +1240                     * @param property the property object
    +1241                     * @param warnings the warnings
    +1242                     */
    +1243                    public Result(T property, List<String> warnings) {
    +1244                            this.property = property;
    +1245                            this.warnings = warnings;
    +1246                    }
    +1247    
    +1248                    /**
    +1249                     * Gets the warnings.
    +1250                     * @return the warnings
    +1251                     */
    +1252                    public List<String> getWarnings() {
    +1253                            return warnings;
    +1254                    }
    +1255    
    +1256                    /**
    +1257                     * Gets the property object.
    +1258                     * @return the property object
    +1259                     */
    +1260                    public T getProperty() {
    +1261                            return property;
    +1262                    }
    +1263            }
    +1264    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.ListCallback.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.ListCallback.html new file mode 100644 index 000000000..40770513e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.ListCallback.html @@ -0,0 +1,1330 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import static biweekly.io.xml.XCalNamespaceContext.XCAL_NS;
    +004    import static biweekly.util.StringUtils.join;
    +005    
    +006    import java.util.ArrayList;
    +007    import java.util.Arrays;
    +008    import java.util.Collection;
    +009    import java.util.Date;
    +010    import java.util.Iterator;
    +011    import java.util.List;
    +012    import java.util.Map;
    +013    import java.util.TimeZone;
    +014    import java.util.regex.Pattern;
    +015    
    +016    import javax.xml.namespace.QName;
    +017    
    +018    import org.w3c.dom.Element;
    +019    
    +020    import biweekly.ICalDataType;
    +021    import biweekly.ICalendar;
    +022    import biweekly.io.CannotParseException;
    +023    import biweekly.io.SkipMeException;
    +024    import biweekly.io.json.JCalValue;
    +025    import biweekly.io.text.ICalRawWriter;
    +026    import biweekly.io.xml.XCalElement;
    +027    import biweekly.parameter.ICalParameters;
    +028    import biweekly.property.ICalProperty;
    +029    import biweekly.util.ICalDateFormatter;
    +030    import biweekly.util.ISOFormat;
    +031    import biweekly.util.ListMultimap;
    +032    import biweekly.util.StringUtils;
    +033    import biweekly.util.StringUtils.JoinCallback;
    +034    import biweekly.util.StringUtils.JoinMapCallback;
    +035    import biweekly.util.XmlUtils;
    +036    
    +037    /*
    +038     Copyright (c) 2013, Michael Angstadt
    +039     All rights reserved.
    +040    
    +041     Redistribution and use in source and binary forms, with or without
    +042     modification, are permitted provided that the following conditions are met: 
    +043    
    +044     1. Redistributions of source code must retain the above copyright notice, this
    +045     list of conditions and the following disclaimer. 
    +046     2. Redistributions in binary form must reproduce the above copyright notice,
    +047     this list of conditions and the following disclaimer in the documentation
    +048     and/or other materials provided with the distribution. 
    +049    
    +050     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +051     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +052     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +053     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +054     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +055     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +056     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +057     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +058     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +059     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +060     */
    +061    
    +062    /**
    +063     * Base class for iCalendar property marshallers.
    +064     * @param <T> the property class
    +065     * @author Michael Angstadt
    +066     */
    +067    public abstract class ICalPropertyMarshaller<T extends ICalProperty> {
    +068            protected final Class<T> clazz;
    +069            protected final String propertyName;
    +070            protected final ICalDataType defaultDataType;
    +071            protected final QName qname;
    +072    
    +073            /**
    +074             * Creates a new marshaller.
    +075             * @param clazz the property class
    +076             * @param propertyName the property name (e.g. "VERSION")
    +077             * @param defaultDataType the property's default data type (e.g. "text") or
    +078             * null if unknown
    +079             */
    +080            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType) {
    +081                    this(clazz, propertyName, defaultDataType, new QName(XCAL_NS, propertyName.toLowerCase()));
    +082            }
    +083    
    +084            /**
    +085             * Creates a new marshaller.
    +086             * @param clazz the property class
    +087             * @param propertyName the property name (e.g. "VERSION")
    +088             * @param defaultDataType the property's default data type (e.g. "text") or
    +089             * null if unknown
    +090             * @param qname the XML element name and namespace to use for xCal documents
    +091             * (by default, the XML element name is set to the lower-cased property
    +092             * name, and the element namespace is set to the xCal namespace)
    +093             */
    +094            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType, QName qname) {
    +095                    this.clazz = clazz;
    +096                    this.propertyName = propertyName;
    +097                    this.defaultDataType = defaultDataType;
    +098                    this.qname = qname;
    +099            }
    +100    
    +101            /**
    +102             * Gets the property class.
    +103             * @return the property class
    +104             */
    +105            public Class<T> getPropertyClass() {
    +106                    return clazz;
    +107            }
    +108    
    +109            /**
    +110             * Gets the property name.
    +111             * @return the property name (e.g. "VERSION")
    +112             */
    +113            public String getPropertyName() {
    +114                    return propertyName;
    +115            }
    +116    
    +117            /**
    +118             * Gets the property's default data type.
    +119             * @return the default data type (e.g. "text") or null if unknown
    +120             */
    +121            public ICalDataType getDefaultDataType() {
    +122                    return defaultDataType;
    +123            }
    +124    
    +125            /**
    +126             * Gets this property's local name and namespace for xCal documents.
    +127             * @return the XML local name and namespace
    +128             */
    +129            public QName getQName() {
    +130                    return qname;
    +131            }
    +132    
    +133            /**
    +134             * Sanitizes a property's parameters (called before the property is
    +135             * written). Note that a copy of the parameters is returned so that the
    +136             * property object does not get modified.
    +137             * @param property the property
    +138             * @return the sanitized parameters
    +139             */
    +140            public final ICalParameters prepareParameters(T property) {
    +141                    //make a copy because the property should not get modified when it is marshalled
    +142                    ICalParameters copy = new ICalParameters(property.getParameters());
    +143                    _prepareParameters(property, copy);
    +144                    return copy;
    +145            }
    +146    
    +147            /**
    +148             * Determines the data type of a property instance.
    +149             * @param property the property
    +150             * @return the data type or null if unknown
    +151             */
    +152            public final ICalDataType dataType(T property) {
    +153                    return _dataType(property);
    +154            }
    +155    
    +156            /**
    +157             * Marshals a property's value to a string.
    +158             * @param property the property
    +159             * @return the marshalled value
    +160             * @throws SkipMeException if the property should not be written to the data
    +161             * stream
    +162             */
    +163            public final String writeText(T property) {
    +164                    return _writeText(property);
    +165            }
    +166    
    +167            /**
    +168             * Marshals a property's value to an XML element (xCal).
    +169             * @param property the property
    +170             * @param element the property's XML element
    +171             * @throws SkipMeException if the property should not be written to the data
    +172             * stream
    +173             */
    +174            public final void writeXml(T property, Element element) {
    +175                    XCalElement xcalElement = new XCalElement(element);
    +176                    _writeXml(property, xcalElement);
    +177            }
    +178    
    +179            /**
    +180             * Marshals a property's value to a JSON data stream (jCal).
    +181             * @param property the property
    +182             * @return the marshalled value
    +183             * @throws SkipMeException if the property should not be written to the data
    +184             * stream
    +185             */
    +186            public final JCalValue writeJson(T property) {
    +187                    return _writeJson(property);
    +188            }
    +189    
    +190            /**
    +191             * Unmarshals a property from a plain-text iCalendar data stream.
    +192             * @param value the value as read off the wire
    +193             * @param dataType the data type of the property value. The property's VALUE
    +194             * parameter is used to determine the data type. If the property has no
    +195             * VALUE parameter, then this parameter will be set to the property's
    +196             * default datatype. Note that the VALUE parameter is removed from the
    +197             * property's parameter list after it has been read.
    +198             * @param parameters the parsed parameters
    +199             * @return the unmarshalled property and its warnings
    +200             * @throws CannotParseException if the marshaller could not parse the
    +201             * property's value
    +202             * @throws SkipMeException if the property should not be added to the final
    +203             * {@link ICalendar} object
    +204             */
    +205            public final Result<T> parseText(String value, ICalDataType dataType, ICalParameters parameters) {
    +206                    List<String> warnings = new ArrayList<String>(0);
    +207                    T property = _parseText(value, dataType, parameters, warnings);
    +208                    property.setParameters(parameters);
    +209                    return new Result<T>(property, warnings);
    +210            }
    +211    
    +212            /**
    +213             * Unmarshals a property's value from an XML document (xCal).
    +214             * @param element the property's XML element
    +215             * @param parameters the property's parameters
    +216             * @return the unmarshalled property and its warnings
    +217             * @throws CannotParseException if the marshaller could not parse the
    +218             * property's value
    +219             * @throws SkipMeException if the property should not be added to the final
    +220             * {@link ICalendar} object
    +221             */
    +222            public final Result<T> parseXml(Element element, ICalParameters parameters) {
    +223                    List<String> warnings = new ArrayList<String>(0);
    +224                    T property = _parseXml(new XCalElement(element), parameters, warnings);
    +225                    property.setParameters(parameters);
    +226                    return new Result<T>(property, warnings);
    +227            }
    +228    
    +229            /**
    +230             * Unmarshals a property's value from a JSON data stream (jCal).
    +231             * @param value the property's JSON value
    +232             * @param dataType the data type
    +233             * @param parameters the parsed parameters
    +234             * @return the unmarshalled property and its warnings
    +235             * @throws CannotParseException if the marshaller could not parse the
    +236             * property's value
    +237             * @throws SkipMeException if the property should not be added to the final
    +238             * {@link ICalendar} object
    +239             */
    +240            public final Result<T> parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters) {
    +241                    List<String> warnings = new ArrayList<String>(0);
    +242                    T property = _parseJson(value, dataType, parameters, warnings);
    +243                    property.setParameters(parameters);
    +244                    return new Result<T>(property, warnings);
    +245            }
    +246    
    +247            /**
    +248             * <p>
    +249             * Sanitizes a property's parameters before the property is written.
    +250             * </p>
    +251             * <p>
    +252             * This method should be overridden by child classes that wish to tweak the
    +253             * property's parameters before the property is written. The default
    +254             * implementation of this method does nothing.
    +255             * </p>
    +256             * @param property the property
    +257             * @param copy the list of parameters to make modifications to (it is a copy
    +258             * of the property's parameters)
    +259             */
    +260            protected void _prepareParameters(T property, ICalParameters copy) {
    +261                    //do nothing
    +262            }
    +263    
    +264            /**
    +265             * <p>
    +266             * Determines the data type of a property instance.
    +267             * </p>
    +268             * <p>
    +269             * This method should be overridden by child classes if a property's data
    +270             * type changes depending on its value. The default implementation of this
    +271             * method returns the property's default data type.
    +272             * </p>
    +273             * @param property the property
    +274             * @return the data type or null if unknown
    +275             */
    +276            protected ICalDataType _dataType(T property) {
    +277                    return defaultDataType;
    +278            }
    +279    
    +280            /**
    +281             * Marshals a property's value to a string.
    +282             * @param property the property
    +283             * @return the marshalled value
    +284             * @throws SkipMeException if the property should not be written to the data
    +285             * stream
    +286             */
    +287            protected abstract String _writeText(T property);
    +288    
    +289            /**
    +290             * <p>
    +291             * Marshals a property's value to an XML element (xCal).
    +292             * <p>
    +293             * <p>
    +294             * This method should be overridden by child classes that wish to support
    +295             * xCal. The default implementation of this method will append one child
    +296             * element to the property's XML element. The child element's name will be
    +297             * that of the property's data type (retrieved using the {@link #dataType}
    +298             * method), and the child element's text content will be set to the
    +299             * property's marshalled plain-text value (retrieved using the
    +300             * {@link #writeText} method).
    +301             * </p>
    +302             * @param property the property
    +303             * @param element the property's XML element
    +304             * @throws SkipMeException if the property should not be written to the data
    +305             * stream
    +306             */
    +307            protected void _writeXml(T property, XCalElement element) {
    +308                    String value = writeText(property);
    +309                    ICalDataType dataType = dataType(property);
    +310                    element.append(dataType, value);
    +311            }
    +312    
    +313            /**
    +314             * <p>
    +315             * Marshals a property's value to a JSON data stream (jCal).
    +316             * </p>
    +317             * <p>
    +318             * This method should be overridden by child classes that wish to support
    +319             * jCal. The default implementation of this method will create a jCard
    +320             * property that has a single JSON string value (generated by the
    +321             * {@link #writeText} method).
    +322             * </p>
    +323             * @param property the property
    +324             * @return the marshalled value
    +325             * @throws SkipMeException if the property should not be written to the data
    +326             * stream
    +327             */
    +328            protected JCalValue _writeJson(T property) {
    +329                    String value = writeText(property);
    +330                    return JCalValue.single(value);
    +331            }
    +332    
    +333            /**
    +334             * Unmarshals a property from a plain-text iCalendar data stream.
    +335             * @param value the value as read off the wire
    +336             * @param dataType the data type of the property value. The property's VALUE
    +337             * parameter is used to determine the data type. If the property has no
    +338             * VALUE parameter, then this parameter will be set to the property's
    +339             * default datatype. Note that the VALUE parameter is removed from the
    +340             * property's parameter list after it has been read.
    +341             * @param parameters the parsed parameters. These parameters will be
    +342             * assigned to the property object once this method returns. Therefore, do
    +343             * not assign any parameters to the property object itself whilst inside of
    +344             * this method, or else they will be overwritten.
    +345             * @param warnings allows the programmer to alert the user to any
    +346             * note-worthy (but non-critical) issues that occurred during the
    +347             * unmarshalling process
    +348             * @return the unmarshalled property object
    +349             * @throws CannotParseException if the marshaller could not parse the
    +350             * property's value
    +351             * @throws SkipMeException if the property should not be added to the final
    +352             * {@link ICalendar} object
    +353             */
    +354            protected abstract T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings);
    +355    
    +356            /**
    +357             * <p>
    +358             * Unmarshals a property from an XML document (xCal).
    +359             * </p>
    +360             * <p>
    +361             * This method should be overridden by child classes that wish to support
    +362             * xCal. The default implementation of this method will find the first child
    +363             * element with the xCal namespace. The element's name will be used as the
    +364             * property's data type and its text content will be passed into the
    +365             * {@link #_parseText} method. If no such child element is found, then the
    +366             * parent element's text content will be passed into {@link #_parseText} and
    +367             * the data type will be null.
    +368             * </p>
    +369             * @param element the property's XML element
    +370             * @param parameters the parsed parameters. These parameters will be
    +371             * assigned to the property object once this method returns. Therefore, do
    +372             * not assign any parameters to the property object itself whilst inside of
    +373             * this method, or else they will be overwritten.
    +374             * @param warnings allows the programmer to alert the user to any
    +375             * note-worthy (but non-critical) issues that occurred during the
    +376             * unmarshalling process
    +377             * @return the unmarshalled property object
    +378             * @throws CannotParseException if the marshaller could not parse the
    +379             * property's value
    +380             * @throws SkipMeException if the property should not be added to the final
    +381             * {@link ICalendar} object
    +382             */
    +383            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +384                    String value = null;
    +385                    ICalDataType dataType = null;
    +386                    Element rawElement = element.getElement();
    +387    
    +388                    //get the text content of the first child element with the xCard namespace
    +389                    List<Element> children = XmlUtils.toElementList(rawElement.getChildNodes());
    +390                    for (Element child : children) {
    +391                            if (!XCAL_NS.equals(child.getNamespaceURI())) {
    +392                                    continue;
    +393                            }
    +394    
    +395                            dataType = ICalDataType.get(child.getLocalName());
    +396                            value = child.getTextContent();
    +397                            break;
    +398                    }
    +399    
    +400                    if (dataType == null) {
    +401                            //get the text content of the property element
    +402                            value = rawElement.getTextContent();
    +403                    }
    +404    
    +405                    value = escape(value);
    +406                    return _parseText(value, dataType, parameters, warnings);
    +407            }
    +408    
    +409            /**
    +410             * /**
    +411             * <p>
    +412             * Unmarshals a property from a JSON data stream (jCal).
    +413             * </p>
    +414             * <p>
    +415             * This method should be overridden by child classes that wish to support
    +416             * jCal. The default implementation of this method will convert the jCal
    +417             * property value to a string and pass it into the {@link #_parseText}
    +418             * method.
    +419             * </p>
    +420             * 
    +421             * <hr>
    +422             * 
    +423             * <p>
    +424             * The following paragraphs describe the way in which this method's default
    +425             * implementation converts a jCal value to a string:
    +426             * </p>
    +427             * <p>
    +428             * If the jCal value consists of a single, non-array, non-object value, then
    +429             * the value is converted to a string. Special characters (backslashes,
    +430             * commas, and semicolons) are escaped in order to simulate what the value
    +431             * might look like in a plain-text iCalendar object.<br>
    +432             * <code>["x-foo", {}, "text", "the;value"] --&gt; "the\;value"</code><br>
    +433             * <code>["x-foo", {}, "text", 2] --&gt; "2"</code>
    +434             * </p>
    +435             * <p>
    +436             * If the jCal value consists of multiple, non-array, non-object values,
    +437             * then all the values are appended together in a single string, separated
    +438             * by commas. Special characters (backslashes, commas, and semicolons) are
    +439             * escaped for each value in order to prevent commas from being treated as
    +440             * delimiters, and to simulate what the value might look like in a
    +441             * plain-text iCalendar object.<br>
    +442             * <code>["x-foo", {}, "text", "one", "two,three"] --&gt;
    +443             * "one,two\,three"</code>
    +444             * </p>
    +445             * <p>
    +446             * If the jCal value is a single array, then this array is treated as a
    +447             * "structured value", and converted its plain-text representation. Special
    +448             * characters (backslashes, commas, and semicolons) are escaped for each
    +449             * value in order to prevent commas and semicolons from being treated as
    +450             * delimiters.<br>
    +451             * <code>["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]]
    +452             * --&gt; "one;two,three;four\;five"</code>
    +453             * </p>
    +454             * <p>
    +455             * If the jCal value starts with a JSON object, then the object is converted
    +456             * to a format identical to the one used in the RRULE and EXRULE properties.
    +457             * Special characters (backslashes, commas, semicolons, and equal signs) are
    +458             * escaped for each value in order to preserve the syntax of the string
    +459             * value.<br>
    +460             * <code>["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --&gt; "ONE=1;TWO=2,2.5"</code>
    +461             * </p>
    +462             * <p>
    +463             * For all other cases, behavior is undefined.
    +464             * </p>
    +465             * @param value the property's JSON value
    +466             * @param dataType the data type
    +467             * @param parameters the parsed parameters. These parameters will be
    +468             * assigned to the property object once this method returns. Therefore, do
    +469             * not assign any parameters to the property object itself whilst inside of
    +470             * this method, or else they will be overwritten.
    +471             * @param warnings allows the programmer to alert the user to any
    +472             * note-worthy (but non-critical) issues that occurred during the
    +473             * unmarshalling process
    +474             * @return the unmarshalled property object
    +475             * @throws CannotParseException if the marshaller could not parse the
    +476             * property's value
    +477             * @throws SkipMeException if the property should not be added to the final
    +478             * {@link ICalendar} object
    +479             */
    +480            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +481                    return _parseText(jcalValueToString(value), dataType, parameters, warnings);
    +482            }
    +483    
    +484            private String jcalValueToString(JCalValue value) {
    +485                    if (value.getValues().size() > 1) {
    +486                            List<String> multi = value.asMulti();
    +487                            if (!multi.isEmpty()) {
    +488                                    return list(multi);
    +489                            }
    +490                    }
    +491    
    +492                    if (!value.getValues().isEmpty() && value.getValues().get(0).getArray() != null) {
    +493                            List<List<String>> structured = value.asStructured();
    +494                            if (!structured.isEmpty()) {
    +495                                    return structured(structured.toArray());
    +496                            }
    +497                    }
    +498    
    +499                    if (value.getValues().get(0).getObject() != null) {
    +500                            ListMultimap<String, String> object = value.asObject();
    +501                            if (!object.isEmpty()) {
    +502                                    return object(object.getMap());
    +503                            }
    +504                    }
    +505    
    +506                    return escape(value.asSingle());
    +507            }
    +508    
    +509            /**
    +510             * Unescapes all special characters that are escaped with a backslash, as
    +511             * well as escaped newlines.
    +512             * @param text the text to unescape
    +513             * @return the unescaped text
    +514             */
    +515            protected static String unescape(String text) {
    +516                    if (text == null) {
    +517                            return text;
    +518                    }
    +519    
    +520                    StringBuilder sb = null;
    +521                    boolean escaped = false;
    +522                    for (int i = 0; i < text.length(); i++) {
    +523                            char ch = text.charAt(i);
    +524    
    +525                            if (escaped) {
    +526                                    if (sb == null) {
    +527                                            sb = new StringBuilder(text.length());
    +528                                            sb.append(text.substring(0, i - 1));
    +529                                    }
    +530    
    +531                                    escaped = false;
    +532    
    +533                                    if (ch == 'n' || ch == 'N') {
    +534                                            //newlines appear as "\n" or "\N" (see RFC 5545 p.46)
    +535                                            sb.append(StringUtils.NEWLINE);
    +536                                            continue;
    +537                                    }
    +538    
    +539                                    sb.append(ch);
    +540                                    continue;
    +541                            }
    +542    
    +543                            if (ch == '\\') {
    +544                                    escaped = true;
    +545                                    continue;
    +546                            }
    +547    
    +548                            if (sb != null) {
    +549                                    sb.append(ch);
    +550                            }
    +551                    }
    +552                    return (sb == null) ? text : sb.toString();
    +553            }
    +554    
    +555            /**
    +556             * <p>
    +557             * Escapes all special characters within a iCalendar value. These characters
    +558             * are:
    +559             * </p>
    +560             * <ul>
    +561             * <li>backslashes ({@code \})</li>
    +562             * <li>commas ({@code ,})</li>
    +563             * <li>semi-colons ({@code ;})</li>
    +564             * </ul>
    +565             * <p>
    +566             * Newlines are not escaped by this method. They are escaped when the
    +567             * iCalendar object is serialized (in the {@link ICalRawWriter} class).
    +568             * </p>
    +569             * @param text the text to escape
    +570             * @return the escaped text
    +571             */
    +572            protected static String escape(String text) {
    +573                    if (text == null) {
    +574                            return text;
    +575                    }
    +576    
    +577                    String chars = "\\,;";
    +578                    StringBuilder sb = null;
    +579                    for (int i = 0; i < text.length(); i++) {
    +580                            char ch = text.charAt(i);
    +581                            if (chars.indexOf(ch) >= 0) {
    +582                                    if (sb == null) {
    +583                                            sb = new StringBuilder(text.length());
    +584                                            sb.append(text.substring(0, i));
    +585                                    }
    +586                                    sb.append('\\');
    +587                            }
    +588    
    +589                            if (sb != null) {
    +590                                    sb.append(ch);
    +591                            }
    +592                    }
    +593                    return (sb == null) ? text : sb.toString();
    +594            }
    +595    
    +596            /**
    +597             * Splits a string by a delimiter, taking escaped characters into account.
    +598             * @param string the string to split (e.g. "one,two,three")
    +599             * @param delimiter the delimiter (e.g. ",")
    +600             * @return the factory object
    +601             */
    +602            protected static Splitter split(String string, String delimiter) {
    +603                    return new Splitter(string, delimiter);
    +604            }
    +605    
    +606            /**
    +607             * Factory class for splitting strings.
    +608             */
    +609            protected static class Splitter {
    +610                    private String string;
    +611                    private String delimiter;
    +612                    private boolean removeEmpties = false;
    +613                    private boolean unescape = false;
    +614                    private int limit = -1;
    +615    
    +616                    /**
    +617                     * Creates a new splitter object.
    +618                     * @param string the string to split (e.g. "one,two,three")
    +619                     * @param delimiter the delimiter (e.g. ",")
    +620                     */
    +621                    public Splitter(String string, String delimiter) {
    +622                            this.string = string;
    +623                            this.delimiter = delimiter;
    +624                    }
    +625    
    +626                    /**
    +627                     * Sets whether to remove empty elements.
    +628                     * @param removeEmpties true to remove empty elements, false not to
    +629                     * (default is false)
    +630                     * @return this
    +631                     */
    +632                    public Splitter removeEmpties(boolean removeEmpties) {
    +633                            this.removeEmpties = removeEmpties;
    +634                            return this;
    +635                    }
    +636    
    +637                    /**
    +638                     * Sets whether to unescape each split string.
    +639                     * @param unescape true to unescape, false not to (default is false)
    +640                     * @return this
    +641                     */
    +642                    public Splitter unescape(boolean unescape) {
    +643                            this.unescape = unescape;
    +644                            return this;
    +645                    }
    +646    
    +647                    /**
    +648                     * Sets the max number of split strings it should parse.
    +649                     * @param limit the max number of split strings
    +650                     * @return this
    +651                     */
    +652                    public Splitter limit(int limit) {
    +653                            this.limit = limit;
    +654                            return this;
    +655                    }
    +656    
    +657                    /**
    +658                     * Performs the split operation.
    +659                     * @return the split string
    +660                     */
    +661                    public List<String> split() {
    +662                            //from: http://stackoverflow.com/q/820172">http://stackoverflow.com/q/820172
    +663                            String split[] = string.split("\\s*(?<!\\\\)" + Pattern.quote(delimiter) + "\\s*", limit);
    +664    
    +665                            List<String> list = new ArrayList<String>(split.length);
    +666                            for (String s : split) {
    +667                                    if (s.length() == 0 && removeEmpties) {
    +668                                            continue;
    +669                                    }
    +670    
    +671                                    if (unescape) {
    +672                                            s = ICalPropertyMarshaller.unescape(s);
    +673                                    }
    +674    
    +675                                    list.add(s);
    +676                            }
    +677                            return list;
    +678                    }
    +679            }
    +680    
    +681            /**
    +682             * Parses a comma-separated list of values.
    +683             * @param value the string to parse (e.g. "one,two,th\,ree")
    +684             * @return the parsed values
    +685             */
    +686            protected static List<String> list(String value) {
    +687                    if (value.length() == 0) {
    +688                            return new ArrayList<String>(0);
    +689                    }
    +690                    return split(value, ",").unescape(true).split();
    +691            }
    +692    
    +693            /**
    +694             * Writes a comma-separated list of values.
    +695             * @param values the values to write
    +696             * @return the list
    +697             */
    +698            protected static String list(Object... values) {
    +699                    return list(Arrays.asList(values));
    +700            }
    +701    
    +702            /**
    +703             * Writes a comma-separated list of values.
    +704             * @param values the values to write
    +705             * @return the list
    +706             */
    +707            protected static <T> String list(Collection<T> values) {
    +708                    return list(values, new ListCallback<T>() {
    +709                            public String asString(T value) {
    +710                                    return value.toString();
    +711                            }
    +712                    });
    +713            }
    +714    
    +715            /**
    +716             * Writes a comma-separated list of values.
    +717             * @param values the values to write
    +718             * @param callback callback function used for converting each value to a
    +719             * string
    +720             * @return the list
    +721             */
    +722            protected static <T> String list(Collection<T> values, final ListCallback<T> callback) {
    +723                    return join(values, ",", new JoinCallback<T>() {
    +724                            public void handle(StringBuilder sb, T value) {
    +725                                    if (value == null) {
    +726                                            return;
    +727                                    }
    +728    
    +729                                    String valueStr = callback.asString(value);
    +730                                    sb.append(escape(valueStr));
    +731                            }
    +732                    });
    +733            }
    +734    
    +735            /**
    +736             * Callback function used in conjunction with the
    +737             * {@link ICalPropertyMarshaller#list(Collection, ListCallback) list} method
    +738             * @param <T> the value class
    +739             */
    +740            protected static interface ListCallback<T> {
    +741                    /**
    +742                     * Converts a value to a string.
    +743                     * @param value the value (null values are not passed to this method, so
    +744                     * this parameter will never be null)
    +745                     * @return the string
    +746                     */
    +747                    String asString(T value);
    +748            }
    +749    
    +750            /**
    +751             * Parses a list of values that are delimited by semicolons. Unlike
    +752             * structured value components, semi-structured components cannot be
    +753             * multi-valued.
    +754             * @param value the string to parse (e.g. "one;two;three")
    +755             * @return the parsed values
    +756             */
    +757            protected static SemiStructuredIterator semistructured(String value) {
    +758                    return semistructured(value, -1);
    +759            }
    +760    
    +761            /**
    +762             * Parses a list of values that are delimited by semicolons. Unlike
    +763             * structured value components, semi-structured components cannot be
    +764             * multi-valued.
    +765             * @param value the string to parse (e.g. "one;two;three")
    +766             * @param limit the max number of components to parse
    +767             * @return the parsed values
    +768             */
    +769            protected static SemiStructuredIterator semistructured(String value, int limit) {
    +770                    List<String> split = split(value, ";").unescape(true).limit(limit).split();
    +771                    return new SemiStructuredIterator(split.iterator());
    +772            }
    +773    
    +774            /**
    +775             * Parses a structured value.
    +776             * @param value the string to parse (e.g. "one;two,three;four")
    +777             * @return the parsed values
    +778             */
    +779            protected static StructuredIterator structured(String value) {
    +780                    List<String> split = split(value, ";").split();
    +781                    List<List<String>> components = new ArrayList<List<String>>(split.size());
    +782                    for (String s : split) {
    +783                            components.add(list(s));
    +784                    }
    +785                    return new StructuredIterator(components.iterator());
    +786            }
    +787    
    +788            /**
    +789             * Provides an iterator for a jCard structured value.
    +790             * @param value the jCard value
    +791             * @return the parsed values
    +792             */
    +793            protected static StructuredIterator structured(JCalValue value) {
    +794                    return new StructuredIterator(value.asStructured().iterator());
    +795            }
    +796    
    +797            /**
    +798             * <p>
    +799             * Writes a structured value.
    +800             * </p>
    +801             * <p>
    +802             * This method accepts a list of {@link Object} instances.
    +803             * {@link Collection} objects will be treated as multi-valued components.
    +804             * Null objects will be treated as empty components. All other objects will
    +805             * have their {@code toString()} method invoked to generate the string
    +806             * value.
    +807             * </p>
    +808             * @param values the values to write
    +809             * @return the structured value string
    +810             */
    +811            protected static String structured(Object... values) {
    +812                    return join(Arrays.asList(values), ";", new JoinCallback<Object>() {
    +813                            public void handle(StringBuilder sb, Object value) {
    +814                                    if (value == null) {
    +815                                            return;
    +816                                    }
    +817    
    +818                                    if (value instanceof Collection) {
    +819                                            Collection<?> list = (Collection<?>) value;
    +820                                            sb.append(list(list));
    +821                                            return;
    +822                                    }
    +823    
    +824                                    sb.append(escape(value.toString()));
    +825                            }
    +826                    });
    +827            }
    +828    
    +829            /**
    +830             * Iterates over the fields in a structured value.
    +831             */
    +832            protected static class StructuredIterator {
    +833                    private final Iterator<List<String>> it;
    +834    
    +835                    /**
    +836                     * Constructs a new structured iterator.
    +837                     * @param it the iterator to wrap
    +838                     */
    +839                    public StructuredIterator(Iterator<List<String>> it) {
    +840                            this.it = it;
    +841                    }
    +842    
    +843                    /**
    +844                     * Gets the first value of the next component.
    +845                     * @return the first value, null if the value is an empty string, or
    +846                     * null if there are no more components
    +847                     */
    +848                    public String nextString() {
    +849                            if (!hasNext()) {
    +850                                    return null;
    +851                            }
    +852    
    +853                            List<String> list = it.next();
    +854                            if (list.isEmpty()) {
    +855                                    return null;
    +856                            }
    +857    
    +858                            String value = list.get(0);
    +859                            return (value.length() == 0) ? null : value;
    +860                    }
    +861    
    +862                    /**
    +863                     * Gets the next component.
    +864                     * @return the next component, an empty list if the component is empty,
    +865                     * or an empty list of there are no more components
    +866                     */
    +867                    public List<String> nextComponent() {
    +868                            if (!hasNext()) {
    +869                                    return new ArrayList<String>(0); //the lists should be mutable so they can be directly assigned to the property object's fields
    +870                            }
    +871    
    +872                            List<String> list = it.next();
    +873                            if (list.size() == 1 && list.get(0).length() == 0) {
    +874                                    return new ArrayList<String>(0);
    +875                            }
    +876    
    +877                            return list;
    +878                    }
    +879    
    +880                    /**
    +881                     * Determines if there are any elements left in the value.
    +882                     * @return true if there are elements left, false if not
    +883                     */
    +884                    public boolean hasNext() {
    +885                            return it.hasNext();
    +886                    }
    +887            }
    +888    
    +889            /**
    +890             * Iterates over the fields in a semi-structured value (a structured value
    +891             * whose components cannot be multi-valued).
    +892             */
    +893            protected static class SemiStructuredIterator {
    +894                    private final Iterator<String> it;
    +895    
    +896                    /**
    +897                     * Constructs a new structured iterator.
    +898                     * @param it the iterator to wrap
    +899                     */
    +900                    public SemiStructuredIterator(Iterator<String> it) {
    +901                            this.it = it;
    +902                    }
    +903    
    +904                    /**
    +905                     * Gets the next value.
    +906                     * @return the next value, null if the value is an empty string, or null
    +907                     * if there are no more values
    +908                     */
    +909                    public String next() {
    +910                            if (!hasNext()) {
    +911                                    return null;
    +912                            }
    +913    
    +914                            String value = it.next();
    +915                            return (value.length() == 0) ? null : value;
    +916                    }
    +917    
    +918                    /**
    +919                     * Determines if there are any elements left in the value.
    +920                     * @return true if there are elements left, false if not
    +921                     */
    +922                    public boolean hasNext() {
    +923                            return it.hasNext();
    +924                    }
    +925            }
    +926    
    +927            /**
    +928             * Writes an object property value to a string.
    +929             * @param value the value
    +930             * @return the string
    +931             */
    +932            protected static <T> String object(Map<String, List<T>> value) {
    +933                    return join(value, ";", new JoinMapCallback<String, List<T>>() {
    +934                            public void handle(StringBuilder sb, String key, List<T> value) {
    +935                                    sb.append(key.toUpperCase()).append('=').append(list(value));
    +936                            }
    +937                    });
    +938            }
    +939    
    +940            /**
    +941             * Parses an object property value.
    +942             * @param value the value to parse
    +943             * @return the parsed value
    +944             */
    +945            protected static ListMultimap<String, String> object(String value) {
    +946                    ListMultimap<String, String> map = new ListMultimap<String, String>();
    +947    
    +948                    for (String component : split(value, ";").unescape(false).removeEmpties(true).split()) {
    +949                            String[] split = component.split("=", 2);
    +950    
    +951                            String name = unescape(split[0].toUpperCase());
    +952                            List<String> values = (split.length > 1) ? list(split[1]) : Arrays.asList("");
    +953    
    +954                            map.putAll(name, values);
    +955                    }
    +956    
    +957                    return map;
    +958            }
    +959    
    +960            /**
    +961             * Parses a date string.
    +962             * @param value the date string
    +963             * @return the factory object
    +964             */
    +965            protected static DateParser date(String value) {
    +966                    return new DateParser(value);
    +967            }
    +968    
    +969            /**
    +970             * Formats a {@link Date} object as a string.
    +971             * @param date the date
    +972             * @return the factory object
    +973             */
    +974            protected static DateWriter date(Date date) {
    +975                    return new DateWriter(date);
    +976            }
    +977    
    +978            /**
    +979             * Factory class for parsing dates.
    +980             */
    +981            protected static class DateParser {
    +982                    private String value;
    +983                    private TimeZone timezone;
    +984    
    +985                    /**
    +986                     * Creates a new date writer object.
    +987                     * @param value the date string to parse
    +988                     */
    +989                    public DateParser(String value) {
    +990                            this.value = value;
    +991                    }
    +992    
    +993                    /**
    +994                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +995                     * value). If the ID does not contain a "/" character, it will be
    +996                     * ignored.
    +997                     * @param timezoneId the timezone ID
    +998                     * @return this
    +999                     */
    +1000                    public DateParser tzid(String timezoneId) {
    +1001                            return tzid(timezoneId, null);
    +1002                    }
    +1003    
    +1004                    /**
    +1005                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +1006                     * value).
    +1007                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1008                     * "/" character), it will attempt to look up the timezone in Java's
    +1009                     * timezone registry and parse the date according to that timezone. If
    +1010                     * the timezone is not found, the date will be parsed according to the
    +1011                     * JVM's default timezone and a warning message will be added to the
    +1012                     * provided warnings list. If the ID is not global, it will be parsed
    +1013                     * according to the JVM's default timezone. Whichever timezone is chosen
    +1014                     * here, it will be ignored if the date string is in UTC time or
    +1015                     * contains an offset.
    +1016                     * @param warnings if the ID is global and is not recognized, a warning
    +1017                     * message will be added to this list
    +1018                     * @return this
    +1019                     */
    +1020                    public DateParser tzid(String timezoneId, List<String> warnings) {
    +1021                            if (timezoneId == null) {
    +1022                                    return tz(null);
    +1023                            }
    +1024    
    +1025                            if (timezoneId.contains("/")) {
    +1026                                    TimeZone timezone = ICalDateFormatter.parseTimeZoneId(timezoneId);
    +1027                                    if (timezone == null) {
    +1028                                            timezone = TimeZone.getDefault();
    +1029                                            if (warnings != null) {
    +1030                                                    warnings.add("Timezone ID not recognized, parsing with default timezone instead: " + timezoneId);
    +1031                                            }
    +1032                                    }
    +1033                                    return tz(timezone);
    +1034                            }
    +1035    
    +1036                            //TODO parse according to the associated VTIMEZONE component
    +1037                            return tz(TimeZone.getDefault());
    +1038                    }
    +1039    
    +1040                    /**
    +1041                     * Sets the timezone to parse the date as.
    +1042                     * @param timezone the timezone
    +1043                     * @return this
    +1044                     */
    +1045                    public DateParser tz(TimeZone timezone) {
    +1046                            this.timezone = timezone;
    +1047                            return this;
    +1048                    }
    +1049    
    +1050                    /**
    +1051                     * Parses the date string.
    +1052                     * @return the parsed date
    +1053                     * @throws IllegalArgumentException if the date string is invalid
    +1054                     */
    +1055                    public Date parse() {
    +1056                            return ICalDateFormatter.parse(value, timezone);
    +1057                    }
    +1058            }
    +1059    
    +1060            /**
    +1061             * Factory class for writing dates.
    +1062             */
    +1063            protected static class DateWriter {
    +1064                    private Date date;
    +1065                    private boolean hasTime = true;
    +1066                    private TimeZone timezone;
    +1067                    private boolean extended = false;
    +1068    
    +1069                    /**
    +1070                     * Creates a new date writer object.
    +1071                     * @param date the date to format
    +1072                     */
    +1073                    public DateWriter(Date date) {
    +1074                            this.date = date;
    +1075                    }
    +1076    
    +1077                    /**
    +1078                     * Sets whether to output the date's time component.
    +1079                     * @param hasTime true include the time, false if it's strictly a date
    +1080                     * (defaults to "true")
    +1081                     * @return this
    +1082                     */
    +1083                    public DateWriter time(boolean hasTime) {
    +1084                            this.hasTime = hasTime;
    +1085                            return this;
    +1086                    }
    +1087    
    +1088                    /**
    +1089                     * Sets the ID of the timezone to format the date as (TZID parameter
    +1090                     * value).
    +1091                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1092                     * "/" character), it will attempt to look up the timezone in Java's
    +1093                     * timezone registry and format the date according to that timezone. If
    +1094                     * the timezone is not found, the date will be formatted in UTC. If the
    +1095                     * ID is not global, it will be formatted according to the JVM's default
    +1096                     * timezone. If no timezone preference is specified, the date will be
    +1097                     * formatted as UTC.
    +1098                     * @return this
    +1099                     */
    +1100                    public DateWriter tzid(String timezoneId) {
    +1101                            if (timezoneId == null) {
    +1102                                    return tz(null);
    +1103                            }
    +1104    
    +1105                            if (timezoneId.contains("/")) {
    +1106                                    return tz(ICalDateFormatter.parseTimeZoneId(timezoneId));
    +1107                            }
    +1108    
    +1109                            //TODO format according to the associated VTIMEZONE component
    +1110                            return tz(TimeZone.getDefault());
    +1111                    }
    +1112    
    +1113                    /**
    +1114                     * Outputs the date in local time (without a timezone). If no timezone
    +1115                     * preference is specified, the date will be formatted as UTC.
    +1116                     * @param localTz true to use local time, false not to
    +1117                     * @return this
    +1118                     */
    +1119                    public DateWriter localTz(boolean localTz) {
    +1120                            return localTz ? tz(TimeZone.getDefault()) : this;
    +1121                    }
    +1122    
    +1123                    /**
    +1124                     * Convenience method that combines {@link #localTz(boolean)} and
    +1125                     * {@link #tzid(String)} into one method.
    +1126                     * @param localTz true to use local time, false not to
    +1127                     * @param timezoneId the timezone ID
    +1128                     * @return this
    +1129                     */
    +1130                    public DateWriter tz(boolean localTz, String timezoneId) {
    +1131                            return localTz ? localTz(true) : tzid(timezoneId);
    +1132                    }
    +1133    
    +1134                    /**
    +1135                     * Sets the timezone to format the date as. If no timezone preference is
    +1136                     * specified, the date will be formatted as UTC.
    +1137                     * @param timezone the timezone
    +1138                     * @return this
    +1139                     */
    +1140                    public DateWriter tz(TimeZone timezone) {
    +1141                            this.timezone = timezone;
    +1142                            return this;
    +1143                    }
    +1144    
    +1145                    /**
    +1146                     * Sets whether to use extended format or basic.
    +1147                     * @param extended true to use extended format, false to use basic
    +1148                     * (defaults to "false")
    +1149                     * @return this
    +1150                     */
    +1151                    public DateWriter extended(boolean extended) {
    +1152                            this.extended = extended;
    +1153                            return this;
    +1154                    }
    +1155    
    +1156                    /**
    +1157                     * Creates the date string.
    +1158                     * @return the date string
    +1159                     */
    +1160                    public String write() {
    +1161                            ISOFormat format;
    +1162                            TimeZone timezone = this.timezone;
    +1163                            if (hasTime) {
    +1164                                    if (timezone == null) {
    +1165                                            format = extended ? ISOFormat.UTC_TIME_EXTENDED : ISOFormat.UTC_TIME_BASIC;
    +1166                                    } else {
    +1167                                            format = extended ? ISOFormat.TIME_EXTENDED_WITHOUT_TZ : ISOFormat.TIME_BASIC_WITHOUT_TZ;
    +1168                                    }
    +1169                            } else {
    +1170                                    format = extended ? ISOFormat.DATE_EXTENDED : ISOFormat.DATE_BASIC;
    +1171                                    timezone = null;
    +1172                            }
    +1173    
    +1174                            return ICalDateFormatter.format(date, format, timezone);
    +1175                    }
    +1176            }
    +1177    
    +1178            /**
    +1179             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1180             * that the parser expected to find are missing from the property's XML
    +1181             * element.
    +1182             * @param dataTypes the expected data types (null for "unknown")
    +1183             */
    +1184            protected static CannotParseException missingXmlElements(ICalDataType... dataTypes) {
    +1185                    String[] elements = new String[dataTypes.length];
    +1186                    for (int i = 0; i < dataTypes.length; i++) {
    +1187                            ICalDataType dataType = dataTypes[i];
    +1188                            elements[i] = (dataType == null) ? "unknown" : dataType.getName().toLowerCase();
    +1189                    }
    +1190                    return missingXmlElements(elements);
    +1191            }
    +1192    
    +1193            /**
    +1194             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1195             * that the parser expected to find are missing from property's XML element.
    +1196             * @param elements the names of the expected XML elements.
    +1197             */
    +1198            protected static CannotParseException missingXmlElements(String... elements) {
    +1199                    String message;
    +1200    
    +1201                    switch (elements.length) {
    +1202                    case 0:
    +1203                            message = "Property value empty.";
    +1204                            break;
    +1205                    case 1:
    +1206                            message = "Property value empty (no <" + elements[0] + "> element found).";
    +1207                            break;
    +1208                    case 2:
    +1209                            message = "Property value empty (no <" + elements[0] + "> or <" + elements[1] + "> elements found).";
    +1210                            break;
    +1211                    default:
    +1212                            StringBuilder sb = new StringBuilder();
    +1213    
    +1214                            sb.append("Property value empty (no ");
    +1215                            join(Arrays.asList(elements).subList(0, elements.length - 1), ", ", sb, new JoinCallback<String>() {
    +1216                                    public void handle(StringBuilder sb, String value) {
    +1217                                            sb.append('<').append(value).append('>');
    +1218                                    }
    +1219                            });
    +1220                            sb.append(", or <").append(elements[elements.length - 1]).append("> elements found).");
    +1221    
    +1222                            message = sb.toString();
    +1223                            break;
    +1224                    }
    +1225    
    +1226                    return new CannotParseException(message);
    +1227            }
    +1228    
    +1229            /**
    +1230             * Represents the result of an unmarshal operation.
    +1231             * @author Michael Angstadt
    +1232             * @param <T> the unmarshalled property class
    +1233             */
    +1234            public static class Result<T extends ICalProperty> {
    +1235                    private final T property;
    +1236                    private final List<String> warnings;
    +1237    
    +1238                    /**
    +1239                     * Creates a new result.
    +1240                     * @param property the property object
    +1241                     * @param warnings the warnings
    +1242                     */
    +1243                    public Result(T property, List<String> warnings) {
    +1244                            this.property = property;
    +1245                            this.warnings = warnings;
    +1246                    }
    +1247    
    +1248                    /**
    +1249                     * Gets the warnings.
    +1250                     * @return the warnings
    +1251                     */
    +1252                    public List<String> getWarnings() {
    +1253                            return warnings;
    +1254                    }
    +1255    
    +1256                    /**
    +1257                     * Gets the property object.
    +1258                     * @return the property object
    +1259                     */
    +1260                    public T getProperty() {
    +1261                            return property;
    +1262                    }
    +1263            }
    +1264    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.Result.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.Result.html new file mode 100644 index 000000000..40770513e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.Result.html @@ -0,0 +1,1330 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import static biweekly.io.xml.XCalNamespaceContext.XCAL_NS;
    +004    import static biweekly.util.StringUtils.join;
    +005    
    +006    import java.util.ArrayList;
    +007    import java.util.Arrays;
    +008    import java.util.Collection;
    +009    import java.util.Date;
    +010    import java.util.Iterator;
    +011    import java.util.List;
    +012    import java.util.Map;
    +013    import java.util.TimeZone;
    +014    import java.util.regex.Pattern;
    +015    
    +016    import javax.xml.namespace.QName;
    +017    
    +018    import org.w3c.dom.Element;
    +019    
    +020    import biweekly.ICalDataType;
    +021    import biweekly.ICalendar;
    +022    import biweekly.io.CannotParseException;
    +023    import biweekly.io.SkipMeException;
    +024    import biweekly.io.json.JCalValue;
    +025    import biweekly.io.text.ICalRawWriter;
    +026    import biweekly.io.xml.XCalElement;
    +027    import biweekly.parameter.ICalParameters;
    +028    import biweekly.property.ICalProperty;
    +029    import biweekly.util.ICalDateFormatter;
    +030    import biweekly.util.ISOFormat;
    +031    import biweekly.util.ListMultimap;
    +032    import biweekly.util.StringUtils;
    +033    import biweekly.util.StringUtils.JoinCallback;
    +034    import biweekly.util.StringUtils.JoinMapCallback;
    +035    import biweekly.util.XmlUtils;
    +036    
    +037    /*
    +038     Copyright (c) 2013, Michael Angstadt
    +039     All rights reserved.
    +040    
    +041     Redistribution and use in source and binary forms, with or without
    +042     modification, are permitted provided that the following conditions are met: 
    +043    
    +044     1. Redistributions of source code must retain the above copyright notice, this
    +045     list of conditions and the following disclaimer. 
    +046     2. Redistributions in binary form must reproduce the above copyright notice,
    +047     this list of conditions and the following disclaimer in the documentation
    +048     and/or other materials provided with the distribution. 
    +049    
    +050     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +051     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +052     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +053     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +054     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +055     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +056     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +057     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +058     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +059     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +060     */
    +061    
    +062    /**
    +063     * Base class for iCalendar property marshallers.
    +064     * @param <T> the property class
    +065     * @author Michael Angstadt
    +066     */
    +067    public abstract class ICalPropertyMarshaller<T extends ICalProperty> {
    +068            protected final Class<T> clazz;
    +069            protected final String propertyName;
    +070            protected final ICalDataType defaultDataType;
    +071            protected final QName qname;
    +072    
    +073            /**
    +074             * Creates a new marshaller.
    +075             * @param clazz the property class
    +076             * @param propertyName the property name (e.g. "VERSION")
    +077             * @param defaultDataType the property's default data type (e.g. "text") or
    +078             * null if unknown
    +079             */
    +080            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType) {
    +081                    this(clazz, propertyName, defaultDataType, new QName(XCAL_NS, propertyName.toLowerCase()));
    +082            }
    +083    
    +084            /**
    +085             * Creates a new marshaller.
    +086             * @param clazz the property class
    +087             * @param propertyName the property name (e.g. "VERSION")
    +088             * @param defaultDataType the property's default data type (e.g. "text") or
    +089             * null if unknown
    +090             * @param qname the XML element name and namespace to use for xCal documents
    +091             * (by default, the XML element name is set to the lower-cased property
    +092             * name, and the element namespace is set to the xCal namespace)
    +093             */
    +094            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType, QName qname) {
    +095                    this.clazz = clazz;
    +096                    this.propertyName = propertyName;
    +097                    this.defaultDataType = defaultDataType;
    +098                    this.qname = qname;
    +099            }
    +100    
    +101            /**
    +102             * Gets the property class.
    +103             * @return the property class
    +104             */
    +105            public Class<T> getPropertyClass() {
    +106                    return clazz;
    +107            }
    +108    
    +109            /**
    +110             * Gets the property name.
    +111             * @return the property name (e.g. "VERSION")
    +112             */
    +113            public String getPropertyName() {
    +114                    return propertyName;
    +115            }
    +116    
    +117            /**
    +118             * Gets the property's default data type.
    +119             * @return the default data type (e.g. "text") or null if unknown
    +120             */
    +121            public ICalDataType getDefaultDataType() {
    +122                    return defaultDataType;
    +123            }
    +124    
    +125            /**
    +126             * Gets this property's local name and namespace for xCal documents.
    +127             * @return the XML local name and namespace
    +128             */
    +129            public QName getQName() {
    +130                    return qname;
    +131            }
    +132    
    +133            /**
    +134             * Sanitizes a property's parameters (called before the property is
    +135             * written). Note that a copy of the parameters is returned so that the
    +136             * property object does not get modified.
    +137             * @param property the property
    +138             * @return the sanitized parameters
    +139             */
    +140            public final ICalParameters prepareParameters(T property) {
    +141                    //make a copy because the property should not get modified when it is marshalled
    +142                    ICalParameters copy = new ICalParameters(property.getParameters());
    +143                    _prepareParameters(property, copy);
    +144                    return copy;
    +145            }
    +146    
    +147            /**
    +148             * Determines the data type of a property instance.
    +149             * @param property the property
    +150             * @return the data type or null if unknown
    +151             */
    +152            public final ICalDataType dataType(T property) {
    +153                    return _dataType(property);
    +154            }
    +155    
    +156            /**
    +157             * Marshals a property's value to a string.
    +158             * @param property the property
    +159             * @return the marshalled value
    +160             * @throws SkipMeException if the property should not be written to the data
    +161             * stream
    +162             */
    +163            public final String writeText(T property) {
    +164                    return _writeText(property);
    +165            }
    +166    
    +167            /**
    +168             * Marshals a property's value to an XML element (xCal).
    +169             * @param property the property
    +170             * @param element the property's XML element
    +171             * @throws SkipMeException if the property should not be written to the data
    +172             * stream
    +173             */
    +174            public final void writeXml(T property, Element element) {
    +175                    XCalElement xcalElement = new XCalElement(element);
    +176                    _writeXml(property, xcalElement);
    +177            }
    +178    
    +179            /**
    +180             * Marshals a property's value to a JSON data stream (jCal).
    +181             * @param property the property
    +182             * @return the marshalled value
    +183             * @throws SkipMeException if the property should not be written to the data
    +184             * stream
    +185             */
    +186            public final JCalValue writeJson(T property) {
    +187                    return _writeJson(property);
    +188            }
    +189    
    +190            /**
    +191             * Unmarshals a property from a plain-text iCalendar data stream.
    +192             * @param value the value as read off the wire
    +193             * @param dataType the data type of the property value. The property's VALUE
    +194             * parameter is used to determine the data type. If the property has no
    +195             * VALUE parameter, then this parameter will be set to the property's
    +196             * default datatype. Note that the VALUE parameter is removed from the
    +197             * property's parameter list after it has been read.
    +198             * @param parameters the parsed parameters
    +199             * @return the unmarshalled property and its warnings
    +200             * @throws CannotParseException if the marshaller could not parse the
    +201             * property's value
    +202             * @throws SkipMeException if the property should not be added to the final
    +203             * {@link ICalendar} object
    +204             */
    +205            public final Result<T> parseText(String value, ICalDataType dataType, ICalParameters parameters) {
    +206                    List<String> warnings = new ArrayList<String>(0);
    +207                    T property = _parseText(value, dataType, parameters, warnings);
    +208                    property.setParameters(parameters);
    +209                    return new Result<T>(property, warnings);
    +210            }
    +211    
    +212            /**
    +213             * Unmarshals a property's value from an XML document (xCal).
    +214             * @param element the property's XML element
    +215             * @param parameters the property's parameters
    +216             * @return the unmarshalled property and its warnings
    +217             * @throws CannotParseException if the marshaller could not parse the
    +218             * property's value
    +219             * @throws SkipMeException if the property should not be added to the final
    +220             * {@link ICalendar} object
    +221             */
    +222            public final Result<T> parseXml(Element element, ICalParameters parameters) {
    +223                    List<String> warnings = new ArrayList<String>(0);
    +224                    T property = _parseXml(new XCalElement(element), parameters, warnings);
    +225                    property.setParameters(parameters);
    +226                    return new Result<T>(property, warnings);
    +227            }
    +228    
    +229            /**
    +230             * Unmarshals a property's value from a JSON data stream (jCal).
    +231             * @param value the property's JSON value
    +232             * @param dataType the data type
    +233             * @param parameters the parsed parameters
    +234             * @return the unmarshalled property and its warnings
    +235             * @throws CannotParseException if the marshaller could not parse the
    +236             * property's value
    +237             * @throws SkipMeException if the property should not be added to the final
    +238             * {@link ICalendar} object
    +239             */
    +240            public final Result<T> parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters) {
    +241                    List<String> warnings = new ArrayList<String>(0);
    +242                    T property = _parseJson(value, dataType, parameters, warnings);
    +243                    property.setParameters(parameters);
    +244                    return new Result<T>(property, warnings);
    +245            }
    +246    
    +247            /**
    +248             * <p>
    +249             * Sanitizes a property's parameters before the property is written.
    +250             * </p>
    +251             * <p>
    +252             * This method should be overridden by child classes that wish to tweak the
    +253             * property's parameters before the property is written. The default
    +254             * implementation of this method does nothing.
    +255             * </p>
    +256             * @param property the property
    +257             * @param copy the list of parameters to make modifications to (it is a copy
    +258             * of the property's parameters)
    +259             */
    +260            protected void _prepareParameters(T property, ICalParameters copy) {
    +261                    //do nothing
    +262            }
    +263    
    +264            /**
    +265             * <p>
    +266             * Determines the data type of a property instance.
    +267             * </p>
    +268             * <p>
    +269             * This method should be overridden by child classes if a property's data
    +270             * type changes depending on its value. The default implementation of this
    +271             * method returns the property's default data type.
    +272             * </p>
    +273             * @param property the property
    +274             * @return the data type or null if unknown
    +275             */
    +276            protected ICalDataType _dataType(T property) {
    +277                    return defaultDataType;
    +278            }
    +279    
    +280            /**
    +281             * Marshals a property's value to a string.
    +282             * @param property the property
    +283             * @return the marshalled value
    +284             * @throws SkipMeException if the property should not be written to the data
    +285             * stream
    +286             */
    +287            protected abstract String _writeText(T property);
    +288    
    +289            /**
    +290             * <p>
    +291             * Marshals a property's value to an XML element (xCal).
    +292             * <p>
    +293             * <p>
    +294             * This method should be overridden by child classes that wish to support
    +295             * xCal. The default implementation of this method will append one child
    +296             * element to the property's XML element. The child element's name will be
    +297             * that of the property's data type (retrieved using the {@link #dataType}
    +298             * method), and the child element's text content will be set to the
    +299             * property's marshalled plain-text value (retrieved using the
    +300             * {@link #writeText} method).
    +301             * </p>
    +302             * @param property the property
    +303             * @param element the property's XML element
    +304             * @throws SkipMeException if the property should not be written to the data
    +305             * stream
    +306             */
    +307            protected void _writeXml(T property, XCalElement element) {
    +308                    String value = writeText(property);
    +309                    ICalDataType dataType = dataType(property);
    +310                    element.append(dataType, value);
    +311            }
    +312    
    +313            /**
    +314             * <p>
    +315             * Marshals a property's value to a JSON data stream (jCal).
    +316             * </p>
    +317             * <p>
    +318             * This method should be overridden by child classes that wish to support
    +319             * jCal. The default implementation of this method will create a jCard
    +320             * property that has a single JSON string value (generated by the
    +321             * {@link #writeText} method).
    +322             * </p>
    +323             * @param property the property
    +324             * @return the marshalled value
    +325             * @throws SkipMeException if the property should not be written to the data
    +326             * stream
    +327             */
    +328            protected JCalValue _writeJson(T property) {
    +329                    String value = writeText(property);
    +330                    return JCalValue.single(value);
    +331            }
    +332    
    +333            /**
    +334             * Unmarshals a property from a plain-text iCalendar data stream.
    +335             * @param value the value as read off the wire
    +336             * @param dataType the data type of the property value. The property's VALUE
    +337             * parameter is used to determine the data type. If the property has no
    +338             * VALUE parameter, then this parameter will be set to the property's
    +339             * default datatype. Note that the VALUE parameter is removed from the
    +340             * property's parameter list after it has been read.
    +341             * @param parameters the parsed parameters. These parameters will be
    +342             * assigned to the property object once this method returns. Therefore, do
    +343             * not assign any parameters to the property object itself whilst inside of
    +344             * this method, or else they will be overwritten.
    +345             * @param warnings allows the programmer to alert the user to any
    +346             * note-worthy (but non-critical) issues that occurred during the
    +347             * unmarshalling process
    +348             * @return the unmarshalled property object
    +349             * @throws CannotParseException if the marshaller could not parse the
    +350             * property's value
    +351             * @throws SkipMeException if the property should not be added to the final
    +352             * {@link ICalendar} object
    +353             */
    +354            protected abstract T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings);
    +355    
    +356            /**
    +357             * <p>
    +358             * Unmarshals a property from an XML document (xCal).
    +359             * </p>
    +360             * <p>
    +361             * This method should be overridden by child classes that wish to support
    +362             * xCal. The default implementation of this method will find the first child
    +363             * element with the xCal namespace. The element's name will be used as the
    +364             * property's data type and its text content will be passed into the
    +365             * {@link #_parseText} method. If no such child element is found, then the
    +366             * parent element's text content will be passed into {@link #_parseText} and
    +367             * the data type will be null.
    +368             * </p>
    +369             * @param element the property's XML element
    +370             * @param parameters the parsed parameters. These parameters will be
    +371             * assigned to the property object once this method returns. Therefore, do
    +372             * not assign any parameters to the property object itself whilst inside of
    +373             * this method, or else they will be overwritten.
    +374             * @param warnings allows the programmer to alert the user to any
    +375             * note-worthy (but non-critical) issues that occurred during the
    +376             * unmarshalling process
    +377             * @return the unmarshalled property object
    +378             * @throws CannotParseException if the marshaller could not parse the
    +379             * property's value
    +380             * @throws SkipMeException if the property should not be added to the final
    +381             * {@link ICalendar} object
    +382             */
    +383            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +384                    String value = null;
    +385                    ICalDataType dataType = null;
    +386                    Element rawElement = element.getElement();
    +387    
    +388                    //get the text content of the first child element with the xCard namespace
    +389                    List<Element> children = XmlUtils.toElementList(rawElement.getChildNodes());
    +390                    for (Element child : children) {
    +391                            if (!XCAL_NS.equals(child.getNamespaceURI())) {
    +392                                    continue;
    +393                            }
    +394    
    +395                            dataType = ICalDataType.get(child.getLocalName());
    +396                            value = child.getTextContent();
    +397                            break;
    +398                    }
    +399    
    +400                    if (dataType == null) {
    +401                            //get the text content of the property element
    +402                            value = rawElement.getTextContent();
    +403                    }
    +404    
    +405                    value = escape(value);
    +406                    return _parseText(value, dataType, parameters, warnings);
    +407            }
    +408    
    +409            /**
    +410             * /**
    +411             * <p>
    +412             * Unmarshals a property from a JSON data stream (jCal).
    +413             * </p>
    +414             * <p>
    +415             * This method should be overridden by child classes that wish to support
    +416             * jCal. The default implementation of this method will convert the jCal
    +417             * property value to a string and pass it into the {@link #_parseText}
    +418             * method.
    +419             * </p>
    +420             * 
    +421             * <hr>
    +422             * 
    +423             * <p>
    +424             * The following paragraphs describe the way in which this method's default
    +425             * implementation converts a jCal value to a string:
    +426             * </p>
    +427             * <p>
    +428             * If the jCal value consists of a single, non-array, non-object value, then
    +429             * the value is converted to a string. Special characters (backslashes,
    +430             * commas, and semicolons) are escaped in order to simulate what the value
    +431             * might look like in a plain-text iCalendar object.<br>
    +432             * <code>["x-foo", {}, "text", "the;value"] --&gt; "the\;value"</code><br>
    +433             * <code>["x-foo", {}, "text", 2] --&gt; "2"</code>
    +434             * </p>
    +435             * <p>
    +436             * If the jCal value consists of multiple, non-array, non-object values,
    +437             * then all the values are appended together in a single string, separated
    +438             * by commas. Special characters (backslashes, commas, and semicolons) are
    +439             * escaped for each value in order to prevent commas from being treated as
    +440             * delimiters, and to simulate what the value might look like in a
    +441             * plain-text iCalendar object.<br>
    +442             * <code>["x-foo", {}, "text", "one", "two,three"] --&gt;
    +443             * "one,two\,three"</code>
    +444             * </p>
    +445             * <p>
    +446             * If the jCal value is a single array, then this array is treated as a
    +447             * "structured value", and converted its plain-text representation. Special
    +448             * characters (backslashes, commas, and semicolons) are escaped for each
    +449             * value in order to prevent commas and semicolons from being treated as
    +450             * delimiters.<br>
    +451             * <code>["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]]
    +452             * --&gt; "one;two,three;four\;five"</code>
    +453             * </p>
    +454             * <p>
    +455             * If the jCal value starts with a JSON object, then the object is converted
    +456             * to a format identical to the one used in the RRULE and EXRULE properties.
    +457             * Special characters (backslashes, commas, semicolons, and equal signs) are
    +458             * escaped for each value in order to preserve the syntax of the string
    +459             * value.<br>
    +460             * <code>["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --&gt; "ONE=1;TWO=2,2.5"</code>
    +461             * </p>
    +462             * <p>
    +463             * For all other cases, behavior is undefined.
    +464             * </p>
    +465             * @param value the property's JSON value
    +466             * @param dataType the data type
    +467             * @param parameters the parsed parameters. These parameters will be
    +468             * assigned to the property object once this method returns. Therefore, do
    +469             * not assign any parameters to the property object itself whilst inside of
    +470             * this method, or else they will be overwritten.
    +471             * @param warnings allows the programmer to alert the user to any
    +472             * note-worthy (but non-critical) issues that occurred during the
    +473             * unmarshalling process
    +474             * @return the unmarshalled property object
    +475             * @throws CannotParseException if the marshaller could not parse the
    +476             * property's value
    +477             * @throws SkipMeException if the property should not be added to the final
    +478             * {@link ICalendar} object
    +479             */
    +480            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +481                    return _parseText(jcalValueToString(value), dataType, parameters, warnings);
    +482            }
    +483    
    +484            private String jcalValueToString(JCalValue value) {
    +485                    if (value.getValues().size() > 1) {
    +486                            List<String> multi = value.asMulti();
    +487                            if (!multi.isEmpty()) {
    +488                                    return list(multi);
    +489                            }
    +490                    }
    +491    
    +492                    if (!value.getValues().isEmpty() && value.getValues().get(0).getArray() != null) {
    +493                            List<List<String>> structured = value.asStructured();
    +494                            if (!structured.isEmpty()) {
    +495                                    return structured(structured.toArray());
    +496                            }
    +497                    }
    +498    
    +499                    if (value.getValues().get(0).getObject() != null) {
    +500                            ListMultimap<String, String> object = value.asObject();
    +501                            if (!object.isEmpty()) {
    +502                                    return object(object.getMap());
    +503                            }
    +504                    }
    +505    
    +506                    return escape(value.asSingle());
    +507            }
    +508    
    +509            /**
    +510             * Unescapes all special characters that are escaped with a backslash, as
    +511             * well as escaped newlines.
    +512             * @param text the text to unescape
    +513             * @return the unescaped text
    +514             */
    +515            protected static String unescape(String text) {
    +516                    if (text == null) {
    +517                            return text;
    +518                    }
    +519    
    +520                    StringBuilder sb = null;
    +521                    boolean escaped = false;
    +522                    for (int i = 0; i < text.length(); i++) {
    +523                            char ch = text.charAt(i);
    +524    
    +525                            if (escaped) {
    +526                                    if (sb == null) {
    +527                                            sb = new StringBuilder(text.length());
    +528                                            sb.append(text.substring(0, i - 1));
    +529                                    }
    +530    
    +531                                    escaped = false;
    +532    
    +533                                    if (ch == 'n' || ch == 'N') {
    +534                                            //newlines appear as "\n" or "\N" (see RFC 5545 p.46)
    +535                                            sb.append(StringUtils.NEWLINE);
    +536                                            continue;
    +537                                    }
    +538    
    +539                                    sb.append(ch);
    +540                                    continue;
    +541                            }
    +542    
    +543                            if (ch == '\\') {
    +544                                    escaped = true;
    +545                                    continue;
    +546                            }
    +547    
    +548                            if (sb != null) {
    +549                                    sb.append(ch);
    +550                            }
    +551                    }
    +552                    return (sb == null) ? text : sb.toString();
    +553            }
    +554    
    +555            /**
    +556             * <p>
    +557             * Escapes all special characters within a iCalendar value. These characters
    +558             * are:
    +559             * </p>
    +560             * <ul>
    +561             * <li>backslashes ({@code \})</li>
    +562             * <li>commas ({@code ,})</li>
    +563             * <li>semi-colons ({@code ;})</li>
    +564             * </ul>
    +565             * <p>
    +566             * Newlines are not escaped by this method. They are escaped when the
    +567             * iCalendar object is serialized (in the {@link ICalRawWriter} class).
    +568             * </p>
    +569             * @param text the text to escape
    +570             * @return the escaped text
    +571             */
    +572            protected static String escape(String text) {
    +573                    if (text == null) {
    +574                            return text;
    +575                    }
    +576    
    +577                    String chars = "\\,;";
    +578                    StringBuilder sb = null;
    +579                    for (int i = 0; i < text.length(); i++) {
    +580                            char ch = text.charAt(i);
    +581                            if (chars.indexOf(ch) >= 0) {
    +582                                    if (sb == null) {
    +583                                            sb = new StringBuilder(text.length());
    +584                                            sb.append(text.substring(0, i));
    +585                                    }
    +586                                    sb.append('\\');
    +587                            }
    +588    
    +589                            if (sb != null) {
    +590                                    sb.append(ch);
    +591                            }
    +592                    }
    +593                    return (sb == null) ? text : sb.toString();
    +594            }
    +595    
    +596            /**
    +597             * Splits a string by a delimiter, taking escaped characters into account.
    +598             * @param string the string to split (e.g. "one,two,three")
    +599             * @param delimiter the delimiter (e.g. ",")
    +600             * @return the factory object
    +601             */
    +602            protected static Splitter split(String string, String delimiter) {
    +603                    return new Splitter(string, delimiter);
    +604            }
    +605    
    +606            /**
    +607             * Factory class for splitting strings.
    +608             */
    +609            protected static class Splitter {
    +610                    private String string;
    +611                    private String delimiter;
    +612                    private boolean removeEmpties = false;
    +613                    private boolean unescape = false;
    +614                    private int limit = -1;
    +615    
    +616                    /**
    +617                     * Creates a new splitter object.
    +618                     * @param string the string to split (e.g. "one,two,three")
    +619                     * @param delimiter the delimiter (e.g. ",")
    +620                     */
    +621                    public Splitter(String string, String delimiter) {
    +622                            this.string = string;
    +623                            this.delimiter = delimiter;
    +624                    }
    +625    
    +626                    /**
    +627                     * Sets whether to remove empty elements.
    +628                     * @param removeEmpties true to remove empty elements, false not to
    +629                     * (default is false)
    +630                     * @return this
    +631                     */
    +632                    public Splitter removeEmpties(boolean removeEmpties) {
    +633                            this.removeEmpties = removeEmpties;
    +634                            return this;
    +635                    }
    +636    
    +637                    /**
    +638                     * Sets whether to unescape each split string.
    +639                     * @param unescape true to unescape, false not to (default is false)
    +640                     * @return this
    +641                     */
    +642                    public Splitter unescape(boolean unescape) {
    +643                            this.unescape = unescape;
    +644                            return this;
    +645                    }
    +646    
    +647                    /**
    +648                     * Sets the max number of split strings it should parse.
    +649                     * @param limit the max number of split strings
    +650                     * @return this
    +651                     */
    +652                    public Splitter limit(int limit) {
    +653                            this.limit = limit;
    +654                            return this;
    +655                    }
    +656    
    +657                    /**
    +658                     * Performs the split operation.
    +659                     * @return the split string
    +660                     */
    +661                    public List<String> split() {
    +662                            //from: http://stackoverflow.com/q/820172">http://stackoverflow.com/q/820172
    +663                            String split[] = string.split("\\s*(?<!\\\\)" + Pattern.quote(delimiter) + "\\s*", limit);
    +664    
    +665                            List<String> list = new ArrayList<String>(split.length);
    +666                            for (String s : split) {
    +667                                    if (s.length() == 0 && removeEmpties) {
    +668                                            continue;
    +669                                    }
    +670    
    +671                                    if (unescape) {
    +672                                            s = ICalPropertyMarshaller.unescape(s);
    +673                                    }
    +674    
    +675                                    list.add(s);
    +676                            }
    +677                            return list;
    +678                    }
    +679            }
    +680    
    +681            /**
    +682             * Parses a comma-separated list of values.
    +683             * @param value the string to parse (e.g. "one,two,th\,ree")
    +684             * @return the parsed values
    +685             */
    +686            protected static List<String> list(String value) {
    +687                    if (value.length() == 0) {
    +688                            return new ArrayList<String>(0);
    +689                    }
    +690                    return split(value, ",").unescape(true).split();
    +691            }
    +692    
    +693            /**
    +694             * Writes a comma-separated list of values.
    +695             * @param values the values to write
    +696             * @return the list
    +697             */
    +698            protected static String list(Object... values) {
    +699                    return list(Arrays.asList(values));
    +700            }
    +701    
    +702            /**
    +703             * Writes a comma-separated list of values.
    +704             * @param values the values to write
    +705             * @return the list
    +706             */
    +707            protected static <T> String list(Collection<T> values) {
    +708                    return list(values, new ListCallback<T>() {
    +709                            public String asString(T value) {
    +710                                    return value.toString();
    +711                            }
    +712                    });
    +713            }
    +714    
    +715            /**
    +716             * Writes a comma-separated list of values.
    +717             * @param values the values to write
    +718             * @param callback callback function used for converting each value to a
    +719             * string
    +720             * @return the list
    +721             */
    +722            protected static <T> String list(Collection<T> values, final ListCallback<T> callback) {
    +723                    return join(values, ",", new JoinCallback<T>() {
    +724                            public void handle(StringBuilder sb, T value) {
    +725                                    if (value == null) {
    +726                                            return;
    +727                                    }
    +728    
    +729                                    String valueStr = callback.asString(value);
    +730                                    sb.append(escape(valueStr));
    +731                            }
    +732                    });
    +733            }
    +734    
    +735            /**
    +736             * Callback function used in conjunction with the
    +737             * {@link ICalPropertyMarshaller#list(Collection, ListCallback) list} method
    +738             * @param <T> the value class
    +739             */
    +740            protected static interface ListCallback<T> {
    +741                    /**
    +742                     * Converts a value to a string.
    +743                     * @param value the value (null values are not passed to this method, so
    +744                     * this parameter will never be null)
    +745                     * @return the string
    +746                     */
    +747                    String asString(T value);
    +748            }
    +749    
    +750            /**
    +751             * Parses a list of values that are delimited by semicolons. Unlike
    +752             * structured value components, semi-structured components cannot be
    +753             * multi-valued.
    +754             * @param value the string to parse (e.g. "one;two;three")
    +755             * @return the parsed values
    +756             */
    +757            protected static SemiStructuredIterator semistructured(String value) {
    +758                    return semistructured(value, -1);
    +759            }
    +760    
    +761            /**
    +762             * Parses a list of values that are delimited by semicolons. Unlike
    +763             * structured value components, semi-structured components cannot be
    +764             * multi-valued.
    +765             * @param value the string to parse (e.g. "one;two;three")
    +766             * @param limit the max number of components to parse
    +767             * @return the parsed values
    +768             */
    +769            protected static SemiStructuredIterator semistructured(String value, int limit) {
    +770                    List<String> split = split(value, ";").unescape(true).limit(limit).split();
    +771                    return new SemiStructuredIterator(split.iterator());
    +772            }
    +773    
    +774            /**
    +775             * Parses a structured value.
    +776             * @param value the string to parse (e.g. "one;two,three;four")
    +777             * @return the parsed values
    +778             */
    +779            protected static StructuredIterator structured(String value) {
    +780                    List<String> split = split(value, ";").split();
    +781                    List<List<String>> components = new ArrayList<List<String>>(split.size());
    +782                    for (String s : split) {
    +783                            components.add(list(s));
    +784                    }
    +785                    return new StructuredIterator(components.iterator());
    +786            }
    +787    
    +788            /**
    +789             * Provides an iterator for a jCard structured value.
    +790             * @param value the jCard value
    +791             * @return the parsed values
    +792             */
    +793            protected static StructuredIterator structured(JCalValue value) {
    +794                    return new StructuredIterator(value.asStructured().iterator());
    +795            }
    +796    
    +797            /**
    +798             * <p>
    +799             * Writes a structured value.
    +800             * </p>
    +801             * <p>
    +802             * This method accepts a list of {@link Object} instances.
    +803             * {@link Collection} objects will be treated as multi-valued components.
    +804             * Null objects will be treated as empty components. All other objects will
    +805             * have their {@code toString()} method invoked to generate the string
    +806             * value.
    +807             * </p>
    +808             * @param values the values to write
    +809             * @return the structured value string
    +810             */
    +811            protected static String structured(Object... values) {
    +812                    return join(Arrays.asList(values), ";", new JoinCallback<Object>() {
    +813                            public void handle(StringBuilder sb, Object value) {
    +814                                    if (value == null) {
    +815                                            return;
    +816                                    }
    +817    
    +818                                    if (value instanceof Collection) {
    +819                                            Collection<?> list = (Collection<?>) value;
    +820                                            sb.append(list(list));
    +821                                            return;
    +822                                    }
    +823    
    +824                                    sb.append(escape(value.toString()));
    +825                            }
    +826                    });
    +827            }
    +828    
    +829            /**
    +830             * Iterates over the fields in a structured value.
    +831             */
    +832            protected static class StructuredIterator {
    +833                    private final Iterator<List<String>> it;
    +834    
    +835                    /**
    +836                     * Constructs a new structured iterator.
    +837                     * @param it the iterator to wrap
    +838                     */
    +839                    public StructuredIterator(Iterator<List<String>> it) {
    +840                            this.it = it;
    +841                    }
    +842    
    +843                    /**
    +844                     * Gets the first value of the next component.
    +845                     * @return the first value, null if the value is an empty string, or
    +846                     * null if there are no more components
    +847                     */
    +848                    public String nextString() {
    +849                            if (!hasNext()) {
    +850                                    return null;
    +851                            }
    +852    
    +853                            List<String> list = it.next();
    +854                            if (list.isEmpty()) {
    +855                                    return null;
    +856                            }
    +857    
    +858                            String value = list.get(0);
    +859                            return (value.length() == 0) ? null : value;
    +860                    }
    +861    
    +862                    /**
    +863                     * Gets the next component.
    +864                     * @return the next component, an empty list if the component is empty,
    +865                     * or an empty list of there are no more components
    +866                     */
    +867                    public List<String> nextComponent() {
    +868                            if (!hasNext()) {
    +869                                    return new ArrayList<String>(0); //the lists should be mutable so they can be directly assigned to the property object's fields
    +870                            }
    +871    
    +872                            List<String> list = it.next();
    +873                            if (list.size() == 1 && list.get(0).length() == 0) {
    +874                                    return new ArrayList<String>(0);
    +875                            }
    +876    
    +877                            return list;
    +878                    }
    +879    
    +880                    /**
    +881                     * Determines if there are any elements left in the value.
    +882                     * @return true if there are elements left, false if not
    +883                     */
    +884                    public boolean hasNext() {
    +885                            return it.hasNext();
    +886                    }
    +887            }
    +888    
    +889            /**
    +890             * Iterates over the fields in a semi-structured value (a structured value
    +891             * whose components cannot be multi-valued).
    +892             */
    +893            protected static class SemiStructuredIterator {
    +894                    private final Iterator<String> it;
    +895    
    +896                    /**
    +897                     * Constructs a new structured iterator.
    +898                     * @param it the iterator to wrap
    +899                     */
    +900                    public SemiStructuredIterator(Iterator<String> it) {
    +901                            this.it = it;
    +902                    }
    +903    
    +904                    /**
    +905                     * Gets the next value.
    +906                     * @return the next value, null if the value is an empty string, or null
    +907                     * if there are no more values
    +908                     */
    +909                    public String next() {
    +910                            if (!hasNext()) {
    +911                                    return null;
    +912                            }
    +913    
    +914                            String value = it.next();
    +915                            return (value.length() == 0) ? null : value;
    +916                    }
    +917    
    +918                    /**
    +919                     * Determines if there are any elements left in the value.
    +920                     * @return true if there are elements left, false if not
    +921                     */
    +922                    public boolean hasNext() {
    +923                            return it.hasNext();
    +924                    }
    +925            }
    +926    
    +927            /**
    +928             * Writes an object property value to a string.
    +929             * @param value the value
    +930             * @return the string
    +931             */
    +932            protected static <T> String object(Map<String, List<T>> value) {
    +933                    return join(value, ";", new JoinMapCallback<String, List<T>>() {
    +934                            public void handle(StringBuilder sb, String key, List<T> value) {
    +935                                    sb.append(key.toUpperCase()).append('=').append(list(value));
    +936                            }
    +937                    });
    +938            }
    +939    
    +940            /**
    +941             * Parses an object property value.
    +942             * @param value the value to parse
    +943             * @return the parsed value
    +944             */
    +945            protected static ListMultimap<String, String> object(String value) {
    +946                    ListMultimap<String, String> map = new ListMultimap<String, String>();
    +947    
    +948                    for (String component : split(value, ";").unescape(false).removeEmpties(true).split()) {
    +949                            String[] split = component.split("=", 2);
    +950    
    +951                            String name = unescape(split[0].toUpperCase());
    +952                            List<String> values = (split.length > 1) ? list(split[1]) : Arrays.asList("");
    +953    
    +954                            map.putAll(name, values);
    +955                    }
    +956    
    +957                    return map;
    +958            }
    +959    
    +960            /**
    +961             * Parses a date string.
    +962             * @param value the date string
    +963             * @return the factory object
    +964             */
    +965            protected static DateParser date(String value) {
    +966                    return new DateParser(value);
    +967            }
    +968    
    +969            /**
    +970             * Formats a {@link Date} object as a string.
    +971             * @param date the date
    +972             * @return the factory object
    +973             */
    +974            protected static DateWriter date(Date date) {
    +975                    return new DateWriter(date);
    +976            }
    +977    
    +978            /**
    +979             * Factory class for parsing dates.
    +980             */
    +981            protected static class DateParser {
    +982                    private String value;
    +983                    private TimeZone timezone;
    +984    
    +985                    /**
    +986                     * Creates a new date writer object.
    +987                     * @param value the date string to parse
    +988                     */
    +989                    public DateParser(String value) {
    +990                            this.value = value;
    +991                    }
    +992    
    +993                    /**
    +994                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +995                     * value). If the ID does not contain a "/" character, it will be
    +996                     * ignored.
    +997                     * @param timezoneId the timezone ID
    +998                     * @return this
    +999                     */
    +1000                    public DateParser tzid(String timezoneId) {
    +1001                            return tzid(timezoneId, null);
    +1002                    }
    +1003    
    +1004                    /**
    +1005                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +1006                     * value).
    +1007                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1008                     * "/" character), it will attempt to look up the timezone in Java's
    +1009                     * timezone registry and parse the date according to that timezone. If
    +1010                     * the timezone is not found, the date will be parsed according to the
    +1011                     * JVM's default timezone and a warning message will be added to the
    +1012                     * provided warnings list. If the ID is not global, it will be parsed
    +1013                     * according to the JVM's default timezone. Whichever timezone is chosen
    +1014                     * here, it will be ignored if the date string is in UTC time or
    +1015                     * contains an offset.
    +1016                     * @param warnings if the ID is global and is not recognized, a warning
    +1017                     * message will be added to this list
    +1018                     * @return this
    +1019                     */
    +1020                    public DateParser tzid(String timezoneId, List<String> warnings) {
    +1021                            if (timezoneId == null) {
    +1022                                    return tz(null);
    +1023                            }
    +1024    
    +1025                            if (timezoneId.contains("/")) {
    +1026                                    TimeZone timezone = ICalDateFormatter.parseTimeZoneId(timezoneId);
    +1027                                    if (timezone == null) {
    +1028                                            timezone = TimeZone.getDefault();
    +1029                                            if (warnings != null) {
    +1030                                                    warnings.add("Timezone ID not recognized, parsing with default timezone instead: " + timezoneId);
    +1031                                            }
    +1032                                    }
    +1033                                    return tz(timezone);
    +1034                            }
    +1035    
    +1036                            //TODO parse according to the associated VTIMEZONE component
    +1037                            return tz(TimeZone.getDefault());
    +1038                    }
    +1039    
    +1040                    /**
    +1041                     * Sets the timezone to parse the date as.
    +1042                     * @param timezone the timezone
    +1043                     * @return this
    +1044                     */
    +1045                    public DateParser tz(TimeZone timezone) {
    +1046                            this.timezone = timezone;
    +1047                            return this;
    +1048                    }
    +1049    
    +1050                    /**
    +1051                     * Parses the date string.
    +1052                     * @return the parsed date
    +1053                     * @throws IllegalArgumentException if the date string is invalid
    +1054                     */
    +1055                    public Date parse() {
    +1056                            return ICalDateFormatter.parse(value, timezone);
    +1057                    }
    +1058            }
    +1059    
    +1060            /**
    +1061             * Factory class for writing dates.
    +1062             */
    +1063            protected static class DateWriter {
    +1064                    private Date date;
    +1065                    private boolean hasTime = true;
    +1066                    private TimeZone timezone;
    +1067                    private boolean extended = false;
    +1068    
    +1069                    /**
    +1070                     * Creates a new date writer object.
    +1071                     * @param date the date to format
    +1072                     */
    +1073                    public DateWriter(Date date) {
    +1074                            this.date = date;
    +1075                    }
    +1076    
    +1077                    /**
    +1078                     * Sets whether to output the date's time component.
    +1079                     * @param hasTime true include the time, false if it's strictly a date
    +1080                     * (defaults to "true")
    +1081                     * @return this
    +1082                     */
    +1083                    public DateWriter time(boolean hasTime) {
    +1084                            this.hasTime = hasTime;
    +1085                            return this;
    +1086                    }
    +1087    
    +1088                    /**
    +1089                     * Sets the ID of the timezone to format the date as (TZID parameter
    +1090                     * value).
    +1091                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1092                     * "/" character), it will attempt to look up the timezone in Java's
    +1093                     * timezone registry and format the date according to that timezone. If
    +1094                     * the timezone is not found, the date will be formatted in UTC. If the
    +1095                     * ID is not global, it will be formatted according to the JVM's default
    +1096                     * timezone. If no timezone preference is specified, the date will be
    +1097                     * formatted as UTC.
    +1098                     * @return this
    +1099                     */
    +1100                    public DateWriter tzid(String timezoneId) {
    +1101                            if (timezoneId == null) {
    +1102                                    return tz(null);
    +1103                            }
    +1104    
    +1105                            if (timezoneId.contains("/")) {
    +1106                                    return tz(ICalDateFormatter.parseTimeZoneId(timezoneId));
    +1107                            }
    +1108    
    +1109                            //TODO format according to the associated VTIMEZONE component
    +1110                            return tz(TimeZone.getDefault());
    +1111                    }
    +1112    
    +1113                    /**
    +1114                     * Outputs the date in local time (without a timezone). If no timezone
    +1115                     * preference is specified, the date will be formatted as UTC.
    +1116                     * @param localTz true to use local time, false not to
    +1117                     * @return this
    +1118                     */
    +1119                    public DateWriter localTz(boolean localTz) {
    +1120                            return localTz ? tz(TimeZone.getDefault()) : this;
    +1121                    }
    +1122    
    +1123                    /**
    +1124                     * Convenience method that combines {@link #localTz(boolean)} and
    +1125                     * {@link #tzid(String)} into one method.
    +1126                     * @param localTz true to use local time, false not to
    +1127                     * @param timezoneId the timezone ID
    +1128                     * @return this
    +1129                     */
    +1130                    public DateWriter tz(boolean localTz, String timezoneId) {
    +1131                            return localTz ? localTz(true) : tzid(timezoneId);
    +1132                    }
    +1133    
    +1134                    /**
    +1135                     * Sets the timezone to format the date as. If no timezone preference is
    +1136                     * specified, the date will be formatted as UTC.
    +1137                     * @param timezone the timezone
    +1138                     * @return this
    +1139                     */
    +1140                    public DateWriter tz(TimeZone timezone) {
    +1141                            this.timezone = timezone;
    +1142                            return this;
    +1143                    }
    +1144    
    +1145                    /**
    +1146                     * Sets whether to use extended format or basic.
    +1147                     * @param extended true to use extended format, false to use basic
    +1148                     * (defaults to "false")
    +1149                     * @return this
    +1150                     */
    +1151                    public DateWriter extended(boolean extended) {
    +1152                            this.extended = extended;
    +1153                            return this;
    +1154                    }
    +1155    
    +1156                    /**
    +1157                     * Creates the date string.
    +1158                     * @return the date string
    +1159                     */
    +1160                    public String write() {
    +1161                            ISOFormat format;
    +1162                            TimeZone timezone = this.timezone;
    +1163                            if (hasTime) {
    +1164                                    if (timezone == null) {
    +1165                                            format = extended ? ISOFormat.UTC_TIME_EXTENDED : ISOFormat.UTC_TIME_BASIC;
    +1166                                    } else {
    +1167                                            format = extended ? ISOFormat.TIME_EXTENDED_WITHOUT_TZ : ISOFormat.TIME_BASIC_WITHOUT_TZ;
    +1168                                    }
    +1169                            } else {
    +1170                                    format = extended ? ISOFormat.DATE_EXTENDED : ISOFormat.DATE_BASIC;
    +1171                                    timezone = null;
    +1172                            }
    +1173    
    +1174                            return ICalDateFormatter.format(date, format, timezone);
    +1175                    }
    +1176            }
    +1177    
    +1178            /**
    +1179             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1180             * that the parser expected to find are missing from the property's XML
    +1181             * element.
    +1182             * @param dataTypes the expected data types (null for "unknown")
    +1183             */
    +1184            protected static CannotParseException missingXmlElements(ICalDataType... dataTypes) {
    +1185                    String[] elements = new String[dataTypes.length];
    +1186                    for (int i = 0; i < dataTypes.length; i++) {
    +1187                            ICalDataType dataType = dataTypes[i];
    +1188                            elements[i] = (dataType == null) ? "unknown" : dataType.getName().toLowerCase();
    +1189                    }
    +1190                    return missingXmlElements(elements);
    +1191            }
    +1192    
    +1193            /**
    +1194             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1195             * that the parser expected to find are missing from property's XML element.
    +1196             * @param elements the names of the expected XML elements.
    +1197             */
    +1198            protected static CannotParseException missingXmlElements(String... elements) {
    +1199                    String message;
    +1200    
    +1201                    switch (elements.length) {
    +1202                    case 0:
    +1203                            message = "Property value empty.";
    +1204                            break;
    +1205                    case 1:
    +1206                            message = "Property value empty (no <" + elements[0] + "> element found).";
    +1207                            break;
    +1208                    case 2:
    +1209                            message = "Property value empty (no <" + elements[0] + "> or <" + elements[1] + "> elements found).";
    +1210                            break;
    +1211                    default:
    +1212                            StringBuilder sb = new StringBuilder();
    +1213    
    +1214                            sb.append("Property value empty (no ");
    +1215                            join(Arrays.asList(elements).subList(0, elements.length - 1), ", ", sb, new JoinCallback<String>() {
    +1216                                    public void handle(StringBuilder sb, String value) {
    +1217                                            sb.append('<').append(value).append('>');
    +1218                                    }
    +1219                            });
    +1220                            sb.append(", or <").append(elements[elements.length - 1]).append("> elements found).");
    +1221    
    +1222                            message = sb.toString();
    +1223                            break;
    +1224                    }
    +1225    
    +1226                    return new CannotParseException(message);
    +1227            }
    +1228    
    +1229            /**
    +1230             * Represents the result of an unmarshal operation.
    +1231             * @author Michael Angstadt
    +1232             * @param <T> the unmarshalled property class
    +1233             */
    +1234            public static class Result<T extends ICalProperty> {
    +1235                    private final T property;
    +1236                    private final List<String> warnings;
    +1237    
    +1238                    /**
    +1239                     * Creates a new result.
    +1240                     * @param property the property object
    +1241                     * @param warnings the warnings
    +1242                     */
    +1243                    public Result(T property, List<String> warnings) {
    +1244                            this.property = property;
    +1245                            this.warnings = warnings;
    +1246                    }
    +1247    
    +1248                    /**
    +1249                     * Gets the warnings.
    +1250                     * @return the warnings
    +1251                     */
    +1252                    public List<String> getWarnings() {
    +1253                            return warnings;
    +1254                    }
    +1255    
    +1256                    /**
    +1257                     * Gets the property object.
    +1258                     * @return the property object
    +1259                     */
    +1260                    public T getProperty() {
    +1261                            return property;
    +1262                    }
    +1263            }
    +1264    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.SemiStructuredIterator.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.SemiStructuredIterator.html new file mode 100644 index 000000000..40770513e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.SemiStructuredIterator.html @@ -0,0 +1,1330 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import static biweekly.io.xml.XCalNamespaceContext.XCAL_NS;
    +004    import static biweekly.util.StringUtils.join;
    +005    
    +006    import java.util.ArrayList;
    +007    import java.util.Arrays;
    +008    import java.util.Collection;
    +009    import java.util.Date;
    +010    import java.util.Iterator;
    +011    import java.util.List;
    +012    import java.util.Map;
    +013    import java.util.TimeZone;
    +014    import java.util.regex.Pattern;
    +015    
    +016    import javax.xml.namespace.QName;
    +017    
    +018    import org.w3c.dom.Element;
    +019    
    +020    import biweekly.ICalDataType;
    +021    import biweekly.ICalendar;
    +022    import biweekly.io.CannotParseException;
    +023    import biweekly.io.SkipMeException;
    +024    import biweekly.io.json.JCalValue;
    +025    import biweekly.io.text.ICalRawWriter;
    +026    import biweekly.io.xml.XCalElement;
    +027    import biweekly.parameter.ICalParameters;
    +028    import biweekly.property.ICalProperty;
    +029    import biweekly.util.ICalDateFormatter;
    +030    import biweekly.util.ISOFormat;
    +031    import biweekly.util.ListMultimap;
    +032    import biweekly.util.StringUtils;
    +033    import biweekly.util.StringUtils.JoinCallback;
    +034    import biweekly.util.StringUtils.JoinMapCallback;
    +035    import biweekly.util.XmlUtils;
    +036    
    +037    /*
    +038     Copyright (c) 2013, Michael Angstadt
    +039     All rights reserved.
    +040    
    +041     Redistribution and use in source and binary forms, with or without
    +042     modification, are permitted provided that the following conditions are met: 
    +043    
    +044     1. Redistributions of source code must retain the above copyright notice, this
    +045     list of conditions and the following disclaimer. 
    +046     2. Redistributions in binary form must reproduce the above copyright notice,
    +047     this list of conditions and the following disclaimer in the documentation
    +048     and/or other materials provided with the distribution. 
    +049    
    +050     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +051     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +052     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +053     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +054     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +055     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +056     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +057     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +058     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +059     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +060     */
    +061    
    +062    /**
    +063     * Base class for iCalendar property marshallers.
    +064     * @param <T> the property class
    +065     * @author Michael Angstadt
    +066     */
    +067    public abstract class ICalPropertyMarshaller<T extends ICalProperty> {
    +068            protected final Class<T> clazz;
    +069            protected final String propertyName;
    +070            protected final ICalDataType defaultDataType;
    +071            protected final QName qname;
    +072    
    +073            /**
    +074             * Creates a new marshaller.
    +075             * @param clazz the property class
    +076             * @param propertyName the property name (e.g. "VERSION")
    +077             * @param defaultDataType the property's default data type (e.g. "text") or
    +078             * null if unknown
    +079             */
    +080            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType) {
    +081                    this(clazz, propertyName, defaultDataType, new QName(XCAL_NS, propertyName.toLowerCase()));
    +082            }
    +083    
    +084            /**
    +085             * Creates a new marshaller.
    +086             * @param clazz the property class
    +087             * @param propertyName the property name (e.g. "VERSION")
    +088             * @param defaultDataType the property's default data type (e.g. "text") or
    +089             * null if unknown
    +090             * @param qname the XML element name and namespace to use for xCal documents
    +091             * (by default, the XML element name is set to the lower-cased property
    +092             * name, and the element namespace is set to the xCal namespace)
    +093             */
    +094            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType, QName qname) {
    +095                    this.clazz = clazz;
    +096                    this.propertyName = propertyName;
    +097                    this.defaultDataType = defaultDataType;
    +098                    this.qname = qname;
    +099            }
    +100    
    +101            /**
    +102             * Gets the property class.
    +103             * @return the property class
    +104             */
    +105            public Class<T> getPropertyClass() {
    +106                    return clazz;
    +107            }
    +108    
    +109            /**
    +110             * Gets the property name.
    +111             * @return the property name (e.g. "VERSION")
    +112             */
    +113            public String getPropertyName() {
    +114                    return propertyName;
    +115            }
    +116    
    +117            /**
    +118             * Gets the property's default data type.
    +119             * @return the default data type (e.g. "text") or null if unknown
    +120             */
    +121            public ICalDataType getDefaultDataType() {
    +122                    return defaultDataType;
    +123            }
    +124    
    +125            /**
    +126             * Gets this property's local name and namespace for xCal documents.
    +127             * @return the XML local name and namespace
    +128             */
    +129            public QName getQName() {
    +130                    return qname;
    +131            }
    +132    
    +133            /**
    +134             * Sanitizes a property's parameters (called before the property is
    +135             * written). Note that a copy of the parameters is returned so that the
    +136             * property object does not get modified.
    +137             * @param property the property
    +138             * @return the sanitized parameters
    +139             */
    +140            public final ICalParameters prepareParameters(T property) {
    +141                    //make a copy because the property should not get modified when it is marshalled
    +142                    ICalParameters copy = new ICalParameters(property.getParameters());
    +143                    _prepareParameters(property, copy);
    +144                    return copy;
    +145            }
    +146    
    +147            /**
    +148             * Determines the data type of a property instance.
    +149             * @param property the property
    +150             * @return the data type or null if unknown
    +151             */
    +152            public final ICalDataType dataType(T property) {
    +153                    return _dataType(property);
    +154            }
    +155    
    +156            /**
    +157             * Marshals a property's value to a string.
    +158             * @param property the property
    +159             * @return the marshalled value
    +160             * @throws SkipMeException if the property should not be written to the data
    +161             * stream
    +162             */
    +163            public final String writeText(T property) {
    +164                    return _writeText(property);
    +165            }
    +166    
    +167            /**
    +168             * Marshals a property's value to an XML element (xCal).
    +169             * @param property the property
    +170             * @param element the property's XML element
    +171             * @throws SkipMeException if the property should not be written to the data
    +172             * stream
    +173             */
    +174            public final void writeXml(T property, Element element) {
    +175                    XCalElement xcalElement = new XCalElement(element);
    +176                    _writeXml(property, xcalElement);
    +177            }
    +178    
    +179            /**
    +180             * Marshals a property's value to a JSON data stream (jCal).
    +181             * @param property the property
    +182             * @return the marshalled value
    +183             * @throws SkipMeException if the property should not be written to the data
    +184             * stream
    +185             */
    +186            public final JCalValue writeJson(T property) {
    +187                    return _writeJson(property);
    +188            }
    +189    
    +190            /**
    +191             * Unmarshals a property from a plain-text iCalendar data stream.
    +192             * @param value the value as read off the wire
    +193             * @param dataType the data type of the property value. The property's VALUE
    +194             * parameter is used to determine the data type. If the property has no
    +195             * VALUE parameter, then this parameter will be set to the property's
    +196             * default datatype. Note that the VALUE parameter is removed from the
    +197             * property's parameter list after it has been read.
    +198             * @param parameters the parsed parameters
    +199             * @return the unmarshalled property and its warnings
    +200             * @throws CannotParseException if the marshaller could not parse the
    +201             * property's value
    +202             * @throws SkipMeException if the property should not be added to the final
    +203             * {@link ICalendar} object
    +204             */
    +205            public final Result<T> parseText(String value, ICalDataType dataType, ICalParameters parameters) {
    +206                    List<String> warnings = new ArrayList<String>(0);
    +207                    T property = _parseText(value, dataType, parameters, warnings);
    +208                    property.setParameters(parameters);
    +209                    return new Result<T>(property, warnings);
    +210            }
    +211    
    +212            /**
    +213             * Unmarshals a property's value from an XML document (xCal).
    +214             * @param element the property's XML element
    +215             * @param parameters the property's parameters
    +216             * @return the unmarshalled property and its warnings
    +217             * @throws CannotParseException if the marshaller could not parse the
    +218             * property's value
    +219             * @throws SkipMeException if the property should not be added to the final
    +220             * {@link ICalendar} object
    +221             */
    +222            public final Result<T> parseXml(Element element, ICalParameters parameters) {
    +223                    List<String> warnings = new ArrayList<String>(0);
    +224                    T property = _parseXml(new XCalElement(element), parameters, warnings);
    +225                    property.setParameters(parameters);
    +226                    return new Result<T>(property, warnings);
    +227            }
    +228    
    +229            /**
    +230             * Unmarshals a property's value from a JSON data stream (jCal).
    +231             * @param value the property's JSON value
    +232             * @param dataType the data type
    +233             * @param parameters the parsed parameters
    +234             * @return the unmarshalled property and its warnings
    +235             * @throws CannotParseException if the marshaller could not parse the
    +236             * property's value
    +237             * @throws SkipMeException if the property should not be added to the final
    +238             * {@link ICalendar} object
    +239             */
    +240            public final Result<T> parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters) {
    +241                    List<String> warnings = new ArrayList<String>(0);
    +242                    T property = _parseJson(value, dataType, parameters, warnings);
    +243                    property.setParameters(parameters);
    +244                    return new Result<T>(property, warnings);
    +245            }
    +246    
    +247            /**
    +248             * <p>
    +249             * Sanitizes a property's parameters before the property is written.
    +250             * </p>
    +251             * <p>
    +252             * This method should be overridden by child classes that wish to tweak the
    +253             * property's parameters before the property is written. The default
    +254             * implementation of this method does nothing.
    +255             * </p>
    +256             * @param property the property
    +257             * @param copy the list of parameters to make modifications to (it is a copy
    +258             * of the property's parameters)
    +259             */
    +260            protected void _prepareParameters(T property, ICalParameters copy) {
    +261                    //do nothing
    +262            }
    +263    
    +264            /**
    +265             * <p>
    +266             * Determines the data type of a property instance.
    +267             * </p>
    +268             * <p>
    +269             * This method should be overridden by child classes if a property's data
    +270             * type changes depending on its value. The default implementation of this
    +271             * method returns the property's default data type.
    +272             * </p>
    +273             * @param property the property
    +274             * @return the data type or null if unknown
    +275             */
    +276            protected ICalDataType _dataType(T property) {
    +277                    return defaultDataType;
    +278            }
    +279    
    +280            /**
    +281             * Marshals a property's value to a string.
    +282             * @param property the property
    +283             * @return the marshalled value
    +284             * @throws SkipMeException if the property should not be written to the data
    +285             * stream
    +286             */
    +287            protected abstract String _writeText(T property);
    +288    
    +289            /**
    +290             * <p>
    +291             * Marshals a property's value to an XML element (xCal).
    +292             * <p>
    +293             * <p>
    +294             * This method should be overridden by child classes that wish to support
    +295             * xCal. The default implementation of this method will append one child
    +296             * element to the property's XML element. The child element's name will be
    +297             * that of the property's data type (retrieved using the {@link #dataType}
    +298             * method), and the child element's text content will be set to the
    +299             * property's marshalled plain-text value (retrieved using the
    +300             * {@link #writeText} method).
    +301             * </p>
    +302             * @param property the property
    +303             * @param element the property's XML element
    +304             * @throws SkipMeException if the property should not be written to the data
    +305             * stream
    +306             */
    +307            protected void _writeXml(T property, XCalElement element) {
    +308                    String value = writeText(property);
    +309                    ICalDataType dataType = dataType(property);
    +310                    element.append(dataType, value);
    +311            }
    +312    
    +313            /**
    +314             * <p>
    +315             * Marshals a property's value to a JSON data stream (jCal).
    +316             * </p>
    +317             * <p>
    +318             * This method should be overridden by child classes that wish to support
    +319             * jCal. The default implementation of this method will create a jCard
    +320             * property that has a single JSON string value (generated by the
    +321             * {@link #writeText} method).
    +322             * </p>
    +323             * @param property the property
    +324             * @return the marshalled value
    +325             * @throws SkipMeException if the property should not be written to the data
    +326             * stream
    +327             */
    +328            protected JCalValue _writeJson(T property) {
    +329                    String value = writeText(property);
    +330                    return JCalValue.single(value);
    +331            }
    +332    
    +333            /**
    +334             * Unmarshals a property from a plain-text iCalendar data stream.
    +335             * @param value the value as read off the wire
    +336             * @param dataType the data type of the property value. The property's VALUE
    +337             * parameter is used to determine the data type. If the property has no
    +338             * VALUE parameter, then this parameter will be set to the property's
    +339             * default datatype. Note that the VALUE parameter is removed from the
    +340             * property's parameter list after it has been read.
    +341             * @param parameters the parsed parameters. These parameters will be
    +342             * assigned to the property object once this method returns. Therefore, do
    +343             * not assign any parameters to the property object itself whilst inside of
    +344             * this method, or else they will be overwritten.
    +345             * @param warnings allows the programmer to alert the user to any
    +346             * note-worthy (but non-critical) issues that occurred during the
    +347             * unmarshalling process
    +348             * @return the unmarshalled property object
    +349             * @throws CannotParseException if the marshaller could not parse the
    +350             * property's value
    +351             * @throws SkipMeException if the property should not be added to the final
    +352             * {@link ICalendar} object
    +353             */
    +354            protected abstract T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings);
    +355    
    +356            /**
    +357             * <p>
    +358             * Unmarshals a property from an XML document (xCal).
    +359             * </p>
    +360             * <p>
    +361             * This method should be overridden by child classes that wish to support
    +362             * xCal. The default implementation of this method will find the first child
    +363             * element with the xCal namespace. The element's name will be used as the
    +364             * property's data type and its text content will be passed into the
    +365             * {@link #_parseText} method. If no such child element is found, then the
    +366             * parent element's text content will be passed into {@link #_parseText} and
    +367             * the data type will be null.
    +368             * </p>
    +369             * @param element the property's XML element
    +370             * @param parameters the parsed parameters. These parameters will be
    +371             * assigned to the property object once this method returns. Therefore, do
    +372             * not assign any parameters to the property object itself whilst inside of
    +373             * this method, or else they will be overwritten.
    +374             * @param warnings allows the programmer to alert the user to any
    +375             * note-worthy (but non-critical) issues that occurred during the
    +376             * unmarshalling process
    +377             * @return the unmarshalled property object
    +378             * @throws CannotParseException if the marshaller could not parse the
    +379             * property's value
    +380             * @throws SkipMeException if the property should not be added to the final
    +381             * {@link ICalendar} object
    +382             */
    +383            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +384                    String value = null;
    +385                    ICalDataType dataType = null;
    +386                    Element rawElement = element.getElement();
    +387    
    +388                    //get the text content of the first child element with the xCard namespace
    +389                    List<Element> children = XmlUtils.toElementList(rawElement.getChildNodes());
    +390                    for (Element child : children) {
    +391                            if (!XCAL_NS.equals(child.getNamespaceURI())) {
    +392                                    continue;
    +393                            }
    +394    
    +395                            dataType = ICalDataType.get(child.getLocalName());
    +396                            value = child.getTextContent();
    +397                            break;
    +398                    }
    +399    
    +400                    if (dataType == null) {
    +401                            //get the text content of the property element
    +402                            value = rawElement.getTextContent();
    +403                    }
    +404    
    +405                    value = escape(value);
    +406                    return _parseText(value, dataType, parameters, warnings);
    +407            }
    +408    
    +409            /**
    +410             * /**
    +411             * <p>
    +412             * Unmarshals a property from a JSON data stream (jCal).
    +413             * </p>
    +414             * <p>
    +415             * This method should be overridden by child classes that wish to support
    +416             * jCal. The default implementation of this method will convert the jCal
    +417             * property value to a string and pass it into the {@link #_parseText}
    +418             * method.
    +419             * </p>
    +420             * 
    +421             * <hr>
    +422             * 
    +423             * <p>
    +424             * The following paragraphs describe the way in which this method's default
    +425             * implementation converts a jCal value to a string:
    +426             * </p>
    +427             * <p>
    +428             * If the jCal value consists of a single, non-array, non-object value, then
    +429             * the value is converted to a string. Special characters (backslashes,
    +430             * commas, and semicolons) are escaped in order to simulate what the value
    +431             * might look like in a plain-text iCalendar object.<br>
    +432             * <code>["x-foo", {}, "text", "the;value"] --&gt; "the\;value"</code><br>
    +433             * <code>["x-foo", {}, "text", 2] --&gt; "2"</code>
    +434             * </p>
    +435             * <p>
    +436             * If the jCal value consists of multiple, non-array, non-object values,
    +437             * then all the values are appended together in a single string, separated
    +438             * by commas. Special characters (backslashes, commas, and semicolons) are
    +439             * escaped for each value in order to prevent commas from being treated as
    +440             * delimiters, and to simulate what the value might look like in a
    +441             * plain-text iCalendar object.<br>
    +442             * <code>["x-foo", {}, "text", "one", "two,three"] --&gt;
    +443             * "one,two\,three"</code>
    +444             * </p>
    +445             * <p>
    +446             * If the jCal value is a single array, then this array is treated as a
    +447             * "structured value", and converted its plain-text representation. Special
    +448             * characters (backslashes, commas, and semicolons) are escaped for each
    +449             * value in order to prevent commas and semicolons from being treated as
    +450             * delimiters.<br>
    +451             * <code>["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]]
    +452             * --&gt; "one;two,three;four\;five"</code>
    +453             * </p>
    +454             * <p>
    +455             * If the jCal value starts with a JSON object, then the object is converted
    +456             * to a format identical to the one used in the RRULE and EXRULE properties.
    +457             * Special characters (backslashes, commas, semicolons, and equal signs) are
    +458             * escaped for each value in order to preserve the syntax of the string
    +459             * value.<br>
    +460             * <code>["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --&gt; "ONE=1;TWO=2,2.5"</code>
    +461             * </p>
    +462             * <p>
    +463             * For all other cases, behavior is undefined.
    +464             * </p>
    +465             * @param value the property's JSON value
    +466             * @param dataType the data type
    +467             * @param parameters the parsed parameters. These parameters will be
    +468             * assigned to the property object once this method returns. Therefore, do
    +469             * not assign any parameters to the property object itself whilst inside of
    +470             * this method, or else they will be overwritten.
    +471             * @param warnings allows the programmer to alert the user to any
    +472             * note-worthy (but non-critical) issues that occurred during the
    +473             * unmarshalling process
    +474             * @return the unmarshalled property object
    +475             * @throws CannotParseException if the marshaller could not parse the
    +476             * property's value
    +477             * @throws SkipMeException if the property should not be added to the final
    +478             * {@link ICalendar} object
    +479             */
    +480            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +481                    return _parseText(jcalValueToString(value), dataType, parameters, warnings);
    +482            }
    +483    
    +484            private String jcalValueToString(JCalValue value) {
    +485                    if (value.getValues().size() > 1) {
    +486                            List<String> multi = value.asMulti();
    +487                            if (!multi.isEmpty()) {
    +488                                    return list(multi);
    +489                            }
    +490                    }
    +491    
    +492                    if (!value.getValues().isEmpty() && value.getValues().get(0).getArray() != null) {
    +493                            List<List<String>> structured = value.asStructured();
    +494                            if (!structured.isEmpty()) {
    +495                                    return structured(structured.toArray());
    +496                            }
    +497                    }
    +498    
    +499                    if (value.getValues().get(0).getObject() != null) {
    +500                            ListMultimap<String, String> object = value.asObject();
    +501                            if (!object.isEmpty()) {
    +502                                    return object(object.getMap());
    +503                            }
    +504                    }
    +505    
    +506                    return escape(value.asSingle());
    +507            }
    +508    
    +509            /**
    +510             * Unescapes all special characters that are escaped with a backslash, as
    +511             * well as escaped newlines.
    +512             * @param text the text to unescape
    +513             * @return the unescaped text
    +514             */
    +515            protected static String unescape(String text) {
    +516                    if (text == null) {
    +517                            return text;
    +518                    }
    +519    
    +520                    StringBuilder sb = null;
    +521                    boolean escaped = false;
    +522                    for (int i = 0; i < text.length(); i++) {
    +523                            char ch = text.charAt(i);
    +524    
    +525                            if (escaped) {
    +526                                    if (sb == null) {
    +527                                            sb = new StringBuilder(text.length());
    +528                                            sb.append(text.substring(0, i - 1));
    +529                                    }
    +530    
    +531                                    escaped = false;
    +532    
    +533                                    if (ch == 'n' || ch == 'N') {
    +534                                            //newlines appear as "\n" or "\N" (see RFC 5545 p.46)
    +535                                            sb.append(StringUtils.NEWLINE);
    +536                                            continue;
    +537                                    }
    +538    
    +539                                    sb.append(ch);
    +540                                    continue;
    +541                            }
    +542    
    +543                            if (ch == '\\') {
    +544                                    escaped = true;
    +545                                    continue;
    +546                            }
    +547    
    +548                            if (sb != null) {
    +549                                    sb.append(ch);
    +550                            }
    +551                    }
    +552                    return (sb == null) ? text : sb.toString();
    +553            }
    +554    
    +555            /**
    +556             * <p>
    +557             * Escapes all special characters within a iCalendar value. These characters
    +558             * are:
    +559             * </p>
    +560             * <ul>
    +561             * <li>backslashes ({@code \})</li>
    +562             * <li>commas ({@code ,})</li>
    +563             * <li>semi-colons ({@code ;})</li>
    +564             * </ul>
    +565             * <p>
    +566             * Newlines are not escaped by this method. They are escaped when the
    +567             * iCalendar object is serialized (in the {@link ICalRawWriter} class).
    +568             * </p>
    +569             * @param text the text to escape
    +570             * @return the escaped text
    +571             */
    +572            protected static String escape(String text) {
    +573                    if (text == null) {
    +574                            return text;
    +575                    }
    +576    
    +577                    String chars = "\\,;";
    +578                    StringBuilder sb = null;
    +579                    for (int i = 0; i < text.length(); i++) {
    +580                            char ch = text.charAt(i);
    +581                            if (chars.indexOf(ch) >= 0) {
    +582                                    if (sb == null) {
    +583                                            sb = new StringBuilder(text.length());
    +584                                            sb.append(text.substring(0, i));
    +585                                    }
    +586                                    sb.append('\\');
    +587                            }
    +588    
    +589                            if (sb != null) {
    +590                                    sb.append(ch);
    +591                            }
    +592                    }
    +593                    return (sb == null) ? text : sb.toString();
    +594            }
    +595    
    +596            /**
    +597             * Splits a string by a delimiter, taking escaped characters into account.
    +598             * @param string the string to split (e.g. "one,two,three")
    +599             * @param delimiter the delimiter (e.g. ",")
    +600             * @return the factory object
    +601             */
    +602            protected static Splitter split(String string, String delimiter) {
    +603                    return new Splitter(string, delimiter);
    +604            }
    +605    
    +606            /**
    +607             * Factory class for splitting strings.
    +608             */
    +609            protected static class Splitter {
    +610                    private String string;
    +611                    private String delimiter;
    +612                    private boolean removeEmpties = false;
    +613                    private boolean unescape = false;
    +614                    private int limit = -1;
    +615    
    +616                    /**
    +617                     * Creates a new splitter object.
    +618                     * @param string the string to split (e.g. "one,two,three")
    +619                     * @param delimiter the delimiter (e.g. ",")
    +620                     */
    +621                    public Splitter(String string, String delimiter) {
    +622                            this.string = string;
    +623                            this.delimiter = delimiter;
    +624                    }
    +625    
    +626                    /**
    +627                     * Sets whether to remove empty elements.
    +628                     * @param removeEmpties true to remove empty elements, false not to
    +629                     * (default is false)
    +630                     * @return this
    +631                     */
    +632                    public Splitter removeEmpties(boolean removeEmpties) {
    +633                            this.removeEmpties = removeEmpties;
    +634                            return this;
    +635                    }
    +636    
    +637                    /**
    +638                     * Sets whether to unescape each split string.
    +639                     * @param unescape true to unescape, false not to (default is false)
    +640                     * @return this
    +641                     */
    +642                    public Splitter unescape(boolean unescape) {
    +643                            this.unescape = unescape;
    +644                            return this;
    +645                    }
    +646    
    +647                    /**
    +648                     * Sets the max number of split strings it should parse.
    +649                     * @param limit the max number of split strings
    +650                     * @return this
    +651                     */
    +652                    public Splitter limit(int limit) {
    +653                            this.limit = limit;
    +654                            return this;
    +655                    }
    +656    
    +657                    /**
    +658                     * Performs the split operation.
    +659                     * @return the split string
    +660                     */
    +661                    public List<String> split() {
    +662                            //from: http://stackoverflow.com/q/820172">http://stackoverflow.com/q/820172
    +663                            String split[] = string.split("\\s*(?<!\\\\)" + Pattern.quote(delimiter) + "\\s*", limit);
    +664    
    +665                            List<String> list = new ArrayList<String>(split.length);
    +666                            for (String s : split) {
    +667                                    if (s.length() == 0 && removeEmpties) {
    +668                                            continue;
    +669                                    }
    +670    
    +671                                    if (unescape) {
    +672                                            s = ICalPropertyMarshaller.unescape(s);
    +673                                    }
    +674    
    +675                                    list.add(s);
    +676                            }
    +677                            return list;
    +678                    }
    +679            }
    +680    
    +681            /**
    +682             * Parses a comma-separated list of values.
    +683             * @param value the string to parse (e.g. "one,two,th\,ree")
    +684             * @return the parsed values
    +685             */
    +686            protected static List<String> list(String value) {
    +687                    if (value.length() == 0) {
    +688                            return new ArrayList<String>(0);
    +689                    }
    +690                    return split(value, ",").unescape(true).split();
    +691            }
    +692    
    +693            /**
    +694             * Writes a comma-separated list of values.
    +695             * @param values the values to write
    +696             * @return the list
    +697             */
    +698            protected static String list(Object... values) {
    +699                    return list(Arrays.asList(values));
    +700            }
    +701    
    +702            /**
    +703             * Writes a comma-separated list of values.
    +704             * @param values the values to write
    +705             * @return the list
    +706             */
    +707            protected static <T> String list(Collection<T> values) {
    +708                    return list(values, new ListCallback<T>() {
    +709                            public String asString(T value) {
    +710                                    return value.toString();
    +711                            }
    +712                    });
    +713            }
    +714    
    +715            /**
    +716             * Writes a comma-separated list of values.
    +717             * @param values the values to write
    +718             * @param callback callback function used for converting each value to a
    +719             * string
    +720             * @return the list
    +721             */
    +722            protected static <T> String list(Collection<T> values, final ListCallback<T> callback) {
    +723                    return join(values, ",", new JoinCallback<T>() {
    +724                            public void handle(StringBuilder sb, T value) {
    +725                                    if (value == null) {
    +726                                            return;
    +727                                    }
    +728    
    +729                                    String valueStr = callback.asString(value);
    +730                                    sb.append(escape(valueStr));
    +731                            }
    +732                    });
    +733            }
    +734    
    +735            /**
    +736             * Callback function used in conjunction with the
    +737             * {@link ICalPropertyMarshaller#list(Collection, ListCallback) list} method
    +738             * @param <T> the value class
    +739             */
    +740            protected static interface ListCallback<T> {
    +741                    /**
    +742                     * Converts a value to a string.
    +743                     * @param value the value (null values are not passed to this method, so
    +744                     * this parameter will never be null)
    +745                     * @return the string
    +746                     */
    +747                    String asString(T value);
    +748            }
    +749    
    +750            /**
    +751             * Parses a list of values that are delimited by semicolons. Unlike
    +752             * structured value components, semi-structured components cannot be
    +753             * multi-valued.
    +754             * @param value the string to parse (e.g. "one;two;three")
    +755             * @return the parsed values
    +756             */
    +757            protected static SemiStructuredIterator semistructured(String value) {
    +758                    return semistructured(value, -1);
    +759            }
    +760    
    +761            /**
    +762             * Parses a list of values that are delimited by semicolons. Unlike
    +763             * structured value components, semi-structured components cannot be
    +764             * multi-valued.
    +765             * @param value the string to parse (e.g. "one;two;three")
    +766             * @param limit the max number of components to parse
    +767             * @return the parsed values
    +768             */
    +769            protected static SemiStructuredIterator semistructured(String value, int limit) {
    +770                    List<String> split = split(value, ";").unescape(true).limit(limit).split();
    +771                    return new SemiStructuredIterator(split.iterator());
    +772            }
    +773    
    +774            /**
    +775             * Parses a structured value.
    +776             * @param value the string to parse (e.g. "one;two,three;four")
    +777             * @return the parsed values
    +778             */
    +779            protected static StructuredIterator structured(String value) {
    +780                    List<String> split = split(value, ";").split();
    +781                    List<List<String>> components = new ArrayList<List<String>>(split.size());
    +782                    for (String s : split) {
    +783                            components.add(list(s));
    +784                    }
    +785                    return new StructuredIterator(components.iterator());
    +786            }
    +787    
    +788            /**
    +789             * Provides an iterator for a jCard structured value.
    +790             * @param value the jCard value
    +791             * @return the parsed values
    +792             */
    +793            protected static StructuredIterator structured(JCalValue value) {
    +794                    return new StructuredIterator(value.asStructured().iterator());
    +795            }
    +796    
    +797            /**
    +798             * <p>
    +799             * Writes a structured value.
    +800             * </p>
    +801             * <p>
    +802             * This method accepts a list of {@link Object} instances.
    +803             * {@link Collection} objects will be treated as multi-valued components.
    +804             * Null objects will be treated as empty components. All other objects will
    +805             * have their {@code toString()} method invoked to generate the string
    +806             * value.
    +807             * </p>
    +808             * @param values the values to write
    +809             * @return the structured value string
    +810             */
    +811            protected static String structured(Object... values) {
    +812                    return join(Arrays.asList(values), ";", new JoinCallback<Object>() {
    +813                            public void handle(StringBuilder sb, Object value) {
    +814                                    if (value == null) {
    +815                                            return;
    +816                                    }
    +817    
    +818                                    if (value instanceof Collection) {
    +819                                            Collection<?> list = (Collection<?>) value;
    +820                                            sb.append(list(list));
    +821                                            return;
    +822                                    }
    +823    
    +824                                    sb.append(escape(value.toString()));
    +825                            }
    +826                    });
    +827            }
    +828    
    +829            /**
    +830             * Iterates over the fields in a structured value.
    +831             */
    +832            protected static class StructuredIterator {
    +833                    private final Iterator<List<String>> it;
    +834    
    +835                    /**
    +836                     * Constructs a new structured iterator.
    +837                     * @param it the iterator to wrap
    +838                     */
    +839                    public StructuredIterator(Iterator<List<String>> it) {
    +840                            this.it = it;
    +841                    }
    +842    
    +843                    /**
    +844                     * Gets the first value of the next component.
    +845                     * @return the first value, null if the value is an empty string, or
    +846                     * null if there are no more components
    +847                     */
    +848                    public String nextString() {
    +849                            if (!hasNext()) {
    +850                                    return null;
    +851                            }
    +852    
    +853                            List<String> list = it.next();
    +854                            if (list.isEmpty()) {
    +855                                    return null;
    +856                            }
    +857    
    +858                            String value = list.get(0);
    +859                            return (value.length() == 0) ? null : value;
    +860                    }
    +861    
    +862                    /**
    +863                     * Gets the next component.
    +864                     * @return the next component, an empty list if the component is empty,
    +865                     * or an empty list of there are no more components
    +866                     */
    +867                    public List<String> nextComponent() {
    +868                            if (!hasNext()) {
    +869                                    return new ArrayList<String>(0); //the lists should be mutable so they can be directly assigned to the property object's fields
    +870                            }
    +871    
    +872                            List<String> list = it.next();
    +873                            if (list.size() == 1 && list.get(0).length() == 0) {
    +874                                    return new ArrayList<String>(0);
    +875                            }
    +876    
    +877                            return list;
    +878                    }
    +879    
    +880                    /**
    +881                     * Determines if there are any elements left in the value.
    +882                     * @return true if there are elements left, false if not
    +883                     */
    +884                    public boolean hasNext() {
    +885                            return it.hasNext();
    +886                    }
    +887            }
    +888    
    +889            /**
    +890             * Iterates over the fields in a semi-structured value (a structured value
    +891             * whose components cannot be multi-valued).
    +892             */
    +893            protected static class SemiStructuredIterator {
    +894                    private final Iterator<String> it;
    +895    
    +896                    /**
    +897                     * Constructs a new structured iterator.
    +898                     * @param it the iterator to wrap
    +899                     */
    +900                    public SemiStructuredIterator(Iterator<String> it) {
    +901                            this.it = it;
    +902                    }
    +903    
    +904                    /**
    +905                     * Gets the next value.
    +906                     * @return the next value, null if the value is an empty string, or null
    +907                     * if there are no more values
    +908                     */
    +909                    public String next() {
    +910                            if (!hasNext()) {
    +911                                    return null;
    +912                            }
    +913    
    +914                            String value = it.next();
    +915                            return (value.length() == 0) ? null : value;
    +916                    }
    +917    
    +918                    /**
    +919                     * Determines if there are any elements left in the value.
    +920                     * @return true if there are elements left, false if not
    +921                     */
    +922                    public boolean hasNext() {
    +923                            return it.hasNext();
    +924                    }
    +925            }
    +926    
    +927            /**
    +928             * Writes an object property value to a string.
    +929             * @param value the value
    +930             * @return the string
    +931             */
    +932            protected static <T> String object(Map<String, List<T>> value) {
    +933                    return join(value, ";", new JoinMapCallback<String, List<T>>() {
    +934                            public void handle(StringBuilder sb, String key, List<T> value) {
    +935                                    sb.append(key.toUpperCase()).append('=').append(list(value));
    +936                            }
    +937                    });
    +938            }
    +939    
    +940            /**
    +941             * Parses an object property value.
    +942             * @param value the value to parse
    +943             * @return the parsed value
    +944             */
    +945            protected static ListMultimap<String, String> object(String value) {
    +946                    ListMultimap<String, String> map = new ListMultimap<String, String>();
    +947    
    +948                    for (String component : split(value, ";").unescape(false).removeEmpties(true).split()) {
    +949                            String[] split = component.split("=", 2);
    +950    
    +951                            String name = unescape(split[0].toUpperCase());
    +952                            List<String> values = (split.length > 1) ? list(split[1]) : Arrays.asList("");
    +953    
    +954                            map.putAll(name, values);
    +955                    }
    +956    
    +957                    return map;
    +958            }
    +959    
    +960            /**
    +961             * Parses a date string.
    +962             * @param value the date string
    +963             * @return the factory object
    +964             */
    +965            protected static DateParser date(String value) {
    +966                    return new DateParser(value);
    +967            }
    +968    
    +969            /**
    +970             * Formats a {@link Date} object as a string.
    +971             * @param date the date
    +972             * @return the factory object
    +973             */
    +974            protected static DateWriter date(Date date) {
    +975                    return new DateWriter(date);
    +976            }
    +977    
    +978            /**
    +979             * Factory class for parsing dates.
    +980             */
    +981            protected static class DateParser {
    +982                    private String value;
    +983                    private TimeZone timezone;
    +984    
    +985                    /**
    +986                     * Creates a new date writer object.
    +987                     * @param value the date string to parse
    +988                     */
    +989                    public DateParser(String value) {
    +990                            this.value = value;
    +991                    }
    +992    
    +993                    /**
    +994                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +995                     * value). If the ID does not contain a "/" character, it will be
    +996                     * ignored.
    +997                     * @param timezoneId the timezone ID
    +998                     * @return this
    +999                     */
    +1000                    public DateParser tzid(String timezoneId) {
    +1001                            return tzid(timezoneId, null);
    +1002                    }
    +1003    
    +1004                    /**
    +1005                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +1006                     * value).
    +1007                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1008                     * "/" character), it will attempt to look up the timezone in Java's
    +1009                     * timezone registry and parse the date according to that timezone. If
    +1010                     * the timezone is not found, the date will be parsed according to the
    +1011                     * JVM's default timezone and a warning message will be added to the
    +1012                     * provided warnings list. If the ID is not global, it will be parsed
    +1013                     * according to the JVM's default timezone. Whichever timezone is chosen
    +1014                     * here, it will be ignored if the date string is in UTC time or
    +1015                     * contains an offset.
    +1016                     * @param warnings if the ID is global and is not recognized, a warning
    +1017                     * message will be added to this list
    +1018                     * @return this
    +1019                     */
    +1020                    public DateParser tzid(String timezoneId, List<String> warnings) {
    +1021                            if (timezoneId == null) {
    +1022                                    return tz(null);
    +1023                            }
    +1024    
    +1025                            if (timezoneId.contains("/")) {
    +1026                                    TimeZone timezone = ICalDateFormatter.parseTimeZoneId(timezoneId);
    +1027                                    if (timezone == null) {
    +1028                                            timezone = TimeZone.getDefault();
    +1029                                            if (warnings != null) {
    +1030                                                    warnings.add("Timezone ID not recognized, parsing with default timezone instead: " + timezoneId);
    +1031                                            }
    +1032                                    }
    +1033                                    return tz(timezone);
    +1034                            }
    +1035    
    +1036                            //TODO parse according to the associated VTIMEZONE component
    +1037                            return tz(TimeZone.getDefault());
    +1038                    }
    +1039    
    +1040                    /**
    +1041                     * Sets the timezone to parse the date as.
    +1042                     * @param timezone the timezone
    +1043                     * @return this
    +1044                     */
    +1045                    public DateParser tz(TimeZone timezone) {
    +1046                            this.timezone = timezone;
    +1047                            return this;
    +1048                    }
    +1049    
    +1050                    /**
    +1051                     * Parses the date string.
    +1052                     * @return the parsed date
    +1053                     * @throws IllegalArgumentException if the date string is invalid
    +1054                     */
    +1055                    public Date parse() {
    +1056                            return ICalDateFormatter.parse(value, timezone);
    +1057                    }
    +1058            }
    +1059    
    +1060            /**
    +1061             * Factory class for writing dates.
    +1062             */
    +1063            protected static class DateWriter {
    +1064                    private Date date;
    +1065                    private boolean hasTime = true;
    +1066                    private TimeZone timezone;
    +1067                    private boolean extended = false;
    +1068    
    +1069                    /**
    +1070                     * Creates a new date writer object.
    +1071                     * @param date the date to format
    +1072                     */
    +1073                    public DateWriter(Date date) {
    +1074                            this.date = date;
    +1075                    }
    +1076    
    +1077                    /**
    +1078                     * Sets whether to output the date's time component.
    +1079                     * @param hasTime true include the time, false if it's strictly a date
    +1080                     * (defaults to "true")
    +1081                     * @return this
    +1082                     */
    +1083                    public DateWriter time(boolean hasTime) {
    +1084                            this.hasTime = hasTime;
    +1085                            return this;
    +1086                    }
    +1087    
    +1088                    /**
    +1089                     * Sets the ID of the timezone to format the date as (TZID parameter
    +1090                     * value).
    +1091                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1092                     * "/" character), it will attempt to look up the timezone in Java's
    +1093                     * timezone registry and format the date according to that timezone. If
    +1094                     * the timezone is not found, the date will be formatted in UTC. If the
    +1095                     * ID is not global, it will be formatted according to the JVM's default
    +1096                     * timezone. If no timezone preference is specified, the date will be
    +1097                     * formatted as UTC.
    +1098                     * @return this
    +1099                     */
    +1100                    public DateWriter tzid(String timezoneId) {
    +1101                            if (timezoneId == null) {
    +1102                                    return tz(null);
    +1103                            }
    +1104    
    +1105                            if (timezoneId.contains("/")) {
    +1106                                    return tz(ICalDateFormatter.parseTimeZoneId(timezoneId));
    +1107                            }
    +1108    
    +1109                            //TODO format according to the associated VTIMEZONE component
    +1110                            return tz(TimeZone.getDefault());
    +1111                    }
    +1112    
    +1113                    /**
    +1114                     * Outputs the date in local time (without a timezone). If no timezone
    +1115                     * preference is specified, the date will be formatted as UTC.
    +1116                     * @param localTz true to use local time, false not to
    +1117                     * @return this
    +1118                     */
    +1119                    public DateWriter localTz(boolean localTz) {
    +1120                            return localTz ? tz(TimeZone.getDefault()) : this;
    +1121                    }
    +1122    
    +1123                    /**
    +1124                     * Convenience method that combines {@link #localTz(boolean)} and
    +1125                     * {@link #tzid(String)} into one method.
    +1126                     * @param localTz true to use local time, false not to
    +1127                     * @param timezoneId the timezone ID
    +1128                     * @return this
    +1129                     */
    +1130                    public DateWriter tz(boolean localTz, String timezoneId) {
    +1131                            return localTz ? localTz(true) : tzid(timezoneId);
    +1132                    }
    +1133    
    +1134                    /**
    +1135                     * Sets the timezone to format the date as. If no timezone preference is
    +1136                     * specified, the date will be formatted as UTC.
    +1137                     * @param timezone the timezone
    +1138                     * @return this
    +1139                     */
    +1140                    public DateWriter tz(TimeZone timezone) {
    +1141                            this.timezone = timezone;
    +1142                            return this;
    +1143                    }
    +1144    
    +1145                    /**
    +1146                     * Sets whether to use extended format or basic.
    +1147                     * @param extended true to use extended format, false to use basic
    +1148                     * (defaults to "false")
    +1149                     * @return this
    +1150                     */
    +1151                    public DateWriter extended(boolean extended) {
    +1152                            this.extended = extended;
    +1153                            return this;
    +1154                    }
    +1155    
    +1156                    /**
    +1157                     * Creates the date string.
    +1158                     * @return the date string
    +1159                     */
    +1160                    public String write() {
    +1161                            ISOFormat format;
    +1162                            TimeZone timezone = this.timezone;
    +1163                            if (hasTime) {
    +1164                                    if (timezone == null) {
    +1165                                            format = extended ? ISOFormat.UTC_TIME_EXTENDED : ISOFormat.UTC_TIME_BASIC;
    +1166                                    } else {
    +1167                                            format = extended ? ISOFormat.TIME_EXTENDED_WITHOUT_TZ : ISOFormat.TIME_BASIC_WITHOUT_TZ;
    +1168                                    }
    +1169                            } else {
    +1170                                    format = extended ? ISOFormat.DATE_EXTENDED : ISOFormat.DATE_BASIC;
    +1171                                    timezone = null;
    +1172                            }
    +1173    
    +1174                            return ICalDateFormatter.format(date, format, timezone);
    +1175                    }
    +1176            }
    +1177    
    +1178            /**
    +1179             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1180             * that the parser expected to find are missing from the property's XML
    +1181             * element.
    +1182             * @param dataTypes the expected data types (null for "unknown")
    +1183             */
    +1184            protected static CannotParseException missingXmlElements(ICalDataType... dataTypes) {
    +1185                    String[] elements = new String[dataTypes.length];
    +1186                    for (int i = 0; i < dataTypes.length; i++) {
    +1187                            ICalDataType dataType = dataTypes[i];
    +1188                            elements[i] = (dataType == null) ? "unknown" : dataType.getName().toLowerCase();
    +1189                    }
    +1190                    return missingXmlElements(elements);
    +1191            }
    +1192    
    +1193            /**
    +1194             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1195             * that the parser expected to find are missing from property's XML element.
    +1196             * @param elements the names of the expected XML elements.
    +1197             */
    +1198            protected static CannotParseException missingXmlElements(String... elements) {
    +1199                    String message;
    +1200    
    +1201                    switch (elements.length) {
    +1202                    case 0:
    +1203                            message = "Property value empty.";
    +1204                            break;
    +1205                    case 1:
    +1206                            message = "Property value empty (no <" + elements[0] + "> element found).";
    +1207                            break;
    +1208                    case 2:
    +1209                            message = "Property value empty (no <" + elements[0] + "> or <" + elements[1] + "> elements found).";
    +1210                            break;
    +1211                    default:
    +1212                            StringBuilder sb = new StringBuilder();
    +1213    
    +1214                            sb.append("Property value empty (no ");
    +1215                            join(Arrays.asList(elements).subList(0, elements.length - 1), ", ", sb, new JoinCallback<String>() {
    +1216                                    public void handle(StringBuilder sb, String value) {
    +1217                                            sb.append('<').append(value).append('>');
    +1218                                    }
    +1219                            });
    +1220                            sb.append(", or <").append(elements[elements.length - 1]).append("> elements found).");
    +1221    
    +1222                            message = sb.toString();
    +1223                            break;
    +1224                    }
    +1225    
    +1226                    return new CannotParseException(message);
    +1227            }
    +1228    
    +1229            /**
    +1230             * Represents the result of an unmarshal operation.
    +1231             * @author Michael Angstadt
    +1232             * @param <T> the unmarshalled property class
    +1233             */
    +1234            public static class Result<T extends ICalProperty> {
    +1235                    private final T property;
    +1236                    private final List<String> warnings;
    +1237    
    +1238                    /**
    +1239                     * Creates a new result.
    +1240                     * @param property the property object
    +1241                     * @param warnings the warnings
    +1242                     */
    +1243                    public Result(T property, List<String> warnings) {
    +1244                            this.property = property;
    +1245                            this.warnings = warnings;
    +1246                    }
    +1247    
    +1248                    /**
    +1249                     * Gets the warnings.
    +1250                     * @return the warnings
    +1251                     */
    +1252                    public List<String> getWarnings() {
    +1253                            return warnings;
    +1254                    }
    +1255    
    +1256                    /**
    +1257                     * Gets the property object.
    +1258                     * @return the property object
    +1259                     */
    +1260                    public T getProperty() {
    +1261                            return property;
    +1262                    }
    +1263            }
    +1264    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.Splitter.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.Splitter.html new file mode 100644 index 000000000..40770513e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.Splitter.html @@ -0,0 +1,1330 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import static biweekly.io.xml.XCalNamespaceContext.XCAL_NS;
    +004    import static biweekly.util.StringUtils.join;
    +005    
    +006    import java.util.ArrayList;
    +007    import java.util.Arrays;
    +008    import java.util.Collection;
    +009    import java.util.Date;
    +010    import java.util.Iterator;
    +011    import java.util.List;
    +012    import java.util.Map;
    +013    import java.util.TimeZone;
    +014    import java.util.regex.Pattern;
    +015    
    +016    import javax.xml.namespace.QName;
    +017    
    +018    import org.w3c.dom.Element;
    +019    
    +020    import biweekly.ICalDataType;
    +021    import biweekly.ICalendar;
    +022    import biweekly.io.CannotParseException;
    +023    import biweekly.io.SkipMeException;
    +024    import biweekly.io.json.JCalValue;
    +025    import biweekly.io.text.ICalRawWriter;
    +026    import biweekly.io.xml.XCalElement;
    +027    import biweekly.parameter.ICalParameters;
    +028    import biweekly.property.ICalProperty;
    +029    import biweekly.util.ICalDateFormatter;
    +030    import biweekly.util.ISOFormat;
    +031    import biweekly.util.ListMultimap;
    +032    import biweekly.util.StringUtils;
    +033    import biweekly.util.StringUtils.JoinCallback;
    +034    import biweekly.util.StringUtils.JoinMapCallback;
    +035    import biweekly.util.XmlUtils;
    +036    
    +037    /*
    +038     Copyright (c) 2013, Michael Angstadt
    +039     All rights reserved.
    +040    
    +041     Redistribution and use in source and binary forms, with or without
    +042     modification, are permitted provided that the following conditions are met: 
    +043    
    +044     1. Redistributions of source code must retain the above copyright notice, this
    +045     list of conditions and the following disclaimer. 
    +046     2. Redistributions in binary form must reproduce the above copyright notice,
    +047     this list of conditions and the following disclaimer in the documentation
    +048     and/or other materials provided with the distribution. 
    +049    
    +050     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +051     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +052     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +053     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +054     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +055     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +056     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +057     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +058     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +059     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +060     */
    +061    
    +062    /**
    +063     * Base class for iCalendar property marshallers.
    +064     * @param <T> the property class
    +065     * @author Michael Angstadt
    +066     */
    +067    public abstract class ICalPropertyMarshaller<T extends ICalProperty> {
    +068            protected final Class<T> clazz;
    +069            protected final String propertyName;
    +070            protected final ICalDataType defaultDataType;
    +071            protected final QName qname;
    +072    
    +073            /**
    +074             * Creates a new marshaller.
    +075             * @param clazz the property class
    +076             * @param propertyName the property name (e.g. "VERSION")
    +077             * @param defaultDataType the property's default data type (e.g. "text") or
    +078             * null if unknown
    +079             */
    +080            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType) {
    +081                    this(clazz, propertyName, defaultDataType, new QName(XCAL_NS, propertyName.toLowerCase()));
    +082            }
    +083    
    +084            /**
    +085             * Creates a new marshaller.
    +086             * @param clazz the property class
    +087             * @param propertyName the property name (e.g. "VERSION")
    +088             * @param defaultDataType the property's default data type (e.g. "text") or
    +089             * null if unknown
    +090             * @param qname the XML element name and namespace to use for xCal documents
    +091             * (by default, the XML element name is set to the lower-cased property
    +092             * name, and the element namespace is set to the xCal namespace)
    +093             */
    +094            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType, QName qname) {
    +095                    this.clazz = clazz;
    +096                    this.propertyName = propertyName;
    +097                    this.defaultDataType = defaultDataType;
    +098                    this.qname = qname;
    +099            }
    +100    
    +101            /**
    +102             * Gets the property class.
    +103             * @return the property class
    +104             */
    +105            public Class<T> getPropertyClass() {
    +106                    return clazz;
    +107            }
    +108    
    +109            /**
    +110             * Gets the property name.
    +111             * @return the property name (e.g. "VERSION")
    +112             */
    +113            public String getPropertyName() {
    +114                    return propertyName;
    +115            }
    +116    
    +117            /**
    +118             * Gets the property's default data type.
    +119             * @return the default data type (e.g. "text") or null if unknown
    +120             */
    +121            public ICalDataType getDefaultDataType() {
    +122                    return defaultDataType;
    +123            }
    +124    
    +125            /**
    +126             * Gets this property's local name and namespace for xCal documents.
    +127             * @return the XML local name and namespace
    +128             */
    +129            public QName getQName() {
    +130                    return qname;
    +131            }
    +132    
    +133            /**
    +134             * Sanitizes a property's parameters (called before the property is
    +135             * written). Note that a copy of the parameters is returned so that the
    +136             * property object does not get modified.
    +137             * @param property the property
    +138             * @return the sanitized parameters
    +139             */
    +140            public final ICalParameters prepareParameters(T property) {
    +141                    //make a copy because the property should not get modified when it is marshalled
    +142                    ICalParameters copy = new ICalParameters(property.getParameters());
    +143                    _prepareParameters(property, copy);
    +144                    return copy;
    +145            }
    +146    
    +147            /**
    +148             * Determines the data type of a property instance.
    +149             * @param property the property
    +150             * @return the data type or null if unknown
    +151             */
    +152            public final ICalDataType dataType(T property) {
    +153                    return _dataType(property);
    +154            }
    +155    
    +156            /**
    +157             * Marshals a property's value to a string.
    +158             * @param property the property
    +159             * @return the marshalled value
    +160             * @throws SkipMeException if the property should not be written to the data
    +161             * stream
    +162             */
    +163            public final String writeText(T property) {
    +164                    return _writeText(property);
    +165            }
    +166    
    +167            /**
    +168             * Marshals a property's value to an XML element (xCal).
    +169             * @param property the property
    +170             * @param element the property's XML element
    +171             * @throws SkipMeException if the property should not be written to the data
    +172             * stream
    +173             */
    +174            public final void writeXml(T property, Element element) {
    +175                    XCalElement xcalElement = new XCalElement(element);
    +176                    _writeXml(property, xcalElement);
    +177            }
    +178    
    +179            /**
    +180             * Marshals a property's value to a JSON data stream (jCal).
    +181             * @param property the property
    +182             * @return the marshalled value
    +183             * @throws SkipMeException if the property should not be written to the data
    +184             * stream
    +185             */
    +186            public final JCalValue writeJson(T property) {
    +187                    return _writeJson(property);
    +188            }
    +189    
    +190            /**
    +191             * Unmarshals a property from a plain-text iCalendar data stream.
    +192             * @param value the value as read off the wire
    +193             * @param dataType the data type of the property value. The property's VALUE
    +194             * parameter is used to determine the data type. If the property has no
    +195             * VALUE parameter, then this parameter will be set to the property's
    +196             * default datatype. Note that the VALUE parameter is removed from the
    +197             * property's parameter list after it has been read.
    +198             * @param parameters the parsed parameters
    +199             * @return the unmarshalled property and its warnings
    +200             * @throws CannotParseException if the marshaller could not parse the
    +201             * property's value
    +202             * @throws SkipMeException if the property should not be added to the final
    +203             * {@link ICalendar} object
    +204             */
    +205            public final Result<T> parseText(String value, ICalDataType dataType, ICalParameters parameters) {
    +206                    List<String> warnings = new ArrayList<String>(0);
    +207                    T property = _parseText(value, dataType, parameters, warnings);
    +208                    property.setParameters(parameters);
    +209                    return new Result<T>(property, warnings);
    +210            }
    +211    
    +212            /**
    +213             * Unmarshals a property's value from an XML document (xCal).
    +214             * @param element the property's XML element
    +215             * @param parameters the property's parameters
    +216             * @return the unmarshalled property and its warnings
    +217             * @throws CannotParseException if the marshaller could not parse the
    +218             * property's value
    +219             * @throws SkipMeException if the property should not be added to the final
    +220             * {@link ICalendar} object
    +221             */
    +222            public final Result<T> parseXml(Element element, ICalParameters parameters) {
    +223                    List<String> warnings = new ArrayList<String>(0);
    +224                    T property = _parseXml(new XCalElement(element), parameters, warnings);
    +225                    property.setParameters(parameters);
    +226                    return new Result<T>(property, warnings);
    +227            }
    +228    
    +229            /**
    +230             * Unmarshals a property's value from a JSON data stream (jCal).
    +231             * @param value the property's JSON value
    +232             * @param dataType the data type
    +233             * @param parameters the parsed parameters
    +234             * @return the unmarshalled property and its warnings
    +235             * @throws CannotParseException if the marshaller could not parse the
    +236             * property's value
    +237             * @throws SkipMeException if the property should not be added to the final
    +238             * {@link ICalendar} object
    +239             */
    +240            public final Result<T> parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters) {
    +241                    List<String> warnings = new ArrayList<String>(0);
    +242                    T property = _parseJson(value, dataType, parameters, warnings);
    +243                    property.setParameters(parameters);
    +244                    return new Result<T>(property, warnings);
    +245            }
    +246    
    +247            /**
    +248             * <p>
    +249             * Sanitizes a property's parameters before the property is written.
    +250             * </p>
    +251             * <p>
    +252             * This method should be overridden by child classes that wish to tweak the
    +253             * property's parameters before the property is written. The default
    +254             * implementation of this method does nothing.
    +255             * </p>
    +256             * @param property the property
    +257             * @param copy the list of parameters to make modifications to (it is a copy
    +258             * of the property's parameters)
    +259             */
    +260            protected void _prepareParameters(T property, ICalParameters copy) {
    +261                    //do nothing
    +262            }
    +263    
    +264            /**
    +265             * <p>
    +266             * Determines the data type of a property instance.
    +267             * </p>
    +268             * <p>
    +269             * This method should be overridden by child classes if a property's data
    +270             * type changes depending on its value. The default implementation of this
    +271             * method returns the property's default data type.
    +272             * </p>
    +273             * @param property the property
    +274             * @return the data type or null if unknown
    +275             */
    +276            protected ICalDataType _dataType(T property) {
    +277                    return defaultDataType;
    +278            }
    +279    
    +280            /**
    +281             * Marshals a property's value to a string.
    +282             * @param property the property
    +283             * @return the marshalled value
    +284             * @throws SkipMeException if the property should not be written to the data
    +285             * stream
    +286             */
    +287            protected abstract String _writeText(T property);
    +288    
    +289            /**
    +290             * <p>
    +291             * Marshals a property's value to an XML element (xCal).
    +292             * <p>
    +293             * <p>
    +294             * This method should be overridden by child classes that wish to support
    +295             * xCal. The default implementation of this method will append one child
    +296             * element to the property's XML element. The child element's name will be
    +297             * that of the property's data type (retrieved using the {@link #dataType}
    +298             * method), and the child element's text content will be set to the
    +299             * property's marshalled plain-text value (retrieved using the
    +300             * {@link #writeText} method).
    +301             * </p>
    +302             * @param property the property
    +303             * @param element the property's XML element
    +304             * @throws SkipMeException if the property should not be written to the data
    +305             * stream
    +306             */
    +307            protected void _writeXml(T property, XCalElement element) {
    +308                    String value = writeText(property);
    +309                    ICalDataType dataType = dataType(property);
    +310                    element.append(dataType, value);
    +311            }
    +312    
    +313            /**
    +314             * <p>
    +315             * Marshals a property's value to a JSON data stream (jCal).
    +316             * </p>
    +317             * <p>
    +318             * This method should be overridden by child classes that wish to support
    +319             * jCal. The default implementation of this method will create a jCard
    +320             * property that has a single JSON string value (generated by the
    +321             * {@link #writeText} method).
    +322             * </p>
    +323             * @param property the property
    +324             * @return the marshalled value
    +325             * @throws SkipMeException if the property should not be written to the data
    +326             * stream
    +327             */
    +328            protected JCalValue _writeJson(T property) {
    +329                    String value = writeText(property);
    +330                    return JCalValue.single(value);
    +331            }
    +332    
    +333            /**
    +334             * Unmarshals a property from a plain-text iCalendar data stream.
    +335             * @param value the value as read off the wire
    +336             * @param dataType the data type of the property value. The property's VALUE
    +337             * parameter is used to determine the data type. If the property has no
    +338             * VALUE parameter, then this parameter will be set to the property's
    +339             * default datatype. Note that the VALUE parameter is removed from the
    +340             * property's parameter list after it has been read.
    +341             * @param parameters the parsed parameters. These parameters will be
    +342             * assigned to the property object once this method returns. Therefore, do
    +343             * not assign any parameters to the property object itself whilst inside of
    +344             * this method, or else they will be overwritten.
    +345             * @param warnings allows the programmer to alert the user to any
    +346             * note-worthy (but non-critical) issues that occurred during the
    +347             * unmarshalling process
    +348             * @return the unmarshalled property object
    +349             * @throws CannotParseException if the marshaller could not parse the
    +350             * property's value
    +351             * @throws SkipMeException if the property should not be added to the final
    +352             * {@link ICalendar} object
    +353             */
    +354            protected abstract T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings);
    +355    
    +356            /**
    +357             * <p>
    +358             * Unmarshals a property from an XML document (xCal).
    +359             * </p>
    +360             * <p>
    +361             * This method should be overridden by child classes that wish to support
    +362             * xCal. The default implementation of this method will find the first child
    +363             * element with the xCal namespace. The element's name will be used as the
    +364             * property's data type and its text content will be passed into the
    +365             * {@link #_parseText} method. If no such child element is found, then the
    +366             * parent element's text content will be passed into {@link #_parseText} and
    +367             * the data type will be null.
    +368             * </p>
    +369             * @param element the property's XML element
    +370             * @param parameters the parsed parameters. These parameters will be
    +371             * assigned to the property object once this method returns. Therefore, do
    +372             * not assign any parameters to the property object itself whilst inside of
    +373             * this method, or else they will be overwritten.
    +374             * @param warnings allows the programmer to alert the user to any
    +375             * note-worthy (but non-critical) issues that occurred during the
    +376             * unmarshalling process
    +377             * @return the unmarshalled property object
    +378             * @throws CannotParseException if the marshaller could not parse the
    +379             * property's value
    +380             * @throws SkipMeException if the property should not be added to the final
    +381             * {@link ICalendar} object
    +382             */
    +383            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +384                    String value = null;
    +385                    ICalDataType dataType = null;
    +386                    Element rawElement = element.getElement();
    +387    
    +388                    //get the text content of the first child element with the xCard namespace
    +389                    List<Element> children = XmlUtils.toElementList(rawElement.getChildNodes());
    +390                    for (Element child : children) {
    +391                            if (!XCAL_NS.equals(child.getNamespaceURI())) {
    +392                                    continue;
    +393                            }
    +394    
    +395                            dataType = ICalDataType.get(child.getLocalName());
    +396                            value = child.getTextContent();
    +397                            break;
    +398                    }
    +399    
    +400                    if (dataType == null) {
    +401                            //get the text content of the property element
    +402                            value = rawElement.getTextContent();
    +403                    }
    +404    
    +405                    value = escape(value);
    +406                    return _parseText(value, dataType, parameters, warnings);
    +407            }
    +408    
    +409            /**
    +410             * /**
    +411             * <p>
    +412             * Unmarshals a property from a JSON data stream (jCal).
    +413             * </p>
    +414             * <p>
    +415             * This method should be overridden by child classes that wish to support
    +416             * jCal. The default implementation of this method will convert the jCal
    +417             * property value to a string and pass it into the {@link #_parseText}
    +418             * method.
    +419             * </p>
    +420             * 
    +421             * <hr>
    +422             * 
    +423             * <p>
    +424             * The following paragraphs describe the way in which this method's default
    +425             * implementation converts a jCal value to a string:
    +426             * </p>
    +427             * <p>
    +428             * If the jCal value consists of a single, non-array, non-object value, then
    +429             * the value is converted to a string. Special characters (backslashes,
    +430             * commas, and semicolons) are escaped in order to simulate what the value
    +431             * might look like in a plain-text iCalendar object.<br>
    +432             * <code>["x-foo", {}, "text", "the;value"] --&gt; "the\;value"</code><br>
    +433             * <code>["x-foo", {}, "text", 2] --&gt; "2"</code>
    +434             * </p>
    +435             * <p>
    +436             * If the jCal value consists of multiple, non-array, non-object values,
    +437             * then all the values are appended together in a single string, separated
    +438             * by commas. Special characters (backslashes, commas, and semicolons) are
    +439             * escaped for each value in order to prevent commas from being treated as
    +440             * delimiters, and to simulate what the value might look like in a
    +441             * plain-text iCalendar object.<br>
    +442             * <code>["x-foo", {}, "text", "one", "two,three"] --&gt;
    +443             * "one,two\,three"</code>
    +444             * </p>
    +445             * <p>
    +446             * If the jCal value is a single array, then this array is treated as a
    +447             * "structured value", and converted its plain-text representation. Special
    +448             * characters (backslashes, commas, and semicolons) are escaped for each
    +449             * value in order to prevent commas and semicolons from being treated as
    +450             * delimiters.<br>
    +451             * <code>["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]]
    +452             * --&gt; "one;two,three;four\;five"</code>
    +453             * </p>
    +454             * <p>
    +455             * If the jCal value starts with a JSON object, then the object is converted
    +456             * to a format identical to the one used in the RRULE and EXRULE properties.
    +457             * Special characters (backslashes, commas, semicolons, and equal signs) are
    +458             * escaped for each value in order to preserve the syntax of the string
    +459             * value.<br>
    +460             * <code>["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --&gt; "ONE=1;TWO=2,2.5"</code>
    +461             * </p>
    +462             * <p>
    +463             * For all other cases, behavior is undefined.
    +464             * </p>
    +465             * @param value the property's JSON value
    +466             * @param dataType the data type
    +467             * @param parameters the parsed parameters. These parameters will be
    +468             * assigned to the property object once this method returns. Therefore, do
    +469             * not assign any parameters to the property object itself whilst inside of
    +470             * this method, or else they will be overwritten.
    +471             * @param warnings allows the programmer to alert the user to any
    +472             * note-worthy (but non-critical) issues that occurred during the
    +473             * unmarshalling process
    +474             * @return the unmarshalled property object
    +475             * @throws CannotParseException if the marshaller could not parse the
    +476             * property's value
    +477             * @throws SkipMeException if the property should not be added to the final
    +478             * {@link ICalendar} object
    +479             */
    +480            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +481                    return _parseText(jcalValueToString(value), dataType, parameters, warnings);
    +482            }
    +483    
    +484            private String jcalValueToString(JCalValue value) {
    +485                    if (value.getValues().size() > 1) {
    +486                            List<String> multi = value.asMulti();
    +487                            if (!multi.isEmpty()) {
    +488                                    return list(multi);
    +489                            }
    +490                    }
    +491    
    +492                    if (!value.getValues().isEmpty() && value.getValues().get(0).getArray() != null) {
    +493                            List<List<String>> structured = value.asStructured();
    +494                            if (!structured.isEmpty()) {
    +495                                    return structured(structured.toArray());
    +496                            }
    +497                    }
    +498    
    +499                    if (value.getValues().get(0).getObject() != null) {
    +500                            ListMultimap<String, String> object = value.asObject();
    +501                            if (!object.isEmpty()) {
    +502                                    return object(object.getMap());
    +503                            }
    +504                    }
    +505    
    +506                    return escape(value.asSingle());
    +507            }
    +508    
    +509            /**
    +510             * Unescapes all special characters that are escaped with a backslash, as
    +511             * well as escaped newlines.
    +512             * @param text the text to unescape
    +513             * @return the unescaped text
    +514             */
    +515            protected static String unescape(String text) {
    +516                    if (text == null) {
    +517                            return text;
    +518                    }
    +519    
    +520                    StringBuilder sb = null;
    +521                    boolean escaped = false;
    +522                    for (int i = 0; i < text.length(); i++) {
    +523                            char ch = text.charAt(i);
    +524    
    +525                            if (escaped) {
    +526                                    if (sb == null) {
    +527                                            sb = new StringBuilder(text.length());
    +528                                            sb.append(text.substring(0, i - 1));
    +529                                    }
    +530    
    +531                                    escaped = false;
    +532    
    +533                                    if (ch == 'n' || ch == 'N') {
    +534                                            //newlines appear as "\n" or "\N" (see RFC 5545 p.46)
    +535                                            sb.append(StringUtils.NEWLINE);
    +536                                            continue;
    +537                                    }
    +538    
    +539                                    sb.append(ch);
    +540                                    continue;
    +541                            }
    +542    
    +543                            if (ch == '\\') {
    +544                                    escaped = true;
    +545                                    continue;
    +546                            }
    +547    
    +548                            if (sb != null) {
    +549                                    sb.append(ch);
    +550                            }
    +551                    }
    +552                    return (sb == null) ? text : sb.toString();
    +553            }
    +554    
    +555            /**
    +556             * <p>
    +557             * Escapes all special characters within a iCalendar value. These characters
    +558             * are:
    +559             * </p>
    +560             * <ul>
    +561             * <li>backslashes ({@code \})</li>
    +562             * <li>commas ({@code ,})</li>
    +563             * <li>semi-colons ({@code ;})</li>
    +564             * </ul>
    +565             * <p>
    +566             * Newlines are not escaped by this method. They are escaped when the
    +567             * iCalendar object is serialized (in the {@link ICalRawWriter} class).
    +568             * </p>
    +569             * @param text the text to escape
    +570             * @return the escaped text
    +571             */
    +572            protected static String escape(String text) {
    +573                    if (text == null) {
    +574                            return text;
    +575                    }
    +576    
    +577                    String chars = "\\,;";
    +578                    StringBuilder sb = null;
    +579                    for (int i = 0; i < text.length(); i++) {
    +580                            char ch = text.charAt(i);
    +581                            if (chars.indexOf(ch) >= 0) {
    +582                                    if (sb == null) {
    +583                                            sb = new StringBuilder(text.length());
    +584                                            sb.append(text.substring(0, i));
    +585                                    }
    +586                                    sb.append('\\');
    +587                            }
    +588    
    +589                            if (sb != null) {
    +590                                    sb.append(ch);
    +591                            }
    +592                    }
    +593                    return (sb == null) ? text : sb.toString();
    +594            }
    +595    
    +596            /**
    +597             * Splits a string by a delimiter, taking escaped characters into account.
    +598             * @param string the string to split (e.g. "one,two,three")
    +599             * @param delimiter the delimiter (e.g. ",")
    +600             * @return the factory object
    +601             */
    +602            protected static Splitter split(String string, String delimiter) {
    +603                    return new Splitter(string, delimiter);
    +604            }
    +605    
    +606            /**
    +607             * Factory class for splitting strings.
    +608             */
    +609            protected static class Splitter {
    +610                    private String string;
    +611                    private String delimiter;
    +612                    private boolean removeEmpties = false;
    +613                    private boolean unescape = false;
    +614                    private int limit = -1;
    +615    
    +616                    /**
    +617                     * Creates a new splitter object.
    +618                     * @param string the string to split (e.g. "one,two,three")
    +619                     * @param delimiter the delimiter (e.g. ",")
    +620                     */
    +621                    public Splitter(String string, String delimiter) {
    +622                            this.string = string;
    +623                            this.delimiter = delimiter;
    +624                    }
    +625    
    +626                    /**
    +627                     * Sets whether to remove empty elements.
    +628                     * @param removeEmpties true to remove empty elements, false not to
    +629                     * (default is false)
    +630                     * @return this
    +631                     */
    +632                    public Splitter removeEmpties(boolean removeEmpties) {
    +633                            this.removeEmpties = removeEmpties;
    +634                            return this;
    +635                    }
    +636    
    +637                    /**
    +638                     * Sets whether to unescape each split string.
    +639                     * @param unescape true to unescape, false not to (default is false)
    +640                     * @return this
    +641                     */
    +642                    public Splitter unescape(boolean unescape) {
    +643                            this.unescape = unescape;
    +644                            return this;
    +645                    }
    +646    
    +647                    /**
    +648                     * Sets the max number of split strings it should parse.
    +649                     * @param limit the max number of split strings
    +650                     * @return this
    +651                     */
    +652                    public Splitter limit(int limit) {
    +653                            this.limit = limit;
    +654                            return this;
    +655                    }
    +656    
    +657                    /**
    +658                     * Performs the split operation.
    +659                     * @return the split string
    +660                     */
    +661                    public List<String> split() {
    +662                            //from: http://stackoverflow.com/q/820172">http://stackoverflow.com/q/820172
    +663                            String split[] = string.split("\\s*(?<!\\\\)" + Pattern.quote(delimiter) + "\\s*", limit);
    +664    
    +665                            List<String> list = new ArrayList<String>(split.length);
    +666                            for (String s : split) {
    +667                                    if (s.length() == 0 && removeEmpties) {
    +668                                            continue;
    +669                                    }
    +670    
    +671                                    if (unescape) {
    +672                                            s = ICalPropertyMarshaller.unescape(s);
    +673                                    }
    +674    
    +675                                    list.add(s);
    +676                            }
    +677                            return list;
    +678                    }
    +679            }
    +680    
    +681            /**
    +682             * Parses a comma-separated list of values.
    +683             * @param value the string to parse (e.g. "one,two,th\,ree")
    +684             * @return the parsed values
    +685             */
    +686            protected static List<String> list(String value) {
    +687                    if (value.length() == 0) {
    +688                            return new ArrayList<String>(0);
    +689                    }
    +690                    return split(value, ",").unescape(true).split();
    +691            }
    +692    
    +693            /**
    +694             * Writes a comma-separated list of values.
    +695             * @param values the values to write
    +696             * @return the list
    +697             */
    +698            protected static String list(Object... values) {
    +699                    return list(Arrays.asList(values));
    +700            }
    +701    
    +702            /**
    +703             * Writes a comma-separated list of values.
    +704             * @param values the values to write
    +705             * @return the list
    +706             */
    +707            protected static <T> String list(Collection<T> values) {
    +708                    return list(values, new ListCallback<T>() {
    +709                            public String asString(T value) {
    +710                                    return value.toString();
    +711                            }
    +712                    });
    +713            }
    +714    
    +715            /**
    +716             * Writes a comma-separated list of values.
    +717             * @param values the values to write
    +718             * @param callback callback function used for converting each value to a
    +719             * string
    +720             * @return the list
    +721             */
    +722            protected static <T> String list(Collection<T> values, final ListCallback<T> callback) {
    +723                    return join(values, ",", new JoinCallback<T>() {
    +724                            public void handle(StringBuilder sb, T value) {
    +725                                    if (value == null) {
    +726                                            return;
    +727                                    }
    +728    
    +729                                    String valueStr = callback.asString(value);
    +730                                    sb.append(escape(valueStr));
    +731                            }
    +732                    });
    +733            }
    +734    
    +735            /**
    +736             * Callback function used in conjunction with the
    +737             * {@link ICalPropertyMarshaller#list(Collection, ListCallback) list} method
    +738             * @param <T> the value class
    +739             */
    +740            protected static interface ListCallback<T> {
    +741                    /**
    +742                     * Converts a value to a string.
    +743                     * @param value the value (null values are not passed to this method, so
    +744                     * this parameter will never be null)
    +745                     * @return the string
    +746                     */
    +747                    String asString(T value);
    +748            }
    +749    
    +750            /**
    +751             * Parses a list of values that are delimited by semicolons. Unlike
    +752             * structured value components, semi-structured components cannot be
    +753             * multi-valued.
    +754             * @param value the string to parse (e.g. "one;two;three")
    +755             * @return the parsed values
    +756             */
    +757            protected static SemiStructuredIterator semistructured(String value) {
    +758                    return semistructured(value, -1);
    +759            }
    +760    
    +761            /**
    +762             * Parses a list of values that are delimited by semicolons. Unlike
    +763             * structured value components, semi-structured components cannot be
    +764             * multi-valued.
    +765             * @param value the string to parse (e.g. "one;two;three")
    +766             * @param limit the max number of components to parse
    +767             * @return the parsed values
    +768             */
    +769            protected static SemiStructuredIterator semistructured(String value, int limit) {
    +770                    List<String> split = split(value, ";").unescape(true).limit(limit).split();
    +771                    return new SemiStructuredIterator(split.iterator());
    +772            }
    +773    
    +774            /**
    +775             * Parses a structured value.
    +776             * @param value the string to parse (e.g. "one;two,three;four")
    +777             * @return the parsed values
    +778             */
    +779            protected static StructuredIterator structured(String value) {
    +780                    List<String> split = split(value, ";").split();
    +781                    List<List<String>> components = new ArrayList<List<String>>(split.size());
    +782                    for (String s : split) {
    +783                            components.add(list(s));
    +784                    }
    +785                    return new StructuredIterator(components.iterator());
    +786            }
    +787    
    +788            /**
    +789             * Provides an iterator for a jCard structured value.
    +790             * @param value the jCard value
    +791             * @return the parsed values
    +792             */
    +793            protected static StructuredIterator structured(JCalValue value) {
    +794                    return new StructuredIterator(value.asStructured().iterator());
    +795            }
    +796    
    +797            /**
    +798             * <p>
    +799             * Writes a structured value.
    +800             * </p>
    +801             * <p>
    +802             * This method accepts a list of {@link Object} instances.
    +803             * {@link Collection} objects will be treated as multi-valued components.
    +804             * Null objects will be treated as empty components. All other objects will
    +805             * have their {@code toString()} method invoked to generate the string
    +806             * value.
    +807             * </p>
    +808             * @param values the values to write
    +809             * @return the structured value string
    +810             */
    +811            protected static String structured(Object... values) {
    +812                    return join(Arrays.asList(values), ";", new JoinCallback<Object>() {
    +813                            public void handle(StringBuilder sb, Object value) {
    +814                                    if (value == null) {
    +815                                            return;
    +816                                    }
    +817    
    +818                                    if (value instanceof Collection) {
    +819                                            Collection<?> list = (Collection<?>) value;
    +820                                            sb.append(list(list));
    +821                                            return;
    +822                                    }
    +823    
    +824                                    sb.append(escape(value.toString()));
    +825                            }
    +826                    });
    +827            }
    +828    
    +829            /**
    +830             * Iterates over the fields in a structured value.
    +831             */
    +832            protected static class StructuredIterator {
    +833                    private final Iterator<List<String>> it;
    +834    
    +835                    /**
    +836                     * Constructs a new structured iterator.
    +837                     * @param it the iterator to wrap
    +838                     */
    +839                    public StructuredIterator(Iterator<List<String>> it) {
    +840                            this.it = it;
    +841                    }
    +842    
    +843                    /**
    +844                     * Gets the first value of the next component.
    +845                     * @return the first value, null if the value is an empty string, or
    +846                     * null if there are no more components
    +847                     */
    +848                    public String nextString() {
    +849                            if (!hasNext()) {
    +850                                    return null;
    +851                            }
    +852    
    +853                            List<String> list = it.next();
    +854                            if (list.isEmpty()) {
    +855                                    return null;
    +856                            }
    +857    
    +858                            String value = list.get(0);
    +859                            return (value.length() == 0) ? null : value;
    +860                    }
    +861    
    +862                    /**
    +863                     * Gets the next component.
    +864                     * @return the next component, an empty list if the component is empty,
    +865                     * or an empty list of there are no more components
    +866                     */
    +867                    public List<String> nextComponent() {
    +868                            if (!hasNext()) {
    +869                                    return new ArrayList<String>(0); //the lists should be mutable so they can be directly assigned to the property object's fields
    +870                            }
    +871    
    +872                            List<String> list = it.next();
    +873                            if (list.size() == 1 && list.get(0).length() == 0) {
    +874                                    return new ArrayList<String>(0);
    +875                            }
    +876    
    +877                            return list;
    +878                    }
    +879    
    +880                    /**
    +881                     * Determines if there are any elements left in the value.
    +882                     * @return true if there are elements left, false if not
    +883                     */
    +884                    public boolean hasNext() {
    +885                            return it.hasNext();
    +886                    }
    +887            }
    +888    
    +889            /**
    +890             * Iterates over the fields in a semi-structured value (a structured value
    +891             * whose components cannot be multi-valued).
    +892             */
    +893            protected static class SemiStructuredIterator {
    +894                    private final Iterator<String> it;
    +895    
    +896                    /**
    +897                     * Constructs a new structured iterator.
    +898                     * @param it the iterator to wrap
    +899                     */
    +900                    public SemiStructuredIterator(Iterator<String> it) {
    +901                            this.it = it;
    +902                    }
    +903    
    +904                    /**
    +905                     * Gets the next value.
    +906                     * @return the next value, null if the value is an empty string, or null
    +907                     * if there are no more values
    +908                     */
    +909                    public String next() {
    +910                            if (!hasNext()) {
    +911                                    return null;
    +912                            }
    +913    
    +914                            String value = it.next();
    +915                            return (value.length() == 0) ? null : value;
    +916                    }
    +917    
    +918                    /**
    +919                     * Determines if there are any elements left in the value.
    +920                     * @return true if there are elements left, false if not
    +921                     */
    +922                    public boolean hasNext() {
    +923                            return it.hasNext();
    +924                    }
    +925            }
    +926    
    +927            /**
    +928             * Writes an object property value to a string.
    +929             * @param value the value
    +930             * @return the string
    +931             */
    +932            protected static <T> String object(Map<String, List<T>> value) {
    +933                    return join(value, ";", new JoinMapCallback<String, List<T>>() {
    +934                            public void handle(StringBuilder sb, String key, List<T> value) {
    +935                                    sb.append(key.toUpperCase()).append('=').append(list(value));
    +936                            }
    +937                    });
    +938            }
    +939    
    +940            /**
    +941             * Parses an object property value.
    +942             * @param value the value to parse
    +943             * @return the parsed value
    +944             */
    +945            protected static ListMultimap<String, String> object(String value) {
    +946                    ListMultimap<String, String> map = new ListMultimap<String, String>();
    +947    
    +948                    for (String component : split(value, ";").unescape(false).removeEmpties(true).split()) {
    +949                            String[] split = component.split("=", 2);
    +950    
    +951                            String name = unescape(split[0].toUpperCase());
    +952                            List<String> values = (split.length > 1) ? list(split[1]) : Arrays.asList("");
    +953    
    +954                            map.putAll(name, values);
    +955                    }
    +956    
    +957                    return map;
    +958            }
    +959    
    +960            /**
    +961             * Parses a date string.
    +962             * @param value the date string
    +963             * @return the factory object
    +964             */
    +965            protected static DateParser date(String value) {
    +966                    return new DateParser(value);
    +967            }
    +968    
    +969            /**
    +970             * Formats a {@link Date} object as a string.
    +971             * @param date the date
    +972             * @return the factory object
    +973             */
    +974            protected static DateWriter date(Date date) {
    +975                    return new DateWriter(date);
    +976            }
    +977    
    +978            /**
    +979             * Factory class for parsing dates.
    +980             */
    +981            protected static class DateParser {
    +982                    private String value;
    +983                    private TimeZone timezone;
    +984    
    +985                    /**
    +986                     * Creates a new date writer object.
    +987                     * @param value the date string to parse
    +988                     */
    +989                    public DateParser(String value) {
    +990                            this.value = value;
    +991                    }
    +992    
    +993                    /**
    +994                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +995                     * value). If the ID does not contain a "/" character, it will be
    +996                     * ignored.
    +997                     * @param timezoneId the timezone ID
    +998                     * @return this
    +999                     */
    +1000                    public DateParser tzid(String timezoneId) {
    +1001                            return tzid(timezoneId, null);
    +1002                    }
    +1003    
    +1004                    /**
    +1005                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +1006                     * value).
    +1007                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1008                     * "/" character), it will attempt to look up the timezone in Java's
    +1009                     * timezone registry and parse the date according to that timezone. If
    +1010                     * the timezone is not found, the date will be parsed according to the
    +1011                     * JVM's default timezone and a warning message will be added to the
    +1012                     * provided warnings list. If the ID is not global, it will be parsed
    +1013                     * according to the JVM's default timezone. Whichever timezone is chosen
    +1014                     * here, it will be ignored if the date string is in UTC time or
    +1015                     * contains an offset.
    +1016                     * @param warnings if the ID is global and is not recognized, a warning
    +1017                     * message will be added to this list
    +1018                     * @return this
    +1019                     */
    +1020                    public DateParser tzid(String timezoneId, List<String> warnings) {
    +1021                            if (timezoneId == null) {
    +1022                                    return tz(null);
    +1023                            }
    +1024    
    +1025                            if (timezoneId.contains("/")) {
    +1026                                    TimeZone timezone = ICalDateFormatter.parseTimeZoneId(timezoneId);
    +1027                                    if (timezone == null) {
    +1028                                            timezone = TimeZone.getDefault();
    +1029                                            if (warnings != null) {
    +1030                                                    warnings.add("Timezone ID not recognized, parsing with default timezone instead: " + timezoneId);
    +1031                                            }
    +1032                                    }
    +1033                                    return tz(timezone);
    +1034                            }
    +1035    
    +1036                            //TODO parse according to the associated VTIMEZONE component
    +1037                            return tz(TimeZone.getDefault());
    +1038                    }
    +1039    
    +1040                    /**
    +1041                     * Sets the timezone to parse the date as.
    +1042                     * @param timezone the timezone
    +1043                     * @return this
    +1044                     */
    +1045                    public DateParser tz(TimeZone timezone) {
    +1046                            this.timezone = timezone;
    +1047                            return this;
    +1048                    }
    +1049    
    +1050                    /**
    +1051                     * Parses the date string.
    +1052                     * @return the parsed date
    +1053                     * @throws IllegalArgumentException if the date string is invalid
    +1054                     */
    +1055                    public Date parse() {
    +1056                            return ICalDateFormatter.parse(value, timezone);
    +1057                    }
    +1058            }
    +1059    
    +1060            /**
    +1061             * Factory class for writing dates.
    +1062             */
    +1063            protected static class DateWriter {
    +1064                    private Date date;
    +1065                    private boolean hasTime = true;
    +1066                    private TimeZone timezone;
    +1067                    private boolean extended = false;
    +1068    
    +1069                    /**
    +1070                     * Creates a new date writer object.
    +1071                     * @param date the date to format
    +1072                     */
    +1073                    public DateWriter(Date date) {
    +1074                            this.date = date;
    +1075                    }
    +1076    
    +1077                    /**
    +1078                     * Sets whether to output the date's time component.
    +1079                     * @param hasTime true include the time, false if it's strictly a date
    +1080                     * (defaults to "true")
    +1081                     * @return this
    +1082                     */
    +1083                    public DateWriter time(boolean hasTime) {
    +1084                            this.hasTime = hasTime;
    +1085                            return this;
    +1086                    }
    +1087    
    +1088                    /**
    +1089                     * Sets the ID of the timezone to format the date as (TZID parameter
    +1090                     * value).
    +1091                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1092                     * "/" character), it will attempt to look up the timezone in Java's
    +1093                     * timezone registry and format the date according to that timezone. If
    +1094                     * the timezone is not found, the date will be formatted in UTC. If the
    +1095                     * ID is not global, it will be formatted according to the JVM's default
    +1096                     * timezone. If no timezone preference is specified, the date will be
    +1097                     * formatted as UTC.
    +1098                     * @return this
    +1099                     */
    +1100                    public DateWriter tzid(String timezoneId) {
    +1101                            if (timezoneId == null) {
    +1102                                    return tz(null);
    +1103                            }
    +1104    
    +1105                            if (timezoneId.contains("/")) {
    +1106                                    return tz(ICalDateFormatter.parseTimeZoneId(timezoneId));
    +1107                            }
    +1108    
    +1109                            //TODO format according to the associated VTIMEZONE component
    +1110                            return tz(TimeZone.getDefault());
    +1111                    }
    +1112    
    +1113                    /**
    +1114                     * Outputs the date in local time (without a timezone). If no timezone
    +1115                     * preference is specified, the date will be formatted as UTC.
    +1116                     * @param localTz true to use local time, false not to
    +1117                     * @return this
    +1118                     */
    +1119                    public DateWriter localTz(boolean localTz) {
    +1120                            return localTz ? tz(TimeZone.getDefault()) : this;
    +1121                    }
    +1122    
    +1123                    /**
    +1124                     * Convenience method that combines {@link #localTz(boolean)} and
    +1125                     * {@link #tzid(String)} into one method.
    +1126                     * @param localTz true to use local time, false not to
    +1127                     * @param timezoneId the timezone ID
    +1128                     * @return this
    +1129                     */
    +1130                    public DateWriter tz(boolean localTz, String timezoneId) {
    +1131                            return localTz ? localTz(true) : tzid(timezoneId);
    +1132                    }
    +1133    
    +1134                    /**
    +1135                     * Sets the timezone to format the date as. If no timezone preference is
    +1136                     * specified, the date will be formatted as UTC.
    +1137                     * @param timezone the timezone
    +1138                     * @return this
    +1139                     */
    +1140                    public DateWriter tz(TimeZone timezone) {
    +1141                            this.timezone = timezone;
    +1142                            return this;
    +1143                    }
    +1144    
    +1145                    /**
    +1146                     * Sets whether to use extended format or basic.
    +1147                     * @param extended true to use extended format, false to use basic
    +1148                     * (defaults to "false")
    +1149                     * @return this
    +1150                     */
    +1151                    public DateWriter extended(boolean extended) {
    +1152                            this.extended = extended;
    +1153                            return this;
    +1154                    }
    +1155    
    +1156                    /**
    +1157                     * Creates the date string.
    +1158                     * @return the date string
    +1159                     */
    +1160                    public String write() {
    +1161                            ISOFormat format;
    +1162                            TimeZone timezone = this.timezone;
    +1163                            if (hasTime) {
    +1164                                    if (timezone == null) {
    +1165                                            format = extended ? ISOFormat.UTC_TIME_EXTENDED : ISOFormat.UTC_TIME_BASIC;
    +1166                                    } else {
    +1167                                            format = extended ? ISOFormat.TIME_EXTENDED_WITHOUT_TZ : ISOFormat.TIME_BASIC_WITHOUT_TZ;
    +1168                                    }
    +1169                            } else {
    +1170                                    format = extended ? ISOFormat.DATE_EXTENDED : ISOFormat.DATE_BASIC;
    +1171                                    timezone = null;
    +1172                            }
    +1173    
    +1174                            return ICalDateFormatter.format(date, format, timezone);
    +1175                    }
    +1176            }
    +1177    
    +1178            /**
    +1179             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1180             * that the parser expected to find are missing from the property's XML
    +1181             * element.
    +1182             * @param dataTypes the expected data types (null for "unknown")
    +1183             */
    +1184            protected static CannotParseException missingXmlElements(ICalDataType... dataTypes) {
    +1185                    String[] elements = new String[dataTypes.length];
    +1186                    for (int i = 0; i < dataTypes.length; i++) {
    +1187                            ICalDataType dataType = dataTypes[i];
    +1188                            elements[i] = (dataType == null) ? "unknown" : dataType.getName().toLowerCase();
    +1189                    }
    +1190                    return missingXmlElements(elements);
    +1191            }
    +1192    
    +1193            /**
    +1194             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1195             * that the parser expected to find are missing from property's XML element.
    +1196             * @param elements the names of the expected XML elements.
    +1197             */
    +1198            protected static CannotParseException missingXmlElements(String... elements) {
    +1199                    String message;
    +1200    
    +1201                    switch (elements.length) {
    +1202                    case 0:
    +1203                            message = "Property value empty.";
    +1204                            break;
    +1205                    case 1:
    +1206                            message = "Property value empty (no <" + elements[0] + "> element found).";
    +1207                            break;
    +1208                    case 2:
    +1209                            message = "Property value empty (no <" + elements[0] + "> or <" + elements[1] + "> elements found).";
    +1210                            break;
    +1211                    default:
    +1212                            StringBuilder sb = new StringBuilder();
    +1213    
    +1214                            sb.append("Property value empty (no ");
    +1215                            join(Arrays.asList(elements).subList(0, elements.length - 1), ", ", sb, new JoinCallback<String>() {
    +1216                                    public void handle(StringBuilder sb, String value) {
    +1217                                            sb.append('<').append(value).append('>');
    +1218                                    }
    +1219                            });
    +1220                            sb.append(", or <").append(elements[elements.length - 1]).append("> elements found).");
    +1221    
    +1222                            message = sb.toString();
    +1223                            break;
    +1224                    }
    +1225    
    +1226                    return new CannotParseException(message);
    +1227            }
    +1228    
    +1229            /**
    +1230             * Represents the result of an unmarshal operation.
    +1231             * @author Michael Angstadt
    +1232             * @param <T> the unmarshalled property class
    +1233             */
    +1234            public static class Result<T extends ICalProperty> {
    +1235                    private final T property;
    +1236                    private final List<String> warnings;
    +1237    
    +1238                    /**
    +1239                     * Creates a new result.
    +1240                     * @param property the property object
    +1241                     * @param warnings the warnings
    +1242                     */
    +1243                    public Result(T property, List<String> warnings) {
    +1244                            this.property = property;
    +1245                            this.warnings = warnings;
    +1246                    }
    +1247    
    +1248                    /**
    +1249                     * Gets the warnings.
    +1250                     * @return the warnings
    +1251                     */
    +1252                    public List<String> getWarnings() {
    +1253                            return warnings;
    +1254                    }
    +1255    
    +1256                    /**
    +1257                     * Gets the property object.
    +1258                     * @return the property object
    +1259                     */
    +1260                    public T getProperty() {
    +1261                            return property;
    +1262                    }
    +1263            }
    +1264    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.StructuredIterator.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.StructuredIterator.html new file mode 100644 index 000000000..40770513e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.StructuredIterator.html @@ -0,0 +1,1330 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import static biweekly.io.xml.XCalNamespaceContext.XCAL_NS;
    +004    import static biweekly.util.StringUtils.join;
    +005    
    +006    import java.util.ArrayList;
    +007    import java.util.Arrays;
    +008    import java.util.Collection;
    +009    import java.util.Date;
    +010    import java.util.Iterator;
    +011    import java.util.List;
    +012    import java.util.Map;
    +013    import java.util.TimeZone;
    +014    import java.util.regex.Pattern;
    +015    
    +016    import javax.xml.namespace.QName;
    +017    
    +018    import org.w3c.dom.Element;
    +019    
    +020    import biweekly.ICalDataType;
    +021    import biweekly.ICalendar;
    +022    import biweekly.io.CannotParseException;
    +023    import biweekly.io.SkipMeException;
    +024    import biweekly.io.json.JCalValue;
    +025    import biweekly.io.text.ICalRawWriter;
    +026    import biweekly.io.xml.XCalElement;
    +027    import biweekly.parameter.ICalParameters;
    +028    import biweekly.property.ICalProperty;
    +029    import biweekly.util.ICalDateFormatter;
    +030    import biweekly.util.ISOFormat;
    +031    import biweekly.util.ListMultimap;
    +032    import biweekly.util.StringUtils;
    +033    import biweekly.util.StringUtils.JoinCallback;
    +034    import biweekly.util.StringUtils.JoinMapCallback;
    +035    import biweekly.util.XmlUtils;
    +036    
    +037    /*
    +038     Copyright (c) 2013, Michael Angstadt
    +039     All rights reserved.
    +040    
    +041     Redistribution and use in source and binary forms, with or without
    +042     modification, are permitted provided that the following conditions are met: 
    +043    
    +044     1. Redistributions of source code must retain the above copyright notice, this
    +045     list of conditions and the following disclaimer. 
    +046     2. Redistributions in binary form must reproduce the above copyright notice,
    +047     this list of conditions and the following disclaimer in the documentation
    +048     and/or other materials provided with the distribution. 
    +049    
    +050     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +051     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +052     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +053     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +054     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +055     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +056     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +057     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +058     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +059     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +060     */
    +061    
    +062    /**
    +063     * Base class for iCalendar property marshallers.
    +064     * @param <T> the property class
    +065     * @author Michael Angstadt
    +066     */
    +067    public abstract class ICalPropertyMarshaller<T extends ICalProperty> {
    +068            protected final Class<T> clazz;
    +069            protected final String propertyName;
    +070            protected final ICalDataType defaultDataType;
    +071            protected final QName qname;
    +072    
    +073            /**
    +074             * Creates a new marshaller.
    +075             * @param clazz the property class
    +076             * @param propertyName the property name (e.g. "VERSION")
    +077             * @param defaultDataType the property's default data type (e.g. "text") or
    +078             * null if unknown
    +079             */
    +080            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType) {
    +081                    this(clazz, propertyName, defaultDataType, new QName(XCAL_NS, propertyName.toLowerCase()));
    +082            }
    +083    
    +084            /**
    +085             * Creates a new marshaller.
    +086             * @param clazz the property class
    +087             * @param propertyName the property name (e.g. "VERSION")
    +088             * @param defaultDataType the property's default data type (e.g. "text") or
    +089             * null if unknown
    +090             * @param qname the XML element name and namespace to use for xCal documents
    +091             * (by default, the XML element name is set to the lower-cased property
    +092             * name, and the element namespace is set to the xCal namespace)
    +093             */
    +094            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType, QName qname) {
    +095                    this.clazz = clazz;
    +096                    this.propertyName = propertyName;
    +097                    this.defaultDataType = defaultDataType;
    +098                    this.qname = qname;
    +099            }
    +100    
    +101            /**
    +102             * Gets the property class.
    +103             * @return the property class
    +104             */
    +105            public Class<T> getPropertyClass() {
    +106                    return clazz;
    +107            }
    +108    
    +109            /**
    +110             * Gets the property name.
    +111             * @return the property name (e.g. "VERSION")
    +112             */
    +113            public String getPropertyName() {
    +114                    return propertyName;
    +115            }
    +116    
    +117            /**
    +118             * Gets the property's default data type.
    +119             * @return the default data type (e.g. "text") or null if unknown
    +120             */
    +121            public ICalDataType getDefaultDataType() {
    +122                    return defaultDataType;
    +123            }
    +124    
    +125            /**
    +126             * Gets this property's local name and namespace for xCal documents.
    +127             * @return the XML local name and namespace
    +128             */
    +129            public QName getQName() {
    +130                    return qname;
    +131            }
    +132    
    +133            /**
    +134             * Sanitizes a property's parameters (called before the property is
    +135             * written). Note that a copy of the parameters is returned so that the
    +136             * property object does not get modified.
    +137             * @param property the property
    +138             * @return the sanitized parameters
    +139             */
    +140            public final ICalParameters prepareParameters(T property) {
    +141                    //make a copy because the property should not get modified when it is marshalled
    +142                    ICalParameters copy = new ICalParameters(property.getParameters());
    +143                    _prepareParameters(property, copy);
    +144                    return copy;
    +145            }
    +146    
    +147            /**
    +148             * Determines the data type of a property instance.
    +149             * @param property the property
    +150             * @return the data type or null if unknown
    +151             */
    +152            public final ICalDataType dataType(T property) {
    +153                    return _dataType(property);
    +154            }
    +155    
    +156            /**
    +157             * Marshals a property's value to a string.
    +158             * @param property the property
    +159             * @return the marshalled value
    +160             * @throws SkipMeException if the property should not be written to the data
    +161             * stream
    +162             */
    +163            public final String writeText(T property) {
    +164                    return _writeText(property);
    +165            }
    +166    
    +167            /**
    +168             * Marshals a property's value to an XML element (xCal).
    +169             * @param property the property
    +170             * @param element the property's XML element
    +171             * @throws SkipMeException if the property should not be written to the data
    +172             * stream
    +173             */
    +174            public final void writeXml(T property, Element element) {
    +175                    XCalElement xcalElement = new XCalElement(element);
    +176                    _writeXml(property, xcalElement);
    +177            }
    +178    
    +179            /**
    +180             * Marshals a property's value to a JSON data stream (jCal).
    +181             * @param property the property
    +182             * @return the marshalled value
    +183             * @throws SkipMeException if the property should not be written to the data
    +184             * stream
    +185             */
    +186            public final JCalValue writeJson(T property) {
    +187                    return _writeJson(property);
    +188            }
    +189    
    +190            /**
    +191             * Unmarshals a property from a plain-text iCalendar data stream.
    +192             * @param value the value as read off the wire
    +193             * @param dataType the data type of the property value. The property's VALUE
    +194             * parameter is used to determine the data type. If the property has no
    +195             * VALUE parameter, then this parameter will be set to the property's
    +196             * default datatype. Note that the VALUE parameter is removed from the
    +197             * property's parameter list after it has been read.
    +198             * @param parameters the parsed parameters
    +199             * @return the unmarshalled property and its warnings
    +200             * @throws CannotParseException if the marshaller could not parse the
    +201             * property's value
    +202             * @throws SkipMeException if the property should not be added to the final
    +203             * {@link ICalendar} object
    +204             */
    +205            public final Result<T> parseText(String value, ICalDataType dataType, ICalParameters parameters) {
    +206                    List<String> warnings = new ArrayList<String>(0);
    +207                    T property = _parseText(value, dataType, parameters, warnings);
    +208                    property.setParameters(parameters);
    +209                    return new Result<T>(property, warnings);
    +210            }
    +211    
    +212            /**
    +213             * Unmarshals a property's value from an XML document (xCal).
    +214             * @param element the property's XML element
    +215             * @param parameters the property's parameters
    +216             * @return the unmarshalled property and its warnings
    +217             * @throws CannotParseException if the marshaller could not parse the
    +218             * property's value
    +219             * @throws SkipMeException if the property should not be added to the final
    +220             * {@link ICalendar} object
    +221             */
    +222            public final Result<T> parseXml(Element element, ICalParameters parameters) {
    +223                    List<String> warnings = new ArrayList<String>(0);
    +224                    T property = _parseXml(new XCalElement(element), parameters, warnings);
    +225                    property.setParameters(parameters);
    +226                    return new Result<T>(property, warnings);
    +227            }
    +228    
    +229            /**
    +230             * Unmarshals a property's value from a JSON data stream (jCal).
    +231             * @param value the property's JSON value
    +232             * @param dataType the data type
    +233             * @param parameters the parsed parameters
    +234             * @return the unmarshalled property and its warnings
    +235             * @throws CannotParseException if the marshaller could not parse the
    +236             * property's value
    +237             * @throws SkipMeException if the property should not be added to the final
    +238             * {@link ICalendar} object
    +239             */
    +240            public final Result<T> parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters) {
    +241                    List<String> warnings = new ArrayList<String>(0);
    +242                    T property = _parseJson(value, dataType, parameters, warnings);
    +243                    property.setParameters(parameters);
    +244                    return new Result<T>(property, warnings);
    +245            }
    +246    
    +247            /**
    +248             * <p>
    +249             * Sanitizes a property's parameters before the property is written.
    +250             * </p>
    +251             * <p>
    +252             * This method should be overridden by child classes that wish to tweak the
    +253             * property's parameters before the property is written. The default
    +254             * implementation of this method does nothing.
    +255             * </p>
    +256             * @param property the property
    +257             * @param copy the list of parameters to make modifications to (it is a copy
    +258             * of the property's parameters)
    +259             */
    +260            protected void _prepareParameters(T property, ICalParameters copy) {
    +261                    //do nothing
    +262            }
    +263    
    +264            /**
    +265             * <p>
    +266             * Determines the data type of a property instance.
    +267             * </p>
    +268             * <p>
    +269             * This method should be overridden by child classes if a property's data
    +270             * type changes depending on its value. The default implementation of this
    +271             * method returns the property's default data type.
    +272             * </p>
    +273             * @param property the property
    +274             * @return the data type or null if unknown
    +275             */
    +276            protected ICalDataType _dataType(T property) {
    +277                    return defaultDataType;
    +278            }
    +279    
    +280            /**
    +281             * Marshals a property's value to a string.
    +282             * @param property the property
    +283             * @return the marshalled value
    +284             * @throws SkipMeException if the property should not be written to the data
    +285             * stream
    +286             */
    +287            protected abstract String _writeText(T property);
    +288    
    +289            /**
    +290             * <p>
    +291             * Marshals a property's value to an XML element (xCal).
    +292             * <p>
    +293             * <p>
    +294             * This method should be overridden by child classes that wish to support
    +295             * xCal. The default implementation of this method will append one child
    +296             * element to the property's XML element. The child element's name will be
    +297             * that of the property's data type (retrieved using the {@link #dataType}
    +298             * method), and the child element's text content will be set to the
    +299             * property's marshalled plain-text value (retrieved using the
    +300             * {@link #writeText} method).
    +301             * </p>
    +302             * @param property the property
    +303             * @param element the property's XML element
    +304             * @throws SkipMeException if the property should not be written to the data
    +305             * stream
    +306             */
    +307            protected void _writeXml(T property, XCalElement element) {
    +308                    String value = writeText(property);
    +309                    ICalDataType dataType = dataType(property);
    +310                    element.append(dataType, value);
    +311            }
    +312    
    +313            /**
    +314             * <p>
    +315             * Marshals a property's value to a JSON data stream (jCal).
    +316             * </p>
    +317             * <p>
    +318             * This method should be overridden by child classes that wish to support
    +319             * jCal. The default implementation of this method will create a jCard
    +320             * property that has a single JSON string value (generated by the
    +321             * {@link #writeText} method).
    +322             * </p>
    +323             * @param property the property
    +324             * @return the marshalled value
    +325             * @throws SkipMeException if the property should not be written to the data
    +326             * stream
    +327             */
    +328            protected JCalValue _writeJson(T property) {
    +329                    String value = writeText(property);
    +330                    return JCalValue.single(value);
    +331            }
    +332    
    +333            /**
    +334             * Unmarshals a property from a plain-text iCalendar data stream.
    +335             * @param value the value as read off the wire
    +336             * @param dataType the data type of the property value. The property's VALUE
    +337             * parameter is used to determine the data type. If the property has no
    +338             * VALUE parameter, then this parameter will be set to the property's
    +339             * default datatype. Note that the VALUE parameter is removed from the
    +340             * property's parameter list after it has been read.
    +341             * @param parameters the parsed parameters. These parameters will be
    +342             * assigned to the property object once this method returns. Therefore, do
    +343             * not assign any parameters to the property object itself whilst inside of
    +344             * this method, or else they will be overwritten.
    +345             * @param warnings allows the programmer to alert the user to any
    +346             * note-worthy (but non-critical) issues that occurred during the
    +347             * unmarshalling process
    +348             * @return the unmarshalled property object
    +349             * @throws CannotParseException if the marshaller could not parse the
    +350             * property's value
    +351             * @throws SkipMeException if the property should not be added to the final
    +352             * {@link ICalendar} object
    +353             */
    +354            protected abstract T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings);
    +355    
    +356            /**
    +357             * <p>
    +358             * Unmarshals a property from an XML document (xCal).
    +359             * </p>
    +360             * <p>
    +361             * This method should be overridden by child classes that wish to support
    +362             * xCal. The default implementation of this method will find the first child
    +363             * element with the xCal namespace. The element's name will be used as the
    +364             * property's data type and its text content will be passed into the
    +365             * {@link #_parseText} method. If no such child element is found, then the
    +366             * parent element's text content will be passed into {@link #_parseText} and
    +367             * the data type will be null.
    +368             * </p>
    +369             * @param element the property's XML element
    +370             * @param parameters the parsed parameters. These parameters will be
    +371             * assigned to the property object once this method returns. Therefore, do
    +372             * not assign any parameters to the property object itself whilst inside of
    +373             * this method, or else they will be overwritten.
    +374             * @param warnings allows the programmer to alert the user to any
    +375             * note-worthy (but non-critical) issues that occurred during the
    +376             * unmarshalling process
    +377             * @return the unmarshalled property object
    +378             * @throws CannotParseException if the marshaller could not parse the
    +379             * property's value
    +380             * @throws SkipMeException if the property should not be added to the final
    +381             * {@link ICalendar} object
    +382             */
    +383            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +384                    String value = null;
    +385                    ICalDataType dataType = null;
    +386                    Element rawElement = element.getElement();
    +387    
    +388                    //get the text content of the first child element with the xCard namespace
    +389                    List<Element> children = XmlUtils.toElementList(rawElement.getChildNodes());
    +390                    for (Element child : children) {
    +391                            if (!XCAL_NS.equals(child.getNamespaceURI())) {
    +392                                    continue;
    +393                            }
    +394    
    +395                            dataType = ICalDataType.get(child.getLocalName());
    +396                            value = child.getTextContent();
    +397                            break;
    +398                    }
    +399    
    +400                    if (dataType == null) {
    +401                            //get the text content of the property element
    +402                            value = rawElement.getTextContent();
    +403                    }
    +404    
    +405                    value = escape(value);
    +406                    return _parseText(value, dataType, parameters, warnings);
    +407            }
    +408    
    +409            /**
    +410             * /**
    +411             * <p>
    +412             * Unmarshals a property from a JSON data stream (jCal).
    +413             * </p>
    +414             * <p>
    +415             * This method should be overridden by child classes that wish to support
    +416             * jCal. The default implementation of this method will convert the jCal
    +417             * property value to a string and pass it into the {@link #_parseText}
    +418             * method.
    +419             * </p>
    +420             * 
    +421             * <hr>
    +422             * 
    +423             * <p>
    +424             * The following paragraphs describe the way in which this method's default
    +425             * implementation converts a jCal value to a string:
    +426             * </p>
    +427             * <p>
    +428             * If the jCal value consists of a single, non-array, non-object value, then
    +429             * the value is converted to a string. Special characters (backslashes,
    +430             * commas, and semicolons) are escaped in order to simulate what the value
    +431             * might look like in a plain-text iCalendar object.<br>
    +432             * <code>["x-foo", {}, "text", "the;value"] --&gt; "the\;value"</code><br>
    +433             * <code>["x-foo", {}, "text", 2] --&gt; "2"</code>
    +434             * </p>
    +435             * <p>
    +436             * If the jCal value consists of multiple, non-array, non-object values,
    +437             * then all the values are appended together in a single string, separated
    +438             * by commas. Special characters (backslashes, commas, and semicolons) are
    +439             * escaped for each value in order to prevent commas from being treated as
    +440             * delimiters, and to simulate what the value might look like in a
    +441             * plain-text iCalendar object.<br>
    +442             * <code>["x-foo", {}, "text", "one", "two,three"] --&gt;
    +443             * "one,two\,three"</code>
    +444             * </p>
    +445             * <p>
    +446             * If the jCal value is a single array, then this array is treated as a
    +447             * "structured value", and converted its plain-text representation. Special
    +448             * characters (backslashes, commas, and semicolons) are escaped for each
    +449             * value in order to prevent commas and semicolons from being treated as
    +450             * delimiters.<br>
    +451             * <code>["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]]
    +452             * --&gt; "one;two,three;four\;five"</code>
    +453             * </p>
    +454             * <p>
    +455             * If the jCal value starts with a JSON object, then the object is converted
    +456             * to a format identical to the one used in the RRULE and EXRULE properties.
    +457             * Special characters (backslashes, commas, semicolons, and equal signs) are
    +458             * escaped for each value in order to preserve the syntax of the string
    +459             * value.<br>
    +460             * <code>["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --&gt; "ONE=1;TWO=2,2.5"</code>
    +461             * </p>
    +462             * <p>
    +463             * For all other cases, behavior is undefined.
    +464             * </p>
    +465             * @param value the property's JSON value
    +466             * @param dataType the data type
    +467             * @param parameters the parsed parameters. These parameters will be
    +468             * assigned to the property object once this method returns. Therefore, do
    +469             * not assign any parameters to the property object itself whilst inside of
    +470             * this method, or else they will be overwritten.
    +471             * @param warnings allows the programmer to alert the user to any
    +472             * note-worthy (but non-critical) issues that occurred during the
    +473             * unmarshalling process
    +474             * @return the unmarshalled property object
    +475             * @throws CannotParseException if the marshaller could not parse the
    +476             * property's value
    +477             * @throws SkipMeException if the property should not be added to the final
    +478             * {@link ICalendar} object
    +479             */
    +480            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +481                    return _parseText(jcalValueToString(value), dataType, parameters, warnings);
    +482            }
    +483    
    +484            private String jcalValueToString(JCalValue value) {
    +485                    if (value.getValues().size() > 1) {
    +486                            List<String> multi = value.asMulti();
    +487                            if (!multi.isEmpty()) {
    +488                                    return list(multi);
    +489                            }
    +490                    }
    +491    
    +492                    if (!value.getValues().isEmpty() && value.getValues().get(0).getArray() != null) {
    +493                            List<List<String>> structured = value.asStructured();
    +494                            if (!structured.isEmpty()) {
    +495                                    return structured(structured.toArray());
    +496                            }
    +497                    }
    +498    
    +499                    if (value.getValues().get(0).getObject() != null) {
    +500                            ListMultimap<String, String> object = value.asObject();
    +501                            if (!object.isEmpty()) {
    +502                                    return object(object.getMap());
    +503                            }
    +504                    }
    +505    
    +506                    return escape(value.asSingle());
    +507            }
    +508    
    +509            /**
    +510             * Unescapes all special characters that are escaped with a backslash, as
    +511             * well as escaped newlines.
    +512             * @param text the text to unescape
    +513             * @return the unescaped text
    +514             */
    +515            protected static String unescape(String text) {
    +516                    if (text == null) {
    +517                            return text;
    +518                    }
    +519    
    +520                    StringBuilder sb = null;
    +521                    boolean escaped = false;
    +522                    for (int i = 0; i < text.length(); i++) {
    +523                            char ch = text.charAt(i);
    +524    
    +525                            if (escaped) {
    +526                                    if (sb == null) {
    +527                                            sb = new StringBuilder(text.length());
    +528                                            sb.append(text.substring(0, i - 1));
    +529                                    }
    +530    
    +531                                    escaped = false;
    +532    
    +533                                    if (ch == 'n' || ch == 'N') {
    +534                                            //newlines appear as "\n" or "\N" (see RFC 5545 p.46)
    +535                                            sb.append(StringUtils.NEWLINE);
    +536                                            continue;
    +537                                    }
    +538    
    +539                                    sb.append(ch);
    +540                                    continue;
    +541                            }
    +542    
    +543                            if (ch == '\\') {
    +544                                    escaped = true;
    +545                                    continue;
    +546                            }
    +547    
    +548                            if (sb != null) {
    +549                                    sb.append(ch);
    +550                            }
    +551                    }
    +552                    return (sb == null) ? text : sb.toString();
    +553            }
    +554    
    +555            /**
    +556             * <p>
    +557             * Escapes all special characters within a iCalendar value. These characters
    +558             * are:
    +559             * </p>
    +560             * <ul>
    +561             * <li>backslashes ({@code \})</li>
    +562             * <li>commas ({@code ,})</li>
    +563             * <li>semi-colons ({@code ;})</li>
    +564             * </ul>
    +565             * <p>
    +566             * Newlines are not escaped by this method. They are escaped when the
    +567             * iCalendar object is serialized (in the {@link ICalRawWriter} class).
    +568             * </p>
    +569             * @param text the text to escape
    +570             * @return the escaped text
    +571             */
    +572            protected static String escape(String text) {
    +573                    if (text == null) {
    +574                            return text;
    +575                    }
    +576    
    +577                    String chars = "\\,;";
    +578                    StringBuilder sb = null;
    +579                    for (int i = 0; i < text.length(); i++) {
    +580                            char ch = text.charAt(i);
    +581                            if (chars.indexOf(ch) >= 0) {
    +582                                    if (sb == null) {
    +583                                            sb = new StringBuilder(text.length());
    +584                                            sb.append(text.substring(0, i));
    +585                                    }
    +586                                    sb.append('\\');
    +587                            }
    +588    
    +589                            if (sb != null) {
    +590                                    sb.append(ch);
    +591                            }
    +592                    }
    +593                    return (sb == null) ? text : sb.toString();
    +594            }
    +595    
    +596            /**
    +597             * Splits a string by a delimiter, taking escaped characters into account.
    +598             * @param string the string to split (e.g. "one,two,three")
    +599             * @param delimiter the delimiter (e.g. ",")
    +600             * @return the factory object
    +601             */
    +602            protected static Splitter split(String string, String delimiter) {
    +603                    return new Splitter(string, delimiter);
    +604            }
    +605    
    +606            /**
    +607             * Factory class for splitting strings.
    +608             */
    +609            protected static class Splitter {
    +610                    private String string;
    +611                    private String delimiter;
    +612                    private boolean removeEmpties = false;
    +613                    private boolean unescape = false;
    +614                    private int limit = -1;
    +615    
    +616                    /**
    +617                     * Creates a new splitter object.
    +618                     * @param string the string to split (e.g. "one,two,three")
    +619                     * @param delimiter the delimiter (e.g. ",")
    +620                     */
    +621                    public Splitter(String string, String delimiter) {
    +622                            this.string = string;
    +623                            this.delimiter = delimiter;
    +624                    }
    +625    
    +626                    /**
    +627                     * Sets whether to remove empty elements.
    +628                     * @param removeEmpties true to remove empty elements, false not to
    +629                     * (default is false)
    +630                     * @return this
    +631                     */
    +632                    public Splitter removeEmpties(boolean removeEmpties) {
    +633                            this.removeEmpties = removeEmpties;
    +634                            return this;
    +635                    }
    +636    
    +637                    /**
    +638                     * Sets whether to unescape each split string.
    +639                     * @param unescape true to unescape, false not to (default is false)
    +640                     * @return this
    +641                     */
    +642                    public Splitter unescape(boolean unescape) {
    +643                            this.unescape = unescape;
    +644                            return this;
    +645                    }
    +646    
    +647                    /**
    +648                     * Sets the max number of split strings it should parse.
    +649                     * @param limit the max number of split strings
    +650                     * @return this
    +651                     */
    +652                    public Splitter limit(int limit) {
    +653                            this.limit = limit;
    +654                            return this;
    +655                    }
    +656    
    +657                    /**
    +658                     * Performs the split operation.
    +659                     * @return the split string
    +660                     */
    +661                    public List<String> split() {
    +662                            //from: http://stackoverflow.com/q/820172">http://stackoverflow.com/q/820172
    +663                            String split[] = string.split("\\s*(?<!\\\\)" + Pattern.quote(delimiter) + "\\s*", limit);
    +664    
    +665                            List<String> list = new ArrayList<String>(split.length);
    +666                            for (String s : split) {
    +667                                    if (s.length() == 0 && removeEmpties) {
    +668                                            continue;
    +669                                    }
    +670    
    +671                                    if (unescape) {
    +672                                            s = ICalPropertyMarshaller.unescape(s);
    +673                                    }
    +674    
    +675                                    list.add(s);
    +676                            }
    +677                            return list;
    +678                    }
    +679            }
    +680    
    +681            /**
    +682             * Parses a comma-separated list of values.
    +683             * @param value the string to parse (e.g. "one,two,th\,ree")
    +684             * @return the parsed values
    +685             */
    +686            protected static List<String> list(String value) {
    +687                    if (value.length() == 0) {
    +688                            return new ArrayList<String>(0);
    +689                    }
    +690                    return split(value, ",").unescape(true).split();
    +691            }
    +692    
    +693            /**
    +694             * Writes a comma-separated list of values.
    +695             * @param values the values to write
    +696             * @return the list
    +697             */
    +698            protected static String list(Object... values) {
    +699                    return list(Arrays.asList(values));
    +700            }
    +701    
    +702            /**
    +703             * Writes a comma-separated list of values.
    +704             * @param values the values to write
    +705             * @return the list
    +706             */
    +707            protected static <T> String list(Collection<T> values) {
    +708                    return list(values, new ListCallback<T>() {
    +709                            public String asString(T value) {
    +710                                    return value.toString();
    +711                            }
    +712                    });
    +713            }
    +714    
    +715            /**
    +716             * Writes a comma-separated list of values.
    +717             * @param values the values to write
    +718             * @param callback callback function used for converting each value to a
    +719             * string
    +720             * @return the list
    +721             */
    +722            protected static <T> String list(Collection<T> values, final ListCallback<T> callback) {
    +723                    return join(values, ",", new JoinCallback<T>() {
    +724                            public void handle(StringBuilder sb, T value) {
    +725                                    if (value == null) {
    +726                                            return;
    +727                                    }
    +728    
    +729                                    String valueStr = callback.asString(value);
    +730                                    sb.append(escape(valueStr));
    +731                            }
    +732                    });
    +733            }
    +734    
    +735            /**
    +736             * Callback function used in conjunction with the
    +737             * {@link ICalPropertyMarshaller#list(Collection, ListCallback) list} method
    +738             * @param <T> the value class
    +739             */
    +740            protected static interface ListCallback<T> {
    +741                    /**
    +742                     * Converts a value to a string.
    +743                     * @param value the value (null values are not passed to this method, so
    +744                     * this parameter will never be null)
    +745                     * @return the string
    +746                     */
    +747                    String asString(T value);
    +748            }
    +749    
    +750            /**
    +751             * Parses a list of values that are delimited by semicolons. Unlike
    +752             * structured value components, semi-structured components cannot be
    +753             * multi-valued.
    +754             * @param value the string to parse (e.g. "one;two;three")
    +755             * @return the parsed values
    +756             */
    +757            protected static SemiStructuredIterator semistructured(String value) {
    +758                    return semistructured(value, -1);
    +759            }
    +760    
    +761            /**
    +762             * Parses a list of values that are delimited by semicolons. Unlike
    +763             * structured value components, semi-structured components cannot be
    +764             * multi-valued.
    +765             * @param value the string to parse (e.g. "one;two;three")
    +766             * @param limit the max number of components to parse
    +767             * @return the parsed values
    +768             */
    +769            protected static SemiStructuredIterator semistructured(String value, int limit) {
    +770                    List<String> split = split(value, ";").unescape(true).limit(limit).split();
    +771                    return new SemiStructuredIterator(split.iterator());
    +772            }
    +773    
    +774            /**
    +775             * Parses a structured value.
    +776             * @param value the string to parse (e.g. "one;two,three;four")
    +777             * @return the parsed values
    +778             */
    +779            protected static StructuredIterator structured(String value) {
    +780                    List<String> split = split(value, ";").split();
    +781                    List<List<String>> components = new ArrayList<List<String>>(split.size());
    +782                    for (String s : split) {
    +783                            components.add(list(s));
    +784                    }
    +785                    return new StructuredIterator(components.iterator());
    +786            }
    +787    
    +788            /**
    +789             * Provides an iterator for a jCard structured value.
    +790             * @param value the jCard value
    +791             * @return the parsed values
    +792             */
    +793            protected static StructuredIterator structured(JCalValue value) {
    +794                    return new StructuredIterator(value.asStructured().iterator());
    +795            }
    +796    
    +797            /**
    +798             * <p>
    +799             * Writes a structured value.
    +800             * </p>
    +801             * <p>
    +802             * This method accepts a list of {@link Object} instances.
    +803             * {@link Collection} objects will be treated as multi-valued components.
    +804             * Null objects will be treated as empty components. All other objects will
    +805             * have their {@code toString()} method invoked to generate the string
    +806             * value.
    +807             * </p>
    +808             * @param values the values to write
    +809             * @return the structured value string
    +810             */
    +811            protected static String structured(Object... values) {
    +812                    return join(Arrays.asList(values), ";", new JoinCallback<Object>() {
    +813                            public void handle(StringBuilder sb, Object value) {
    +814                                    if (value == null) {
    +815                                            return;
    +816                                    }
    +817    
    +818                                    if (value instanceof Collection) {
    +819                                            Collection<?> list = (Collection<?>) value;
    +820                                            sb.append(list(list));
    +821                                            return;
    +822                                    }
    +823    
    +824                                    sb.append(escape(value.toString()));
    +825                            }
    +826                    });
    +827            }
    +828    
    +829            /**
    +830             * Iterates over the fields in a structured value.
    +831             */
    +832            protected static class StructuredIterator {
    +833                    private final Iterator<List<String>> it;
    +834    
    +835                    /**
    +836                     * Constructs a new structured iterator.
    +837                     * @param it the iterator to wrap
    +838                     */
    +839                    public StructuredIterator(Iterator<List<String>> it) {
    +840                            this.it = it;
    +841                    }
    +842    
    +843                    /**
    +844                     * Gets the first value of the next component.
    +845                     * @return the first value, null if the value is an empty string, or
    +846                     * null if there are no more components
    +847                     */
    +848                    public String nextString() {
    +849                            if (!hasNext()) {
    +850                                    return null;
    +851                            }
    +852    
    +853                            List<String> list = it.next();
    +854                            if (list.isEmpty()) {
    +855                                    return null;
    +856                            }
    +857    
    +858                            String value = list.get(0);
    +859                            return (value.length() == 0) ? null : value;
    +860                    }
    +861    
    +862                    /**
    +863                     * Gets the next component.
    +864                     * @return the next component, an empty list if the component is empty,
    +865                     * or an empty list of there are no more components
    +866                     */
    +867                    public List<String> nextComponent() {
    +868                            if (!hasNext()) {
    +869                                    return new ArrayList<String>(0); //the lists should be mutable so they can be directly assigned to the property object's fields
    +870                            }
    +871    
    +872                            List<String> list = it.next();
    +873                            if (list.size() == 1 && list.get(0).length() == 0) {
    +874                                    return new ArrayList<String>(0);
    +875                            }
    +876    
    +877                            return list;
    +878                    }
    +879    
    +880                    /**
    +881                     * Determines if there are any elements left in the value.
    +882                     * @return true if there are elements left, false if not
    +883                     */
    +884                    public boolean hasNext() {
    +885                            return it.hasNext();
    +886                    }
    +887            }
    +888    
    +889            /**
    +890             * Iterates over the fields in a semi-structured value (a structured value
    +891             * whose components cannot be multi-valued).
    +892             */
    +893            protected static class SemiStructuredIterator {
    +894                    private final Iterator<String> it;
    +895    
    +896                    /**
    +897                     * Constructs a new structured iterator.
    +898                     * @param it the iterator to wrap
    +899                     */
    +900                    public SemiStructuredIterator(Iterator<String> it) {
    +901                            this.it = it;
    +902                    }
    +903    
    +904                    /**
    +905                     * Gets the next value.
    +906                     * @return the next value, null if the value is an empty string, or null
    +907                     * if there are no more values
    +908                     */
    +909                    public String next() {
    +910                            if (!hasNext()) {
    +911                                    return null;
    +912                            }
    +913    
    +914                            String value = it.next();
    +915                            return (value.length() == 0) ? null : value;
    +916                    }
    +917    
    +918                    /**
    +919                     * Determines if there are any elements left in the value.
    +920                     * @return true if there are elements left, false if not
    +921                     */
    +922                    public boolean hasNext() {
    +923                            return it.hasNext();
    +924                    }
    +925            }
    +926    
    +927            /**
    +928             * Writes an object property value to a string.
    +929             * @param value the value
    +930             * @return the string
    +931             */
    +932            protected static <T> String object(Map<String, List<T>> value) {
    +933                    return join(value, ";", new JoinMapCallback<String, List<T>>() {
    +934                            public void handle(StringBuilder sb, String key, List<T> value) {
    +935                                    sb.append(key.toUpperCase()).append('=').append(list(value));
    +936                            }
    +937                    });
    +938            }
    +939    
    +940            /**
    +941             * Parses an object property value.
    +942             * @param value the value to parse
    +943             * @return the parsed value
    +944             */
    +945            protected static ListMultimap<String, String> object(String value) {
    +946                    ListMultimap<String, String> map = new ListMultimap<String, String>();
    +947    
    +948                    for (String component : split(value, ";").unescape(false).removeEmpties(true).split()) {
    +949                            String[] split = component.split("=", 2);
    +950    
    +951                            String name = unescape(split[0].toUpperCase());
    +952                            List<String> values = (split.length > 1) ? list(split[1]) : Arrays.asList("");
    +953    
    +954                            map.putAll(name, values);
    +955                    }
    +956    
    +957                    return map;
    +958            }
    +959    
    +960            /**
    +961             * Parses a date string.
    +962             * @param value the date string
    +963             * @return the factory object
    +964             */
    +965            protected static DateParser date(String value) {
    +966                    return new DateParser(value);
    +967            }
    +968    
    +969            /**
    +970             * Formats a {@link Date} object as a string.
    +971             * @param date the date
    +972             * @return the factory object
    +973             */
    +974            protected static DateWriter date(Date date) {
    +975                    return new DateWriter(date);
    +976            }
    +977    
    +978            /**
    +979             * Factory class for parsing dates.
    +980             */
    +981            protected static class DateParser {
    +982                    private String value;
    +983                    private TimeZone timezone;
    +984    
    +985                    /**
    +986                     * Creates a new date writer object.
    +987                     * @param value the date string to parse
    +988                     */
    +989                    public DateParser(String value) {
    +990                            this.value = value;
    +991                    }
    +992    
    +993                    /**
    +994                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +995                     * value). If the ID does not contain a "/" character, it will be
    +996                     * ignored.
    +997                     * @param timezoneId the timezone ID
    +998                     * @return this
    +999                     */
    +1000                    public DateParser tzid(String timezoneId) {
    +1001                            return tzid(timezoneId, null);
    +1002                    }
    +1003    
    +1004                    /**
    +1005                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +1006                     * value).
    +1007                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1008                     * "/" character), it will attempt to look up the timezone in Java's
    +1009                     * timezone registry and parse the date according to that timezone. If
    +1010                     * the timezone is not found, the date will be parsed according to the
    +1011                     * JVM's default timezone and a warning message will be added to the
    +1012                     * provided warnings list. If the ID is not global, it will be parsed
    +1013                     * according to the JVM's default timezone. Whichever timezone is chosen
    +1014                     * here, it will be ignored if the date string is in UTC time or
    +1015                     * contains an offset.
    +1016                     * @param warnings if the ID is global and is not recognized, a warning
    +1017                     * message will be added to this list
    +1018                     * @return this
    +1019                     */
    +1020                    public DateParser tzid(String timezoneId, List<String> warnings) {
    +1021                            if (timezoneId == null) {
    +1022                                    return tz(null);
    +1023                            }
    +1024    
    +1025                            if (timezoneId.contains("/")) {
    +1026                                    TimeZone timezone = ICalDateFormatter.parseTimeZoneId(timezoneId);
    +1027                                    if (timezone == null) {
    +1028                                            timezone = TimeZone.getDefault();
    +1029                                            if (warnings != null) {
    +1030                                                    warnings.add("Timezone ID not recognized, parsing with default timezone instead: " + timezoneId);
    +1031                                            }
    +1032                                    }
    +1033                                    return tz(timezone);
    +1034                            }
    +1035    
    +1036                            //TODO parse according to the associated VTIMEZONE component
    +1037                            return tz(TimeZone.getDefault());
    +1038                    }
    +1039    
    +1040                    /**
    +1041                     * Sets the timezone to parse the date as.
    +1042                     * @param timezone the timezone
    +1043                     * @return this
    +1044                     */
    +1045                    public DateParser tz(TimeZone timezone) {
    +1046                            this.timezone = timezone;
    +1047                            return this;
    +1048                    }
    +1049    
    +1050                    /**
    +1051                     * Parses the date string.
    +1052                     * @return the parsed date
    +1053                     * @throws IllegalArgumentException if the date string is invalid
    +1054                     */
    +1055                    public Date parse() {
    +1056                            return ICalDateFormatter.parse(value, timezone);
    +1057                    }
    +1058            }
    +1059    
    +1060            /**
    +1061             * Factory class for writing dates.
    +1062             */
    +1063            protected static class DateWriter {
    +1064                    private Date date;
    +1065                    private boolean hasTime = true;
    +1066                    private TimeZone timezone;
    +1067                    private boolean extended = false;
    +1068    
    +1069                    /**
    +1070                     * Creates a new date writer object.
    +1071                     * @param date the date to format
    +1072                     */
    +1073                    public DateWriter(Date date) {
    +1074                            this.date = date;
    +1075                    }
    +1076    
    +1077                    /**
    +1078                     * Sets whether to output the date's time component.
    +1079                     * @param hasTime true include the time, false if it's strictly a date
    +1080                     * (defaults to "true")
    +1081                     * @return this
    +1082                     */
    +1083                    public DateWriter time(boolean hasTime) {
    +1084                            this.hasTime = hasTime;
    +1085                            return this;
    +1086                    }
    +1087    
    +1088                    /**
    +1089                     * Sets the ID of the timezone to format the date as (TZID parameter
    +1090                     * value).
    +1091                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1092                     * "/" character), it will attempt to look up the timezone in Java's
    +1093                     * timezone registry and format the date according to that timezone. If
    +1094                     * the timezone is not found, the date will be formatted in UTC. If the
    +1095                     * ID is not global, it will be formatted according to the JVM's default
    +1096                     * timezone. If no timezone preference is specified, the date will be
    +1097                     * formatted as UTC.
    +1098                     * @return this
    +1099                     */
    +1100                    public DateWriter tzid(String timezoneId) {
    +1101                            if (timezoneId == null) {
    +1102                                    return tz(null);
    +1103                            }
    +1104    
    +1105                            if (timezoneId.contains("/")) {
    +1106                                    return tz(ICalDateFormatter.parseTimeZoneId(timezoneId));
    +1107                            }
    +1108    
    +1109                            //TODO format according to the associated VTIMEZONE component
    +1110                            return tz(TimeZone.getDefault());
    +1111                    }
    +1112    
    +1113                    /**
    +1114                     * Outputs the date in local time (without a timezone). If no timezone
    +1115                     * preference is specified, the date will be formatted as UTC.
    +1116                     * @param localTz true to use local time, false not to
    +1117                     * @return this
    +1118                     */
    +1119                    public DateWriter localTz(boolean localTz) {
    +1120                            return localTz ? tz(TimeZone.getDefault()) : this;
    +1121                    }
    +1122    
    +1123                    /**
    +1124                     * Convenience method that combines {@link #localTz(boolean)} and
    +1125                     * {@link #tzid(String)} into one method.
    +1126                     * @param localTz true to use local time, false not to
    +1127                     * @param timezoneId the timezone ID
    +1128                     * @return this
    +1129                     */
    +1130                    public DateWriter tz(boolean localTz, String timezoneId) {
    +1131                            return localTz ? localTz(true) : tzid(timezoneId);
    +1132                    }
    +1133    
    +1134                    /**
    +1135                     * Sets the timezone to format the date as. If no timezone preference is
    +1136                     * specified, the date will be formatted as UTC.
    +1137                     * @param timezone the timezone
    +1138                     * @return this
    +1139                     */
    +1140                    public DateWriter tz(TimeZone timezone) {
    +1141                            this.timezone = timezone;
    +1142                            return this;
    +1143                    }
    +1144    
    +1145                    /**
    +1146                     * Sets whether to use extended format or basic.
    +1147                     * @param extended true to use extended format, false to use basic
    +1148                     * (defaults to "false")
    +1149                     * @return this
    +1150                     */
    +1151                    public DateWriter extended(boolean extended) {
    +1152                            this.extended = extended;
    +1153                            return this;
    +1154                    }
    +1155    
    +1156                    /**
    +1157                     * Creates the date string.
    +1158                     * @return the date string
    +1159                     */
    +1160                    public String write() {
    +1161                            ISOFormat format;
    +1162                            TimeZone timezone = this.timezone;
    +1163                            if (hasTime) {
    +1164                                    if (timezone == null) {
    +1165                                            format = extended ? ISOFormat.UTC_TIME_EXTENDED : ISOFormat.UTC_TIME_BASIC;
    +1166                                    } else {
    +1167                                            format = extended ? ISOFormat.TIME_EXTENDED_WITHOUT_TZ : ISOFormat.TIME_BASIC_WITHOUT_TZ;
    +1168                                    }
    +1169                            } else {
    +1170                                    format = extended ? ISOFormat.DATE_EXTENDED : ISOFormat.DATE_BASIC;
    +1171                                    timezone = null;
    +1172                            }
    +1173    
    +1174                            return ICalDateFormatter.format(date, format, timezone);
    +1175                    }
    +1176            }
    +1177    
    +1178            /**
    +1179             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1180             * that the parser expected to find are missing from the property's XML
    +1181             * element.
    +1182             * @param dataTypes the expected data types (null for "unknown")
    +1183             */
    +1184            protected static CannotParseException missingXmlElements(ICalDataType... dataTypes) {
    +1185                    String[] elements = new String[dataTypes.length];
    +1186                    for (int i = 0; i < dataTypes.length; i++) {
    +1187                            ICalDataType dataType = dataTypes[i];
    +1188                            elements[i] = (dataType == null) ? "unknown" : dataType.getName().toLowerCase();
    +1189                    }
    +1190                    return missingXmlElements(elements);
    +1191            }
    +1192    
    +1193            /**
    +1194             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1195             * that the parser expected to find are missing from property's XML element.
    +1196             * @param elements the names of the expected XML elements.
    +1197             */
    +1198            protected static CannotParseException missingXmlElements(String... elements) {
    +1199                    String message;
    +1200    
    +1201                    switch (elements.length) {
    +1202                    case 0:
    +1203                            message = "Property value empty.";
    +1204                            break;
    +1205                    case 1:
    +1206                            message = "Property value empty (no <" + elements[0] + "> element found).";
    +1207                            break;
    +1208                    case 2:
    +1209                            message = "Property value empty (no <" + elements[0] + "> or <" + elements[1] + "> elements found).";
    +1210                            break;
    +1211                    default:
    +1212                            StringBuilder sb = new StringBuilder();
    +1213    
    +1214                            sb.append("Property value empty (no ");
    +1215                            join(Arrays.asList(elements).subList(0, elements.length - 1), ", ", sb, new JoinCallback<String>() {
    +1216                                    public void handle(StringBuilder sb, String value) {
    +1217                                            sb.append('<').append(value).append('>');
    +1218                                    }
    +1219                            });
    +1220                            sb.append(", or <").append(elements[elements.length - 1]).append("> elements found).");
    +1221    
    +1222                            message = sb.toString();
    +1223                            break;
    +1224                    }
    +1225    
    +1226                    return new CannotParseException(message);
    +1227            }
    +1228    
    +1229            /**
    +1230             * Represents the result of an unmarshal operation.
    +1231             * @author Michael Angstadt
    +1232             * @param <T> the unmarshalled property class
    +1233             */
    +1234            public static class Result<T extends ICalProperty> {
    +1235                    private final T property;
    +1236                    private final List<String> warnings;
    +1237    
    +1238                    /**
    +1239                     * Creates a new result.
    +1240                     * @param property the property object
    +1241                     * @param warnings the warnings
    +1242                     */
    +1243                    public Result(T property, List<String> warnings) {
    +1244                            this.property = property;
    +1245                            this.warnings = warnings;
    +1246                    }
    +1247    
    +1248                    /**
    +1249                     * Gets the warnings.
    +1250                     * @return the warnings
    +1251                     */
    +1252                    public List<String> getWarnings() {
    +1253                            return warnings;
    +1254                    }
    +1255    
    +1256                    /**
    +1257                     * Gets the property object.
    +1258                     * @return the property object
    +1259                     */
    +1260                    public T getProperty() {
    +1261                            return property;
    +1262                    }
    +1263            }
    +1264    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.html new file mode 100644 index 000000000..40770513e --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ICalPropertyMarshaller.html @@ -0,0 +1,1330 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import static biweekly.io.xml.XCalNamespaceContext.XCAL_NS;
    +004    import static biweekly.util.StringUtils.join;
    +005    
    +006    import java.util.ArrayList;
    +007    import java.util.Arrays;
    +008    import java.util.Collection;
    +009    import java.util.Date;
    +010    import java.util.Iterator;
    +011    import java.util.List;
    +012    import java.util.Map;
    +013    import java.util.TimeZone;
    +014    import java.util.regex.Pattern;
    +015    
    +016    import javax.xml.namespace.QName;
    +017    
    +018    import org.w3c.dom.Element;
    +019    
    +020    import biweekly.ICalDataType;
    +021    import biweekly.ICalendar;
    +022    import biweekly.io.CannotParseException;
    +023    import biweekly.io.SkipMeException;
    +024    import biweekly.io.json.JCalValue;
    +025    import biweekly.io.text.ICalRawWriter;
    +026    import biweekly.io.xml.XCalElement;
    +027    import biweekly.parameter.ICalParameters;
    +028    import biweekly.property.ICalProperty;
    +029    import biweekly.util.ICalDateFormatter;
    +030    import biweekly.util.ISOFormat;
    +031    import biweekly.util.ListMultimap;
    +032    import biweekly.util.StringUtils;
    +033    import biweekly.util.StringUtils.JoinCallback;
    +034    import biweekly.util.StringUtils.JoinMapCallback;
    +035    import biweekly.util.XmlUtils;
    +036    
    +037    /*
    +038     Copyright (c) 2013, Michael Angstadt
    +039     All rights reserved.
    +040    
    +041     Redistribution and use in source and binary forms, with or without
    +042     modification, are permitted provided that the following conditions are met: 
    +043    
    +044     1. Redistributions of source code must retain the above copyright notice, this
    +045     list of conditions and the following disclaimer. 
    +046     2. Redistributions in binary form must reproduce the above copyright notice,
    +047     this list of conditions and the following disclaimer in the documentation
    +048     and/or other materials provided with the distribution. 
    +049    
    +050     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +051     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +052     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +053     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +054     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +055     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +056     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +057     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +058     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +059     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +060     */
    +061    
    +062    /**
    +063     * Base class for iCalendar property marshallers.
    +064     * @param <T> the property class
    +065     * @author Michael Angstadt
    +066     */
    +067    public abstract class ICalPropertyMarshaller<T extends ICalProperty> {
    +068            protected final Class<T> clazz;
    +069            protected final String propertyName;
    +070            protected final ICalDataType defaultDataType;
    +071            protected final QName qname;
    +072    
    +073            /**
    +074             * Creates a new marshaller.
    +075             * @param clazz the property class
    +076             * @param propertyName the property name (e.g. "VERSION")
    +077             * @param defaultDataType the property's default data type (e.g. "text") or
    +078             * null if unknown
    +079             */
    +080            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType) {
    +081                    this(clazz, propertyName, defaultDataType, new QName(XCAL_NS, propertyName.toLowerCase()));
    +082            }
    +083    
    +084            /**
    +085             * Creates a new marshaller.
    +086             * @param clazz the property class
    +087             * @param propertyName the property name (e.g. "VERSION")
    +088             * @param defaultDataType the property's default data type (e.g. "text") or
    +089             * null if unknown
    +090             * @param qname the XML element name and namespace to use for xCal documents
    +091             * (by default, the XML element name is set to the lower-cased property
    +092             * name, and the element namespace is set to the xCal namespace)
    +093             */
    +094            public ICalPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType defaultDataType, QName qname) {
    +095                    this.clazz = clazz;
    +096                    this.propertyName = propertyName;
    +097                    this.defaultDataType = defaultDataType;
    +098                    this.qname = qname;
    +099            }
    +100    
    +101            /**
    +102             * Gets the property class.
    +103             * @return the property class
    +104             */
    +105            public Class<T> getPropertyClass() {
    +106                    return clazz;
    +107            }
    +108    
    +109            /**
    +110             * Gets the property name.
    +111             * @return the property name (e.g. "VERSION")
    +112             */
    +113            public String getPropertyName() {
    +114                    return propertyName;
    +115            }
    +116    
    +117            /**
    +118             * Gets the property's default data type.
    +119             * @return the default data type (e.g. "text") or null if unknown
    +120             */
    +121            public ICalDataType getDefaultDataType() {
    +122                    return defaultDataType;
    +123            }
    +124    
    +125            /**
    +126             * Gets this property's local name and namespace for xCal documents.
    +127             * @return the XML local name and namespace
    +128             */
    +129            public QName getQName() {
    +130                    return qname;
    +131            }
    +132    
    +133            /**
    +134             * Sanitizes a property's parameters (called before the property is
    +135             * written). Note that a copy of the parameters is returned so that the
    +136             * property object does not get modified.
    +137             * @param property the property
    +138             * @return the sanitized parameters
    +139             */
    +140            public final ICalParameters prepareParameters(T property) {
    +141                    //make a copy because the property should not get modified when it is marshalled
    +142                    ICalParameters copy = new ICalParameters(property.getParameters());
    +143                    _prepareParameters(property, copy);
    +144                    return copy;
    +145            }
    +146    
    +147            /**
    +148             * Determines the data type of a property instance.
    +149             * @param property the property
    +150             * @return the data type or null if unknown
    +151             */
    +152            public final ICalDataType dataType(T property) {
    +153                    return _dataType(property);
    +154            }
    +155    
    +156            /**
    +157             * Marshals a property's value to a string.
    +158             * @param property the property
    +159             * @return the marshalled value
    +160             * @throws SkipMeException if the property should not be written to the data
    +161             * stream
    +162             */
    +163            public final String writeText(T property) {
    +164                    return _writeText(property);
    +165            }
    +166    
    +167            /**
    +168             * Marshals a property's value to an XML element (xCal).
    +169             * @param property the property
    +170             * @param element the property's XML element
    +171             * @throws SkipMeException if the property should not be written to the data
    +172             * stream
    +173             */
    +174            public final void writeXml(T property, Element element) {
    +175                    XCalElement xcalElement = new XCalElement(element);
    +176                    _writeXml(property, xcalElement);
    +177            }
    +178    
    +179            /**
    +180             * Marshals a property's value to a JSON data stream (jCal).
    +181             * @param property the property
    +182             * @return the marshalled value
    +183             * @throws SkipMeException if the property should not be written to the data
    +184             * stream
    +185             */
    +186            public final JCalValue writeJson(T property) {
    +187                    return _writeJson(property);
    +188            }
    +189    
    +190            /**
    +191             * Unmarshals a property from a plain-text iCalendar data stream.
    +192             * @param value the value as read off the wire
    +193             * @param dataType the data type of the property value. The property's VALUE
    +194             * parameter is used to determine the data type. If the property has no
    +195             * VALUE parameter, then this parameter will be set to the property's
    +196             * default datatype. Note that the VALUE parameter is removed from the
    +197             * property's parameter list after it has been read.
    +198             * @param parameters the parsed parameters
    +199             * @return the unmarshalled property and its warnings
    +200             * @throws CannotParseException if the marshaller could not parse the
    +201             * property's value
    +202             * @throws SkipMeException if the property should not be added to the final
    +203             * {@link ICalendar} object
    +204             */
    +205            public final Result<T> parseText(String value, ICalDataType dataType, ICalParameters parameters) {
    +206                    List<String> warnings = new ArrayList<String>(0);
    +207                    T property = _parseText(value, dataType, parameters, warnings);
    +208                    property.setParameters(parameters);
    +209                    return new Result<T>(property, warnings);
    +210            }
    +211    
    +212            /**
    +213             * Unmarshals a property's value from an XML document (xCal).
    +214             * @param element the property's XML element
    +215             * @param parameters the property's parameters
    +216             * @return the unmarshalled property and its warnings
    +217             * @throws CannotParseException if the marshaller could not parse the
    +218             * property's value
    +219             * @throws SkipMeException if the property should not be added to the final
    +220             * {@link ICalendar} object
    +221             */
    +222            public final Result<T> parseXml(Element element, ICalParameters parameters) {
    +223                    List<String> warnings = new ArrayList<String>(0);
    +224                    T property = _parseXml(new XCalElement(element), parameters, warnings);
    +225                    property.setParameters(parameters);
    +226                    return new Result<T>(property, warnings);
    +227            }
    +228    
    +229            /**
    +230             * Unmarshals a property's value from a JSON data stream (jCal).
    +231             * @param value the property's JSON value
    +232             * @param dataType the data type
    +233             * @param parameters the parsed parameters
    +234             * @return the unmarshalled property and its warnings
    +235             * @throws CannotParseException if the marshaller could not parse the
    +236             * property's value
    +237             * @throws SkipMeException if the property should not be added to the final
    +238             * {@link ICalendar} object
    +239             */
    +240            public final Result<T> parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters) {
    +241                    List<String> warnings = new ArrayList<String>(0);
    +242                    T property = _parseJson(value, dataType, parameters, warnings);
    +243                    property.setParameters(parameters);
    +244                    return new Result<T>(property, warnings);
    +245            }
    +246    
    +247            /**
    +248             * <p>
    +249             * Sanitizes a property's parameters before the property is written.
    +250             * </p>
    +251             * <p>
    +252             * This method should be overridden by child classes that wish to tweak the
    +253             * property's parameters before the property is written. The default
    +254             * implementation of this method does nothing.
    +255             * </p>
    +256             * @param property the property
    +257             * @param copy the list of parameters to make modifications to (it is a copy
    +258             * of the property's parameters)
    +259             */
    +260            protected void _prepareParameters(T property, ICalParameters copy) {
    +261                    //do nothing
    +262            }
    +263    
    +264            /**
    +265             * <p>
    +266             * Determines the data type of a property instance.
    +267             * </p>
    +268             * <p>
    +269             * This method should be overridden by child classes if a property's data
    +270             * type changes depending on its value. The default implementation of this
    +271             * method returns the property's default data type.
    +272             * </p>
    +273             * @param property the property
    +274             * @return the data type or null if unknown
    +275             */
    +276            protected ICalDataType _dataType(T property) {
    +277                    return defaultDataType;
    +278            }
    +279    
    +280            /**
    +281             * Marshals a property's value to a string.
    +282             * @param property the property
    +283             * @return the marshalled value
    +284             * @throws SkipMeException if the property should not be written to the data
    +285             * stream
    +286             */
    +287            protected abstract String _writeText(T property);
    +288    
    +289            /**
    +290             * <p>
    +291             * Marshals a property's value to an XML element (xCal).
    +292             * <p>
    +293             * <p>
    +294             * This method should be overridden by child classes that wish to support
    +295             * xCal. The default implementation of this method will append one child
    +296             * element to the property's XML element. The child element's name will be
    +297             * that of the property's data type (retrieved using the {@link #dataType}
    +298             * method), and the child element's text content will be set to the
    +299             * property's marshalled plain-text value (retrieved using the
    +300             * {@link #writeText} method).
    +301             * </p>
    +302             * @param property the property
    +303             * @param element the property's XML element
    +304             * @throws SkipMeException if the property should not be written to the data
    +305             * stream
    +306             */
    +307            protected void _writeXml(T property, XCalElement element) {
    +308                    String value = writeText(property);
    +309                    ICalDataType dataType = dataType(property);
    +310                    element.append(dataType, value);
    +311            }
    +312    
    +313            /**
    +314             * <p>
    +315             * Marshals a property's value to a JSON data stream (jCal).
    +316             * </p>
    +317             * <p>
    +318             * This method should be overridden by child classes that wish to support
    +319             * jCal. The default implementation of this method will create a jCard
    +320             * property that has a single JSON string value (generated by the
    +321             * {@link #writeText} method).
    +322             * </p>
    +323             * @param property the property
    +324             * @return the marshalled value
    +325             * @throws SkipMeException if the property should not be written to the data
    +326             * stream
    +327             */
    +328            protected JCalValue _writeJson(T property) {
    +329                    String value = writeText(property);
    +330                    return JCalValue.single(value);
    +331            }
    +332    
    +333            /**
    +334             * Unmarshals a property from a plain-text iCalendar data stream.
    +335             * @param value the value as read off the wire
    +336             * @param dataType the data type of the property value. The property's VALUE
    +337             * parameter is used to determine the data type. If the property has no
    +338             * VALUE parameter, then this parameter will be set to the property's
    +339             * default datatype. Note that the VALUE parameter is removed from the
    +340             * property's parameter list after it has been read.
    +341             * @param parameters the parsed parameters. These parameters will be
    +342             * assigned to the property object once this method returns. Therefore, do
    +343             * not assign any parameters to the property object itself whilst inside of
    +344             * this method, or else they will be overwritten.
    +345             * @param warnings allows the programmer to alert the user to any
    +346             * note-worthy (but non-critical) issues that occurred during the
    +347             * unmarshalling process
    +348             * @return the unmarshalled property object
    +349             * @throws CannotParseException if the marshaller could not parse the
    +350             * property's value
    +351             * @throws SkipMeException if the property should not be added to the final
    +352             * {@link ICalendar} object
    +353             */
    +354            protected abstract T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings);
    +355    
    +356            /**
    +357             * <p>
    +358             * Unmarshals a property from an XML document (xCal).
    +359             * </p>
    +360             * <p>
    +361             * This method should be overridden by child classes that wish to support
    +362             * xCal. The default implementation of this method will find the first child
    +363             * element with the xCal namespace. The element's name will be used as the
    +364             * property's data type and its text content will be passed into the
    +365             * {@link #_parseText} method. If no such child element is found, then the
    +366             * parent element's text content will be passed into {@link #_parseText} and
    +367             * the data type will be null.
    +368             * </p>
    +369             * @param element the property's XML element
    +370             * @param parameters the parsed parameters. These parameters will be
    +371             * assigned to the property object once this method returns. Therefore, do
    +372             * not assign any parameters to the property object itself whilst inside of
    +373             * this method, or else they will be overwritten.
    +374             * @param warnings allows the programmer to alert the user to any
    +375             * note-worthy (but non-critical) issues that occurred during the
    +376             * unmarshalling process
    +377             * @return the unmarshalled property object
    +378             * @throws CannotParseException if the marshaller could not parse the
    +379             * property's value
    +380             * @throws SkipMeException if the property should not be added to the final
    +381             * {@link ICalendar} object
    +382             */
    +383            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +384                    String value = null;
    +385                    ICalDataType dataType = null;
    +386                    Element rawElement = element.getElement();
    +387    
    +388                    //get the text content of the first child element with the xCard namespace
    +389                    List<Element> children = XmlUtils.toElementList(rawElement.getChildNodes());
    +390                    for (Element child : children) {
    +391                            if (!XCAL_NS.equals(child.getNamespaceURI())) {
    +392                                    continue;
    +393                            }
    +394    
    +395                            dataType = ICalDataType.get(child.getLocalName());
    +396                            value = child.getTextContent();
    +397                            break;
    +398                    }
    +399    
    +400                    if (dataType == null) {
    +401                            //get the text content of the property element
    +402                            value = rawElement.getTextContent();
    +403                    }
    +404    
    +405                    value = escape(value);
    +406                    return _parseText(value, dataType, parameters, warnings);
    +407            }
    +408    
    +409            /**
    +410             * /**
    +411             * <p>
    +412             * Unmarshals a property from a JSON data stream (jCal).
    +413             * </p>
    +414             * <p>
    +415             * This method should be overridden by child classes that wish to support
    +416             * jCal. The default implementation of this method will convert the jCal
    +417             * property value to a string and pass it into the {@link #_parseText}
    +418             * method.
    +419             * </p>
    +420             * 
    +421             * <hr>
    +422             * 
    +423             * <p>
    +424             * The following paragraphs describe the way in which this method's default
    +425             * implementation converts a jCal value to a string:
    +426             * </p>
    +427             * <p>
    +428             * If the jCal value consists of a single, non-array, non-object value, then
    +429             * the value is converted to a string. Special characters (backslashes,
    +430             * commas, and semicolons) are escaped in order to simulate what the value
    +431             * might look like in a plain-text iCalendar object.<br>
    +432             * <code>["x-foo", {}, "text", "the;value"] --&gt; "the\;value"</code><br>
    +433             * <code>["x-foo", {}, "text", 2] --&gt; "2"</code>
    +434             * </p>
    +435             * <p>
    +436             * If the jCal value consists of multiple, non-array, non-object values,
    +437             * then all the values are appended together in a single string, separated
    +438             * by commas. Special characters (backslashes, commas, and semicolons) are
    +439             * escaped for each value in order to prevent commas from being treated as
    +440             * delimiters, and to simulate what the value might look like in a
    +441             * plain-text iCalendar object.<br>
    +442             * <code>["x-foo", {}, "text", "one", "two,three"] --&gt;
    +443             * "one,two\,three"</code>
    +444             * </p>
    +445             * <p>
    +446             * If the jCal value is a single array, then this array is treated as a
    +447             * "structured value", and converted its plain-text representation. Special
    +448             * characters (backslashes, commas, and semicolons) are escaped for each
    +449             * value in order to prevent commas and semicolons from being treated as
    +450             * delimiters.<br>
    +451             * <code>["x-foo", {}, "text", ["one", ["two", "three"], "four;five"]]
    +452             * --&gt; "one;two,three;four\;five"</code>
    +453             * </p>
    +454             * <p>
    +455             * If the jCal value starts with a JSON object, then the object is converted
    +456             * to a format identical to the one used in the RRULE and EXRULE properties.
    +457             * Special characters (backslashes, commas, semicolons, and equal signs) are
    +458             * escaped for each value in order to preserve the syntax of the string
    +459             * value.<br>
    +460             * <code>["x-foo", {}, "text", {"one": 1, "two": [2, 2.5]}] --&gt; "ONE=1;TWO=2,2.5"</code>
    +461             * </p>
    +462             * <p>
    +463             * For all other cases, behavior is undefined.
    +464             * </p>
    +465             * @param value the property's JSON value
    +466             * @param dataType the data type
    +467             * @param parameters the parsed parameters. These parameters will be
    +468             * assigned to the property object once this method returns. Therefore, do
    +469             * not assign any parameters to the property object itself whilst inside of
    +470             * this method, or else they will be overwritten.
    +471             * @param warnings allows the programmer to alert the user to any
    +472             * note-worthy (but non-critical) issues that occurred during the
    +473             * unmarshalling process
    +474             * @return the unmarshalled property object
    +475             * @throws CannotParseException if the marshaller could not parse the
    +476             * property's value
    +477             * @throws SkipMeException if the property should not be added to the final
    +478             * {@link ICalendar} object
    +479             */
    +480            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +481                    return _parseText(jcalValueToString(value), dataType, parameters, warnings);
    +482            }
    +483    
    +484            private String jcalValueToString(JCalValue value) {
    +485                    if (value.getValues().size() > 1) {
    +486                            List<String> multi = value.asMulti();
    +487                            if (!multi.isEmpty()) {
    +488                                    return list(multi);
    +489                            }
    +490                    }
    +491    
    +492                    if (!value.getValues().isEmpty() && value.getValues().get(0).getArray() != null) {
    +493                            List<List<String>> structured = value.asStructured();
    +494                            if (!structured.isEmpty()) {
    +495                                    return structured(structured.toArray());
    +496                            }
    +497                    }
    +498    
    +499                    if (value.getValues().get(0).getObject() != null) {
    +500                            ListMultimap<String, String> object = value.asObject();
    +501                            if (!object.isEmpty()) {
    +502                                    return object(object.getMap());
    +503                            }
    +504                    }
    +505    
    +506                    return escape(value.asSingle());
    +507            }
    +508    
    +509            /**
    +510             * Unescapes all special characters that are escaped with a backslash, as
    +511             * well as escaped newlines.
    +512             * @param text the text to unescape
    +513             * @return the unescaped text
    +514             */
    +515            protected static String unescape(String text) {
    +516                    if (text == null) {
    +517                            return text;
    +518                    }
    +519    
    +520                    StringBuilder sb = null;
    +521                    boolean escaped = false;
    +522                    for (int i = 0; i < text.length(); i++) {
    +523                            char ch = text.charAt(i);
    +524    
    +525                            if (escaped) {
    +526                                    if (sb == null) {
    +527                                            sb = new StringBuilder(text.length());
    +528                                            sb.append(text.substring(0, i - 1));
    +529                                    }
    +530    
    +531                                    escaped = false;
    +532    
    +533                                    if (ch == 'n' || ch == 'N') {
    +534                                            //newlines appear as "\n" or "\N" (see RFC 5545 p.46)
    +535                                            sb.append(StringUtils.NEWLINE);
    +536                                            continue;
    +537                                    }
    +538    
    +539                                    sb.append(ch);
    +540                                    continue;
    +541                            }
    +542    
    +543                            if (ch == '\\') {
    +544                                    escaped = true;
    +545                                    continue;
    +546                            }
    +547    
    +548                            if (sb != null) {
    +549                                    sb.append(ch);
    +550                            }
    +551                    }
    +552                    return (sb == null) ? text : sb.toString();
    +553            }
    +554    
    +555            /**
    +556             * <p>
    +557             * Escapes all special characters within a iCalendar value. These characters
    +558             * are:
    +559             * </p>
    +560             * <ul>
    +561             * <li>backslashes ({@code \})</li>
    +562             * <li>commas ({@code ,})</li>
    +563             * <li>semi-colons ({@code ;})</li>
    +564             * </ul>
    +565             * <p>
    +566             * Newlines are not escaped by this method. They are escaped when the
    +567             * iCalendar object is serialized (in the {@link ICalRawWriter} class).
    +568             * </p>
    +569             * @param text the text to escape
    +570             * @return the escaped text
    +571             */
    +572            protected static String escape(String text) {
    +573                    if (text == null) {
    +574                            return text;
    +575                    }
    +576    
    +577                    String chars = "\\,;";
    +578                    StringBuilder sb = null;
    +579                    for (int i = 0; i < text.length(); i++) {
    +580                            char ch = text.charAt(i);
    +581                            if (chars.indexOf(ch) >= 0) {
    +582                                    if (sb == null) {
    +583                                            sb = new StringBuilder(text.length());
    +584                                            sb.append(text.substring(0, i));
    +585                                    }
    +586                                    sb.append('\\');
    +587                            }
    +588    
    +589                            if (sb != null) {
    +590                                    sb.append(ch);
    +591                            }
    +592                    }
    +593                    return (sb == null) ? text : sb.toString();
    +594            }
    +595    
    +596            /**
    +597             * Splits a string by a delimiter, taking escaped characters into account.
    +598             * @param string the string to split (e.g. "one,two,three")
    +599             * @param delimiter the delimiter (e.g. ",")
    +600             * @return the factory object
    +601             */
    +602            protected static Splitter split(String string, String delimiter) {
    +603                    return new Splitter(string, delimiter);
    +604            }
    +605    
    +606            /**
    +607             * Factory class for splitting strings.
    +608             */
    +609            protected static class Splitter {
    +610                    private String string;
    +611                    private String delimiter;
    +612                    private boolean removeEmpties = false;
    +613                    private boolean unescape = false;
    +614                    private int limit = -1;
    +615    
    +616                    /**
    +617                     * Creates a new splitter object.
    +618                     * @param string the string to split (e.g. "one,two,three")
    +619                     * @param delimiter the delimiter (e.g. ",")
    +620                     */
    +621                    public Splitter(String string, String delimiter) {
    +622                            this.string = string;
    +623                            this.delimiter = delimiter;
    +624                    }
    +625    
    +626                    /**
    +627                     * Sets whether to remove empty elements.
    +628                     * @param removeEmpties true to remove empty elements, false not to
    +629                     * (default is false)
    +630                     * @return this
    +631                     */
    +632                    public Splitter removeEmpties(boolean removeEmpties) {
    +633                            this.removeEmpties = removeEmpties;
    +634                            return this;
    +635                    }
    +636    
    +637                    /**
    +638                     * Sets whether to unescape each split string.
    +639                     * @param unescape true to unescape, false not to (default is false)
    +640                     * @return this
    +641                     */
    +642                    public Splitter unescape(boolean unescape) {
    +643                            this.unescape = unescape;
    +644                            return this;
    +645                    }
    +646    
    +647                    /**
    +648                     * Sets the max number of split strings it should parse.
    +649                     * @param limit the max number of split strings
    +650                     * @return this
    +651                     */
    +652                    public Splitter limit(int limit) {
    +653                            this.limit = limit;
    +654                            return this;
    +655                    }
    +656    
    +657                    /**
    +658                     * Performs the split operation.
    +659                     * @return the split string
    +660                     */
    +661                    public List<String> split() {
    +662                            //from: http://stackoverflow.com/q/820172">http://stackoverflow.com/q/820172
    +663                            String split[] = string.split("\\s*(?<!\\\\)" + Pattern.quote(delimiter) + "\\s*", limit);
    +664    
    +665                            List<String> list = new ArrayList<String>(split.length);
    +666                            for (String s : split) {
    +667                                    if (s.length() == 0 && removeEmpties) {
    +668                                            continue;
    +669                                    }
    +670    
    +671                                    if (unescape) {
    +672                                            s = ICalPropertyMarshaller.unescape(s);
    +673                                    }
    +674    
    +675                                    list.add(s);
    +676                            }
    +677                            return list;
    +678                    }
    +679            }
    +680    
    +681            /**
    +682             * Parses a comma-separated list of values.
    +683             * @param value the string to parse (e.g. "one,two,th\,ree")
    +684             * @return the parsed values
    +685             */
    +686            protected static List<String> list(String value) {
    +687                    if (value.length() == 0) {
    +688                            return new ArrayList<String>(0);
    +689                    }
    +690                    return split(value, ",").unescape(true).split();
    +691            }
    +692    
    +693            /**
    +694             * Writes a comma-separated list of values.
    +695             * @param values the values to write
    +696             * @return the list
    +697             */
    +698            protected static String list(Object... values) {
    +699                    return list(Arrays.asList(values));
    +700            }
    +701    
    +702            /**
    +703             * Writes a comma-separated list of values.
    +704             * @param values the values to write
    +705             * @return the list
    +706             */
    +707            protected static <T> String list(Collection<T> values) {
    +708                    return list(values, new ListCallback<T>() {
    +709                            public String asString(T value) {
    +710                                    return value.toString();
    +711                            }
    +712                    });
    +713            }
    +714    
    +715            /**
    +716             * Writes a comma-separated list of values.
    +717             * @param values the values to write
    +718             * @param callback callback function used for converting each value to a
    +719             * string
    +720             * @return the list
    +721             */
    +722            protected static <T> String list(Collection<T> values, final ListCallback<T> callback) {
    +723                    return join(values, ",", new JoinCallback<T>() {
    +724                            public void handle(StringBuilder sb, T value) {
    +725                                    if (value == null) {
    +726                                            return;
    +727                                    }
    +728    
    +729                                    String valueStr = callback.asString(value);
    +730                                    sb.append(escape(valueStr));
    +731                            }
    +732                    });
    +733            }
    +734    
    +735            /**
    +736             * Callback function used in conjunction with the
    +737             * {@link ICalPropertyMarshaller#list(Collection, ListCallback) list} method
    +738             * @param <T> the value class
    +739             */
    +740            protected static interface ListCallback<T> {
    +741                    /**
    +742                     * Converts a value to a string.
    +743                     * @param value the value (null values are not passed to this method, so
    +744                     * this parameter will never be null)
    +745                     * @return the string
    +746                     */
    +747                    String asString(T value);
    +748            }
    +749    
    +750            /**
    +751             * Parses a list of values that are delimited by semicolons. Unlike
    +752             * structured value components, semi-structured components cannot be
    +753             * multi-valued.
    +754             * @param value the string to parse (e.g. "one;two;three")
    +755             * @return the parsed values
    +756             */
    +757            protected static SemiStructuredIterator semistructured(String value) {
    +758                    return semistructured(value, -1);
    +759            }
    +760    
    +761            /**
    +762             * Parses a list of values that are delimited by semicolons. Unlike
    +763             * structured value components, semi-structured components cannot be
    +764             * multi-valued.
    +765             * @param value the string to parse (e.g. "one;two;three")
    +766             * @param limit the max number of components to parse
    +767             * @return the parsed values
    +768             */
    +769            protected static SemiStructuredIterator semistructured(String value, int limit) {
    +770                    List<String> split = split(value, ";").unescape(true).limit(limit).split();
    +771                    return new SemiStructuredIterator(split.iterator());
    +772            }
    +773    
    +774            /**
    +775             * Parses a structured value.
    +776             * @param value the string to parse (e.g. "one;two,three;four")
    +777             * @return the parsed values
    +778             */
    +779            protected static StructuredIterator structured(String value) {
    +780                    List<String> split = split(value, ";").split();
    +781                    List<List<String>> components = new ArrayList<List<String>>(split.size());
    +782                    for (String s : split) {
    +783                            components.add(list(s));
    +784                    }
    +785                    return new StructuredIterator(components.iterator());
    +786            }
    +787    
    +788            /**
    +789             * Provides an iterator for a jCard structured value.
    +790             * @param value the jCard value
    +791             * @return the parsed values
    +792             */
    +793            protected static StructuredIterator structured(JCalValue value) {
    +794                    return new StructuredIterator(value.asStructured().iterator());
    +795            }
    +796    
    +797            /**
    +798             * <p>
    +799             * Writes a structured value.
    +800             * </p>
    +801             * <p>
    +802             * This method accepts a list of {@link Object} instances.
    +803             * {@link Collection} objects will be treated as multi-valued components.
    +804             * Null objects will be treated as empty components. All other objects will
    +805             * have their {@code toString()} method invoked to generate the string
    +806             * value.
    +807             * </p>
    +808             * @param values the values to write
    +809             * @return the structured value string
    +810             */
    +811            protected static String structured(Object... values) {
    +812                    return join(Arrays.asList(values), ";", new JoinCallback<Object>() {
    +813                            public void handle(StringBuilder sb, Object value) {
    +814                                    if (value == null) {
    +815                                            return;
    +816                                    }
    +817    
    +818                                    if (value instanceof Collection) {
    +819                                            Collection<?> list = (Collection<?>) value;
    +820                                            sb.append(list(list));
    +821                                            return;
    +822                                    }
    +823    
    +824                                    sb.append(escape(value.toString()));
    +825                            }
    +826                    });
    +827            }
    +828    
    +829            /**
    +830             * Iterates over the fields in a structured value.
    +831             */
    +832            protected static class StructuredIterator {
    +833                    private final Iterator<List<String>> it;
    +834    
    +835                    /**
    +836                     * Constructs a new structured iterator.
    +837                     * @param it the iterator to wrap
    +838                     */
    +839                    public StructuredIterator(Iterator<List<String>> it) {
    +840                            this.it = it;
    +841                    }
    +842    
    +843                    /**
    +844                     * Gets the first value of the next component.
    +845                     * @return the first value, null if the value is an empty string, or
    +846                     * null if there are no more components
    +847                     */
    +848                    public String nextString() {
    +849                            if (!hasNext()) {
    +850                                    return null;
    +851                            }
    +852    
    +853                            List<String> list = it.next();
    +854                            if (list.isEmpty()) {
    +855                                    return null;
    +856                            }
    +857    
    +858                            String value = list.get(0);
    +859                            return (value.length() == 0) ? null : value;
    +860                    }
    +861    
    +862                    /**
    +863                     * Gets the next component.
    +864                     * @return the next component, an empty list if the component is empty,
    +865                     * or an empty list of there are no more components
    +866                     */
    +867                    public List<String> nextComponent() {
    +868                            if (!hasNext()) {
    +869                                    return new ArrayList<String>(0); //the lists should be mutable so they can be directly assigned to the property object's fields
    +870                            }
    +871    
    +872                            List<String> list = it.next();
    +873                            if (list.size() == 1 && list.get(0).length() == 0) {
    +874                                    return new ArrayList<String>(0);
    +875                            }
    +876    
    +877                            return list;
    +878                    }
    +879    
    +880                    /**
    +881                     * Determines if there are any elements left in the value.
    +882                     * @return true if there are elements left, false if not
    +883                     */
    +884                    public boolean hasNext() {
    +885                            return it.hasNext();
    +886                    }
    +887            }
    +888    
    +889            /**
    +890             * Iterates over the fields in a semi-structured value (a structured value
    +891             * whose components cannot be multi-valued).
    +892             */
    +893            protected static class SemiStructuredIterator {
    +894                    private final Iterator<String> it;
    +895    
    +896                    /**
    +897                     * Constructs a new structured iterator.
    +898                     * @param it the iterator to wrap
    +899                     */
    +900                    public SemiStructuredIterator(Iterator<String> it) {
    +901                            this.it = it;
    +902                    }
    +903    
    +904                    /**
    +905                     * Gets the next value.
    +906                     * @return the next value, null if the value is an empty string, or null
    +907                     * if there are no more values
    +908                     */
    +909                    public String next() {
    +910                            if (!hasNext()) {
    +911                                    return null;
    +912                            }
    +913    
    +914                            String value = it.next();
    +915                            return (value.length() == 0) ? null : value;
    +916                    }
    +917    
    +918                    /**
    +919                     * Determines if there are any elements left in the value.
    +920                     * @return true if there are elements left, false if not
    +921                     */
    +922                    public boolean hasNext() {
    +923                            return it.hasNext();
    +924                    }
    +925            }
    +926    
    +927            /**
    +928             * Writes an object property value to a string.
    +929             * @param value the value
    +930             * @return the string
    +931             */
    +932            protected static <T> String object(Map<String, List<T>> value) {
    +933                    return join(value, ";", new JoinMapCallback<String, List<T>>() {
    +934                            public void handle(StringBuilder sb, String key, List<T> value) {
    +935                                    sb.append(key.toUpperCase()).append('=').append(list(value));
    +936                            }
    +937                    });
    +938            }
    +939    
    +940            /**
    +941             * Parses an object property value.
    +942             * @param value the value to parse
    +943             * @return the parsed value
    +944             */
    +945            protected static ListMultimap<String, String> object(String value) {
    +946                    ListMultimap<String, String> map = new ListMultimap<String, String>();
    +947    
    +948                    for (String component : split(value, ";").unescape(false).removeEmpties(true).split()) {
    +949                            String[] split = component.split("=", 2);
    +950    
    +951                            String name = unescape(split[0].toUpperCase());
    +952                            List<String> values = (split.length > 1) ? list(split[1]) : Arrays.asList("");
    +953    
    +954                            map.putAll(name, values);
    +955                    }
    +956    
    +957                    return map;
    +958            }
    +959    
    +960            /**
    +961             * Parses a date string.
    +962             * @param value the date string
    +963             * @return the factory object
    +964             */
    +965            protected static DateParser date(String value) {
    +966                    return new DateParser(value);
    +967            }
    +968    
    +969            /**
    +970             * Formats a {@link Date} object as a string.
    +971             * @param date the date
    +972             * @return the factory object
    +973             */
    +974            protected static DateWriter date(Date date) {
    +975                    return new DateWriter(date);
    +976            }
    +977    
    +978            /**
    +979             * Factory class for parsing dates.
    +980             */
    +981            protected static class DateParser {
    +982                    private String value;
    +983                    private TimeZone timezone;
    +984    
    +985                    /**
    +986                     * Creates a new date writer object.
    +987                     * @param value the date string to parse
    +988                     */
    +989                    public DateParser(String value) {
    +990                            this.value = value;
    +991                    }
    +992    
    +993                    /**
    +994                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +995                     * value). If the ID does not contain a "/" character, it will be
    +996                     * ignored.
    +997                     * @param timezoneId the timezone ID
    +998                     * @return this
    +999                     */
    +1000                    public DateParser tzid(String timezoneId) {
    +1001                            return tzid(timezoneId, null);
    +1002                    }
    +1003    
    +1004                    /**
    +1005                     * Sets the ID of the timezone to parse the date as (TZID parameter
    +1006                     * value).
    +1007                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1008                     * "/" character), it will attempt to look up the timezone in Java's
    +1009                     * timezone registry and parse the date according to that timezone. If
    +1010                     * the timezone is not found, the date will be parsed according to the
    +1011                     * JVM's default timezone and a warning message will be added to the
    +1012                     * provided warnings list. If the ID is not global, it will be parsed
    +1013                     * according to the JVM's default timezone. Whichever timezone is chosen
    +1014                     * here, it will be ignored if the date string is in UTC time or
    +1015                     * contains an offset.
    +1016                     * @param warnings if the ID is global and is not recognized, a warning
    +1017                     * message will be added to this list
    +1018                     * @return this
    +1019                     */
    +1020                    public DateParser tzid(String timezoneId, List<String> warnings) {
    +1021                            if (timezoneId == null) {
    +1022                                    return tz(null);
    +1023                            }
    +1024    
    +1025                            if (timezoneId.contains("/")) {
    +1026                                    TimeZone timezone = ICalDateFormatter.parseTimeZoneId(timezoneId);
    +1027                                    if (timezone == null) {
    +1028                                            timezone = TimeZone.getDefault();
    +1029                                            if (warnings != null) {
    +1030                                                    warnings.add("Timezone ID not recognized, parsing with default timezone instead: " + timezoneId);
    +1031                                            }
    +1032                                    }
    +1033                                    return tz(timezone);
    +1034                            }
    +1035    
    +1036                            //TODO parse according to the associated VTIMEZONE component
    +1037                            return tz(TimeZone.getDefault());
    +1038                    }
    +1039    
    +1040                    /**
    +1041                     * Sets the timezone to parse the date as.
    +1042                     * @param timezone the timezone
    +1043                     * @return this
    +1044                     */
    +1045                    public DateParser tz(TimeZone timezone) {
    +1046                            this.timezone = timezone;
    +1047                            return this;
    +1048                    }
    +1049    
    +1050                    /**
    +1051                     * Parses the date string.
    +1052                     * @return the parsed date
    +1053                     * @throws IllegalArgumentException if the date string is invalid
    +1054                     */
    +1055                    public Date parse() {
    +1056                            return ICalDateFormatter.parse(value, timezone);
    +1057                    }
    +1058            }
    +1059    
    +1060            /**
    +1061             * Factory class for writing dates.
    +1062             */
    +1063            protected static class DateWriter {
    +1064                    private Date date;
    +1065                    private boolean hasTime = true;
    +1066                    private TimeZone timezone;
    +1067                    private boolean extended = false;
    +1068    
    +1069                    /**
    +1070                     * Creates a new date writer object.
    +1071                     * @param date the date to format
    +1072                     */
    +1073                    public DateWriter(Date date) {
    +1074                            this.date = date;
    +1075                    }
    +1076    
    +1077                    /**
    +1078                     * Sets whether to output the date's time component.
    +1079                     * @param hasTime true include the time, false if it's strictly a date
    +1080                     * (defaults to "true")
    +1081                     * @return this
    +1082                     */
    +1083                    public DateWriter time(boolean hasTime) {
    +1084                            this.hasTime = hasTime;
    +1085                            return this;
    +1086                    }
    +1087    
    +1088                    /**
    +1089                     * Sets the ID of the timezone to format the date as (TZID parameter
    +1090                     * value).
    +1091                     * @param timezoneId the timezone ID. If the ID is global (contains a
    +1092                     * "/" character), it will attempt to look up the timezone in Java's
    +1093                     * timezone registry and format the date according to that timezone. If
    +1094                     * the timezone is not found, the date will be formatted in UTC. If the
    +1095                     * ID is not global, it will be formatted according to the JVM's default
    +1096                     * timezone. If no timezone preference is specified, the date will be
    +1097                     * formatted as UTC.
    +1098                     * @return this
    +1099                     */
    +1100                    public DateWriter tzid(String timezoneId) {
    +1101                            if (timezoneId == null) {
    +1102                                    return tz(null);
    +1103                            }
    +1104    
    +1105                            if (timezoneId.contains("/")) {
    +1106                                    return tz(ICalDateFormatter.parseTimeZoneId(timezoneId));
    +1107                            }
    +1108    
    +1109                            //TODO format according to the associated VTIMEZONE component
    +1110                            return tz(TimeZone.getDefault());
    +1111                    }
    +1112    
    +1113                    /**
    +1114                     * Outputs the date in local time (without a timezone). If no timezone
    +1115                     * preference is specified, the date will be formatted as UTC.
    +1116                     * @param localTz true to use local time, false not to
    +1117                     * @return this
    +1118                     */
    +1119                    public DateWriter localTz(boolean localTz) {
    +1120                            return localTz ? tz(TimeZone.getDefault()) : this;
    +1121                    }
    +1122    
    +1123                    /**
    +1124                     * Convenience method that combines {@link #localTz(boolean)} and
    +1125                     * {@link #tzid(String)} into one method.
    +1126                     * @param localTz true to use local time, false not to
    +1127                     * @param timezoneId the timezone ID
    +1128                     * @return this
    +1129                     */
    +1130                    public DateWriter tz(boolean localTz, String timezoneId) {
    +1131                            return localTz ? localTz(true) : tzid(timezoneId);
    +1132                    }
    +1133    
    +1134                    /**
    +1135                     * Sets the timezone to format the date as. If no timezone preference is
    +1136                     * specified, the date will be formatted as UTC.
    +1137                     * @param timezone the timezone
    +1138                     * @return this
    +1139                     */
    +1140                    public DateWriter tz(TimeZone timezone) {
    +1141                            this.timezone = timezone;
    +1142                            return this;
    +1143                    }
    +1144    
    +1145                    /**
    +1146                     * Sets whether to use extended format or basic.
    +1147                     * @param extended true to use extended format, false to use basic
    +1148                     * (defaults to "false")
    +1149                     * @return this
    +1150                     */
    +1151                    public DateWriter extended(boolean extended) {
    +1152                            this.extended = extended;
    +1153                            return this;
    +1154                    }
    +1155    
    +1156                    /**
    +1157                     * Creates the date string.
    +1158                     * @return the date string
    +1159                     */
    +1160                    public String write() {
    +1161                            ISOFormat format;
    +1162                            TimeZone timezone = this.timezone;
    +1163                            if (hasTime) {
    +1164                                    if (timezone == null) {
    +1165                                            format = extended ? ISOFormat.UTC_TIME_EXTENDED : ISOFormat.UTC_TIME_BASIC;
    +1166                                    } else {
    +1167                                            format = extended ? ISOFormat.TIME_EXTENDED_WITHOUT_TZ : ISOFormat.TIME_BASIC_WITHOUT_TZ;
    +1168                                    }
    +1169                            } else {
    +1170                                    format = extended ? ISOFormat.DATE_EXTENDED : ISOFormat.DATE_BASIC;
    +1171                                    timezone = null;
    +1172                            }
    +1173    
    +1174                            return ICalDateFormatter.format(date, format, timezone);
    +1175                    }
    +1176            }
    +1177    
    +1178            /**
    +1179             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1180             * that the parser expected to find are missing from the property's XML
    +1181             * element.
    +1182             * @param dataTypes the expected data types (null for "unknown")
    +1183             */
    +1184            protected static CannotParseException missingXmlElements(ICalDataType... dataTypes) {
    +1185                    String[] elements = new String[dataTypes.length];
    +1186                    for (int i = 0; i < dataTypes.length; i++) {
    +1187                            ICalDataType dataType = dataTypes[i];
    +1188                            elements[i] = (dataType == null) ? "unknown" : dataType.getName().toLowerCase();
    +1189                    }
    +1190                    return missingXmlElements(elements);
    +1191            }
    +1192    
    +1193            /**
    +1194             * Creates a {@link CannotParseException}, indicating that the XML elements
    +1195             * that the parser expected to find are missing from property's XML element.
    +1196             * @param elements the names of the expected XML elements.
    +1197             */
    +1198            protected static CannotParseException missingXmlElements(String... elements) {
    +1199                    String message;
    +1200    
    +1201                    switch (elements.length) {
    +1202                    case 0:
    +1203                            message = "Property value empty.";
    +1204                            break;
    +1205                    case 1:
    +1206                            message = "Property value empty (no <" + elements[0] + "> element found).";
    +1207                            break;
    +1208                    case 2:
    +1209                            message = "Property value empty (no <" + elements[0] + "> or <" + elements[1] + "> elements found).";
    +1210                            break;
    +1211                    default:
    +1212                            StringBuilder sb = new StringBuilder();
    +1213    
    +1214                            sb.append("Property value empty (no ");
    +1215                            join(Arrays.asList(elements).subList(0, elements.length - 1), ", ", sb, new JoinCallback<String>() {
    +1216                                    public void handle(StringBuilder sb, String value) {
    +1217                                            sb.append('<').append(value).append('>');
    +1218                                    }
    +1219                            });
    +1220                            sb.append(", or <").append(elements[elements.length - 1]).append("> elements found).");
    +1221    
    +1222                            message = sb.toString();
    +1223                            break;
    +1224                    }
    +1225    
    +1226                    return new CannotParseException(message);
    +1227            }
    +1228    
    +1229            /**
    +1230             * Represents the result of an unmarshal operation.
    +1231             * @author Michael Angstadt
    +1232             * @param <T> the unmarshalled property class
    +1233             */
    +1234            public static class Result<T extends ICalProperty> {
    +1235                    private final T property;
    +1236                    private final List<String> warnings;
    +1237    
    +1238                    /**
    +1239                     * Creates a new result.
    +1240                     * @param property the property object
    +1241                     * @param warnings the warnings
    +1242                     */
    +1243                    public Result(T property, List<String> warnings) {
    +1244                            this.property = property;
    +1245                            this.warnings = warnings;
    +1246                    }
    +1247    
    +1248                    /**
    +1249                     * Gets the warnings.
    +1250                     * @return the warnings
    +1251                     */
    +1252                    public List<String> getWarnings() {
    +1253                            return warnings;
    +1254                    }
    +1255    
    +1256                    /**
    +1257                     * Gets the property object.
    +1258                     * @return the property object
    +1259                     */
    +1260                    public T getProperty() {
    +1261                            return property;
    +1262                    }
    +1263            }
    +1264    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/IntegerPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/IntegerPropertyMarshaller.html new file mode 100644 index 000000000..7da239699 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/IntegerPropertyMarshaller.html @@ -0,0 +1,175 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.ICalDataType;
    +006    import biweekly.io.CannotParseException;
    +007    import biweekly.io.json.JCalValue;
    +008    import biweekly.io.xml.XCalElement;
    +009    import biweekly.parameter.ICalParameters;
    +010    import biweekly.property.IntegerProperty;
    +011    
    +012    /*
    +013     Copyright (c) 2013, Michael Angstadt
    +014     All rights reserved.
    +015    
    +016     Redistribution and use in source and binary forms, with or without
    +017     modification, are permitted provided that the following conditions are met: 
    +018    
    +019     1. Redistributions of source code must retain the above copyright notice, this
    +020     list of conditions and the following disclaimer. 
    +021     2. Redistributions in binary form must reproduce the above copyright notice,
    +022     this list of conditions and the following disclaimer in the documentation
    +023     and/or other materials provided with the distribution. 
    +024    
    +025     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +026     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +027     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +028     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +029     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +030     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +031     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +032     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +033     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +034     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +035     */
    +036    
    +037    /**
    +038     * Marshals properties that have integer values.
    +039     * @param <T> the property class
    +040     * @author Michael Angstadt
    +041     */
    +042    public abstract class IntegerPropertyMarshaller<T extends IntegerProperty> extends ICalPropertyMarshaller<T> {
    +043            public IntegerPropertyMarshaller(Class<T> clazz, String propertyName) {
    +044                    super(clazz, propertyName, ICalDataType.INTEGER);
    +045            }
    +046    
    +047            @Override
    +048            protected String _writeText(T property) {
    +049                    Integer value = property.getValue();
    +050                    if (value != null) {
    +051                            return value.toString();
    +052                    }
    +053    
    +054                    return "";
    +055            }
    +056    
    +057            @Override
    +058            protected T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +059                    value = unescape(value);
    +060                    return parse(value);
    +061            }
    +062    
    +063            @Override
    +064            protected void _writeXml(T property, XCalElement element) {
    +065                    String valueStr = null;
    +066    
    +067                    Integer value = property.getValue();
    +068                    if (value != null) {
    +069                            valueStr = value.toString();
    +070                    }
    +071    
    +072                    element.append(dataType(property), valueStr);
    +073            }
    +074    
    +075            @Override
    +076            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +077                    String value = element.first(defaultDataType);
    +078                    if (value != null) {
    +079                            return parse(value);
    +080                    }
    +081    
    +082                    throw missingXmlElements(defaultDataType);
    +083            }
    +084    
    +085            @Override
    +086            protected JCalValue _writeJson(T property) {
    +087                    return JCalValue.single(property.getValue());
    +088            }
    +089    
    +090            @Override
    +091            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +092                    return parse(value.asSingle());
    +093            }
    +094    
    +095            private T parse(String value) {
    +096                    if (value == null || value.length() == 0) {
    +097                            return newInstance(null);
    +098                    }
    +099    
    +100                    try {
    +101                            Integer intValue = Integer.valueOf(value);
    +102                            return newInstance(intValue);
    +103                    } catch (NumberFormatException e) {
    +104                            throw new CannotParseException("Could not parse integer value.");
    +105                    }
    +106            }
    +107    
    +108            protected abstract T newInstance(Integer value);
    +109    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/LastModifiedMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/LastModifiedMarshaller.html new file mode 100644 index 000000000..c06846ec8 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/LastModifiedMarshaller.html @@ -0,0 +1,112 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.Date;
    +004    
    +005    import biweekly.property.LastModified;
    +006    
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * Marshals {@link LastModified} properties.
    +035     * @author Michael Angstadt
    +036     */
    +037    public class LastModifiedMarshaller extends DateTimePropertyMarshaller<LastModified> {
    +038            public LastModifiedMarshaller() {
    +039                    super(LastModified.class, "LAST-MODIFIED");
    +040            }
    +041    
    +042            @Override
    +043            protected LastModified newInstance(Date date) {
    +044                    return new LastModified(date);
    +045            }
    +046    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ListPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ListPropertyMarshaller.html new file mode 100644 index 000000000..c1bbf138b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ListPropertyMarshaller.html @@ -0,0 +1,180 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.ICalDataType;
    +006    import biweekly.io.json.JCalValue;
    +007    import biweekly.io.xml.XCalElement;
    +008    import biweekly.parameter.ICalParameters;
    +009    import biweekly.property.ListProperty;
    +010    
    +011    /*
    +012     Copyright (c) 2013, Michael Angstadt
    +013     All rights reserved.
    +014    
    +015     Redistribution and use in source and binary forms, with or without
    +016     modification, are permitted provided that the following conditions are met: 
    +017    
    +018     1. Redistributions of source code must retain the above copyright notice, this
    +019     list of conditions and the following disclaimer. 
    +020     2. Redistributions in binary form must reproduce the above copyright notice,
    +021     this list of conditions and the following disclaimer in the documentation
    +022     and/or other materials provided with the distribution. 
    +023    
    +024     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +025     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +026     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +027     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +028     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +029     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +030     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +031     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +032     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +033     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +034     */
    +035    
    +036    /**
    +037     * Marshals properties that contain a list of values.
    +038     * @param <T> the property class
    +039     * @param <V> the value class
    +040     * @author Michael Angstadt
    +041     */
    +042    public abstract class ListPropertyMarshaller<T extends ListProperty<V>, V> extends ICalPropertyMarshaller<T> {
    +043            public ListPropertyMarshaller(Class<T> clazz, String propertyName) {
    +044                    this(clazz, propertyName, ICalDataType.TEXT);
    +045            }
    +046    
    +047            public ListPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType dataType) {
    +048                    super(clazz, propertyName, dataType);
    +049            }
    +050    
    +051            @Override
    +052            protected String _writeText(final T property) {
    +053                    return list(property.getValues(), new ListCallback<V>() {
    +054                            public String asString(V value) {
    +055                                    return writeValue(property, value);
    +056                            }
    +057                    });
    +058            }
    +059    
    +060            @Override
    +061            protected T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +062                    return parse(list(value), dataType, parameters, warnings);
    +063            }
    +064    
    +065            @Override
    +066            protected void _writeXml(T property, XCalElement element) {
    +067                    for (V value : property.getValues()) {
    +068                            String valueStr = writeValue(property, value);
    +069                            element.append(dataType(property), valueStr);
    +070                    }
    +071            }
    +072    
    +073            @Override
    +074            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +075                    List<String> values = element.all(defaultDataType);
    +076                    if (!values.isEmpty()) {
    +077                            return parse(values, defaultDataType, parameters, warnings);
    +078                    }
    +079    
    +080                    throw missingXmlElements(defaultDataType);
    +081            }
    +082    
    +083            @Override
    +084            protected JCalValue _writeJson(T property) {
    +085                    List<V> values = property.getValues();
    +086                    if (!values.isEmpty()) {
    +087                            return JCalValue.multi(property.getValues());
    +088                    }
    +089    
    +090                    return JCalValue.single("");
    +091            }
    +092    
    +093            @Override
    +094            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +095                    return parse(value.asMulti(), dataType, parameters, warnings);
    +096            }
    +097    
    +098            private T parse(List<String> valueStrs, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +099                    T property = newInstance(dataType, parameters);
    +100    
    +101                    for (String valueStr : valueStrs) {
    +102                            V value = readValue(valueStr, dataType, parameters, warnings);
    +103                            property.addValue(value);
    +104                    }
    +105    
    +106                    return property;
    +107            }
    +108    
    +109            protected abstract T newInstance(ICalDataType dataType, ICalParameters parameters);
    +110    
    +111            protected abstract String writeValue(T property, V value);
    +112    
    +113            protected abstract V readValue(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings);
    +114    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/LocationMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/LocationMarshaller.html new file mode 100644 index 000000000..e8dda966b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/LocationMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.Location;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link Location} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class LocationMarshaller extends TextPropertyMarshaller<Location> {
    +035            public LocationMarshaller() {
    +036                    super(Location.class, "LOCATION");
    +037            }
    +038    
    +039            @Override
    +040            protected Location newInstance(String value) {
    +041                    return new Location(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/MethodMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/MethodMarshaller.html new file mode 100644 index 000000000..30954c5d2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/MethodMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.Method;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link Method} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class MethodMarshaller extends TextPropertyMarshaller<Method> {
    +035            public MethodMarshaller() {
    +036                    super(Method.class, "METHOD");
    +037            }
    +038    
    +039            @Override
    +040            protected Method newInstance(String value) {
    +041                    return new Method(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/OrganizerMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/OrganizerMarshaller.html new file mode 100644 index 000000000..6e1cc0a3f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/OrganizerMarshaller.html @@ -0,0 +1,110 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.ICalDataType;
    +004    import biweekly.property.Organizer;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Marshals {@link Organizer} properties.
    +033     * @author Michael Angstadt
    +034     */
    +035    public class OrganizerMarshaller extends TextPropertyMarshaller<Organizer> {
    +036            public OrganizerMarshaller() {
    +037                    super(Organizer.class, "ORGANIZER", ICalDataType.CAL_ADDRESS);
    +038            }
    +039    
    +040            @Override
    +041            protected Organizer newInstance(String value) {
    +042                    return new Organizer(value);
    +043            }
    +044    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/PercentCompleteMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/PercentCompleteMarshaller.html new file mode 100644 index 000000000..b0c33ea16 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/PercentCompleteMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.PercentComplete;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link PercentComplete} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class PercentCompleteMarshaller extends IntegerPropertyMarshaller<PercentComplete> {
    +035            public PercentCompleteMarshaller() {
    +036                    super(PercentComplete.class, "PERCENT-COMPLETE");
    +037            }
    +038    
    +039            @Override
    +040            protected PercentComplete newInstance(Integer value) {
    +041                    return new PercentComplete(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/PriorityMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/PriorityMarshaller.html new file mode 100644 index 000000000..2345b2443 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/PriorityMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.Priority;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link Priority} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class PriorityMarshaller extends IntegerPropertyMarshaller<Priority> {
    +035            public PriorityMarshaller() {
    +036                    super(Priority.class, "PRIORITY");
    +037            }
    +038    
    +039            @Override
    +040            protected Priority newInstance(Integer value) {
    +041                    return new Priority(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ProductIdMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ProductIdMarshaller.html new file mode 100644 index 000000000..96abc8c7a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ProductIdMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.ProductId;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link ProductId} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class ProductIdMarshaller extends TextPropertyMarshaller<ProductId> {
    +035            public ProductIdMarshaller() {
    +036                    super(ProductId.class, "PRODID");
    +037            }
    +038    
    +039            @Override
    +040            protected ProductId newInstance(String value) {
    +041                    return new ProductId(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RawPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RawPropertyMarshaller.html new file mode 100644 index 000000000..2480ff744 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RawPropertyMarshaller.html @@ -0,0 +1,155 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.List;
    +004    
    +005    import org.w3c.dom.Element;
    +006    
    +007    import biweekly.ICalDataType;
    +008    import biweekly.io.xml.XCalElement;
    +009    import biweekly.io.xml.XCalNamespaceContext;
    +010    import biweekly.parameter.ICalParameters;
    +011    import biweekly.property.RawProperty;
    +012    import biweekly.util.XmlUtils;
    +013    
    +014    /*
    +015     Copyright (c) 2013, Michael Angstadt
    +016     All rights reserved.
    +017    
    +018     Redistribution and use in source and binary forms, with or without
    +019     modification, are permitted provided that the following conditions are met: 
    +020    
    +021     1. Redistributions of source code must retain the above copyright notice, this
    +022     list of conditions and the following disclaimer. 
    +023     2. Redistributions in binary form must reproduce the above copyright notice,
    +024     this list of conditions and the following disclaimer in the documentation
    +025     and/or other materials provided with the distribution. 
    +026    
    +027     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +028     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +029     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +030     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +031     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +032     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +033     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +034     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +035     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +036     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +037     */
    +038    
    +039    /**
    +040     * Marshals properties that do not have a marshaller associated with them.
    +041     * @author Michael Angstadt
    +042     */
    +043    public class RawPropertyMarshaller extends ICalPropertyMarshaller<RawProperty> {
    +044            public RawPropertyMarshaller(String propertyName) {
    +045                    super(RawProperty.class, propertyName, null);
    +046            }
    +047    
    +048            @Override
    +049            protected ICalDataType _dataType(RawProperty property) {
    +050                    return property.getDataType();
    +051            }
    +052    
    +053            @Override
    +054            protected String _writeText(RawProperty property) {
    +055                    String value = property.getValue();
    +056                    if (value != null) {
    +057                            return value;
    +058                    }
    +059    
    +060                    return "";
    +061            }
    +062    
    +063            @Override
    +064            protected RawProperty _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +065                    return new RawProperty(propertyName, dataType, value);
    +066            }
    +067    
    +068            @Override
    +069            protected RawProperty _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +070                    Element rawElement = element.getElement();
    +071                    String name = rawElement.getLocalName();
    +072    
    +073                    //get the text content of the first child element with the xCard namespace
    +074                    List<Element> children = XmlUtils.toElementList(rawElement.getChildNodes());
    +075                    for (Element child : children) {
    +076                            if (!XCalNamespaceContext.XCAL_NS.equals(child.getNamespaceURI())) {
    +077                                    continue;
    +078                            }
    +079    
    +080                            String value = child.getTextContent();
    +081                            ICalDataType dataType = ICalDataType.get(child.getLocalName());
    +082                            return new RawProperty(name, dataType, value);
    +083                    }
    +084    
    +085                    //get the text content of the property element
    +086                    String value = rawElement.getTextContent();
    +087                    return new RawProperty(name, null, value);
    +088            }
    +089    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrenceDatesMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrenceDatesMarshaller.html new file mode 100644 index 000000000..0d11d12a1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrenceDatesMarshaller.html @@ -0,0 +1,379 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.Date;
    +005    import java.util.List;
    +006    
    +007    import biweekly.ICalDataType;
    +008    import biweekly.io.json.JCalValue;
    +009    import biweekly.io.xml.XCalElement;
    +010    import biweekly.parameter.ICalParameters;
    +011    import biweekly.property.RecurrenceDates;
    +012    import biweekly.util.Duration;
    +013    import biweekly.util.Period;
    +014    
    +015    /*
    +016     Copyright (c) 2013, Michael Angstadt
    +017     All rights reserved.
    +018    
    +019     Redistribution and use in source and binary forms, with or without
    +020     modification, are permitted provided that the following conditions are met: 
    +021    
    +022     1. Redistributions of source code must retain the above copyright notice, this
    +023     list of conditions and the following disclaimer. 
    +024     2. Redistributions in binary form must reproduce the above copyright notice,
    +025     this list of conditions and the following disclaimer in the documentation
    +026     and/or other materials provided with the distribution. 
    +027    
    +028     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +029     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +030     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +031     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +032     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +033     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +034     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +035     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +036     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +037     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +038     */
    +039    
    +040    /**
    +041     * Marshals {@link RecurrenceDates} properties.
    +042     * @author Michael Angstadt
    +043     */
    +044    public class RecurrenceDatesMarshaller extends ICalPropertyMarshaller<RecurrenceDates> {
    +045            public RecurrenceDatesMarshaller() {
    +046                    super(RecurrenceDates.class, "RDATE", ICalDataType.DATE_TIME);
    +047            }
    +048    
    +049            @Override
    +050            protected ICalDataType _dataType(RecurrenceDates property) {
    +051                    if (property.getDates() != null) {
    +052                            return property.hasTime() ? ICalDataType.DATE_TIME : ICalDataType.DATE;
    +053                    }
    +054                    if (property.getPeriods() != null) {
    +055                            return ICalDataType.PERIOD;
    +056                    }
    +057                    return getDefaultDataType();
    +058            }
    +059    
    +060            @Override
    +061            protected String _writeText(final RecurrenceDates property) {
    +062                    List<Date> dates = property.getDates();
    +063                    if (dates != null) {
    +064                            return list(dates, new ListCallback<Date>() {
    +065                                    public String asString(Date date) {
    +066                                            return date(date).time(property.hasTime()).tzid(property.getTimezoneId()).write();
    +067                                    }
    +068                            });
    +069                    }
    +070    
    +071                    List<Period> periods = property.getPeriods();
    +072                    if (periods != null) {
    +073                            return list(periods, new ListCallback<Period>() {
    +074                                    public String asString(Period period) {
    +075                                            StringBuilder sb = new StringBuilder();
    +076    
    +077                                            if (period.getStartDate() != null) {
    +078                                                    String date = date(period.getStartDate()).tzid(property.getTimezoneId()).write();
    +079                                                    sb.append(date);
    +080                                            }
    +081    
    +082                                            sb.append('/');
    +083    
    +084                                            if (period.getEndDate() != null) {
    +085                                                    String date = date(period.getEndDate()).tzid(property.getTimezoneId()).write();
    +086                                                    sb.append(date);
    +087                                            } else if (period.getDuration() != null) {
    +088                                                    sb.append(period.getDuration());
    +089                                            }
    +090    
    +091                                            return sb.toString();
    +092                                    }
    +093                            });
    +094                    }
    +095    
    +096                    return "";
    +097            }
    +098    
    +099            @Override
    +100            protected RecurrenceDates _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +101                    return parse(list(value), dataType, parameters, warnings);
    +102            }
    +103    
    +104            @Override
    +105            protected void _writeXml(RecurrenceDates property, XCalElement element) {
    +106                    List<Date> dates = property.getDates();
    +107                    if (dates != null) {
    +108                            ICalDataType dataType = property.hasTime() ? ICalDataType.DATE_TIME : ICalDataType.DATE;
    +109                            if (dates.isEmpty()) {
    +110                                    element.append(dataType, "");
    +111                            } else {
    +112                                    for (Date date : dates) {
    +113                                            String dateStr = date(date).time(property.hasTime()).tzid(property.getTimezoneId()).extended(true).write();
    +114                                            element.append(dataType, dateStr);
    +115                                    }
    +116                            }
    +117                            return;
    +118                    }
    +119    
    +120                    List<Period> periods = property.getPeriods();
    +121                    if (periods != null) {
    +122                            if (periods.isEmpty()) {
    +123                                    element.append(ICalDataType.PERIOD, "");
    +124                            } else {
    +125                                    for (Period period : periods) {
    +126                                            XCalElement periodElement = element.append(ICalDataType.PERIOD);
    +127    
    +128                                            Date start = period.getStartDate();
    +129                                            if (start != null) {
    +130                                                    periodElement.append("start", date(start).tzid(property.getTimezoneId()).extended(true).write());
    +131                                            }
    +132    
    +133                                            Date end = period.getEndDate();
    +134                                            if (end != null) {
    +135                                                    periodElement.append("end", date(end).tzid(property.getTimezoneId()).extended(true).write());
    +136                                            }
    +137    
    +138                                            Duration duration = period.getDuration();
    +139                                            if (duration != null) {
    +140                                                    periodElement.append("duration", duration.toString());
    +141                                            }
    +142                                    }
    +143                            }
    +144                            return;
    +145                    }
    +146    
    +147                    element.append(defaultDataType, "");
    +148            }
    +149    
    +150            @Override
    +151            protected RecurrenceDates _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +152                    //parse as periods
    +153                    List<XCalElement> periodElements = element.children(ICalDataType.PERIOD);
    +154                    if (!periodElements.isEmpty()) {
    +155                            List<Period> periods = new ArrayList<Period>(periodElements.size());
    +156                            for (XCalElement periodElement : periodElements) {
    +157                                    String startStr = periodElement.first("start");
    +158                                    if (startStr == null) {
    +159                                            warnings.add("No start date found in time period, skipping.");
    +160                                            continue;
    +161                                    }
    +162    
    +163                                    Date start = null;
    +164                                    try {
    +165                                            start = date(startStr).tzid(parameters.getTimezoneId(), warnings).parse();
    +166                                    } catch (IllegalArgumentException e) {
    +167                                            warnings.add("Could not parse start date, skipping time period: " + startStr);
    +168                                            continue;
    +169                                    }
    +170    
    +171                                    String endStr = periodElement.first("end");
    +172                                    if (endStr != null) {
    +173                                            try {
    +174                                                    Date end = date(endStr).tzid(parameters.getTimezoneId(), warnings).parse();
    +175                                                    periods.add(new Period(start, end));
    +176                                            } catch (IllegalArgumentException e) {
    +177                                                    warnings.add("Could not parse end date, skipping time period: " + endStr);
    +178                                            }
    +179                                            continue;
    +180                                    }
    +181    
    +182                                    String durationStr = periodElement.first("duration");
    +183                                    if (durationStr != null) {
    +184                                            try {
    +185                                                    Duration duration = Duration.parse(durationStr);
    +186                                                    periods.add(new Period(start, duration));
    +187                                            } catch (IllegalArgumentException e) {
    +188                                                    warnings.add("Could not parse duration, skipping time period: " + durationStr);
    +189                                            }
    +190                                            continue;
    +191                                    }
    +192    
    +193                                    warnings.add("Start date has no accompanying end date or duration, skipping.");
    +194                            }
    +195                            return new RecurrenceDates(periods);
    +196                    }
    +197    
    +198                    //parse as dates
    +199                    List<String> dateStrs = element.all(ICalDataType.DATE_TIME);
    +200                    boolean hasTime = !dateStrs.isEmpty();
    +201                    dateStrs.addAll(element.all(ICalDataType.DATE));
    +202                    if (!dateStrs.isEmpty()) {
    +203                            List<Date> dates = new ArrayList<Date>(dateStrs.size());
    +204                            for (String dateStr : dateStrs) {
    +205                                    try {
    +206                                            Date date = date(dateStr).tzid(parameters.getTimezoneId(), warnings).parse();
    +207                                            dates.add(date);
    +208                                    } catch (IllegalArgumentException e) {
    +209                                            warnings.add("Skipping unparsable date: " + dateStr);
    +210                                    }
    +211                            }
    +212                            return new RecurrenceDates(dates, hasTime);
    +213                    }
    +214    
    +215                    throw missingXmlElements(ICalDataType.PERIOD, ICalDataType.DATE_TIME, ICalDataType.DATE);
    +216            }
    +217    
    +218            @Override
    +219            protected JCalValue _writeJson(RecurrenceDates property) {
    +220                    List<String> values = new ArrayList<String>();
    +221    
    +222                    List<Date> dates = property.getDates();
    +223                    List<Period> periods = property.getPeriods();
    +224                    if (dates != null) {
    +225                            for (Date date : dates) {
    +226                                    String dateStr = date(date).time(property.hasTime()).tzid(property.getTimezoneId()).extended(true).write();
    +227                                    values.add(dateStr);
    +228                            }
    +229                    } else if (periods != null) {
    +230                            for (Period period : property.getPeriods()) {
    +231                                    StringBuilder sb = new StringBuilder();
    +232                                    if (period.getStartDate() != null) {
    +233                                            String value = date(period.getStartDate()).tzid(property.getTimezoneId()).extended(true).write();
    +234                                            sb.append(value);
    +235                                    }
    +236    
    +237                                    sb.append('/');
    +238    
    +239                                    if (period.getEndDate() != null) {
    +240                                            String value = date(period.getEndDate()).tzid(property.getTimezoneId()).extended(true).write();
    +241                                            sb.append(value);
    +242                                    } else if (period.getDuration() != null) {
    +243                                            sb.append(period.getDuration());
    +244                                    }
    +245    
    +246                                    values.add(sb.toString());
    +247                            }
    +248                    }
    +249    
    +250                    if (values.isEmpty()) {
    +251                            values.add("");
    +252                    }
    +253                    return JCalValue.multi(values);
    +254            }
    +255    
    +256            @Override
    +257            protected RecurrenceDates _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +258                    return parse(value.asMulti(), dataType, parameters, warnings);
    +259            }
    +260    
    +261            private RecurrenceDates parse(List<String> valueStrs, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +262                    if (dataType == ICalDataType.PERIOD) {
    +263                            //parse as periods
    +264                            List<Period> periods = new ArrayList<Period>(valueStrs.size());
    +265                            for (String timePeriodStr : valueStrs) {
    +266                                    String timePeriodStrSplit[] = timePeriodStr.split("/");
    +267    
    +268                                    if (timePeriodStrSplit.length < 2) {
    +269                                            warnings.add("No end date or duration found, skipping time period: " + timePeriodStr);
    +270                                            continue;
    +271                                    }
    +272    
    +273                                    String startStr = timePeriodStrSplit[0];
    +274                                    Date start;
    +275                                    try {
    +276                                            start = date(startStr).tzid(parameters.getTimezoneId(), warnings).parse();
    +277                                    } catch (IllegalArgumentException e) {
    +278                                            warnings.add("Could not parse start date, skipping time period: " + timePeriodStr);
    +279                                            continue;
    +280                                    }
    +281    
    +282                                    String endStr = timePeriodStrSplit[1];
    +283                                    try {
    +284                                            Date end = date(endStr).tzid(parameters.getTimezoneId(), warnings).parse();
    +285                                            periods.add(new Period(start, end));
    +286                                    } catch (IllegalArgumentException e) {
    +287                                            //must be a duration
    +288                                            try {
    +289                                                    Duration duration = Duration.parse(endStr);
    +290                                                    periods.add(new Period(start, duration));
    +291                                            } catch (IllegalArgumentException e2) {
    +292                                                    warnings.add("Could not parse end date or duration value, skipping time period: " + timePeriodStr);
    +293                                                    continue;
    +294                                            }
    +295                                    }
    +296                            }
    +297                            return new RecurrenceDates(periods);
    +298                    }
    +299    
    +300                    //parse as dates
    +301                    boolean hasTime = (dataType == ICalDataType.DATE_TIME);
    +302                    List<Date> dates = new ArrayList<Date>(valueStrs.size());
    +303                    for (String s : valueStrs) {
    +304                            try {
    +305                                    Date date = date(s).tzid(parameters.getTimezoneId(), warnings).parse();
    +306                                    dates.add(date);
    +307                            } catch (IllegalArgumentException e) {
    +308                                    warnings.add("Skipping unparsable date: " + s);
    +309                            }
    +310                    }
    +311                    return new RecurrenceDates(dates, hasTime);
    +312            }
    +313    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrenceIdMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrenceIdMarshaller.html new file mode 100644 index 000000000..93f2aca6b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrenceIdMarshaller.html @@ -0,0 +1,112 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.Date;
    +004    
    +005    import biweekly.property.RecurrenceId;
    +006    
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * Marshals {@link RecurrenceId} properties.
    +035     * @author Michael Angstadt
    +036     */
    +037    public class RecurrenceIdMarshaller extends DateOrDateTimePropertyMarshaller<RecurrenceId> {
    +038            public RecurrenceIdMarshaller() {
    +039                    super(RecurrenceId.class, "RECURRENCE-ID");
    +040            }
    +041    
    +042            @Override
    +043            protected RecurrenceId newInstance(Date date, boolean hasTime) {
    +044                    return new RecurrenceId(date, hasTime);
    +045            }
    +046    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrencePropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrencePropertyMarshaller.html new file mode 100644 index 000000000..8cc2fb47d --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrencePropertyMarshaller.html @@ -0,0 +1,524 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.Date;
    +004    import java.util.Iterator;
    +005    import java.util.List;
    +006    import java.util.Map;
    +007    import java.util.regex.Matcher;
    +008    import java.util.regex.Pattern;
    +009    
    +010    import org.w3c.dom.Element;
    +011    
    +012    import biweekly.ICalDataType;
    +013    import biweekly.io.json.JCalValue;
    +014    import biweekly.io.xml.XCalElement;
    +015    import biweekly.io.xml.XCalNamespaceContext;
    +016    import biweekly.parameter.ICalParameters;
    +017    import biweekly.property.RecurrenceProperty;
    +018    import biweekly.util.ICalDateFormatter;
    +019    import biweekly.util.ListMultimap;
    +020    import biweekly.util.Recurrence;
    +021    import biweekly.util.Recurrence.DayOfWeek;
    +022    import biweekly.util.Recurrence.Frequency;
    +023    import biweekly.util.XmlUtils;
    +024    
    +025    /*
    +026     Copyright (c) 2013, Michael Angstadt
    +027     All rights reserved.
    +028    
    +029     Redistribution and use in source and binary forms, with or without
    +030     modification, are permitted provided that the following conditions are met: 
    +031    
    +032     1. Redistributions of source code must retain the above copyright notice, this
    +033     list of conditions and the following disclaimer. 
    +034     2. Redistributions in binary form must reproduce the above copyright notice,
    +035     this list of conditions and the following disclaimer in the documentation
    +036     and/or other materials provided with the distribution. 
    +037    
    +038     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +039     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +040     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +041     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +042     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +043     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +044     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +045     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +046     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +047     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +048     */
    +049    
    +050    /**
    +051     * Marshals properties whose values are {@link Recurrence}.
    +052     * @param <T> the property class
    +053     * @author Michael Angstadt
    +054     */
    +055    public abstract class RecurrencePropertyMarshaller<T extends RecurrenceProperty> extends ICalPropertyMarshaller<T> {
    +056            public RecurrencePropertyMarshaller(Class<T> clazz, String propertyName) {
    +057                    super(clazz, propertyName, ICalDataType.RECUR);
    +058            }
    +059    
    +060            @Override
    +061            protected String _writeText(T property) {
    +062                    Recurrence recur = property.getValue();
    +063                    if (recur == null) {
    +064                            return "";
    +065                    }
    +066    
    +067                    ListMultimap<String, Object> components = buildComponents(recur, false);
    +068                    return object(components.getMap());
    +069            }
    +070    
    +071            @Override
    +072            protected T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +073                    Recurrence.Builder builder = new Recurrence.Builder((Frequency) null);
    +074                    ListMultimap<String, String> rules = object(value);
    +075    
    +076                    parseFreq(rules, builder, warnings);
    +077                    parseUntil(rules, builder, warnings);
    +078                    parseCount(rules, builder, warnings);
    +079                    parseInterval(rules, builder, warnings);
    +080                    parseBySecond(rules, builder, warnings);
    +081                    parseByMinute(rules, builder, warnings);
    +082                    parseByHour(rules, builder, warnings);
    +083                    parseByDay(rules, builder, warnings);
    +084                    parseByMonthDay(rules, builder, warnings);
    +085                    parseByYearDay(rules, builder, warnings);
    +086                    parseByWeekNo(rules, builder, warnings);
    +087                    parseByMonth(rules, builder, warnings);
    +088                    parseBySetPos(rules, builder, warnings);
    +089                    parseWkst(rules, builder, warnings);
    +090                    parseXRules(rules, builder, warnings); //must be called last
    +091    
    +092                    return newInstance(builder.build());
    +093            }
    +094    
    +095            @Override
    +096            protected void _writeXml(T property, XCalElement element) {
    +097                    XCalElement recurElement = element.append(dataType(property));
    +098    
    +099                    Recurrence recur = property.getValue();
    +100                    if (recur == null) {
    +101                            return;
    +102                    }
    +103    
    +104                    ListMultimap<String, Object> components = buildComponents(recur, true);
    +105                    for (Map.Entry<String, List<Object>> component : components) {
    +106                            String name = component.getKey().toLowerCase();
    +107                            for (Object value : component.getValue()) {
    +108                                    recurElement.append(name, value.toString());
    +109                            }
    +110                    }
    +111            }
    +112    
    +113            @Override
    +114            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +115                    XCalElement value = element.child(defaultDataType);
    +116                    if (value == null) {
    +117                            throw missingXmlElements(defaultDataType);
    +118                    }
    +119    
    +120                    ListMultimap<String, String> rules = new ListMultimap<String, String>();
    +121                    for (Element child : XmlUtils.toElementList(value.getElement().getChildNodes())) {
    +122                            if (!XCalNamespaceContext.XCAL_NS.equals(child.getNamespaceURI())) {
    +123                                    continue;
    +124                            }
    +125    
    +126                            String name = child.getLocalName().toUpperCase();
    +127                            String text = child.getTextContent();
    +128                            rules.put(name, text);
    +129                    }
    +130    
    +131                    Recurrence.Builder builder = new Recurrence.Builder((Frequency) null);
    +132    
    +133                    parseFreq(rules, builder, warnings);
    +134                    parseUntil(rules, builder, warnings);
    +135                    parseCount(rules, builder, warnings);
    +136                    parseInterval(rules, builder, warnings);
    +137                    parseBySecond(rules, builder, warnings);
    +138                    parseByMinute(rules, builder, warnings);
    +139                    parseByHour(rules, builder, warnings);
    +140                    parseByDay(rules, builder, warnings);
    +141                    parseByMonthDay(rules, builder, warnings);
    +142                    parseByYearDay(rules, builder, warnings);
    +143                    parseByWeekNo(rules, builder, warnings);
    +144                    parseByMonth(rules, builder, warnings);
    +145                    parseBySetPos(rules, builder, warnings);
    +146                    parseWkst(rules, builder, warnings);
    +147                    parseXRules(rules, builder, warnings); //must be called last
    +148    
    +149                    return newInstance(builder.build());
    +150            }
    +151    
    +152            @Override
    +153            protected JCalValue _writeJson(T property) {
    +154                    Recurrence recur = property.getValue();
    +155                    if (recur == null) {
    +156                            return JCalValue.object(new ListMultimap<String, Object>(0));
    +157                    }
    +158    
    +159                    ListMultimap<String, Object> components = buildComponents(recur, true);
    +160    
    +161                    //lower-case all the keys
    +162                    ListMultimap<String, Object> object = new ListMultimap<String, Object>(components.keySet().size());
    +163                    for (Map.Entry<String, List<Object>> entry : components) {
    +164                            String key = entry.getKey().toLowerCase();
    +165                            object.putAll(key, entry.getValue());
    +166                    }
    +167    
    +168                    return JCalValue.object(object);
    +169            }
    +170    
    +171            @Override
    +172            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +173                    Recurrence.Builder builder = new Recurrence.Builder((Frequency) null);
    +174    
    +175                    //upper-case the keys
    +176                    ListMultimap<String, String> object = value.asObject();
    +177                    ListMultimap<String, String> rules = new ListMultimap<String, String>(object.keySet().size());
    +178                    for (Map.Entry<String, List<String>> entry : object) {
    +179                            String key = entry.getKey().toUpperCase();
    +180                            rules.putAll(key, entry.getValue());
    +181                    }
    +182    
    +183                    parseFreq(rules, builder, warnings);
    +184                    parseUntil(rules, builder, warnings);
    +185                    parseCount(rules, builder, warnings);
    +186                    parseInterval(rules, builder, warnings);
    +187                    parseBySecond(rules, builder, warnings);
    +188                    parseByMinute(rules, builder, warnings);
    +189                    parseByHour(rules, builder, warnings);
    +190                    parseByDay(rules, builder, warnings);
    +191                    parseByMonthDay(rules, builder, warnings);
    +192                    parseByYearDay(rules, builder, warnings);
    +193                    parseByWeekNo(rules, builder, warnings);
    +194                    parseByMonth(rules, builder, warnings);
    +195                    parseBySetPos(rules, builder, warnings);
    +196                    parseWkst(rules, builder, warnings);
    +197                    parseXRules(rules, builder, warnings); //must be called last
    +198    
    +199                    return newInstance(builder.build());
    +200            }
    +201    
    +202            /**
    +203             * Creates a new instance of the recurrence property.
    +204             * @param recur the recurrence value
    +205             * @return the new instance
    +206             */
    +207            protected abstract T newInstance(Recurrence recur);
    +208    
    +209            private void parseFreq(ListMultimap<String, String> rules, Recurrence.Builder builder, List<String> warnings) {
    +210                    List<String> values = rules.removeAll("FREQ");
    +211                    if (values.isEmpty()) {
    +212                            return;
    +213                    }
    +214    
    +215                    String value = values.get(0);
    +216                    try {
    +217                            builder.frequency(Frequency.valueOf(value.toUpperCase()));
    +218                    } catch (IllegalArgumentException e) {
    +219                            warnings.add("Unable to parse FREQ value: " + value);
    +220                    }
    +221            }
    +222    
    +223            private void parseUntil(ListMultimap<String, String> rules, Recurrence.Builder builder, List<String> warnings) {
    +224                    List<String> values = rules.removeAll("UNTIL");
    +225                    if (values.isEmpty()) {
    +226                            return;
    +227                    }
    +228    
    +229                    String value = values.get(0);
    +230                    try {
    +231                            Date date = date(value).parse();
    +232                            boolean hasTime = ICalDateFormatter.dateHasTime(value);
    +233                            builder.until(date, hasTime);
    +234                    } catch (IllegalArgumentException e) {
    +235                            warnings.add("Unable to parse UNTIL value: " + value);
    +236                    }
    +237            }
    +238    
    +239            private void parseCount(ListMultimap<String, String> rules, Recurrence.Builder builder, List<String> warnings) {
    +240                    List<String> values = rules.removeAll("COUNT");
    +241                    if (values.isEmpty()) {
    +242                            return;
    +243                    }
    +244    
    +245                    String value = values.get(0);
    +246                    try {
    +247                            builder.count(Integer.valueOf(value));
    +248                    } catch (NumberFormatException e) {
    +249                            warnings.add("Unable to parse COUNT value: " + value);
    +250                    }
    +251            }
    +252    
    +253            private void parseInterval(ListMultimap<String, String> rules, Recurrence.Builder builder, List<String> warnings) {
    +254                    List<String> values = rules.removeAll("INTERVAL");
    +255                    if (values.isEmpty()) {
    +256                            return;
    +257                    }
    +258    
    +259                    String value = values.get(0);
    +260                    try {
    +261                            builder.interval(Integer.valueOf(value));
    +262                    } catch (NumberFormatException e) {
    +263                            warnings.add("Unable to parse INTERVAL value: " + value);
    +264                    }
    +265            }
    +266    
    +267            private void parseBySecond(ListMultimap<String, String> rules, final Recurrence.Builder builder, List<String> warnings) {
    +268                    parseIntegerList("BYSECOND", rules.removeAll("BYSECOND"), warnings, new ListHandler() {
    +269                            public void handle(Integer value) {
    +270                                    builder.bySecond(value);
    +271                            }
    +272                    });
    +273            }
    +274    
    +275            private void parseByMinute(ListMultimap<String, String> rules, final Recurrence.Builder builder, List<String> warnings) {
    +276                    parseIntegerList("BYMINUTE", rules.removeAll("BYMINUTE"), warnings, new ListHandler() {
    +277                            public void handle(Integer value) {
    +278                                    builder.byMinute(value);
    +279                            }
    +280                    });
    +281            }
    +282    
    +283            private void parseByHour(ListMultimap<String, String> rules, final Recurrence.Builder builder, List<String> warnings) {
    +284                    parseIntegerList("BYHOUR", rules.removeAll("BYHOUR"), warnings, new ListHandler() {
    +285                            public void handle(Integer value) {
    +286                                    builder.byHour(value);
    +287                            }
    +288                    });
    +289            }
    +290    
    +291            private void parseByDay(ListMultimap<String, String> rules, Recurrence.Builder builder, List<String> warnings) {
    +292                    Pattern p = Pattern.compile("^([-+]?\\d+)?(.*)$");
    +293                    for (String value : rules.removeAll("BYDAY")) {
    +294                            Matcher m = p.matcher(value);
    +295                            if (!m.find()) {
    +296                                    //this should never happen
    +297                                    //the regex contains a "match-all" pattern and should never not find anything
    +298                                    warnings.add("Unable to parse BYDAY value (invalid format): " + value);
    +299                                    continue;
    +300                            }
    +301    
    +302                            String dayStr = m.group(2);
    +303                            DayOfWeek day = DayOfWeek.valueOfAbbr(dayStr);
    +304                            if (day == null) {
    +305                                    warnings.add("Unable to parse BYDAY value (invalid day of the week): " + value);
    +306                                    continue;
    +307                            }
    +308    
    +309                            String prefixStr = m.group(1);
    +310                            Integer prefix = (prefixStr == null) ? null : Integer.valueOf(prefixStr); //no need to catch NumberFormatException because the regex guarantees that it will be a number
    +311    
    +312                            builder.byDay(prefix, day);
    +313                    }
    +314            }
    +315    
    +316            private void parseByMonthDay(ListMultimap<String, String> rules, final Recurrence.Builder builder, List<String> warnings) {
    +317                    parseIntegerList("BYMONTHDAY", rules.removeAll("BYMONTHDAY"), warnings, new ListHandler() {
    +318                            public void handle(Integer value) {
    +319                                    builder.byMonthDay(value);
    +320                            }
    +321                    });
    +322            }
    +323    
    +324            private void parseByYearDay(ListMultimap<String, String> rules, final Recurrence.Builder builder, List<String> warnings) {
    +325                    parseIntegerList("BYYEARDAY", rules.removeAll("BYYEARDAY"), warnings, new ListHandler() {
    +326                            public void handle(Integer value) {
    +327                                    builder.byYearDay(value);
    +328                            }
    +329                    });
    +330            }
    +331    
    +332            private void parseByWeekNo(ListMultimap<String, String> rules, final Recurrence.Builder builder, List<String> warnings) {
    +333                    parseIntegerList("BYWEEKNO", rules.removeAll("BYWEEKNO"), warnings, new ListHandler() {
    +334                            public void handle(Integer value) {
    +335                                    builder.byWeekNo(value);
    +336                            }
    +337                    });
    +338            }
    +339    
    +340            private void parseByMonth(ListMultimap<String, String> rules, final Recurrence.Builder builder, List<String> warnings) {
    +341                    parseIntegerList("BYMONTH", rules.removeAll("BYMONTH"), warnings, new ListHandler() {
    +342                            public void handle(Integer value) {
    +343                                    builder.byMonth(value);
    +344                            }
    +345                    });
    +346            }
    +347    
    +348            private void parseBySetPos(ListMultimap<String, String> rules, final Recurrence.Builder builder, List<String> warnings) {
    +349                    parseIntegerList("BYSETPOS", rules.removeAll("BYSETPOS"), warnings, new ListHandler() {
    +350                            public void handle(Integer value) {
    +351                                    builder.bySetPos(value);
    +352                            }
    +353                    });
    +354            }
    +355    
    +356            private void parseWkst(ListMultimap<String, String> rules, Recurrence.Builder builder, List<String> warnings) {
    +357                    List<String> values = rules.removeAll("WKST");
    +358                    if (values.isEmpty()) {
    +359                            return;
    +360                    }
    +361    
    +362                    String value = values.get(0);
    +363                    DayOfWeek day = DayOfWeek.valueOfAbbr(value);
    +364                    if (day == null) {
    +365                            warnings.add("Unable to parse WKST (invalid day of the week): " + value);
    +366                            return;
    +367                    }
    +368    
    +369                    builder.workweekStarts(day);
    +370            }
    +371    
    +372            private void parseXRules(ListMultimap<String, String> rules, Recurrence.Builder builder, List<String> warnings) {
    +373                    for (Map.Entry<String, List<String>> rule : rules) {
    +374                            String name = rule.getKey();
    +375                            for (String value : rule.getValue()) {
    +376                                    builder.xrule(name, value);
    +377                            }
    +378                    }
    +379            }
    +380    
    +381            private ListMultimap<String, Object> buildComponents(Recurrence recur, boolean extended) {
    +382                    ListMultimap<String, Object> components = new ListMultimap<String, Object>();
    +383    
    +384                    //FREQ must come first
    +385                    if (recur.getFrequency() != null) {
    +386                            components.put("FREQ", recur.getFrequency().name());
    +387                    }
    +388    
    +389                    if (recur.getUntil() != null) {
    +390                            String s = date(recur.getUntil()).time(recur.hasTimeUntilDate()).extended(extended).write();
    +391                            components.put("UNTIL", s);
    +392                    }
    +393    
    +394                    if (recur.getCount() != null) {
    +395                            components.put("COUNT", recur.getCount());
    +396                    }
    +397    
    +398                    if (recur.getInterval() != null) {
    +399                            components.put("INTERVAL", recur.getInterval());
    +400                    }
    +401    
    +402                    addIntegerListComponent(components, "BYSECOND", recur.getBySecond());
    +403                    addIntegerListComponent(components, "BYMINUTE", recur.getByMinute());
    +404                    addIntegerListComponent(components, "BYHOUR", recur.getByHour());
    +405    
    +406                    Iterator<Integer> prefixIt = recur.getByDayPrefixes().iterator();
    +407                    Iterator<DayOfWeek> dayIt = recur.getByDay().iterator();
    +408                    while (prefixIt.hasNext() && dayIt.hasNext()) {
    +409                            Integer prefix = prefixIt.next();
    +410                            DayOfWeek day = dayIt.next();
    +411    
    +412                            String value = day.getAbbr();
    +413                            if (prefix != null) {
    +414                                    value = prefix + value;
    +415                            }
    +416                            components.put("BYDAY", value);
    +417                    }
    +418    
    +419                    addIntegerListComponent(components, "BYMONTHDAY", recur.getByMonthDay());
    +420                    addIntegerListComponent(components, "BYYEARDAY", recur.getByYearDay());
    +421                    addIntegerListComponent(components, "BYWEEKNO", recur.getByWeekNo());
    +422                    addIntegerListComponent(components, "BYMONTH", recur.getByMonth());
    +423                    addIntegerListComponent(components, "BYSETPOS", recur.getBySetPos());
    +424    
    +425                    if (recur.getWorkweekStarts() != null) {
    +426                            components.put("WKST", recur.getWorkweekStarts().getAbbr());
    +427                    }
    +428    
    +429                    for (Map.Entry<String, List<String>> entry : recur.getXRules().entrySet()) {
    +430                            String name = entry.getKey();
    +431                            for (String value : entry.getValue()) {
    +432                                    components.put(name, value);
    +433                            }
    +434                    }
    +435    
    +436                    return components;
    +437            }
    +438    
    +439            private void addIntegerListComponent(ListMultimap<String, Object> components, String name, List<Integer> values) {
    +440                    for (Integer value : values) {
    +441                            components.put(name, value);
    +442                    }
    +443            }
    +444    
    +445            private void parseIntegerList(String name, List<String> values, List<String> warnings, ListHandler handler) {
    +446                    for (String value : values) {
    +447                            try {
    +448                                    handler.handle(Integer.valueOf(value));
    +449                            } catch (NumberFormatException e) {
    +450                                    warnings.add("Ignoring non-numeric value found in " + name + ": " + value);
    +451                            }
    +452                    }
    +453            }
    +454    
    +455            private static interface ListHandler {
    +456                    void handle(Integer value);
    +457            }
    +458    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrenceRuleMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrenceRuleMarshaller.html new file mode 100644 index 000000000..bc9873285 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RecurrenceRuleMarshaller.html @@ -0,0 +1,110 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.RecurrenceRule;
    +004    import biweekly.util.Recurrence;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Marshals {@link RecurrenceRule} properties.
    +033     * @author Michael Angstadt
    +034     */
    +035    public class RecurrenceRuleMarshaller extends RecurrencePropertyMarshaller<RecurrenceRule> {
    +036            public RecurrenceRuleMarshaller() {
    +037                    super(RecurrenceRule.class, "RRULE");
    +038            }
    +039    
    +040            @Override
    +041            protected RecurrenceRule newInstance(Recurrence recur) {
    +042                    return new RecurrenceRule(recur);
    +043            }
    +044    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RelatedToMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RelatedToMarshaller.html new file mode 100644 index 000000000..22f2f9f1a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RelatedToMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.RelatedTo;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link RelatedTo} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class RelatedToMarshaller extends TextPropertyMarshaller<RelatedTo> {
    +035            public RelatedToMarshaller() {
    +036                    super(RelatedTo.class, "RELATED-TO");
    +037            }
    +038    
    +039            @Override
    +040            protected RelatedTo newInstance(String value) {
    +041                    return new RelatedTo(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RepeatMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RepeatMarshaller.html new file mode 100644 index 000000000..af9aadf33 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RepeatMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.Repeat;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link Repeat} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class RepeatMarshaller extends IntegerPropertyMarshaller<Repeat> {
    +035            public RepeatMarshaller() {
    +036                    super(Repeat.class, "REPEAT");
    +037            }
    +038    
    +039            @Override
    +040            protected Repeat newInstance(Integer value) {
    +041                    return new Repeat(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RequestStatusMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RequestStatusMarshaller.html new file mode 100644 index 000000000..8fc7e6f65 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/RequestStatusMarshaller.html @@ -0,0 +1,171 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.ICalDataType;
    +006    import biweekly.io.json.JCalValue;
    +007    import biweekly.io.xml.XCalElement;
    +008    import biweekly.parameter.ICalParameters;
    +009    import biweekly.property.RequestStatus;
    +010    
    +011    /*
    +012     Copyright (c) 2013, Michael Angstadt
    +013     All rights reserved.
    +014    
    +015     Redistribution and use in source and binary forms, with or without
    +016     modification, are permitted provided that the following conditions are met: 
    +017    
    +018     1. Redistributions of source code must retain the above copyright notice, this
    +019     list of conditions and the following disclaimer. 
    +020     2. Redistributions in binary form must reproduce the above copyright notice,
    +021     this list of conditions and the following disclaimer in the documentation
    +022     and/or other materials provided with the distribution. 
    +023    
    +024     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +025     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +026     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +027     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +028     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +029     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +030     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +031     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +032     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +033     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +034     */
    +035    
    +036    /**
    +037     * Marshals {@link RequestStatus} properties.
    +038     * @author Michael Angstadt
    +039     */
    +040    public class RequestStatusMarshaller extends ICalPropertyMarshaller<RequestStatus> {
    +041            public RequestStatusMarshaller() {
    +042                    super(RequestStatus.class, "REQUEST-STATUS", ICalDataType.TEXT);
    +043            }
    +044    
    +045            @Override
    +046            protected String _writeText(RequestStatus property) {
    +047                    return structured(property.getStatusCode(), property.getDescription(), property.getExceptionText());
    +048            }
    +049    
    +050            @Override
    +051            protected RequestStatus _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +052                    SemiStructuredIterator it = semistructured(value);
    +053    
    +054                    RequestStatus requestStatus = new RequestStatus(it.next());
    +055                    requestStatus.setDescription(it.next());
    +056                    requestStatus.setExceptionText(it.next());
    +057                    return requestStatus;
    +058            }
    +059    
    +060            @Override
    +061            protected void _writeXml(RequestStatus property, XCalElement element) {
    +062                    String code = property.getStatusCode();
    +063                    element.append("code", code);
    +064    
    +065                    String description = property.getDescription();
    +066                    element.append("description", description);
    +067    
    +068                    String data = property.getExceptionText();
    +069                    if (data != null) {
    +070                            element.append("data", data);
    +071                    }
    +072            }
    +073    
    +074            @Override
    +075            protected RequestStatus _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +076                    String code = element.first("code");
    +077                    if (code == null) {
    +078                            throw missingXmlElements("code");
    +079                    }
    +080    
    +081                    RequestStatus requestStatus = new RequestStatus(s(code));
    +082                    requestStatus.setDescription(s(element.first("description"))); //optional field
    +083                    requestStatus.setExceptionText(s(element.first("data"))); //optional field
    +084                    return requestStatus;
    +085            }
    +086    
    +087            @Override
    +088            protected JCalValue _writeJson(RequestStatus property) {
    +089                    return JCalValue.structured(property.getStatusCode(), property.getDescription(), property.getExceptionText());
    +090            }
    +091    
    +092            @Override
    +093            protected RequestStatus _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +094                    StructuredIterator it = structured(value);
    +095    
    +096                    RequestStatus requestStatus = new RequestStatus(it.nextString());
    +097                    requestStatus.setDescription(it.nextString());
    +098                    requestStatus.setExceptionText(it.nextString());
    +099                    return requestStatus;
    +100            }
    +101    
    +102            private String s(String str) {
    +103                    return (str == null || str.length() == 0) ? null : str;
    +104            }
    +105    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ResourcesMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ResourcesMarshaller.html new file mode 100644 index 000000000..8ab9ddc5b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/ResourcesMarshaller.html @@ -0,0 +1,111 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.ICalDataType;
    +004    import biweekly.parameter.ICalParameters;
    +005    import biweekly.property.Resources;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * Marshals {@link Resources} properties.
    +034     * @author Michael Angstadt
    +035     */
    +036    public class ResourcesMarshaller extends TextListPropertyMarshaller<Resources> {
    +037            public ResourcesMarshaller() {
    +038                    super(Resources.class, "RESOURCES");
    +039            }
    +040    
    +041            @Override
    +042            public Resources newInstance(ICalDataType dataType, ICalParameters parameters) {
    +043                    return new Resources();
    +044            }
    +045    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/SequenceMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/SequenceMarshaller.html new file mode 100644 index 000000000..f8d54dd80 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/SequenceMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.Sequence;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link Sequence} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class SequenceMarshaller extends IntegerPropertyMarshaller<Sequence> {
    +035            public SequenceMarshaller() {
    +036                    super(Sequence.class, "SEQUENCE");
    +037            }
    +038    
    +039            @Override
    +040            protected Sequence newInstance(Integer value) {
    +041                    return new Sequence(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/StatusMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/StatusMarshaller.html new file mode 100644 index 000000000..8c8174376 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/StatusMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.Status;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link Status} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class StatusMarshaller extends TextPropertyMarshaller<Status> {
    +035            public StatusMarshaller() {
    +036                    super(Status.class, "STATUS");
    +037            }
    +038    
    +039            @Override
    +040            protected Status newInstance(String value) {
    +041                    return new Status(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/SummaryMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/SummaryMarshaller.html new file mode 100644 index 000000000..ee56cb31c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/SummaryMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.Summary;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link Summary} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class SummaryMarshaller extends TextPropertyMarshaller<Summary> {
    +035            public SummaryMarshaller() {
    +036                    super(Summary.class, "SUMMARY");
    +037            }
    +038    
    +039            @Override
    +040            protected Summary newInstance(String value) {
    +041                    return new Summary(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TextListPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TextListPropertyMarshaller.html new file mode 100644 index 000000000..8f0df7005 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TextListPropertyMarshaller.html @@ -0,0 +1,119 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.ICalDataType;
    +006    import biweekly.parameter.ICalParameters;
    +007    import biweekly.property.ListProperty;
    +008    
    +009    /*
    +010     Copyright (c) 2013, Michael Angstadt
    +011     All rights reserved.
    +012    
    +013     Redistribution and use in source and binary forms, with or without
    +014     modification, are permitted provided that the following conditions are met: 
    +015    
    +016     1. Redistributions of source code must retain the above copyright notice, this
    +017     list of conditions and the following disclaimer. 
    +018     2. Redistributions in binary form must reproduce the above copyright notice,
    +019     this list of conditions and the following disclaimer in the documentation
    +020     and/or other materials provided with the distribution. 
    +021    
    +022     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +023     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +024     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +025     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +026     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +027     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +028     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +029     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +030     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +031     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +032     */
    +033    
    +034    /**
    +035     * Marshals properties that have a list of text values.
    +036     * @param <T> the property class
    +037     * @author Michael Angstadt
    +038     */
    +039    public abstract class TextListPropertyMarshaller<T extends ListProperty<String>> extends ListPropertyMarshaller<T, String> {
    +040            public TextListPropertyMarshaller(Class<T> clazz, String propertyName) {
    +041                    super(clazz, propertyName, ICalDataType.TEXT);
    +042            }
    +043    
    +044            @Override
    +045            protected String writeValue(T property, String value) {
    +046                    return value;
    +047            }
    +048    
    +049            @Override
    +050            protected String readValue(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +051                    return value;
    +052            }
    +053    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TextPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TextPropertyMarshaller.html new file mode 100644 index 000000000..5be16ea55 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TextPropertyMarshaller.html @@ -0,0 +1,158 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.ICalDataType;
    +006    import biweekly.io.json.JCalValue;
    +007    import biweekly.io.xml.XCalElement;
    +008    import biweekly.parameter.ICalParameters;
    +009    import biweekly.property.TextProperty;
    +010    
    +011    /*
    +012     Copyright (c) 2013, Michael Angstadt
    +013     All rights reserved.
    +014    
    +015     Redistribution and use in source and binary forms, with or without
    +016     modification, are permitted provided that the following conditions are met: 
    +017    
    +018     1. Redistributions of source code must retain the above copyright notice, this
    +019     list of conditions and the following disclaimer. 
    +020     2. Redistributions in binary form must reproduce the above copyright notice,
    +021     this list of conditions and the following disclaimer in the documentation
    +022     and/or other materials provided with the distribution. 
    +023    
    +024     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +025     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +026     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +027     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +028     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +029     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +030     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +031     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +032     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +033     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +034     */
    +035    
    +036    /**
    +037     * Marshals properties that have text values.
    +038     * @param <T> the property class
    +039     * @author Michael Angstadt
    +040     */
    +041    public abstract class TextPropertyMarshaller<T extends TextProperty> extends ICalPropertyMarshaller<T> {
    +042            public TextPropertyMarshaller(Class<T> clazz, String propertyName) {
    +043                    this(clazz, propertyName, ICalDataType.TEXT);
    +044            }
    +045    
    +046            public TextPropertyMarshaller(Class<T> clazz, String propertyName, ICalDataType dataType) {
    +047                    super(clazz, propertyName, dataType);
    +048            }
    +049    
    +050            @Override
    +051            protected String _writeText(T property) {
    +052                    String value = property.getValue();
    +053                    if (value != null) {
    +054                            return escape(value);
    +055                    }
    +056    
    +057                    return "";
    +058            }
    +059    
    +060            @Override
    +061            protected T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +062                    value = unescape(value);
    +063                    return newInstance(value);
    +064            }
    +065    
    +066            @Override
    +067            protected void _writeXml(T property, XCalElement element) {
    +068                    element.append(dataType(property), property.getValue());
    +069            }
    +070    
    +071            @Override
    +072            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +073                    String value = element.first(defaultDataType);
    +074                    if (value != null) {
    +075                            return newInstance(value);
    +076                    }
    +077    
    +078                    throw missingXmlElements(defaultDataType);
    +079            }
    +080    
    +081            @Override
    +082            protected JCalValue _writeJson(T property) {
    +083                    return JCalValue.single(property.getValue());
    +084            }
    +085    
    +086            @Override
    +087            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +088                    return newInstance(value.asSingle());
    +089            }
    +090    
    +091            protected abstract T newInstance(String value);
    +092    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneIdMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneIdMarshaller.html new file mode 100644 index 000000000..255b42af7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneIdMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.TimezoneId;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link TimezoneId} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class TimezoneIdMarshaller extends TextPropertyMarshaller<TimezoneId> {
    +035            public TimezoneIdMarshaller() {
    +036                    super(TimezoneId.class, "TZID");
    +037            }
    +038    
    +039            @Override
    +040            protected TimezoneId newInstance(String value) {
    +041                    return new TimezoneId(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneNameMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneNameMarshaller.html new file mode 100644 index 000000000..bdb5c3e8f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneNameMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.TimezoneName;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link TimezoneName} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class TimezoneNameMarshaller extends TextPropertyMarshaller<TimezoneName> {
    +035            public TimezoneNameMarshaller() {
    +036                    super(TimezoneName.class, "TZNAME");
    +037            }
    +038    
    +039            @Override
    +040            protected TimezoneName newInstance(String value) {
    +041                    return new TimezoneName(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneOffsetFromMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneOffsetFromMarshaller.html new file mode 100644 index 000000000..51e711608 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneOffsetFromMarshaller.html @@ -0,0 +1,110 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.TimezoneOffsetFrom;
    +004    import biweekly.util.UtcOffset;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Marshals {@link TimezoneOffsetFrom} properties.
    +033     * @author Michael Angstadt
    +034     */
    +035    public class TimezoneOffsetFromMarshaller extends UtcOffsetPropertyMarshaller<TimezoneOffsetFrom> {
    +036            public TimezoneOffsetFromMarshaller() {
    +037                    super(TimezoneOffsetFrom.class, "TZOFFSETFROM");
    +038            }
    +039    
    +040            @Override
    +041            protected TimezoneOffsetFrom newInstance(UtcOffset offset) {
    +042                    return new TimezoneOffsetFrom(offset);
    +043            }
    +044    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneOffsetToMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneOffsetToMarshaller.html new file mode 100644 index 000000000..93374b750 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneOffsetToMarshaller.html @@ -0,0 +1,110 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.TimezoneOffsetTo;
    +004    import biweekly.util.UtcOffset;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Marshals {@link TimezoneOffsetTo} properties.
    +033     * @author Michael Angstadt
    +034     */
    +035    public class TimezoneOffsetToMarshaller extends UtcOffsetPropertyMarshaller<TimezoneOffsetTo> {
    +036            public TimezoneOffsetToMarshaller() {
    +037                    super(TimezoneOffsetTo.class, "TZOFFSETTO");
    +038            }
    +039    
    +040            @Override
    +041            protected TimezoneOffsetTo newInstance(UtcOffset offset) {
    +042                    return new TimezoneOffsetTo(offset);
    +043            }
    +044    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneUrlMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneUrlMarshaller.html new file mode 100644 index 000000000..4b7c5e134 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TimezoneUrlMarshaller.html @@ -0,0 +1,110 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.ICalDataType;
    +004    import biweekly.property.TimezoneUrl;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Marshals {@link TimezoneUrl} properties.
    +033     * @author Michael Angstadt
    +034     */
    +035    public class TimezoneUrlMarshaller extends TextPropertyMarshaller<TimezoneUrl> {
    +036            public TimezoneUrlMarshaller() {
    +037                    super(TimezoneUrl.class, "TZURL", ICalDataType.URI);
    +038            }
    +039    
    +040            @Override
    +041            protected TimezoneUrl newInstance(String value) {
    +042                    return new TimezoneUrl(value);
    +043            }
    +044    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TransparencyMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TransparencyMarshaller.html new file mode 100644 index 000000000..035b3f70a --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TransparencyMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.Transparency;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link Transparency} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class TransparencyMarshaller extends TextPropertyMarshaller<Transparency> {
    +035            public TransparencyMarshaller() {
    +036                    super(Transparency.class, "TRANSP");
    +037            }
    +038    
    +039            @Override
    +040            protected Transparency newInstance(String value) {
    +041                    return new Transparency(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TriggerMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TriggerMarshaller.html new file mode 100644 index 000000000..6863ba534 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/TriggerMarshaller.html @@ -0,0 +1,227 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.Date;
    +004    import java.util.List;
    +005    
    +006    import biweekly.ICalDataType;
    +007    import biweekly.io.CannotParseException;
    +008    import biweekly.io.json.JCalValue;
    +009    import biweekly.io.xml.XCalElement;
    +010    import biweekly.parameter.ICalParameters;
    +011    import biweekly.property.Trigger;
    +012    import biweekly.util.Duration;
    +013    
    +014    /*
    +015     Copyright (c) 2013, Michael Angstadt
    +016     All rights reserved.
    +017    
    +018     Redistribution and use in source and binary forms, with or without
    +019     modification, are permitted provided that the following conditions are met: 
    +020    
    +021     1. Redistributions of source code must retain the above copyright notice, this
    +022     list of conditions and the following disclaimer. 
    +023     2. Redistributions in binary form must reproduce the above copyright notice,
    +024     this list of conditions and the following disclaimer in the documentation
    +025     and/or other materials provided with the distribution. 
    +026    
    +027     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +028     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +029     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +030     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +031     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +032     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +033     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +034     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +035     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +036     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +037     */
    +038    
    +039    /**
    +040     * Marshals {@link Trigger} properties.
    +041     * @author Michael Angstadt
    +042     */
    +043    public class TriggerMarshaller extends ICalPropertyMarshaller<Trigger> {
    +044            public TriggerMarshaller() {
    +045                    super(Trigger.class, "TRIGGER", ICalDataType.DURATION);
    +046            }
    +047    
    +048            @Override
    +049            protected ICalDataType _dataType(Trigger property) {
    +050                    return (property.getDate() == null) ? ICalDataType.DURATION : ICalDataType.DATE_TIME;
    +051            }
    +052    
    +053            @Override
    +054            protected String _writeText(Trigger property) {
    +055                    Duration duration = property.getDuration();
    +056                    if (duration != null) {
    +057                            return duration.toString();
    +058                    }
    +059    
    +060                    Date date = property.getDate();
    +061                    if (date != null) {
    +062                            return date(date).write();
    +063                    }
    +064    
    +065                    return "";
    +066            }
    +067    
    +068            @Override
    +069            protected Trigger _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +070                    value = unescape(value);
    +071    
    +072                    try {
    +073                            Date date = date(value).tzid(parameters.getTimezoneId(), warnings).parse();
    +074                            return new Trigger(date);
    +075                    } catch (IllegalArgumentException e) {
    +076                            //unable to parse value as date, must be a duration
    +077                    }
    +078    
    +079                    try {
    +080                            return new Trigger(Duration.parse(value), parameters.getRelated());
    +081                    } catch (IllegalArgumentException e) {
    +082                            //unable to parse duration
    +083                    }
    +084    
    +085                    throw new CannotParseException("Could not parse value as a date or duration.");
    +086            }
    +087    
    +088            @Override
    +089            protected void _writeXml(Trigger property, XCalElement element) {
    +090                    Duration duration = property.getDuration();
    +091                    if (duration != null) {
    +092                            element.append(ICalDataType.DURATION, duration.toString());
    +093                            return;
    +094                    }
    +095    
    +096                    Date date = property.getDate();
    +097                    if (date != null) {
    +098                            element.append(ICalDataType.DATE_TIME, date(date).extended(true).write());
    +099                            return;
    +100                    }
    +101    
    +102                    element.append(defaultDataType, "");
    +103            }
    +104    
    +105            @Override
    +106            protected Trigger _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +107                    String value = element.first(ICalDataType.DURATION);
    +108                    if (value != null) {
    +109                            try {
    +110                                    return new Trigger(Duration.parse(value), parameters.getRelated());
    +111                            } catch (IllegalArgumentException e) {
    +112                                    throw new CannotParseException("Could not parse duration: " + value);
    +113                            }
    +114                    }
    +115    
    +116                    value = element.first(ICalDataType.DATE_TIME);
    +117                    if (value != null) {
    +118                            try {
    +119                                    Date date = date(value).tzid(parameters.getTimezoneId(), warnings).parse();
    +120                                    return new Trigger(date);
    +121                            } catch (IllegalArgumentException e) {
    +122                                    throw new CannotParseException("Could not parse date: " + value);
    +123                            }
    +124                    }
    +125    
    +126                    throw missingXmlElements(ICalDataType.DURATION, ICalDataType.DATE_TIME);
    +127            }
    +128    
    +129            @Override
    +130            protected JCalValue _writeJson(Trigger property) {
    +131                    Duration duration = property.getDuration();
    +132                    if (duration != null) {
    +133                            return JCalValue.single(duration.toString());
    +134                    }
    +135    
    +136                    Date date = property.getDate();
    +137                    if (date != null) {
    +138                            return JCalValue.single(date(date).extended(true).write());
    +139                    }
    +140    
    +141                    return JCalValue.single("");
    +142            }
    +143    
    +144            @Override
    +145            protected Trigger _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +146                    String valueStr = value.asSingle();
    +147    
    +148                    try {
    +149                            Date date = date(valueStr).tzid(parameters.getTimezoneId(), warnings).parse();
    +150                            return new Trigger(date);
    +151                    } catch (IllegalArgumentException e) {
    +152                            //must be a duration
    +153                    }
    +154    
    +155                    try {
    +156                            return new Trigger(Duration.parse(valueStr), parameters.getRelated());
    +157                    } catch (IllegalArgumentException e) {
    +158                            throw new CannotParseException("Could not parse value as a date or duration.");
    +159                    }
    +160            }
    +161    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/UidMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/UidMarshaller.html new file mode 100644 index 000000000..1950bfeeb --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/UidMarshaller.html @@ -0,0 +1,109 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.property.Uid;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * Marshals {@link Uid} properties.
    +032     * @author Michael Angstadt
    +033     */
    +034    public class UidMarshaller extends TextPropertyMarshaller<Uid> {
    +035            public UidMarshaller() {
    +036                    super(Uid.class, "UID");
    +037            }
    +038    
    +039            @Override
    +040            protected Uid newInstance(String value) {
    +041                    return new Uid(value);
    +042            }
    +043    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/UrlMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/UrlMarshaller.html new file mode 100644 index 000000000..d93e4a1f3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/UrlMarshaller.html @@ -0,0 +1,110 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import biweekly.ICalDataType;
    +004    import biweekly.property.Url;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Marshals {@link Url} properties.
    +033     * @author Michael Angstadt
    +034     */
    +035    public class UrlMarshaller extends TextPropertyMarshaller<Url> {
    +036            public UrlMarshaller() {
    +037                    super(Url.class, "URL", ICalDataType.URI);
    +038            }
    +039    
    +040            @Override
    +041            protected Url newInstance(String value) {
    +042                    return new Url(value);
    +043            }
    +044    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/UtcOffsetPropertyMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/UtcOffsetPropertyMarshaller.html new file mode 100644 index 000000000..869a01efe --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/UtcOffsetPropertyMarshaller.html @@ -0,0 +1,180 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.ICalDataType;
    +006    import biweekly.io.CannotParseException;
    +007    import biweekly.io.json.JCalValue;
    +008    import biweekly.io.xml.XCalElement;
    +009    import biweekly.parameter.ICalParameters;
    +010    import biweekly.property.UtcOffsetProperty;
    +011    import biweekly.util.UtcOffset;
    +012    
    +013    /*
    +014     Copyright (c) 2013, Michael Angstadt
    +015     All rights reserved.
    +016    
    +017     Redistribution and use in source and binary forms, with or without
    +018     modification, are permitted provided that the following conditions are met: 
    +019    
    +020     1. Redistributions of source code must retain the above copyright notice, this
    +021     list of conditions and the following disclaimer. 
    +022     2. Redistributions in binary form must reproduce the above copyright notice,
    +023     this list of conditions and the following disclaimer in the documentation
    +024     and/or other materials provided with the distribution. 
    +025    
    +026     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +027     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +028     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +029     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +030     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +031     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +032     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +033     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +034     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +035     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +036     */
    +037    
    +038    /**
    +039     * Marshals properties that have UTC offset values.
    +040     * @param <T> the property class
    +041     * @author Michael Angstadt
    +042     */
    +043    public abstract class UtcOffsetPropertyMarshaller<T extends UtcOffsetProperty> extends ICalPropertyMarshaller<T> {
    +044            public UtcOffsetPropertyMarshaller(Class<T> clazz, String propertyName) {
    +045                    super(clazz, propertyName, ICalDataType.UTC_OFFSET);
    +046            }
    +047    
    +048            @Override
    +049            protected String _writeText(T property) {
    +050                    UtcOffset offset = property.getOffset();
    +051                    if (offset != null) {
    +052                            return offset.toString(false);
    +053                    }
    +054    
    +055                    return "";
    +056            }
    +057    
    +058            @Override
    +059            protected T _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +060                    value = unescape(value);
    +061                    return parse(value);
    +062            }
    +063    
    +064            @Override
    +065            protected void _writeXml(T property, XCalElement element) {
    +066                    String offsetStr = null;
    +067    
    +068                    UtcOffset offset = property.getOffset();
    +069                    if (offset != null) {
    +070                            offsetStr = offset.toString(true);
    +071                    }
    +072    
    +073                    element.append(dataType(property), offsetStr);
    +074            }
    +075    
    +076            @Override
    +077            protected T _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +078                    String value = element.first(defaultDataType);
    +079                    if (value != null) {
    +080                            return parse(value);
    +081                    }
    +082    
    +083                    throw missingXmlElements(defaultDataType);
    +084            }
    +085    
    +086            @Override
    +087            protected JCalValue _writeJson(T property) {
    +088                    UtcOffset offset = property.getOffset();
    +089                    if (offset != null) {
    +090                            return JCalValue.single(offset.toString(true));
    +091                    }
    +092    
    +093                    return JCalValue.single("");
    +094            }
    +095    
    +096            @Override
    +097            protected T _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +098                    return parse(value.asSingle());
    +099            }
    +100    
    +101            protected abstract T newInstance(UtcOffset offset);
    +102    
    +103            private T parse(String value) {
    +104                    if (value == null) {
    +105                            return newInstance(null);
    +106                    }
    +107    
    +108                    try {
    +109                            return newInstance(UtcOffset.parse(value));
    +110                    } catch (IllegalArgumentException e) {
    +111                            throw new CannotParseException("Could not parse offset string.");
    +112                    }
    +113            }
    +114    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/VersionMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/VersionMarshaller.html new file mode 100644 index 000000000..bbbfcc9ae --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/VersionMarshaller.html @@ -0,0 +1,163 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.List;
    +004    
    +005    import biweekly.ICalDataType;
    +006    import biweekly.io.json.JCalValue;
    +007    import biweekly.io.xml.XCalElement;
    +008    import biweekly.parameter.ICalParameters;
    +009    import biweekly.property.Version;
    +010    
    +011    /*
    +012     Copyright (c) 2013, Michael Angstadt
    +013     All rights reserved.
    +014    
    +015     Redistribution and use in source and binary forms, with or without
    +016     modification, are permitted provided that the following conditions are met: 
    +017    
    +018     1. Redistributions of source code must retain the above copyright notice, this
    +019     list of conditions and the following disclaimer. 
    +020     2. Redistributions in binary form must reproduce the above copyright notice,
    +021     this list of conditions and the following disclaimer in the documentation
    +022     and/or other materials provided with the distribution. 
    +023    
    +024     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +025     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +026     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +027     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +028     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +029     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +030     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +031     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +032     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +033     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +034     */
    +035    
    +036    /**
    +037     * Marshals {@link Version} properties.
    +038     * @author Michael Angstadt
    +039     */
    +040    public class VersionMarshaller extends ICalPropertyMarshaller<Version> {
    +041            public VersionMarshaller() {
    +042                    super(Version.class, "VERSION", ICalDataType.TEXT);
    +043            }
    +044    
    +045            @Override
    +046            protected String _writeText(Version property) {
    +047                    StringBuilder sb = new StringBuilder();
    +048    
    +049                    if (property.getMinVersion() != null) {
    +050                            sb.append(property.getMinVersion()).append(';');
    +051                    }
    +052                    if (property.getMaxVersion() != null) {
    +053                            sb.append(property.getMaxVersion());
    +054                    }
    +055    
    +056                    return sb.toString();
    +057            }
    +058    
    +059            @Override
    +060            protected Version _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +061                    List<String> split = split(value, ";").unescape(true).split();
    +062    
    +063                    String min = null, max = null;
    +064                    if (split.size() == 1) {
    +065                            max = split.get(0);
    +066                    } else {
    +067                            min = split.get(0);
    +068                            max = split.get(1);
    +069                    }
    +070                    return new Version(min, max);
    +071            }
    +072    
    +073            @Override
    +074            protected void _writeXml(Version property, XCalElement element) {
    +075                    element.append(dataType(property), property.getMaxVersion());
    +076            }
    +077    
    +078            @Override
    +079            protected Version _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +080                    String value = element.first(defaultDataType);
    +081                    if (value != null) {
    +082                            return new Version(value);
    +083                    }
    +084    
    +085                    throw missingXmlElements(defaultDataType);
    +086            }
    +087    
    +088            @Override
    +089            protected JCalValue _writeJson(Version property) {
    +090                    return JCalValue.single(property.getMaxVersion());
    +091            }
    +092    
    +093            @Override
    +094            protected Version _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +095                    return new Version(value.asSingle());
    +096            }
    +097    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/XmlMarshaller.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/XmlMarshaller.html new file mode 100644 index 000000000..c9eac08e7 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/property/marshaller/XmlMarshaller.html @@ -0,0 +1,191 @@ + + +
    +001    package biweekly.property.marshaller;
    +002    
    +003    import java.util.HashMap;
    +004    import java.util.List;
    +005    import java.util.Map;
    +006    
    +007    import javax.xml.transform.OutputKeys;
    +008    
    +009    import org.w3c.dom.Document;
    +010    import org.w3c.dom.Element;
    +011    import org.xml.sax.SAXException;
    +012    
    +013    import biweekly.ICalDataType;
    +014    import biweekly.io.CannotParseException;
    +015    import biweekly.io.json.JCalValue;
    +016    import biweekly.io.xml.XCalElement;
    +017    import biweekly.io.xml.XCalNamespaceContext;
    +018    import biweekly.parameter.ICalParameters;
    +019    import biweekly.property.Xml;
    +020    import biweekly.util.XmlUtils;
    +021    
    +022    /*
    +023     Copyright (c) 2013, Michael Angstadt
    +024     All rights reserved.
    +025    
    +026     Redistribution and use in source and binary forms, with or without
    +027     modification, are permitted provided that the following conditions are met: 
    +028    
    +029     1. Redistributions of source code must retain the above copyright notice, this
    +030     list of conditions and the following disclaimer. 
    +031     2. Redistributions in binary form must reproduce the above copyright notice,
    +032     this list of conditions and the following disclaimer in the documentation
    +033     and/or other materials provided with the distribution. 
    +034    
    +035     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +036     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +037     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +038     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +039     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +040     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +041     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +042     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +043     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +044     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +045     */
    +046    
    +047    /**
    +048     * Marshals {@link Xml} properties.
    +049     * @author Michael Angstadt
    +050     */
    +051    public class XmlMarshaller extends ICalPropertyMarshaller<Xml> {
    +052            //TODO on writing to plain text: convert to base64 if the string contains values that are illegal within a plain text value (p.17)
    +053            public XmlMarshaller() {
    +054                    super(Xml.class, "XML", ICalDataType.TEXT);
    +055            }
    +056    
    +057            @Override
    +058            protected String _writeText(Xml property) {
    +059                    Document value = property.getValue();
    +060                    if (value != null) {
    +061                            String xml = valueToString(value);
    +062                            return escape(xml);
    +063                    }
    +064    
    +065                    return "";
    +066            }
    +067    
    +068            @Override
    +069            protected Xml _parseText(String value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +070                    value = unescape(value);
    +071                    try {
    +072                            return new Xml(value);
    +073                    } catch (SAXException e) {
    +074                            throw new CannotParseException("Cannot parse value as XML: " + value);
    +075                    }
    +076            }
    +077    
    +078            @Override
    +079            protected void _writeXml(Xml property, XCalElement element) {
    +080                    super._writeXml(property, element);
    +081                    //Xml properties are handled as a special case when writing xCal documents, so this method should never get called (see: "XCalDocument" class)
    +082            }
    +083    
    +084            @Override
    +085            protected Xml _parseXml(XCalElement element, ICalParameters parameters, List<String> warnings) {
    +086                    Xml xml = new Xml(element.getElement());
    +087    
    +088                    //remove the <parameters> element
    +089                    Element root = XmlUtils.getRootElement(xml.getValue());
    +090                    for (Element child : XmlUtils.toElementList(root.getChildNodes())) {
    +091                            if ("parameters".equals(child.getLocalName()) && XCalNamespaceContext.XCAL_NS.equals(child.getNamespaceURI())) {
    +092                                    root.removeChild(child);
    +093                            }
    +094                    }
    +095    
    +096                    return xml;
    +097            }
    +098    
    +099            @Override
    +100            protected JCalValue _writeJson(Xml property) {
    +101                    Document value = property.getValue();
    +102                    if (value != null) {
    +103                            String xml = valueToString(value);
    +104                            return JCalValue.single(xml);
    +105                    }
    +106    
    +107                    return JCalValue.single("");
    +108            }
    +109    
    +110            @Override
    +111            protected Xml _parseJson(JCalValue value, ICalDataType dataType, ICalParameters parameters, List<String> warnings) {
    +112                    try {
    +113                            String xml = value.asSingle();
    +114                            return (xml == null) ? new Xml((Document) null) : new Xml(xml);
    +115                    } catch (SAXException e) {
    +116                            throw new CannotParseException("Cannot parse value as XML: " + value);
    +117                    }
    +118            }
    +119    
    +120            private String valueToString(Document document) {
    +121                    Map<String, String> props = new HashMap<String, String>();
    +122                    props.put(OutputKeys.OMIT_XML_DECLARATION, "yes");
    +123                    return XmlUtils.toString(document, props);
    +124            }
    +125    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Base64.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Base64.html new file mode 100644 index 000000000..556394fb2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Base64.html @@ -0,0 +1,145 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    /**
    +004     * Encodes and decodes data into base64.
    +005     * @author <a href="http://stackoverflow.com/users/518568/georgek">GeorgeK</a>
    +006     * @see <a
    +007     * href="http://stackoverflow.com/a/4265472/13379">http://stackoverflow.com/a/4265472/13379</a>
    +008     */
    +009    public class Base64 {
    +010            private static final char[] ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
    +011            private static final int[] toInt = new int[128];
    +012            static {
    +013                    for (int i = 0; i < ALPHABET.length; i++) {
    +014                            toInt[ALPHABET[i]] = i;
    +015                    }
    +016            }
    +017    
    +018            /**
    +019             * Translates the specified byte array into Base64 string.
    +020             * @param buf the byte array
    +021             * @return the translated Base64 string
    +022             */
    +023            public static String encode(byte[] buf) {
    +024                    int size = buf.length;
    +025                    char[] ar = new char[((size + 2) / 3) * 4];
    +026                    int a = 0;
    +027                    int i = 0;
    +028                    while (i < size) {
    +029                            byte b0 = buf[i++];
    +030                            byte b1 = (i < size) ? buf[i++] : 0;
    +031                            byte b2 = (i < size) ? buf[i++] : 0;
    +032    
    +033                            int mask = 0x3F;
    +034                            ar[a++] = ALPHABET[(b0 >> 2) & mask];
    +035                            ar[a++] = ALPHABET[((b0 << 4) | ((b1 & 0xFF) >> 4)) & mask];
    +036                            ar[a++] = ALPHABET[((b1 << 2) | ((b2 & 0xFF) >> 6)) & mask];
    +037                            ar[a++] = ALPHABET[b2 & mask];
    +038                    }
    +039                    switch (size % 3) {
    +040                    case 1:
    +041                            ar[--a] = '=';
    +042                    case 2:
    +043                            ar[--a] = '=';
    +044                    }
    +045                    return new String(ar);
    +046            }
    +047    
    +048            /**
    +049             * Translates the specified Base64 string into a byte array.
    +050             * @param s the Base64 string
    +051             * @return the byte array
    +052             */
    +053            public static byte[] decode(String s) {
    +054                    int delta = s.endsWith("==") ? 2 : s.endsWith("=") ? 1 : 0;
    +055                    byte[] buffer = new byte[s.length() * 3 / 4 - delta];
    +056                    int mask = 0xFF;
    +057                    int index = 0;
    +058                    for (int i = 0; i < s.length(); i += 4) {
    +059                            int c0 = toInt[s.charAt(i)];
    +060                            int c1 = toInt[s.charAt(i + 1)];
    +061                            buffer[index++] = (byte) (((c0 << 2) | (c1 >> 4)) & mask);
    +062                            if (index >= buffer.length) {
    +063                                    return buffer;
    +064                            }
    +065                            int c2 = toInt[s.charAt(i + 2)];
    +066                            buffer[index++] = (byte) (((c1 << 4) | (c2 >> 2)) & mask);
    +067                            if (index >= buffer.length) {
    +068                                    return buffer;
    +069                            }
    +070                            int c3 = toInt[s.charAt(i + 3)];
    +071                            buffer[index++] = (byte) (((c2 << 6) | c3) & mask);
    +072                    }
    +073                    return buffer;
    +074            }
    +075    
    +076            private Base64() {
    +077                    //hide
    +078            }
    +079    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/CaseClasses.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/CaseClasses.html new file mode 100644 index 000000000..9580e8a79 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/CaseClasses.html @@ -0,0 +1,228 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.lang.reflect.Field;
    +004    import java.lang.reflect.Modifier;
    +005    import java.util.ArrayList;
    +006    import java.util.Collection;
    +007    import java.util.Collections;
    +008    
    +009    /*
    +010     Copyright (c) 2013, Michael Angstadt
    +011     All rights reserved.
    +012    
    +013     Redistribution and use in source and binary forms, with or without
    +014     modification, are permitted provided that the following conditions are met: 
    +015    
    +016     1. Redistributions of source code must retain the above copyright notice, this
    +017     list of conditions and the following disclaimer. 
    +018     2. Redistributions in binary form must reproduce the above copyright notice,
    +019     this list of conditions and the following disclaimer in the documentation
    +020     and/or other materials provided with the distribution. 
    +021    
    +022     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +023     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +024     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +025     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +026     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +027     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +028     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +029     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +030     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +031     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +032     */
    +033    
    +034    /**
    +035     * Manages objects that are like enums in that they are constant, but unlike
    +036     * enums in that new instances can be created during runtime. This class ensures
    +037     * that all instances of a class are unique, so they can be safely compared
    +038     * using "==" (provided their constructors are private). It mimics the
    +039     * "case class" feature in Scala.
    +040     * @author Michael Angstadt
    +041     * 
    +042     * @param <T> the class
    +043     * @param <V> the value that the class holds (e.g. String)
    +044     */
    +045    public abstract class CaseClasses<T, V> {
    +046            protected final Class<T> clazz;
    +047            protected volatile Collection<T> preDefined = null;
    +048            protected Collection<T> runtimeDefined = null;
    +049    
    +050            /**
    +051             * Creates a new case class collection.
    +052             * @param clazz the case class
    +053             */
    +054            public CaseClasses(Class<T> clazz) {
    +055                    this.clazz = clazz;
    +056            }
    +057    
    +058            /**
    +059             * Creates a new instance of the case class.
    +060             * @param value the value to give the instance
    +061             * @return the new instance
    +062             */
    +063            protected abstract T create(V value);
    +064    
    +065            /**
    +066             * Determines if a value is associated with a case object.
    +067             * @param object the object
    +068             * @param value the value
    +069             * @return true if it matches, false if not
    +070             */
    +071            protected abstract boolean matches(T object, V value);
    +072    
    +073            /**
    +074             * Searches for a case object by value, only looking at the case class'
    +075             * static constants (does not include runtime-defined objects).
    +076             * @param value the value
    +077             * @return the object or null if one wasn't found
    +078             */
    +079            public T find(V value) {
    +080                    checkInit();
    +081    
    +082                    for (T obj : preDefined) {
    +083                            if (matches(obj, value)) {
    +084                                    return obj;
    +085                            }
    +086                    }
    +087                    return null;
    +088            }
    +089    
    +090            /**
    +091             * Searches for a case object by value, creating a new object if one cannot
    +092             * be found.
    +093             * @param value the value
    +094             * @return the object
    +095             */
    +096            public T get(V value) {
    +097                    T found = find(value);
    +098                    if (found != null) {
    +099                            return found;
    +100                    }
    +101    
    +102                    synchronized (runtimeDefined) {
    +103                            for (T obj : runtimeDefined) {
    +104                                    if (matches(obj, value)) {
    +105                                            return obj;
    +106                                    }
    +107                            }
    +108    
    +109                            T created = create(value);
    +110                            runtimeDefined.add(created);
    +111                            return created;
    +112                    }
    +113            }
    +114    
    +115            /**
    +116             * Gets all the static constants of the case class.
    +117             * @return all static constants
    +118             */
    +119            public Collection<T> all() {
    +120                    checkInit();
    +121                    return preDefined;
    +122            }
    +123    
    +124            private void checkInit() {
    +125                    if (preDefined == null) {
    +126                            synchronized (this) {
    +127                                    //"double check idiom" (Bloch p.283)
    +128                                    if (preDefined == null) {
    +129                                            init();
    +130                                    }
    +131                            }
    +132                    }
    +133            }
    +134    
    +135            private void init() {
    +136                    Collection<T> preDefined = new ArrayList<T>();
    +137                    for (Field field : clazz.getFields()) {
    +138                            int modifiers = field.getModifiers();
    +139                            //@formatter:off
    +140                            if (Modifier.isStatic(modifiers) &&
    +141                                    Modifier.isPublic(modifiers) &&
    +142                                    field.getDeclaringClass() == clazz &&
    +143                                    field.getType() == clazz) {
    +144                                    //@formatter:on
    +145                                    try {
    +146                                            Object obj = field.get(null);
    +147                                            if (obj != null) {
    +148                                                    T c = clazz.cast(obj);
    +149                                                    preDefined.add(c);
    +150                                            }
    +151                                    } catch (Exception ex) {
    +152                                            //reflection error
    +153                                            //should never be thrown because we check for "public static" and the correct type
    +154                                            throw new RuntimeException(ex);
    +155                                    }
    +156                            }
    +157                    }
    +158    
    +159                    runtimeDefined = new ArrayList<T>(0);
    +160                    this.preDefined = Collections.unmodifiableCollection(preDefined);
    +161            }
    +162    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/DateTimeComponents.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/DateTimeComponents.html new file mode 100644 index 000000000..e833bc552 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/DateTimeComponents.html @@ -0,0 +1,352 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.text.DecimalFormat;
    +004    import java.text.NumberFormat;
    +005    import java.util.Calendar;
    +006    import java.util.Date;
    +007    import java.util.TimeZone;
    +008    import java.util.regex.Matcher;
    +009    import java.util.regex.Pattern;
    +010    
    +011    /*
    +012     Copyright (c) 2013, Michael Angstadt
    +013     All rights reserved.
    +014    
    +015     Redistribution and use in source and binary forms, with or without
    +016     modification, are permitted provided that the following conditions are met: 
    +017    
    +018     1. Redistributions of source code must retain the above copyright notice, this
    +019     list of conditions and the following disclaimer. 
    +020     2. Redistributions in binary form must reproduce the above copyright notice,
    +021     this list of conditions and the following disclaimer in the documentation
    +022     and/or other materials provided with the distribution. 
    +023    
    +024     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +025     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +026     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +027     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +028     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +029     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +030     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +031     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +032     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +033     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +034     */
    +035    
    +036    /**
    +037     * <p>
    +038     * Contains the raw components of a date-time value.
    +039     * </p>
    +040     * <p>
    +041     * <b>Examples:</b>
    +042     * 
    +043     * <pre class="brush:java">
    +044     * //July 22, 2013 at 17:25
    +045     * DateTimeComponents components = new DateTimeComponents(2013, 07, 22, 17, 25, 0, false);
    +046     * 
    +047     * //parsing a date string (accepts basic and extended formats)
    +048     * DateTimeComponents components = DateTimeComponents.parse(&quot;20130722T172500&quot;);
    +049     * 
    +050     * //converting to date string
    +051     * DateTimeComponents components = new DateTimeComponents(2013, 07, 22, 17, 25, 0, false);
    +052     * String str = components.toString(true); //&quot;2013-07-22T17:25:00&quot;
    +053     * 
    +054     * //converting to a Date object
    +055     * DateTimeComponents components = new DateTimeComponents(2013, 07, 22, 17, 25, 0, false);
    +056     * Date date = components.toDate();
    +057     * 
    +058     * </pre>
    +059     * 
    +060     * </p>
    +061     * @author Michael Angstadt
    +062     */
    +063    public final class DateTimeComponents {
    +064            private static final Pattern regex = Pattern.compile("^(\\d{4})-?(\\d{2})-?(\\d{2})(T(\\d{2}):?(\\d{2}):?(\\d{2})(Z?))?.*");
    +065            private final int year, month, date, hour, minute, second;
    +066            private final boolean utc;
    +067    
    +068            /**
    +069             * Parses the components out of a date-time string.
    +070             * @param dateString the date-time string (basic and extended formats
    +071             * supported, e.g. "20130331T020000" or "2013-03-31T02:00:00")
    +072             * @return the parsed components
    +073             * @throws IllegalArgumentException if the date string cannot be parsed
    +074             */
    +075            public static DateTimeComponents parse(String dateString) {
    +076                    Matcher m = regex.matcher(dateString);
    +077                    if (!m.find()) {
    +078                            throw new IllegalArgumentException("Cannot parse date: " + dateString);
    +079                    }
    +080    
    +081                    int i = 1;
    +082    
    +083                    int year = Integer.parseInt(m.group(i++));
    +084    
    +085                    int month = Integer.parseInt(m.group(i++));
    +086    
    +087                    int date = Integer.parseInt(m.group(i++));
    +088    
    +089                    i++; //skip
    +090    
    +091                    String hourStr = m.group(i++);
    +092                    int hour = (hourStr == null) ? 0 : Integer.parseInt(hourStr);
    +093    
    +094                    String minuteStr = m.group(i++);
    +095                    int minute = (minuteStr == null) ? 0 : Integer.parseInt(minuteStr);
    +096    
    +097                    String secondStr = m.group(i++);
    +098                    int second = (secondStr == null) ? 0 : Integer.parseInt(secondStr);
    +099    
    +100                    boolean utc = "Z".equals(m.group(i++));
    +101    
    +102                    return new DateTimeComponents(year, month, date, hour, minute, second, utc);
    +103            }
    +104    
    +105            /**
    +106             * Copies an existing DateTimeComponents object.
    +107             * @param original the object to copy from
    +108             * @param year the new year value or null not to change
    +109             * @param month the new month value or null not to change
    +110             * @param date the new date value or null not to change
    +111             * @param hour the new hour value or null not to change
    +112             * @param minute the new minute value or null not to change
    +113             * @param second the new second value or null not to change
    +114             * @param utc true if the time is in UTC, false if not, or null not to
    +115             * change
    +116             */
    +117            public DateTimeComponents(DateTimeComponents original, Integer year, Integer month, Integer date, Integer hour, Integer minute, Integer second, Boolean utc) {
    +118                    //@formatter:off
    +119                    this(
    +120                            (year == null) ? original.year : year,
    +121                            (month == null) ? original.month : month,
    +122                            (date == null) ? original.date : date,
    +123                            (hour == null) ? original.hour : hour,
    +124                            (minute == null) ? original.minute : minute,
    +125                            (second == null) ? original.second : second,
    +126                            (utc == null) ? original.utc : utc
    +127                    );
    +128                    //@formatter:on
    +129            }
    +130    
    +131            /**
    +132             * Creates a new set of date-time components.
    +133             * @param year the year (e.g. "2013")
    +134             * @param month the month (e.g. "1" for January)
    +135             * @param date the date of the month (e.g. "15")
    +136             * @param hour the hour (e.g. "13")
    +137             * @param minute the minute
    +138             * @param second the second
    +139             * @param utc true if the time is in UTC, false if not
    +140             */
    +141            public DateTimeComponents(int year, int month, int date, int hour, int minute, int second, boolean utc) {
    +142                    this.year = year;
    +143                    this.month = month;
    +144                    this.date = date;
    +145                    this.hour = hour;
    +146                    this.minute = minute;
    +147                    this.second = second;
    +148                    this.utc = utc;
    +149            }
    +150    
    +151            /**
    +152             * Gets the year component.
    +153             * @return the year
    +154             */
    +155            public int getYear() {
    +156                    return year;
    +157            }
    +158    
    +159            /**
    +160             * Gets the month component.
    +161             * @return the month (e.g. "1" for January)
    +162             */
    +163            public int getMonth() {
    +164                    return month;
    +165            }
    +166    
    +167            /**
    +168             * Gets the date component
    +169             * @return the date
    +170             */
    +171            public int getDate() {
    +172                    return date;
    +173            }
    +174    
    +175            /**
    +176             * Gets the hour component
    +177             * @return the hour
    +178             */
    +179            public int getHour() {
    +180                    return hour;
    +181            }
    +182    
    +183            /**
    +184             * Gets the minute component.
    +185             * @return the minute
    +186             */
    +187            public int getMinute() {
    +188                    return minute;
    +189            }
    +190    
    +191            /**
    +192             * Gets the second component.
    +193             * @return the second
    +194             */
    +195            public int getSecond() {
    +196                    return second;
    +197            }
    +198    
    +199            /**
    +200             * Gets whether the time is in UTC or not
    +201             * @return true if the time is in UTC, false if not
    +202             */
    +203            public boolean isUtc() {
    +204                    return utc;
    +205            }
    +206    
    +207            /**
    +208             * Converts the date-time components to a string using "basic" format.
    +209             * @return the date string
    +210             */
    +211            @Override
    +212            public String toString() {
    +213                    return toString(false);
    +214            }
    +215    
    +216            /**
    +217             * Converts the date-time components to a string.
    +218             * @param extended true to use extended format, false to use basic
    +219             * @return the date string
    +220             */
    +221            public String toString(boolean extended) {
    +222                    NumberFormat nf = new DecimalFormat("00");
    +223                    String dash = extended ? "-" : "";
    +224                    String colon = extended ? ":" : "";
    +225                    String z = utc ? "Z" : "";
    +226    
    +227                    return year + dash + nf.format(month) + dash + nf.format(date) + "T" + nf.format(hour) + colon + nf.format(minute) + colon + nf.format(second) + z;
    +228            }
    +229    
    +230            /**
    +231             * Converts the date-time components to a {@link Date} object.
    +232             * @return the date object
    +233             */
    +234            public Date toDate() {
    +235                    TimeZone tz = utc ? TimeZone.getTimeZone("UTC") : TimeZone.getDefault();
    +236                    Calendar c = Calendar.getInstance(tz);
    +237                    c.clear();
    +238                    c.set(Calendar.YEAR, year);
    +239                    c.set(Calendar.MONTH, month - 1);
    +240                    c.set(Calendar.DATE, date);
    +241                    c.set(Calendar.HOUR_OF_DAY, hour);
    +242                    c.set(Calendar.MINUTE, minute);
    +243                    c.set(Calendar.SECOND, second);
    +244                    return c.getTime();
    +245            }
    +246    
    +247            @Override
    +248            public int hashCode() {
    +249                    final int prime = 31;
    +250                    int result = 1;
    +251                    result = prime * result + date;
    +252                    result = prime * result + hour;
    +253                    result = prime * result + minute;
    +254                    result = prime * result + month;
    +255                    result = prime * result + second;
    +256                    result = prime * result + (utc ? 1231 : 1237);
    +257                    result = prime * result + year;
    +258                    return result;
    +259            }
    +260    
    +261            @Override
    +262            public boolean equals(Object obj) {
    +263                    if (this == obj)
    +264                            return true;
    +265                    if (obj == null)
    +266                            return false;
    +267                    if (getClass() != obj.getClass())
    +268                            return false;
    +269                    DateTimeComponents other = (DateTimeComponents) obj;
    +270                    if (date != other.date)
    +271                            return false;
    +272                    if (hour != other.hour)
    +273                            return false;
    +274                    if (minute != other.minute)
    +275                            return false;
    +276                    if (month != other.month)
    +277                            return false;
    +278                    if (second != other.second)
    +279                            return false;
    +280                    if (utc != other.utc)
    +281                            return false;
    +282                    if (year != other.year)
    +283                            return false;
    +284                    return true;
    +285            }
    +286    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Duration.Builder.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Duration.Builder.html new file mode 100644 index 000000000..8cc63cfd8 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Duration.Builder.html @@ -0,0 +1,536 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.util.Calendar;
    +004    import java.util.Date;
    +005    import java.util.regex.Matcher;
    +006    import java.util.regex.Pattern;
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * <p>
    +035     * Represents a period of time (for example, "2 hours and 30 minutes").
    +036     * </p>
    +037     * <p>
    +038     * This class is immutable. Use the {@link #builder} method to construct a new
    +039     * instance, or the {@link #parse} method to parse a duration string.
    +040     * </p>
    +041     * 
    +042     * <p>
    +043     * <b>Examples:</b>
    +044     * 
    +045     * <pre class="brush:java">
    +046     * Duration duration = Duration.builder().hours(2).minutes(30).build();
    +047     * Duration duration = Duration.parse(&quot;PT2H30M&quot;);
    +048     * 
    +049     * //add a duration value to a Date
    +050     * Date start = ...
    +051     * Date end = duration.add(start);
    +052     * </pre>
    +053     * 
    +054     * </p>
    +055     * @author Michael Angstadt
    +056     */
    +057    public final class Duration {
    +058            private final Integer weeks, days, hours, minutes, seconds;
    +059            private final boolean prior;
    +060    
    +061            private Duration(Builder b) {
    +062                    weeks = b.weeks;
    +063                    days = b.days;
    +064                    hours = b.hours;
    +065                    minutes = b.minutes;
    +066                    seconds = b.seconds;
    +067                    prior = b.prior;
    +068            }
    +069    
    +070            /**
    +071             * Parses a duration string.
    +072             * @param value the duration string (e.g. "P30DT10H")
    +073             * @return the parsed duration
    +074             * @throws IllegalArgumentException if the duration string is invalid
    +075             */
    +076            public static Duration parse(String value) {
    +077                    if (!value.matches("-?P.*")) {
    +078                            throw new IllegalArgumentException("Invalid duration string: " + value);
    +079                    }
    +080    
    +081                    //@formatter:off
    +082                    return builder()
    +083                    .prior(value.startsWith("-"))
    +084                    .weeks(parseComponent(value, 'W'))
    +085                    .days(parseComponent(value, 'D'))
    +086                    .hours(parseComponent(value, 'H'))
    +087                    .minutes(parseComponent(value, 'M'))
    +088                    .seconds(parseComponent(value, 'S'))
    +089                    .build();
    +090                    //@formatter:on
    +091            }
    +092    
    +093            /**
    +094             * Builds a duration based on the difference between two dates.
    +095             * @param start the start date
    +096             * @param end the end date
    +097             * @return the duration
    +098             */
    +099            public static Duration diff(Date start, Date end) {
    +100                    return fromMillis(end.getTime() - start.getTime());
    +101            }
    +102    
    +103            /**
    +104             * Builds a duration from a number of milliseconds.
    +105             * @param milliseconds the number of milliseconds
    +106             * @return the duration
    +107             */
    +108            public static Duration fromMillis(long milliseconds) {
    +109                    Duration.Builder builder = builder();
    +110    
    +111                    if (milliseconds < 0) {
    +112                            builder.prior(true);
    +113                            milliseconds *= -1;
    +114                    }
    +115    
    +116                    int seconds = (int) (milliseconds / 1000);
    +117    
    +118                    Integer weeks = seconds / (60 * 60 * 24 * 7);
    +119                    if (weeks > 0) {
    +120                            builder.weeks(weeks);
    +121                    }
    +122                    seconds %= 60 * 60 * 24 * 7;
    +123    
    +124                    Integer days = seconds / (60 * 60 * 24);
    +125                    if (days > 0) {
    +126                            builder.days(days);
    +127                    }
    +128                    seconds %= 60 * 60 * 24;
    +129    
    +130                    Integer hours = seconds / (60 * 60);
    +131                    if (hours > 0) {
    +132                            builder.hours(hours);
    +133                    }
    +134                    seconds %= 60 * 60;
    +135    
    +136                    Integer minutes = seconds / (60);
    +137                    if (minutes > 0) {
    +138                            builder.minutes(minutes);
    +139                    }
    +140                    seconds %= 60;
    +141    
    +142                    if (seconds > 0) {
    +143                            builder.seconds(seconds);
    +144                    }
    +145    
    +146                    return builder.build();
    +147            }
    +148    
    +149            /**
    +150             * Creates a builder object for constructing new instances of this class.
    +151             * @return the builder object
    +152             */
    +153            public static Builder builder() {
    +154                    return new Builder();
    +155            }
    +156    
    +157            private static Integer parseComponent(String value, char ch) {
    +158                    Pattern p = Pattern.compile("(\\d+)" + ch);
    +159                    Matcher m = p.matcher(value);
    +160                    return m.find() ? Integer.valueOf(m.group(1)) : null;
    +161            }
    +162    
    +163            /**
    +164             * Gets whether the duration is negative.
    +165             * @return true if it's negative, false if not
    +166             */
    +167            public boolean isPrior() {
    +168                    return prior;
    +169            }
    +170    
    +171            /**
    +172             * Gets the number of weeks.
    +173             * @return the number of weeks or null if not set
    +174             */
    +175            public Integer getWeeks() {
    +176                    return weeks;
    +177            }
    +178    
    +179            /**
    +180             * Gets the number of days.
    +181             * @return the number of days or null if not set
    +182             */
    +183            public Integer getDays() {
    +184                    return days;
    +185            }
    +186    
    +187            /**
    +188             * Gets the number of hours.
    +189             * @return the number of hours or null if not set
    +190             */
    +191            public Integer getHours() {
    +192                    return hours;
    +193            }
    +194    
    +195            /**
    +196             * Gets the number of minutes.
    +197             * @return the number of minutes or null if not set
    +198             */
    +199            public Integer getMinutes() {
    +200                    return minutes;
    +201            }
    +202    
    +203            /**
    +204             * Gets the number of seconds.
    +205             * @return the number of seconds or null if not set
    +206             */
    +207            public Integer getSeconds() {
    +208                    return seconds;
    +209            }
    +210    
    +211            /**
    +212             * Adds this duration value to a {@link Date} object.
    +213             * @param date the date to add to
    +214             * @return the new date value
    +215             */
    +216            public Date add(Date date) {
    +217                    Calendar c = Calendar.getInstance();
    +218                    c.setTime(date);
    +219    
    +220                    if (weeks != null) {
    +221                            int weeks = this.weeks * (prior ? -1 : 1);
    +222                            c.add(Calendar.DATE, weeks * 7);
    +223                    }
    +224                    if (days != null) {
    +225                            int days = this.days * (prior ? -1 : 1);
    +226                            c.add(Calendar.DATE, days);
    +227                    }
    +228                    if (hours != null) {
    +229                            int hours = this.hours * (prior ? -1 : 1);
    +230                            c.add(Calendar.HOUR_OF_DAY, hours);
    +231                    }
    +232                    if (minutes != null) {
    +233                            int minutes = this.minutes * (prior ? -1 : 1);
    +234                            c.add(Calendar.MINUTE, minutes);
    +235                    }
    +236                    if (seconds != null) {
    +237                            int seconds = this.seconds * (prior ? -1 : 1);
    +238                            c.add(Calendar.SECOND, seconds);
    +239                    }
    +240    
    +241                    return c.getTime();
    +242            }
    +243    
    +244            /**
    +245             * Converts the duration value to milliseconds.
    +246             * @return the duration value in milliseconds (will be negative if
    +247             * {@link #isPrior} is true)
    +248             */
    +249            public long toMillis() {
    +250                    long totalSeconds = 0;
    +251    
    +252                    if (weeks != null) {
    +253                            totalSeconds += 60 * 60 * 24 * 7 * weeks;
    +254                    }
    +255                    if (days != null) {
    +256                            totalSeconds += 60 * 60 * 24 * days;
    +257                    }
    +258                    if (hours != null) {
    +259                            totalSeconds += 60 * 60 * hours;
    +260                    }
    +261                    if (minutes != null) {
    +262                            totalSeconds += 60 * minutes;
    +263                    }
    +264                    if (seconds != null) {
    +265                            totalSeconds += seconds;
    +266                    }
    +267                    if (prior) {
    +268                            totalSeconds *= -1;
    +269                    }
    +270    
    +271                    return totalSeconds * 1000;
    +272            }
    +273    
    +274            /**
    +275             * Determines if any time components are present.
    +276             * @return true if the duration has at least one time component, false if
    +277             * not
    +278             */
    +279            public boolean hasTime() {
    +280                    return hours != null || minutes != null || seconds != null;
    +281            }
    +282    
    +283            @Override
    +284            public int hashCode() {
    +285                    final int prime = 31;
    +286                    int result = 1;
    +287                    result = prime * result + ((days == null) ? 0 : days.hashCode());
    +288                    result = prime * result + ((hours == null) ? 0 : hours.hashCode());
    +289                    result = prime * result + ((minutes == null) ? 0 : minutes.hashCode());
    +290                    result = prime * result + (prior ? 1231 : 1237);
    +291                    result = prime * result + ((seconds == null) ? 0 : seconds.hashCode());
    +292                    result = prime * result + ((weeks == null) ? 0 : weeks.hashCode());
    +293                    return result;
    +294            }
    +295    
    +296            @Override
    +297            public boolean equals(Object obj) {
    +298                    if (this == obj)
    +299                            return true;
    +300                    if (obj == null)
    +301                            return false;
    +302                    if (getClass() != obj.getClass())
    +303                            return false;
    +304                    Duration other = (Duration) obj;
    +305                    if (days == null) {
    +306                            if (other.days != null)
    +307                                    return false;
    +308                    } else if (!days.equals(other.days))
    +309                            return false;
    +310                    if (hours == null) {
    +311                            if (other.hours != null)
    +312                                    return false;
    +313                    } else if (!hours.equals(other.hours))
    +314                            return false;
    +315                    if (minutes == null) {
    +316                            if (other.minutes != null)
    +317                                    return false;
    +318                    } else if (!minutes.equals(other.minutes))
    +319                            return false;
    +320                    if (prior != other.prior)
    +321                            return false;
    +322                    if (seconds == null) {
    +323                            if (other.seconds != null)
    +324                                    return false;
    +325                    } else if (!seconds.equals(other.seconds))
    +326                            return false;
    +327                    if (weeks == null) {
    +328                            if (other.weeks != null)
    +329                                    return false;
    +330                    } else if (!weeks.equals(other.weeks))
    +331                            return false;
    +332                    return true;
    +333            }
    +334    
    +335            /**
    +336             * Converts the duration to its string representation.
    +337             * @return the string representation (e.g. "P4DT1H" for "4 days and 1 hour")
    +338             */
    +339            @Override
    +340            public String toString() {
    +341                    StringBuilder sb = new StringBuilder();
    +342    
    +343                    if (prior) {
    +344                            sb.append('-');
    +345                    }
    +346                    sb.append('P');
    +347    
    +348                    if (weeks != null) {
    +349                            sb.append(weeks).append('W');
    +350                    }
    +351    
    +352                    if (days != null) {
    +353                            sb.append(days).append('D');
    +354                    }
    +355    
    +356                    if (hasTime()) {
    +357                            sb.append('T');
    +358    
    +359                            if (hours != null) {
    +360                                    sb.append(hours).append('H');
    +361                            }
    +362    
    +363                            if (minutes != null) {
    +364                                    sb.append(minutes).append('M');
    +365                            }
    +366    
    +367                            if (seconds != null) {
    +368                                    sb.append(seconds).append('S');
    +369                            }
    +370                    }
    +371    
    +372                    return sb.toString();
    +373            }
    +374    
    +375            /**
    +376             * Builds {@link Duration} objects.
    +377             */
    +378            public static class Builder {
    +379                    private Integer weeks, days, hours, minutes, seconds;
    +380                    private boolean prior = false;
    +381    
    +382                    /**
    +383                     * Creates a new {@link Duration} builder.
    +384                     */
    +385                    public Builder() {
    +386                            //empty
    +387                    }
    +388    
    +389                    /**
    +390                     * Creates a new {@link Duration} builder.
    +391                     * @param source the object to copy from
    +392                     */
    +393                    public Builder(Duration source) {
    +394                            weeks = source.weeks;
    +395                            days = source.days;
    +396                            hours = source.hours;
    +397                            minutes = source.minutes;
    +398                            seconds = source.seconds;
    +399                            prior = source.prior;
    +400                    }
    +401    
    +402                    /**
    +403                     * Sets the number of weeks.
    +404                     * @param weeks the number of weeks
    +405                     * @return this
    +406                     */
    +407                    public Builder weeks(Integer weeks) {
    +408                            this.weeks = weeks;
    +409                            return this;
    +410                    }
    +411    
    +412                    /**
    +413                     * Sets the number of days
    +414                     * @param days the number of days
    +415                     * @return this
    +416                     */
    +417                    public Builder days(Integer days) {
    +418                            this.days = days;
    +419                            return this;
    +420                    }
    +421    
    +422                    /**
    +423                     * Sets the number of hours
    +424                     * @param hours the number of hours
    +425                     * @return this
    +426                     */
    +427                    public Builder hours(Integer hours) {
    +428                            this.hours = hours;
    +429                            return this;
    +430                    }
    +431    
    +432                    /**
    +433                     * Sets the number of minutes
    +434                     * @param minutes the number of minutes
    +435                     * @return this
    +436                     */
    +437                    public Builder minutes(Integer minutes) {
    +438                            this.minutes = minutes;
    +439                            return this;
    +440                    }
    +441    
    +442                    /**
    +443                     * Sets the number of seconds.
    +444                     * @param seconds the number of seconds
    +445                     * @return this
    +446                     */
    +447                    public Builder seconds(Integer seconds) {
    +448                            this.seconds = seconds;
    +449                            return this;
    +450                    }
    +451    
    +452                    /**
    +453                     * Sets whether the duration should be negative.
    +454                     * @param prior true to be negative, false not to be
    +455                     * @return this
    +456                     */
    +457                    public Builder prior(boolean prior) {
    +458                            this.prior = prior;
    +459                            return this;
    +460                    }
    +461    
    +462                    /**
    +463                     * Builds the final {@link Duration} object.
    +464                     * @return the object
    +465                     */
    +466                    public Duration build() {
    +467                            return new Duration(this);
    +468                    }
    +469            }
    +470    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Duration.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Duration.html new file mode 100644 index 000000000..8cc63cfd8 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Duration.html @@ -0,0 +1,536 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.util.Calendar;
    +004    import java.util.Date;
    +005    import java.util.regex.Matcher;
    +006    import java.util.regex.Pattern;
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * <p>
    +035     * Represents a period of time (for example, "2 hours and 30 minutes").
    +036     * </p>
    +037     * <p>
    +038     * This class is immutable. Use the {@link #builder} method to construct a new
    +039     * instance, or the {@link #parse} method to parse a duration string.
    +040     * </p>
    +041     * 
    +042     * <p>
    +043     * <b>Examples:</b>
    +044     * 
    +045     * <pre class="brush:java">
    +046     * Duration duration = Duration.builder().hours(2).minutes(30).build();
    +047     * Duration duration = Duration.parse(&quot;PT2H30M&quot;);
    +048     * 
    +049     * //add a duration value to a Date
    +050     * Date start = ...
    +051     * Date end = duration.add(start);
    +052     * </pre>
    +053     * 
    +054     * </p>
    +055     * @author Michael Angstadt
    +056     */
    +057    public final class Duration {
    +058            private final Integer weeks, days, hours, minutes, seconds;
    +059            private final boolean prior;
    +060    
    +061            private Duration(Builder b) {
    +062                    weeks = b.weeks;
    +063                    days = b.days;
    +064                    hours = b.hours;
    +065                    minutes = b.minutes;
    +066                    seconds = b.seconds;
    +067                    prior = b.prior;
    +068            }
    +069    
    +070            /**
    +071             * Parses a duration string.
    +072             * @param value the duration string (e.g. "P30DT10H")
    +073             * @return the parsed duration
    +074             * @throws IllegalArgumentException if the duration string is invalid
    +075             */
    +076            public static Duration parse(String value) {
    +077                    if (!value.matches("-?P.*")) {
    +078                            throw new IllegalArgumentException("Invalid duration string: " + value);
    +079                    }
    +080    
    +081                    //@formatter:off
    +082                    return builder()
    +083                    .prior(value.startsWith("-"))
    +084                    .weeks(parseComponent(value, 'W'))
    +085                    .days(parseComponent(value, 'D'))
    +086                    .hours(parseComponent(value, 'H'))
    +087                    .minutes(parseComponent(value, 'M'))
    +088                    .seconds(parseComponent(value, 'S'))
    +089                    .build();
    +090                    //@formatter:on
    +091            }
    +092    
    +093            /**
    +094             * Builds a duration based on the difference between two dates.
    +095             * @param start the start date
    +096             * @param end the end date
    +097             * @return the duration
    +098             */
    +099            public static Duration diff(Date start, Date end) {
    +100                    return fromMillis(end.getTime() - start.getTime());
    +101            }
    +102    
    +103            /**
    +104             * Builds a duration from a number of milliseconds.
    +105             * @param milliseconds the number of milliseconds
    +106             * @return the duration
    +107             */
    +108            public static Duration fromMillis(long milliseconds) {
    +109                    Duration.Builder builder = builder();
    +110    
    +111                    if (milliseconds < 0) {
    +112                            builder.prior(true);
    +113                            milliseconds *= -1;
    +114                    }
    +115    
    +116                    int seconds = (int) (milliseconds / 1000);
    +117    
    +118                    Integer weeks = seconds / (60 * 60 * 24 * 7);
    +119                    if (weeks > 0) {
    +120                            builder.weeks(weeks);
    +121                    }
    +122                    seconds %= 60 * 60 * 24 * 7;
    +123    
    +124                    Integer days = seconds / (60 * 60 * 24);
    +125                    if (days > 0) {
    +126                            builder.days(days);
    +127                    }
    +128                    seconds %= 60 * 60 * 24;
    +129    
    +130                    Integer hours = seconds / (60 * 60);
    +131                    if (hours > 0) {
    +132                            builder.hours(hours);
    +133                    }
    +134                    seconds %= 60 * 60;
    +135    
    +136                    Integer minutes = seconds / (60);
    +137                    if (minutes > 0) {
    +138                            builder.minutes(minutes);
    +139                    }
    +140                    seconds %= 60;
    +141    
    +142                    if (seconds > 0) {
    +143                            builder.seconds(seconds);
    +144                    }
    +145    
    +146                    return builder.build();
    +147            }
    +148    
    +149            /**
    +150             * Creates a builder object for constructing new instances of this class.
    +151             * @return the builder object
    +152             */
    +153            public static Builder builder() {
    +154                    return new Builder();
    +155            }
    +156    
    +157            private static Integer parseComponent(String value, char ch) {
    +158                    Pattern p = Pattern.compile("(\\d+)" + ch);
    +159                    Matcher m = p.matcher(value);
    +160                    return m.find() ? Integer.valueOf(m.group(1)) : null;
    +161            }
    +162    
    +163            /**
    +164             * Gets whether the duration is negative.
    +165             * @return true if it's negative, false if not
    +166             */
    +167            public boolean isPrior() {
    +168                    return prior;
    +169            }
    +170    
    +171            /**
    +172             * Gets the number of weeks.
    +173             * @return the number of weeks or null if not set
    +174             */
    +175            public Integer getWeeks() {
    +176                    return weeks;
    +177            }
    +178    
    +179            /**
    +180             * Gets the number of days.
    +181             * @return the number of days or null if not set
    +182             */
    +183            public Integer getDays() {
    +184                    return days;
    +185            }
    +186    
    +187            /**
    +188             * Gets the number of hours.
    +189             * @return the number of hours or null if not set
    +190             */
    +191            public Integer getHours() {
    +192                    return hours;
    +193            }
    +194    
    +195            /**
    +196             * Gets the number of minutes.
    +197             * @return the number of minutes or null if not set
    +198             */
    +199            public Integer getMinutes() {
    +200                    return minutes;
    +201            }
    +202    
    +203            /**
    +204             * Gets the number of seconds.
    +205             * @return the number of seconds or null if not set
    +206             */
    +207            public Integer getSeconds() {
    +208                    return seconds;
    +209            }
    +210    
    +211            /**
    +212             * Adds this duration value to a {@link Date} object.
    +213             * @param date the date to add to
    +214             * @return the new date value
    +215             */
    +216            public Date add(Date date) {
    +217                    Calendar c = Calendar.getInstance();
    +218                    c.setTime(date);
    +219    
    +220                    if (weeks != null) {
    +221                            int weeks = this.weeks * (prior ? -1 : 1);
    +222                            c.add(Calendar.DATE, weeks * 7);
    +223                    }
    +224                    if (days != null) {
    +225                            int days = this.days * (prior ? -1 : 1);
    +226                            c.add(Calendar.DATE, days);
    +227                    }
    +228                    if (hours != null) {
    +229                            int hours = this.hours * (prior ? -1 : 1);
    +230                            c.add(Calendar.HOUR_OF_DAY, hours);
    +231                    }
    +232                    if (minutes != null) {
    +233                            int minutes = this.minutes * (prior ? -1 : 1);
    +234                            c.add(Calendar.MINUTE, minutes);
    +235                    }
    +236                    if (seconds != null) {
    +237                            int seconds = this.seconds * (prior ? -1 : 1);
    +238                            c.add(Calendar.SECOND, seconds);
    +239                    }
    +240    
    +241                    return c.getTime();
    +242            }
    +243    
    +244            /**
    +245             * Converts the duration value to milliseconds.
    +246             * @return the duration value in milliseconds (will be negative if
    +247             * {@link #isPrior} is true)
    +248             */
    +249            public long toMillis() {
    +250                    long totalSeconds = 0;
    +251    
    +252                    if (weeks != null) {
    +253                            totalSeconds += 60 * 60 * 24 * 7 * weeks;
    +254                    }
    +255                    if (days != null) {
    +256                            totalSeconds += 60 * 60 * 24 * days;
    +257                    }
    +258                    if (hours != null) {
    +259                            totalSeconds += 60 * 60 * hours;
    +260                    }
    +261                    if (minutes != null) {
    +262                            totalSeconds += 60 * minutes;
    +263                    }
    +264                    if (seconds != null) {
    +265                            totalSeconds += seconds;
    +266                    }
    +267                    if (prior) {
    +268                            totalSeconds *= -1;
    +269                    }
    +270    
    +271                    return totalSeconds * 1000;
    +272            }
    +273    
    +274            /**
    +275             * Determines if any time components are present.
    +276             * @return true if the duration has at least one time component, false if
    +277             * not
    +278             */
    +279            public boolean hasTime() {
    +280                    return hours != null || minutes != null || seconds != null;
    +281            }
    +282    
    +283            @Override
    +284            public int hashCode() {
    +285                    final int prime = 31;
    +286                    int result = 1;
    +287                    result = prime * result + ((days == null) ? 0 : days.hashCode());
    +288                    result = prime * result + ((hours == null) ? 0 : hours.hashCode());
    +289                    result = prime * result + ((minutes == null) ? 0 : minutes.hashCode());
    +290                    result = prime * result + (prior ? 1231 : 1237);
    +291                    result = prime * result + ((seconds == null) ? 0 : seconds.hashCode());
    +292                    result = prime * result + ((weeks == null) ? 0 : weeks.hashCode());
    +293                    return result;
    +294            }
    +295    
    +296            @Override
    +297            public boolean equals(Object obj) {
    +298                    if (this == obj)
    +299                            return true;
    +300                    if (obj == null)
    +301                            return false;
    +302                    if (getClass() != obj.getClass())
    +303                            return false;
    +304                    Duration other = (Duration) obj;
    +305                    if (days == null) {
    +306                            if (other.days != null)
    +307                                    return false;
    +308                    } else if (!days.equals(other.days))
    +309                            return false;
    +310                    if (hours == null) {
    +311                            if (other.hours != null)
    +312                                    return false;
    +313                    } else if (!hours.equals(other.hours))
    +314                            return false;
    +315                    if (minutes == null) {
    +316                            if (other.minutes != null)
    +317                                    return false;
    +318                    } else if (!minutes.equals(other.minutes))
    +319                            return false;
    +320                    if (prior != other.prior)
    +321                            return false;
    +322                    if (seconds == null) {
    +323                            if (other.seconds != null)
    +324                                    return false;
    +325                    } else if (!seconds.equals(other.seconds))
    +326                            return false;
    +327                    if (weeks == null) {
    +328                            if (other.weeks != null)
    +329                                    return false;
    +330                    } else if (!weeks.equals(other.weeks))
    +331                            return false;
    +332                    return true;
    +333            }
    +334    
    +335            /**
    +336             * Converts the duration to its string representation.
    +337             * @return the string representation (e.g. "P4DT1H" for "4 days and 1 hour")
    +338             */
    +339            @Override
    +340            public String toString() {
    +341                    StringBuilder sb = new StringBuilder();
    +342    
    +343                    if (prior) {
    +344                            sb.append('-');
    +345                    }
    +346                    sb.append('P');
    +347    
    +348                    if (weeks != null) {
    +349                            sb.append(weeks).append('W');
    +350                    }
    +351    
    +352                    if (days != null) {
    +353                            sb.append(days).append('D');
    +354                    }
    +355    
    +356                    if (hasTime()) {
    +357                            sb.append('T');
    +358    
    +359                            if (hours != null) {
    +360                                    sb.append(hours).append('H');
    +361                            }
    +362    
    +363                            if (minutes != null) {
    +364                                    sb.append(minutes).append('M');
    +365                            }
    +366    
    +367                            if (seconds != null) {
    +368                                    sb.append(seconds).append('S');
    +369                            }
    +370                    }
    +371    
    +372                    return sb.toString();
    +373            }
    +374    
    +375            /**
    +376             * Builds {@link Duration} objects.
    +377             */
    +378            public static class Builder {
    +379                    private Integer weeks, days, hours, minutes, seconds;
    +380                    private boolean prior = false;
    +381    
    +382                    /**
    +383                     * Creates a new {@link Duration} builder.
    +384                     */
    +385                    public Builder() {
    +386                            //empty
    +387                    }
    +388    
    +389                    /**
    +390                     * Creates a new {@link Duration} builder.
    +391                     * @param source the object to copy from
    +392                     */
    +393                    public Builder(Duration source) {
    +394                            weeks = source.weeks;
    +395                            days = source.days;
    +396                            hours = source.hours;
    +397                            minutes = source.minutes;
    +398                            seconds = source.seconds;
    +399                            prior = source.prior;
    +400                    }
    +401    
    +402                    /**
    +403                     * Sets the number of weeks.
    +404                     * @param weeks the number of weeks
    +405                     * @return this
    +406                     */
    +407                    public Builder weeks(Integer weeks) {
    +408                            this.weeks = weeks;
    +409                            return this;
    +410                    }
    +411    
    +412                    /**
    +413                     * Sets the number of days
    +414                     * @param days the number of days
    +415                     * @return this
    +416                     */
    +417                    public Builder days(Integer days) {
    +418                            this.days = days;
    +419                            return this;
    +420                    }
    +421    
    +422                    /**
    +423                     * Sets the number of hours
    +424                     * @param hours the number of hours
    +425                     * @return this
    +426                     */
    +427                    public Builder hours(Integer hours) {
    +428                            this.hours = hours;
    +429                            return this;
    +430                    }
    +431    
    +432                    /**
    +433                     * Sets the number of minutes
    +434                     * @param minutes the number of minutes
    +435                     * @return this
    +436                     */
    +437                    public Builder minutes(Integer minutes) {
    +438                            this.minutes = minutes;
    +439                            return this;
    +440                    }
    +441    
    +442                    /**
    +443                     * Sets the number of seconds.
    +444                     * @param seconds the number of seconds
    +445                     * @return this
    +446                     */
    +447                    public Builder seconds(Integer seconds) {
    +448                            this.seconds = seconds;
    +449                            return this;
    +450                    }
    +451    
    +452                    /**
    +453                     * Sets whether the duration should be negative.
    +454                     * @param prior true to be negative, false not to be
    +455                     * @return this
    +456                     */
    +457                    public Builder prior(boolean prior) {
    +458                            this.prior = prior;
    +459                            return this;
    +460                    }
    +461    
    +462                    /**
    +463                     * Builds the final {@link Duration} object.
    +464                     * @return the object
    +465                     */
    +466                    public Duration build() {
    +467                            return new Duration(this);
    +468                    }
    +469            }
    +470    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ICalDateFormatter.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ICalDateFormatter.html new file mode 100644 index 000000000..eb019297b --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ICalDateFormatter.html @@ -0,0 +1,242 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.text.DateFormat;
    +004    import java.text.ParseException;
    +005    import java.util.Date;
    +006    import java.util.TimeZone;
    +007    
    +008    /*
    +009     Copyright (c) 2013, Michael Angstadt
    +010     All rights reserved.
    +011    
    +012     Redistribution and use in source and binary forms, with or without
    +013     modification, are permitted provided that the following conditions are met: 
    +014    
    +015     1. Redistributions of source code must retain the above copyright notice, this
    +016     list of conditions and the following disclaimer. 
    +017     2. Redistributions in binary form must reproduce the above copyright notice,
    +018     this list of conditions and the following disclaimer in the documentation
    +019     and/or other materials provided with the distribution. 
    +020    
    +021     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +022     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +023     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +024     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +025     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +026     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +027     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +028     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +029     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +030     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +031     */
    +032    
    +033    /**
    +034     * Helper class that formats and parses iCalendar dates. iCalendar dates adhere
    +035     * to the ISO8601 date format standard.
    +036     * @author Michael Angstadt
    +037     */
    +038    public class ICalDateFormatter {
    +039            /**
    +040             * Formats a date for inclusion in an iCalendar object.
    +041             * @param date the date to format
    +042             * @param format the format to use
    +043             * @return the formatted date
    +044             */
    +045            public static String format(Date date, ISOFormat format) {
    +046                    return format(date, format, null);
    +047            }
    +048    
    +049            /**
    +050             * Formats a date for inclusion in an iCalendar object.
    +051             * @param date the date to format
    +052             * @param format the format to use
    +053             * @param timeZone the timezone to format the date in or null to use the
    +054             * JVM's default timezone (ignored with "UTC" formats)
    +055             * @return the formatted date
    +056             */
    +057            public static String format(Date date, ISOFormat format, TimeZone timeZone) {
    +058                    switch (format) {
    +059                    case UTC_TIME_BASIC:
    +060                    case UTC_TIME_EXTENDED:
    +061                            timeZone = TimeZone.getTimeZone("UTC");
    +062                            break;
    +063                    }
    +064    
    +065                    DateFormat df = format.getFormatDateFormat();
    +066                    if (timeZone != null) {
    +067                            df.setTimeZone(timeZone);
    +068                    }
    +069                    String str = df.format(date);
    +070    
    +071                    switch (format) {
    +072                    case TIME_EXTENDED:
    +073                            //add a colon to the timezone
    +074                            //example: converts "2012-07-05T22:31:41-0400" to "2012-07-05T22:31:41-04:00"
    +075                            str = str.replaceAll("([-\\+]\\d{2})(\\d{2})$", "$1:$2");
    +076                            break;
    +077                    }
    +078    
    +079                    return str;
    +080            }
    +081    
    +082            /**
    +083             * Parses an iCalendar date.
    +084             * @param dateStr the date string to parse (e.g. "20130609T181023Z")
    +085             * @return the parsed date
    +086             * @throws IllegalArgumentException if the date string isn't in one of the
    +087             * accepted ISO8601 formats
    +088             */
    +089            public static Date parse(String dateStr) {
    +090                    return parse(dateStr, null);
    +091            }
    +092    
    +093            /**
    +094             * Parses an iCalendar date.
    +095             * @param dateStr the date string to parse (e.g. "20130609T181023Z")
    +096             * @param timezone the timezone to parse the date as or null to use the
    +097             * JVM's default timezone (if the date string contains its own timezone,
    +098             * then that timezone will be used instead)
    +099             * @return the parsed date
    +100             * @throws IllegalArgumentException if the date string isn't in one of the
    +101             * accepted ISO8601 formats
    +102             */
    +103            public static Date parse(String dateStr, TimeZone timezone) {
    +104                    //find out what ISOFormat the date is in
    +105                    ISOFormat format = null;
    +106                    for (ISOFormat f : ISOFormat.values()) {
    +107                            if (f.matches(dateStr)) {
    +108                                    format = f;
    +109                                    break;
    +110                            }
    +111                    }
    +112                    if (format == null) {
    +113                            throw new IllegalArgumentException("Date string is not in a valid ISO-8601 format.");
    +114                    }
    +115    
    +116                    //tweak the date string to make it work with SimpleDateFormat
    +117                    switch (format) {
    +118                    case TIME_EXTENDED:
    +119                    case HCARD_TIME_TAG:
    +120                            //SimpleDateFormat doesn't recognize timezone offsets that have colons
    +121                            //so remove the colon from the timezone offset
    +122                            dateStr = dateStr.replaceAll("([-\\+]\\d{2}):(\\d{2})$", "$1$2");
    +123                            break;
    +124                    case UTC_TIME_BASIC:
    +125                    case UTC_TIME_EXTENDED:
    +126                            //SimpleDateFormat doesn't recognize "Z"
    +127                            dateStr = dateStr.replace("Z", "+0000");
    +128                            break;
    +129                    }
    +130    
    +131                    //parse the date
    +132                    DateFormat df = format.getParseDateFormat();
    +133                    if (timezone != null) {
    +134                            df.setTimeZone(timezone);
    +135                    }
    +136                    try {
    +137                            return df.parse(dateStr);
    +138                    } catch (ParseException e) {
    +139                            //should never be thrown because the string is checked against a regex
    +140                            throw new IllegalArgumentException("Date string is not in a valid ISO-8601 format.");
    +141                    }
    +142            }
    +143    
    +144            /**
    +145             * Determines whether a date string has a time component.
    +146             * @param dateStr the date string (e.g. "20130601T120000")
    +147             * @return true if it has a time component, false if not
    +148             */
    +149            public static boolean dateHasTime(String dateStr) {
    +150                    return dateStr.contains("T");
    +151            }
    +152    
    +153            /**
    +154             * Determines whether a date string is in UTC time or has a timezone offset.
    +155             * @param dateStr the date string (e.g. "20130601T120000Z",
    +156             * "20130601T120000-0400")
    +157             * @return true if it has a timezone, false if not
    +158             */
    +159            public static boolean dateHasTimezone(String dateStr) {
    +160                    return dateStr.endsWith("Z") || dateStr.matches(".*?[-+]\\d\\d:?\\d\\d");
    +161            }
    +162    
    +163            /**
    +164             * Gets the {@link TimeZone} object that corresponds to the given ID.
    +165             * @param timezoneId the timezone ID (e.g. "America/New_York")
    +166             * @return the timezone object or null if not found
    +167             */
    +168            public static TimeZone parseTimeZoneId(String timezoneId) {
    +169                    TimeZone timezone = TimeZone.getTimeZone(timezoneId);
    +170                    return "GMT".equals(timezone.getID()) ? null : timezone;
    +171            }
    +172    
    +173            private ICalDateFormatter() {
    +174                    //hide constructor
    +175            }
    +176    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ICalFloatFormatter.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ICalFloatFormatter.html new file mode 100644 index 000000000..f287b8d36 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ICalFloatFormatter.html @@ -0,0 +1,127 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.text.DecimalFormat;
    +004    import java.text.DecimalFormatSymbols;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Formats floating-point values for iCalendar objects. Notably, this ensures
    +033     * that a "." is used as decimal separater, no matter the locale.
    +034     * @author Michael Angstadt
    +035     */
    +036    @SuppressWarnings("serial")
    +037    public class ICalFloatFormatter extends DecimalFormat {
    +038            /**
    +039             * Creates a new formatter with a max of 6 decimals.
    +040             */
    +041            public ICalFloatFormatter() {
    +042                    this(6);
    +043            }
    +044    
    +045            /**
    +046             * Creates a new formatter.
    +047             * @param decimals the max number of decimal places
    +048             */
    +049            public ICalFloatFormatter(int decimals) {
    +050                    setMaximumFractionDigits(decimals);
    +051                    if (decimals > 0) {
    +052                            setMinimumFractionDigits(1);
    +053                    }
    +054    
    +055                    //decimal separator differs by locale (e.g. Germany uses ",")
    +056                    DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    +057                    symbols.setDecimalSeparator('.');
    +058                    symbols.setMinusSign('-');
    +059                    setDecimalFormatSymbols(symbols);
    +060            }
    +061    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/IOUtils.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/IOUtils.html new file mode 100644 index 000000000..70ec463b3 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/IOUtils.html @@ -0,0 +1,238 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.io.ByteArrayOutputStream;
    +004    import java.io.Closeable;
    +005    import java.io.File;
    +006    import java.io.FileInputStream;
    +007    import java.io.FileNotFoundException;
    +008    import java.io.FileOutputStream;
    +009    import java.io.IOException;
    +010    import java.io.InputStream;
    +011    import java.io.InputStreamReader;
    +012    import java.io.OutputStream;
    +013    import java.io.OutputStreamWriter;
    +014    import java.io.Reader;
    +015    import java.io.Writer;
    +016    import java.nio.charset.Charset;
    +017    
    +018    /*
    +019     Copyright (c) 2013, Michael Angstadt
    +020     All rights reserved.
    +021    
    +022     Redistribution and use in source and binary forms, with or without
    +023     modification, are permitted provided that the following conditions are met: 
    +024    
    +025     1. Redistributions of source code must retain the above copyright notice, this
    +026     list of conditions and the following disclaimer. 
    +027     2. Redistributions in binary form must reproduce the above copyright notice,
    +028     this list of conditions and the following disclaimer in the documentation
    +029     and/or other materials provided with the distribution. 
    +030    
    +031     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +032     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +033     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +034     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +035     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +036     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +037     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +038     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +039     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +040     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +041     */
    +042    
    +043    /**
    +044     * I/O helper classes.
    +045     * @author Michael Angstadt
    +046     */
    +047    public class IOUtils {
    +048            private static final Charset UTF8 = Charset.forName("UTF-8");
    +049    
    +050            /**
    +051             * Reads all the bytes from an input stream.
    +052             * @param in the input stream
    +053             * @return the bytes
    +054             * @throws IOException if there's a problem reading from the input stream
    +055             */
    +056            public static byte[] toByteArray(InputStream in) throws IOException {
    +057                    return toByteArray(in, false);
    +058            }
    +059    
    +060            /**
    +061             * Reads all the bytes from an input stream.
    +062             * @param in the input stream
    +063             * @param close true to close the input stream when done, false not to
    +064             * @return the bytes
    +065             * @throws IOException if there's a problem reading from the input stream
    +066             */
    +067            public static byte[] toByteArray(InputStream in, boolean close) throws IOException {
    +068                    try {
    +069                            ByteArrayOutputStream out = new ByteArrayOutputStream();
    +070                            byte[] buffer = new byte[4096];
    +071                            int read;
    +072                            while ((read = in.read(buffer)) != -1) {
    +073                                    out.write(buffer, 0, read);
    +074                            }
    +075                            return out.toByteArray();
    +076                    } finally {
    +077                            if (close) {
    +078                                    closeQuietly(in);
    +079                            }
    +080                    }
    +081            }
    +082    
    +083            /**
    +084             * Reads the contents of a text file.
    +085             * @param file the file to read
    +086             * @return the file contents
    +087             * @throws IOException if there's a problem reading the file
    +088             */
    +089            public static String getFileContents(File file) throws IOException {
    +090                    return getFileContents(file, Charset.defaultCharset().name());
    +091            }
    +092    
    +093            /**
    +094             * Reads the contents of a text file.
    +095             * @param file the file to read
    +096             * @param charset the character encoding of the file
    +097             * @return the file contents
    +098             * @throws IOException if there's a problem reading the file
    +099             */
    +100            public static String getFileContents(File file, String charset) throws IOException {
    +101                    byte[] bytes = toByteArray(new FileInputStream(file), true);
    +102                    return new String(bytes, charset);
    +103            }
    +104    
    +105            /**
    +106             * Closes a closeable resource, catching its {@link IOException}.
    +107             * @param closeable the resource to close (can be null)
    +108             */
    +109            public static void closeQuietly(Closeable closeable) {
    +110                    try {
    +111                            if (closeable != null) {
    +112                                    closeable.close();
    +113                            }
    +114                    } catch (IOException e) {
    +115                            //ignore
    +116                    }
    +117            }
    +118    
    +119            /**
    +120             * Creates a writer whose character encoding is set to "UTF-8".
    +121             * @param out the output stream to write to
    +122             * @return the writer
    +123             */
    +124            public static Writer utf8Writer(OutputStream out) {
    +125                    return new OutputStreamWriter(out, UTF8);
    +126            }
    +127    
    +128            /**
    +129             * Creates a writer whose character encoding is set to "UTF-8".
    +130             * @param file the file to write to
    +131             * @return the writer
    +132             * @throws FileNotFoundException if the file cannot be written to
    +133             */
    +134            public static Writer utf8Writer(File file) throws FileNotFoundException {
    +135                    return utf8Writer(file, false);
    +136            }
    +137    
    +138            /**
    +139             * Creates a writer whose character encoding is set to "UTF-8".
    +140             * @param file the file to write to
    +141             * @param append true to append to the end of the file, false to overwrite
    +142             * it
    +143             * @return the writer
    +144             * @throws FileNotFoundException if the file cannot be written to
    +145             */
    +146            public static Writer utf8Writer(File file, boolean append) throws FileNotFoundException {
    +147                    return utf8Writer(new FileOutputStream(file, append));
    +148            }
    +149    
    +150            /**
    +151             * Creates a reader whose character encoding is set to "UTF-8".
    +152             * @param in the input stream to read from
    +153             * @return the reader
    +154             */
    +155            public static Reader utf8Reader(InputStream in) {
    +156                    return new InputStreamReader(in, UTF8);
    +157            }
    +158    
    +159            /**
    +160             * Creates a reader whose character encoding is set to "UTF-8".
    +161             * @param file the file to read from
    +162             * @return the reader
    +163             * @throws FileNotFoundException if the file can't be read
    +164             */
    +165            public static Reader utf8Reader(File file) throws FileNotFoundException {
    +166                    return utf8Reader(new FileInputStream(file));
    +167            }
    +168    
    +169            private IOUtils() {
    +170                    //hide
    +171            }
    +172    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ISOFormat.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ISOFormat.html new file mode 100644 index 000000000..df5f1182c --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ISOFormat.html @@ -0,0 +1,213 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.text.DateFormat;
    +004    import java.text.SimpleDateFormat;
    +005    import java.util.regex.Pattern;
    +006    
    +007    /*
    +008     Copyright (c) 2013, Michael Angstadt
    +009     All rights reserved.
    +010    
    +011     Redistribution and use in source and binary forms, with or without
    +012     modification, are permitted provided that the following conditions are met: 
    +013    
    +014     1. Redistributions of source code must retain the above copyright notice, this
    +015     list of conditions and the following disclaimer. 
    +016     2. Redistributions in binary form must reproduce the above copyright notice,
    +017     this list of conditions and the following disclaimer in the documentation
    +018     and/or other materials provided with the distribution. 
    +019    
    +020     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +021     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +022     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +023     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +024     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +025     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +026     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +027     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +028     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +029     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +030     */
    +031    
    +032    /**
    +033     * Represents the various ISO8601 date-time formats that iCalendar dates can be
    +034     * represented as.
    +035     * @author Michael Angstadt
    +036     */
    +037    public enum ISOFormat {
    +038            //@formatter:off
    +039            /**
    +040             * Example: 20120701
    +041             */
    +042            DATE_BASIC("\\d{8}","yyyyMMdd"),
    +043            
    +044            /**
    +045             * Example: 2012-07-01
    +046             */
    +047            DATE_EXTENDED("\\d{4}-\\d{2}-\\d{2}", "yyyy-MM-dd"),
    +048            
    +049            /**
    +050             * Example: 20120701T142110-0500
    +051             */
    +052            TIME_BASIC("\\d{8}T\\d{6}[-\\+]\\d{4}", "yyyyMMdd'T'HHmmssZ"),
    +053            
    +054            /**
    +055             * Example: 20120701T142110
    +056             */
    +057            TIME_BASIC_WITHOUT_TZ("\\d{8}T\\d{6}", "yyyyMMdd'T'HHmmss"),
    +058            
    +059            /**
    +060             * Example: 2012-07-01T14:21:10-05:00
    +061             */
    +062            TIME_EXTENDED("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[-\\+]\\d{2}:\\d{2}", "yyyy-MM-dd'T'HH:mm:ssZ"),
    +063            
    +064            /**
    +065             * Example: 2012-07-01T14:21:10
    +066             */
    +067            TIME_EXTENDED_WITHOUT_TZ("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}", "yyyy-MM-dd'T'HH:mm:ss"),
    +068            
    +069            /**
    +070             * Example: 20120701T192110Z
    +071             */
    +072            UTC_TIME_BASIC("\\d{8}T\\d{6}Z", "yyyyMMdd'T'HHmmssZ", "yyyyMMdd'T'HHmmss'Z'"),
    +073            
    +074            /**
    +075             * Example: 2012-07-01T19:21:10Z
    +076             */
    +077            UTC_TIME_EXTENDED("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z", "yyyy-MM-dd'T'HH:mm:ssZ", "yyyy-MM-dd'T'HH:mm:ss'Z'"),
    +078            
    +079            /**
    +080             * Example: 2012-07-01T14:21:10-0500
    +081             */
    +082            HCARD_TIME_TAG("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[-\\+]\\d{2}:?\\d{2}", "yyyy-MM-dd'T'HH:mm:ssZ");
    +083            //@formatter:on
    +084    
    +085            /**
    +086             * The regular expression pattern for the date format.
    +087             */
    +088            private final Pattern pattern;
    +089    
    +090            /**
    +091             * The {@link SimpleDateFormat} format string used for parsing dates.
    +092             */
    +093            private final String parseFormat;
    +094    
    +095            /**
    +096             * The {@link SimpleDateFormat} format string used for formatting dates.
    +097             */
    +098            private final String formatFormat;
    +099    
    +100            /**
    +101             * @param regex the regular expression for the date format
    +102             * @param format the {@link SimpleDateFormat} format string used for parsing
    +103             * and formatting dates.
    +104             */
    +105            private ISOFormat(String regex, String format) {
    +106                    this(regex, format, format);
    +107            }
    +108    
    +109            /**
    +110             * @param regex the regular expression for the date format
    +111             * @param parseFormat the {@link SimpleDateFormat} format string used for
    +112             * parsing dates.
    +113             * @param formatFormat the {@link SimpleDateFormat} format string used for
    +114             * formatting dates.
    +115             */
    +116            private ISOFormat(String regex, String parseFormat, String formatFormat) {
    +117                    pattern = Pattern.compile(regex);
    +118                    this.parseFormat = parseFormat;
    +119                    this.formatFormat = formatFormat;
    +120            }
    +121    
    +122            /**
    +123             * Determines whether a date string is in this ISO format.
    +124             * @param dateStr the date string
    +125             * @return true if it matches the date format, false if not
    +126             */
    +127            public boolean matches(String dateStr) {
    +128                    return pattern.matcher(dateStr).matches();
    +129            }
    +130    
    +131            /**
    +132             * Builds a {@link DateFormat} object for parsing dates in this ISO format.
    +133             * @return the {@link DateFormat} object
    +134             */
    +135            public DateFormat getParseDateFormat() {
    +136                    return new SimpleDateFormat(parseFormat);
    +137            }
    +138    
    +139            /**
    +140             * Builds a {@link DateFormat} object for formatting dates in this ISO
    +141             * format.
    +142             * @return the {@link DateFormat} object
    +143             */
    +144            public DateFormat getFormatDateFormat() {
    +145                    return new SimpleDateFormat(formatFormat);
    +146            }
    +147    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ListMultimap.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ListMultimap.html new file mode 100644 index 000000000..cf9f938c1 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/ListMultimap.html @@ -0,0 +1,361 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.Collection;
    +005    import java.util.Collections;
    +006    import java.util.Iterator;
    +007    import java.util.LinkedHashMap;
    +008    import java.util.List;
    +009    import java.util.Map;
    +010    import java.util.Set;
    +011    
    +012    /*
    +013     Copyright (c) 2013, Michael Angstadt
    +014     All rights reserved.
    +015    
    +016     Redistribution and use in source and binary forms, with or without
    +017     modification, are permitted provided that the following conditions are met: 
    +018    
    +019     1. Redistributions of source code must retain the above copyright notice, this
    +020     list of conditions and the following disclaimer. 
    +021     2. Redistributions in binary form must reproduce the above copyright notice,
    +022     this list of conditions and the following disclaimer in the documentation
    +023     and/or other materials provided with the distribution. 
    +024    
    +025     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +026     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +027     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +028     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +029     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +030     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +031     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +032     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +033     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +034     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +035     */
    +036    
    +037    /**
    +038     * A multimap that uses {@link List} objects to store its values. The internal
    +039     * {@link Map} implementation is a {@link LinkedHashMap} that uses
    +040     * {@link ArrayList} for its values.
    +041     * @author Michael Angstadt
    +042     * @param <K> the key
    +043     * @param <V> the value
    +044     */
    +045    public class ListMultimap<K, V> implements Iterable<Map.Entry<K, List<V>>> {
    +046            private final Map<K, List<V>> map;
    +047    
    +048            /**
    +049             * Creates an empty multimap.
    +050             */
    +051            public ListMultimap() {
    +052                    map = new LinkedHashMap<K, List<V>>();
    +053            }
    +054    
    +055            /**
    +056             * Creates an empty multimap.
    +057             * @param initialCapacity the initial capacity of the underlying map.
    +058             */
    +059            public ListMultimap(int initialCapacity) {
    +060                    map = new LinkedHashMap<K, List<V>>(initialCapacity);
    +061            }
    +062    
    +063            /**
    +064             * Creates a copy of an existing multimap.
    +065             * @param orig the multimap to copy from
    +066             */
    +067            public ListMultimap(ListMultimap<K, V> orig) {
    +068                    this(orig.map);
    +069            }
    +070    
    +071            /**
    +072             * Creates a copy of an existing map.
    +073             * @param orig the map to copy from
    +074             */
    +075            public ListMultimap(Map<K, List<V>> orig) {
    +076                    this();
    +077                    for (Map.Entry<K, List<V>> entry : orig.entrySet()) {
    +078                            List<V> values = new ArrayList<V>(entry.getValue());
    +079                            map.put(entry.getKey(), values);
    +080                    }
    +081            }
    +082    
    +083            /**
    +084             * Adds a value to the multimap.
    +085             * @param key the key
    +086             * @param value the value to add
    +087             */
    +088            public void put(K key, V value) {
    +089                    List<V> values = get(key, true);
    +090                    values.add(value);
    +091            }
    +092    
    +093            /**
    +094             * Adds multiple values to the multimap.
    +095             * @param key the key
    +096             * @param values the values to add
    +097             */
    +098            public void putAll(K key, Collection<V> values) {
    +099                    List<V> existingValues = get(key, true);
    +100                    existingValues.addAll(values);
    +101            }
    +102    
    +103            /**
    +104             * Gets the values associated with the key.
    +105             * @param key the key
    +106             * @return the list of values or empty list if the key doesn't exist
    +107             */
    +108            public List<V> get(K key) {
    +109                    return get(key, false);
    +110            }
    +111    
    +112            /**
    +113             * Gets the values associated with the key.
    +114             * @param key the key
    +115             * @param add true to add an empty element to the map if the key doesn't
    +116             * exist, false not to
    +117             * @return the list of values or empty list if the key doesn't exist
    +118             */
    +119            private List<V> get(K key, boolean add) {
    +120                    key = sanitizeKey(key);
    +121                    List<V> values = map.get(key);
    +122                    if (values == null) {
    +123                            values = new ArrayList<V>();
    +124                            if (add) {
    +125                                    map.put(key, values);
    +126                            }
    +127                    }
    +128                    return values;
    +129            }
    +130    
    +131            /**
    +132             * Gets the first value that's associated with a key.
    +133             * @param key the key
    +134             * @return the first value or null if the key doesn't exist
    +135             */
    +136            public V first(K key) {
    +137                    List<V> values = get(key);
    +138                    return (values == null || values.isEmpty()) ? null : values.get(0);
    +139            }
    +140    
    +141            /**
    +142             * Determines whether the given key exists.
    +143             * @param key the key
    +144             * @return true if the key exists, false if not
    +145             */
    +146            public boolean containsKey(K key) {
    +147                    return map.containsKey(key);
    +148            }
    +149    
    +150            /**
    +151             * Removes a particular value.
    +152             * @param key the key
    +153             * @param value the value to remove
    +154             * @return true if the multimap contained the value, false if not
    +155             */
    +156            public boolean remove(K key, V value) {
    +157                    List<V> values = map.get(sanitizeKey(key));
    +158                    if (values != null) {
    +159                            return values.remove(value);
    +160                    }
    +161                    return false;
    +162            }
    +163    
    +164            /**
    +165             * Removes all the values associated with a key
    +166             * @param key the key to remove
    +167             * @return the removed values or empty list if the key doesn't exist
    +168             */
    +169            public List<V> removeAll(K key) {
    +170                    List<V> removed = map.remove(sanitizeKey(key));
    +171                    return (removed == null) ? Collections.<V> emptyList() : removed;
    +172            }
    +173    
    +174            /**
    +175             * Replaces all values with the given value.
    +176             * @param key the key
    +177             * @param value the value with which to replace all existing values, or null
    +178             * to remove all values
    +179             * @return the values that were replaced
    +180             */
    +181            public List<V> replace(K key, V value) {
    +182                    List<V> replaced = removeAll(key);
    +183                    if (value != null) {
    +184                            put(key, value);
    +185                    }
    +186                    return replaced;
    +187            }
    +188    
    +189            /**
    +190             * Replaces all values with the given values.
    +191             * @param key the key
    +192             * @param values the values with which to replace all existing values
    +193             * @return the values that were replaced
    +194             */
    +195            public List<V> replace(K key, Collection<V> values) {
    +196                    List<V> replaced = removeAll(key);
    +197                    if (values != null && !values.isEmpty()) {
    +198                            putAll(key, values);
    +199                    }
    +200                    return replaced;
    +201            }
    +202    
    +203            /**
    +204             * Clears all entries from the multimap.
    +205             */
    +206            public void clear() {
    +207                    map.clear();
    +208            }
    +209    
    +210            /**
    +211             * Returns all the keys.
    +212             * @return all the keys
    +213             */
    +214            public Set<K> keySet() {
    +215                    return map.keySet();
    +216            }
    +217    
    +218            /**
    +219             * Returns all the values.
    +220             * @return all the values
    +221             */
    +222            public List<V> values() {
    +223                    List<V> list = new ArrayList<V>();
    +224                    for (List<V> value : map.values()) {
    +225                            list.addAll(value);
    +226                    }
    +227                    return list;
    +228            }
    +229    
    +230            /**
    +231             * Determines if the multimap is empty or not.
    +232             * @return true if it's empty, false if not
    +233             */
    +234            public boolean isEmpty() {
    +235                    return size() == 0;
    +236            }
    +237    
    +238            /**
    +239             * Returns the number of values in the map.
    +240             * @return the number of values
    +241             */
    +242            public int size() {
    +243                    int size = 0;
    +244                    for (List<V> value : map.values()) {
    +245                            size += value.size();
    +246                    }
    +247                    return size;
    +248            }
    +249    
    +250            /**
    +251             * Gets the underlying {@link Map} object.
    +252             * @return the underlying {@link Map} object
    +253             */
    +254            public Map<K, List<V>> getMap() {
    +255                    return map;
    +256            }
    +257    
    +258            /**
    +259             * Modifies a given key before it is used to interact with the internal map.
    +260             * This method is meant to be overridden by child classes if necessary.
    +261             * @param key the key
    +262             * @return the modified key (by default, the key is returned as-is)
    +263             */
    +264            protected K sanitizeKey(K key) {
    +265                    return key;
    +266            }
    +267    
    +268            //@Override
    +269            public Iterator<Map.Entry<K, List<V>>> iterator() {
    +270                    return map.entrySet().iterator();
    +271            }
    +272    
    +273            @Override
    +274            public String toString() {
    +275                    return map.toString();
    +276            }
    +277    
    +278            @Override
    +279            public int hashCode() {
    +280                    return map.hashCode();
    +281            }
    +282    
    +283            @Override
    +284            public boolean equals(Object obj) {
    +285                    if (this == obj)
    +286                            return true;
    +287                    if (obj == null)
    +288                            return false;
    +289                    if (getClass() != obj.getClass())
    +290                            return false;
    +291    
    +292                    ListMultimap<?, ?> other = (ListMultimap<?, ?>) obj;
    +293                    return map.equals(other.map);
    +294            }
    +295    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Period.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Period.html new file mode 100644 index 000000000..6612cc416 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Period.html @@ -0,0 +1,202 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.util.Date;
    +004    
    +005    /*
    +006     Copyright (c) 2013, Michael Angstadt
    +007     All rights reserved.
    +008    
    +009     Redistribution and use in source and binary forms, with or without
    +010     modification, are permitted provided that the following conditions are met: 
    +011    
    +012     1. Redistributions of source code must retain the above copyright notice, this
    +013     list of conditions and the following disclaimer. 
    +014     2. Redistributions in binary form must reproduce the above copyright notice,
    +015     this list of conditions and the following disclaimer in the documentation
    +016     and/or other materials provided with the distribution. 
    +017    
    +018     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +019     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +020     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +021     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +022     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +023     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +024     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +025     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +026     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +027     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +028     */
    +029    
    +030    /**
    +031     * A period of time.
    +032     * @author Michael Angstadt
    +033     */
    +034    public final class Period {
    +035            private final Date startDate;
    +036            private final Date endDate;
    +037            private final Duration duration;
    +038    
    +039            /**
    +040             * Creates a new time period.
    +041             * @param startDate the start date
    +042             * @param endDate the end date
    +043             */
    +044            public Period(Date startDate, Date endDate) {
    +045                    this.startDate = copy(startDate);
    +046                    this.endDate = copy(endDate);
    +047                    duration = null;
    +048            }
    +049    
    +050            /**
    +051             * Creates a new time period.
    +052             * @param startDate the start date
    +053             * @param duration the length of time after the start date
    +054             */
    +055            public Period(Date startDate, Duration duration) {
    +056                    this.startDate = copy(startDate);
    +057                    this.duration = duration;
    +058                    endDate = null;
    +059            }
    +060    
    +061            /**
    +062             * Copies an existing time period.
    +063             * @param period the period to copy
    +064             */
    +065            public Period(Period period) {
    +066                    this.startDate = period.startDate;
    +067                    this.endDate = period.endDate;
    +068                    this.duration = period.duration;
    +069            }
    +070    
    +071            /**
    +072             * Gets the start date.
    +073             * @return the start date
    +074             */
    +075            public Date getStartDate() {
    +076                    return copy(startDate);
    +077            }
    +078    
    +079            /**
    +080             * Gets the end date. This will be null if a duration was defined.
    +081             * @return the end date or null if not set
    +082             */
    +083            public Date getEndDate() {
    +084                    return copy(endDate);
    +085            }
    +086    
    +087            /**
    +088             * Gets the length of time after the start date. This will be null if an end
    +089             * date was defined.
    +090             * @return the duration or null if not set
    +091             */
    +092            public Duration getDuration() {
    +093                    return duration;
    +094            }
    +095    
    +096            @Override
    +097            public int hashCode() {
    +098                    final int prime = 31;
    +099                    int result = 1;
    +100                    result = prime * result + ((duration == null) ? 0 : duration.hashCode());
    +101                    result = prime * result + ((endDate == null) ? 0 : endDate.hashCode());
    +102                    result = prime * result + ((startDate == null) ? 0 : startDate.hashCode());
    +103                    return result;
    +104            }
    +105    
    +106            @Override
    +107            public boolean equals(Object obj) {
    +108                    if (this == obj)
    +109                            return true;
    +110                    if (obj == null)
    +111                            return false;
    +112                    if (getClass() != obj.getClass())
    +113                            return false;
    +114                    Period other = (Period) obj;
    +115                    if (duration == null) {
    +116                            if (other.duration != null)
    +117                                    return false;
    +118                    } else if (!duration.equals(other.duration))
    +119                            return false;
    +120                    if (endDate == null) {
    +121                            if (other.endDate != null)
    +122                                    return false;
    +123                    } else if (!endDate.equals(other.endDate))
    +124                            return false;
    +125                    if (startDate == null) {
    +126                            if (other.startDate != null)
    +127                                    return false;
    +128                    } else if (!startDate.equals(other.startDate))
    +129                            return false;
    +130                    return true;
    +131            }
    +132    
    +133            private Date copy(Date date) {
    +134                    return (date == null) ? null : new Date(date.getTime());
    +135            }
    +136    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.Builder.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.Builder.html new file mode 100644 index 000000000..f1d0731f2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.Builder.html @@ -0,0 +1,724 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.Collections;
    +005    import java.util.Date;
    +006    import java.util.List;
    +007    import java.util.Map;
    +008    
    +009    /*
    +010     Copyright (c) 2013, Michael Angstadt
    +011     All rights reserved.
    +012    
    +013     Redistribution and use in source and binary forms, with or without
    +014     modification, are permitted provided that the following conditions are met: 
    +015    
    +016     1. Redistributions of source code must retain the above copyright notice, this
    +017     list of conditions and the following disclaimer. 
    +018     2. Redistributions in binary form must reproduce the above copyright notice,
    +019     this list of conditions and the following disclaimer in the documentation
    +020     and/or other materials provided with the distribution. 
    +021    
    +022     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +023     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +024     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +025     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +026     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +027     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +028     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +029     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +030     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +031     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +032     */
    +033    
    +034    /**
    +035     * <p>
    +036     * Represents a recurrence rule value.
    +037     * </p>
    +038     * <p>
    +039     * This class is immutable. Use the {@link Builder} object to construct a new
    +040     * instance.
    +041     * </p>
    +042     * <p>
    +043     * <b>Examples:</b>
    +044     * 
    +045     * <pre class="brush:java">
    +046     * //&quot;bi-weekly&quot;
    +047     * Recurrence rrule = new Recurrence.Builder(Frequency.WEEKLY).interval(2).build();
    +048     * Recurrence copy = new Recurrence.Builder(rrule).interval(3).build();
    +049     * </pre>
    +050     * 
    +051     * </p>
    +052     * @author Michael Angstadt
    +053     * @rfc 5545 p.38-45
    +054     */
    +055    public final class Recurrence {
    +056            private final Frequency frequency;
    +057            private final Integer interval;
    +058            private final Integer count;
    +059            private final Date until;
    +060            private final boolean untilHasTime;
    +061            private final List<Integer> bySecond;
    +062            private final List<Integer> byMinute;
    +063            private final List<Integer> byHour;
    +064            private final List<Integer> byMonthDay;
    +065            private final List<Integer> byYearDay;
    +066            private final List<Integer> byWeekNo;
    +067            private final List<Integer> byMonth;
    +068            private final List<Integer> bySetPos;
    +069            private final List<DayOfWeek> byDay;
    +070            private final List<Integer> byDayPrefixes;
    +071            private final DayOfWeek workweekStarts;
    +072            private final Map<String, List<String>> xrules;
    +073    
    +074            private Recurrence(Builder builder) {
    +075                    frequency = builder.frequency;
    +076                    interval = builder.interval;
    +077                    count = builder.count;
    +078                    until = builder.until;
    +079                    untilHasTime = builder.untilHasTime;
    +080                    bySecond = Collections.unmodifiableList(builder.bySecond);
    +081                    byMinute = Collections.unmodifiableList(builder.byMinute);
    +082                    byHour = Collections.unmodifiableList(builder.byHour);
    +083                    byMonthDay = Collections.unmodifiableList(builder.byMonthDay);
    +084                    byYearDay = Collections.unmodifiableList(builder.byYearDay);
    +085                    byWeekNo = Collections.unmodifiableList(builder.byWeekNo);
    +086                    byMonth = Collections.unmodifiableList(builder.byMonth);
    +087                    bySetPos = Collections.unmodifiableList(builder.bySetPos);
    +088                    byDay = Collections.unmodifiableList(builder.byDay);
    +089                    byDayPrefixes = Collections.unmodifiableList(builder.byDayPrefixes);
    +090                    workweekStarts = builder.workweekStarts;
    +091    
    +092                    Map<String, List<String>> map = builder.xrules.getMap();
    +093                    for (String key : map.keySet()) {
    +094                            List<String> value = map.get(key);
    +095                            map.put(key, Collections.unmodifiableList(value));
    +096                    }
    +097                    xrules = Collections.unmodifiableMap(map);
    +098            }
    +099    
    +100            /**
    +101             * Gets the frequency.
    +102             * @return the frequency or null if not set
    +103             */
    +104            public Frequency getFrequency() {
    +105                    return frequency;
    +106            }
    +107    
    +108            /**
    +109             * Gets the date that the recurrence stops.
    +110             * @return the date or null if not set
    +111             */
    +112            public Date getUntil() {
    +113                    return (until == null) ? null : new Date(until.getTime());
    +114            }
    +115    
    +116            /**
    +117             * Determines whether the UNTIL date has a time component.
    +118             * @return true if it has a time component, false if it is strictly a date
    +119             */
    +120            public boolean hasTimeUntilDate() {
    +121                    return untilHasTime;
    +122            }
    +123    
    +124            /**
    +125             * Gets the number of times the rule will be repeated.
    +126             * @return the number of times to repeat the rule or null if not set
    +127             */
    +128            public Integer getCount() {
    +129                    return count;
    +130            }
    +131    
    +132            /**
    +133             * Gets how often the rule repeats, in relation to the frequency.
    +134             * @return the repetition interval or null if not set
    +135             */
    +136            public Integer getInterval() {
    +137                    return interval;
    +138            }
    +139    
    +140            /**
    +141             * Gets the BYSECOND rule part.
    +142             * @return the BYSECOND rule part or empty list if not set
    +143             */
    +144            public List<Integer> getBySecond() {
    +145                    return bySecond;
    +146            }
    +147    
    +148            /**
    +149             * Gets the BYMINUTE rule part.
    +150             * @return the BYMINUTE rule part or empty list if not set
    +151             */
    +152            public List<Integer> getByMinute() {
    +153                    return byMinute;
    +154            }
    +155    
    +156            /**
    +157             * Gets the BYHOUR rule part.
    +158             * @return the BYHOUR rule part or empty list if not set
    +159             */
    +160            public List<Integer> getByHour() {
    +161                    return byHour;
    +162            }
    +163    
    +164            /**
    +165             * Gets the day components of the BYDAY rule part.
    +166             * @return the day components of the BYDAY rule part or empty list if not
    +167             * set
    +168             */
    +169            public List<DayOfWeek> getByDay() {
    +170                    return byDay;
    +171            }
    +172    
    +173            /**
    +174             * Gets the numeric components of the BYDAY rule part.
    +175             * @return the numeric components of the BYDAY rule part or empty list if
    +176             * not set (BYDAY values without numeric components will have a "null"
    +177             * number)
    +178             */
    +179            public List<Integer> getByDayPrefixes() {
    +180                    return byDayPrefixes;
    +181            }
    +182    
    +183            /**
    +184             * Gets the BYMONTHDAY rule part.
    +185             * @return the BYMONTHDAY rule part or empty list if not set
    +186             */
    +187            public List<Integer> getByMonthDay() {
    +188                    return byMonthDay;
    +189            }
    +190    
    +191            /**
    +192             * Gets the BYYEARDAY rule part.
    +193             * @return the BYYEARDAY rule part or empty list if not set
    +194             */
    +195            public List<Integer> getByYearDay() {
    +196                    return byYearDay;
    +197            }
    +198    
    +199            /**
    +200             * Gets the BYWEEKNO rule part.
    +201             * @return the BYWEEKNO rule part or empty list if not set
    +202             */
    +203            public List<Integer> getByWeekNo() {
    +204                    return byWeekNo;
    +205            }
    +206    
    +207            /**
    +208             * Gets the BYMONTH rule part.
    +209             * @return the BYMONTH rule part or empty list if not set
    +210             */
    +211            public List<Integer> getByMonth() {
    +212                    return byMonth;
    +213            }
    +214    
    +215            /**
    +216             * Gets the BYSETPOS rule part.
    +217             * @return the BYSETPOS rule part or empty list if not set
    +218             */
    +219            public List<Integer> getBySetPos() {
    +220                    return bySetPos;
    +221            }
    +222    
    +223            /**
    +224             * Gets the day that the work week starts.
    +225             * @return the day that the work week starts or null if not set
    +226             */
    +227            public DayOfWeek getWorkweekStarts() {
    +228                    return workweekStarts;
    +229            }
    +230    
    +231            /**
    +232             * Gets the non-standard rule parts.
    +233             * @return the non-standard rule parts
    +234             */
    +235            public Map<String, List<String>> getXRules() {
    +236                    return xrules;
    +237            }
    +238    
    +239            @Override
    +240            public int hashCode() {
    +241                    final int prime = 31;
    +242                    int result = 1;
    +243                    result = prime * result + ((byDay == null) ? 0 : byDay.hashCode());
    +244                    result = prime * result + ((byDayPrefixes == null) ? 0 : byDayPrefixes.hashCode());
    +245                    result = prime * result + ((byHour == null) ? 0 : byHour.hashCode());
    +246                    result = prime * result + ((byMinute == null) ? 0 : byMinute.hashCode());
    +247                    result = prime * result + ((byMonth == null) ? 0 : byMonth.hashCode());
    +248                    result = prime * result + ((byMonthDay == null) ? 0 : byMonthDay.hashCode());
    +249                    result = prime * result + ((bySecond == null) ? 0 : bySecond.hashCode());
    +250                    result = prime * result + ((bySetPos == null) ? 0 : bySetPos.hashCode());
    +251                    result = prime * result + ((byWeekNo == null) ? 0 : byWeekNo.hashCode());
    +252                    result = prime * result + ((byYearDay == null) ? 0 : byYearDay.hashCode());
    +253                    result = prime * result + ((count == null) ? 0 : count.hashCode());
    +254                    result = prime * result + ((xrules == null) ? 0 : xrules.hashCode());
    +255                    result = prime * result + ((frequency == null) ? 0 : frequency.hashCode());
    +256                    result = prime * result + ((interval == null) ? 0 : interval.hashCode());
    +257                    result = prime * result + ((until == null) ? 0 : until.hashCode());
    +258                    result = prime * result + (untilHasTime ? 1231 : 1237);
    +259                    result = prime * result + ((workweekStarts == null) ? 0 : workweekStarts.hashCode());
    +260                    return result;
    +261            }
    +262    
    +263            @Override
    +264            public boolean equals(Object obj) {
    +265                    if (this == obj)
    +266                            return true;
    +267                    if (obj == null)
    +268                            return false;
    +269                    if (getClass() != obj.getClass())
    +270                            return false;
    +271                    Recurrence other = (Recurrence) obj;
    +272                    if (byDay == null) {
    +273                            if (other.byDay != null)
    +274                                    return false;
    +275                    } else if (!byDay.equals(other.byDay))
    +276                            return false;
    +277                    if (byDayPrefixes == null) {
    +278                            if (other.byDayPrefixes != null)
    +279                                    return false;
    +280                    } else if (!byDayPrefixes.equals(other.byDayPrefixes))
    +281                            return false;
    +282                    if (byHour == null) {
    +283                            if (other.byHour != null)
    +284                                    return false;
    +285                    } else if (!byHour.equals(other.byHour))
    +286                            return false;
    +287                    if (byMinute == null) {
    +288                            if (other.byMinute != null)
    +289                                    return false;
    +290                    } else if (!byMinute.equals(other.byMinute))
    +291                            return false;
    +292                    if (byMonth == null) {
    +293                            if (other.byMonth != null)
    +294                                    return false;
    +295                    } else if (!byMonth.equals(other.byMonth))
    +296                            return false;
    +297                    if (byMonthDay == null) {
    +298                            if (other.byMonthDay != null)
    +299                                    return false;
    +300                    } else if (!byMonthDay.equals(other.byMonthDay))
    +301                            return false;
    +302                    if (bySecond == null) {
    +303                            if (other.bySecond != null)
    +304                                    return false;
    +305                    } else if (!bySecond.equals(other.bySecond))
    +306                            return false;
    +307                    if (bySetPos == null) {
    +308                            if (other.bySetPos != null)
    +309                                    return false;
    +310                    } else if (!bySetPos.equals(other.bySetPos))
    +311                            return false;
    +312                    if (byWeekNo == null) {
    +313                            if (other.byWeekNo != null)
    +314                                    return false;
    +315                    } else if (!byWeekNo.equals(other.byWeekNo))
    +316                            return false;
    +317                    if (byYearDay == null) {
    +318                            if (other.byYearDay != null)
    +319                                    return false;
    +320                    } else if (!byYearDay.equals(other.byYearDay))
    +321                            return false;
    +322                    if (count == null) {
    +323                            if (other.count != null)
    +324                                    return false;
    +325                    } else if (!count.equals(other.count))
    +326                            return false;
    +327                    if (xrules == null) {
    +328                            if (other.xrules != null)
    +329                                    return false;
    +330                    } else if (!xrules.equals(other.xrules))
    +331                            return false;
    +332                    if (frequency != other.frequency)
    +333                            return false;
    +334                    if (interval == null) {
    +335                            if (other.interval != null)
    +336                                    return false;
    +337                    } else if (!interval.equals(other.interval))
    +338                            return false;
    +339                    if (until == null) {
    +340                            if (other.until != null)
    +341                                    return false;
    +342                    } else if (!until.equals(other.until))
    +343                            return false;
    +344                    if (untilHasTime != other.untilHasTime)
    +345                            return false;
    +346                    if (workweekStarts != other.workweekStarts)
    +347                            return false;
    +348                    return true;
    +349            }
    +350    
    +351            /**
    +352             * Represents the frequency at which a recurrence rule repeats itself.
    +353             * @author Michael Angstadt
    +354             */
    +355            public static enum Frequency {
    +356                    SECONDLY, MINUTELY, HOURLY, DAILY, WEEKLY, MONTHLY, YEARLY
    +357            }
    +358    
    +359            /**
    +360             * Represents each of the seven days of the week.
    +361             * @author Michael Angstadt
    +362             */
    +363            public static enum DayOfWeek {
    +364                    MONDAY("MO"), TUESDAY("TU"), WEDNESDAY("WE"), THURSDAY("TH"), FRIDAY("FR"), SATURDAY("SA"), SUNDAY("SU");
    +365    
    +366                    private final String abbr;
    +367    
    +368                    private DayOfWeek(String abbr) {
    +369                            this.abbr = abbr;
    +370                    }
    +371    
    +372                    /**
    +373                     * Gets the day's abbreviation.
    +374                     * @return the abbreviation (e.g. "MO" for Monday)
    +375                     */
    +376                    public String getAbbr() {
    +377                            return abbr;
    +378                    }
    +379    
    +380                    /**
    +381                     * Gets a day by its abbreviation.
    +382                     * @param abbr the abbreviation (case-insensitive, e.g. "MO" for Monday)
    +383                     * @return the day or null if not found
    +384                     */
    +385                    public static DayOfWeek valueOfAbbr(String abbr) {
    +386                            for (DayOfWeek day : values()) {
    +387                                    if (day.abbr.equalsIgnoreCase(abbr)) {
    +388                                            return day;
    +389                                    }
    +390                            }
    +391                            return null;
    +392                    }
    +393            }
    +394    
    +395            /**
    +396             * Constructs {@link Recurrence} objects.
    +397             * @author Michael Angstadt
    +398             */
    +399            public static class Builder {
    +400                    private Frequency frequency;
    +401                    private Integer interval;
    +402                    private Integer count;
    +403                    private Date until;
    +404                    private boolean untilHasTime;
    +405                    private List<Integer> bySecond;
    +406                    private List<Integer> byMinute;
    +407                    private List<Integer> byHour;
    +408                    private List<DayOfWeek> byDay;
    +409                    private List<Integer> byDayPrefixes;
    +410                    private List<Integer> byMonthDay;
    +411                    private List<Integer> byYearDay;
    +412                    private List<Integer> byWeekNo;
    +413                    private List<Integer> byMonth;
    +414                    private List<Integer> bySetPos;
    +415                    private DayOfWeek workweekStarts;
    +416                    private ListMultimap<String, String> xrules;
    +417    
    +418                    /**
    +419                     * Constructs a new builder.
    +420                     * @param frequency the recurrence frequency
    +421                     */
    +422                    public Builder(Frequency frequency) {
    +423                            this.frequency = frequency;
    +424                            bySecond = new ArrayList<Integer>(0);
    +425                            byMinute = new ArrayList<Integer>(0);
    +426                            byHour = new ArrayList<Integer>(0);
    +427                            byDay = new ArrayList<DayOfWeek>(0);
    +428                            byDayPrefixes = new ArrayList<Integer>(0);
    +429                            byMonthDay = new ArrayList<Integer>(0);
    +430                            byYearDay = new ArrayList<Integer>(0);
    +431                            byWeekNo = new ArrayList<Integer>(0);
    +432                            byMonth = new ArrayList<Integer>(0);
    +433                            bySetPos = new ArrayList<Integer>(0);
    +434                            xrules = new ListMultimap<String, String>(0);
    +435                    }
    +436    
    +437                    /**
    +438                     * Constructs a new builder
    +439                     * @param recur the recurrence object to copy from
    +440                     */
    +441                    public Builder(Recurrence recur) {
    +442                            frequency = recur.frequency;
    +443                            interval = recur.interval;
    +444                            count = recur.count;
    +445                            until = recur.until;
    +446                            untilHasTime = recur.untilHasTime;
    +447                            bySecond = new ArrayList<Integer>(recur.bySecond);
    +448                            byMinute = new ArrayList<Integer>(recur.byMinute);
    +449                            byHour = new ArrayList<Integer>(recur.byHour);
    +450                            byDay = new ArrayList<DayOfWeek>(recur.byDay);
    +451                            byDayPrefixes = new ArrayList<Integer>(recur.byDayPrefixes);
    +452                            byMonthDay = new ArrayList<Integer>(recur.byMonthDay);
    +453                            byYearDay = new ArrayList<Integer>(recur.byYearDay);
    +454                            byWeekNo = new ArrayList<Integer>(recur.byWeekNo);
    +455                            byMonth = new ArrayList<Integer>(recur.byMonth);
    +456                            bySetPos = new ArrayList<Integer>(recur.bySetPos);
    +457                            workweekStarts = recur.workweekStarts;
    +458                            xrules = new ListMultimap<String, String>(recur.xrules);
    +459                    }
    +460    
    +461                    /**
    +462                     * Sets the frequency
    +463                     * @param frequency the frequency
    +464                     * @return this
    +465                     */
    +466                    public Builder frequency(Frequency frequency) {
    +467                            this.frequency = frequency;
    +468                            return this;
    +469                    }
    +470    
    +471                    /**
    +472                     * Sets the date that the recurrence stops. Note that the UNTIL and
    +473                     * COUNT fields cannot both be defined within the same rule.
    +474                     * @param until the date (time component is included)
    +475                     * @return this
    +476                     */
    +477                    public Builder until(Date until) {
    +478                            return until(until, true);
    +479                    }
    +480    
    +481                    /**
    +482                     * Sets the date that the recurrence stops. Note that the UNTIL and
    +483                     * COUNT fields cannot both be defined within the same rule.
    +484                     * @param until the date
    +485                     * @param hasTime true if the date has a time component, false if it's
    +486                     * strictly a date
    +487                     * @return this
    +488                     */
    +489                    public Builder until(Date until, boolean hasTime) {
    +490                            if (until == null) {
    +491                                    this.until = null;
    +492                                    this.untilHasTime = false;
    +493                            } else {
    +494                                    this.until = new Date(until.getTime());
    +495                                    this.untilHasTime = hasTime;
    +496                            }
    +497                            return this;
    +498                    }
    +499    
    +500                    /**
    +501                     * Gets the number of times the rule will be repeated. Note that the
    +502                     * UNTIL and COUNT fields cannot both be defined within the same rule.
    +503                     * @param count the number of times to repeat the rule
    +504                     * @return this
    +505                     */
    +506                    public Builder count(Integer count) {
    +507                            this.count = count;
    +508                            return this;
    +509                    }
    +510    
    +511                    /**
    +512                     * Gets how often the rule repeats, in relation to the frequency.
    +513                     * @param interval the repetition interval
    +514                     * @return this
    +515                     */
    +516                    public Builder interval(Integer interval) {
    +517                            this.interval = interval;
    +518                            return this;
    +519                    }
    +520    
    +521                    /**
    +522                     * Adds a BYSECOND rule part.
    +523                     * @param bySecond the value to add
    +524                     * @return this
    +525                     */
    +526                    public Builder bySecond(Integer bySecond) {
    +527                            this.bySecond.add(bySecond);
    +528                            return this;
    +529                    }
    +530    
    +531                    /**
    +532                     * Adds a BYMINUTE rule part.
    +533                     * @param byMinute the value to add
    +534                     * @return this
    +535                     */
    +536                    public Builder byMinute(Integer byMinute) {
    +537                            this.byMinute.add(byMinute);
    +538                            return this;
    +539                    }
    +540    
    +541                    /**
    +542                     * Adds a BYHOUR rule part.
    +543                     * @param byHour the value to add
    +544                     * @return this
    +545                     */
    +546                    public Builder byHour(Integer byHour) {
    +547                            this.byHour.add(byHour);
    +548                            return this;
    +549                    }
    +550    
    +551                    /**
    +552                     * Adds a BYMONTHDAY rule part.
    +553                     * @param byMonthDay the value to add
    +554                     * @return this
    +555                     */
    +556                    public Builder byMonthDay(Integer byMonthDay) {
    +557                            this.byMonthDay.add(byMonthDay);
    +558                            return this;
    +559                    }
    +560    
    +561                    /**
    +562                     * Adds a BYYEARDAY rule part.
    +563                     * @param byYearDay the value to add
    +564                     * @return this
    +565                     */
    +566                    public Builder byYearDay(Integer byYearDay) {
    +567                            this.byYearDay.add(byYearDay);
    +568                            return this;
    +569                    }
    +570    
    +571                    /**
    +572                     * Adds a BYWEEKNO rule part.
    +573                     * @param byWeekNo the value to add
    +574                     * @return this
    +575                     */
    +576                    public Builder byWeekNo(Integer byWeekNo) {
    +577                            this.byWeekNo.add(byWeekNo);
    +578                            return this;
    +579                    }
    +580    
    +581                    /**
    +582                     * Adds a BYMONTH rule part.
    +583                     * @param byMonth the value to add
    +584                     * @return this
    +585                     */
    +586                    public Builder byMonth(Integer byMonth) {
    +587                            this.byMonth.add(byMonth);
    +588                            return this;
    +589                    }
    +590    
    +591                    /**
    +592                     * Adds a BYSETPOS rule part.
    +593                     * @param bySetPos the value to add
    +594                     * @return this
    +595                     */
    +596                    public Builder bySetPos(Integer bySetPos) {
    +597                            this.bySetPos.add(bySetPos);
    +598                            return this;
    +599                    }
    +600    
    +601                    /**
    +602                     * Adds a BYDAY rule part.
    +603                     * @param byDay the value to add
    +604                     * @return this
    +605                     */
    +606                    public Builder byDay(DayOfWeek byDay) {
    +607                            return byDay(null, byDay);
    +608                    }
    +609    
    +610                    /**
    +611                     * Adds a BYDAY rule part.
    +612                     * @param prefix the numeric prefix
    +613                     * @param byDay the value to add
    +614                     * @return this
    +615                     */
    +616                    public Builder byDay(Integer prefix, DayOfWeek byDay) {
    +617                            this.byDayPrefixes.add(prefix);
    +618                            this.byDay.add(byDay);
    +619                            return this;
    +620                    }
    +621    
    +622                    /**
    +623                     * Sets the day that the work week starts.
    +624                     * @param workweekStarts the day
    +625                     * @return this
    +626                     */
    +627                    public Builder workweekStarts(DayOfWeek workweekStarts) {
    +628                            this.workweekStarts = workweekStarts;
    +629                            return this;
    +630                    }
    +631    
    +632                    /**
    +633                     * Adds a non-standard rule part.
    +634                     * @param name the name
    +635                     * @param value the value or null to remove the rule part
    +636                     * @return this
    +637                     */
    +638                    public Builder xrule(String name, String value) {
    +639                            name = name.toUpperCase();
    +640    
    +641                            if (value == null) {
    +642                                    xrules.removeAll(name);
    +643                            } else {
    +644                                    xrules.put(name, value);
    +645                            }
    +646    
    +647                            return this;
    +648                    }
    +649    
    +650                    /**
    +651                     * Builds the final {@link Recurrence} object.
    +652                     * @return the object
    +653                     */
    +654                    public Recurrence build() {
    +655                            return new Recurrence(this);
    +656                    }
    +657            }
    +658    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.DayOfWeek.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.DayOfWeek.html new file mode 100644 index 000000000..f1d0731f2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.DayOfWeek.html @@ -0,0 +1,724 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.Collections;
    +005    import java.util.Date;
    +006    import java.util.List;
    +007    import java.util.Map;
    +008    
    +009    /*
    +010     Copyright (c) 2013, Michael Angstadt
    +011     All rights reserved.
    +012    
    +013     Redistribution and use in source and binary forms, with or without
    +014     modification, are permitted provided that the following conditions are met: 
    +015    
    +016     1. Redistributions of source code must retain the above copyright notice, this
    +017     list of conditions and the following disclaimer. 
    +018     2. Redistributions in binary form must reproduce the above copyright notice,
    +019     this list of conditions and the following disclaimer in the documentation
    +020     and/or other materials provided with the distribution. 
    +021    
    +022     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +023     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +024     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +025     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +026     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +027     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +028     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +029     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +030     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +031     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +032     */
    +033    
    +034    /**
    +035     * <p>
    +036     * Represents a recurrence rule value.
    +037     * </p>
    +038     * <p>
    +039     * This class is immutable. Use the {@link Builder} object to construct a new
    +040     * instance.
    +041     * </p>
    +042     * <p>
    +043     * <b>Examples:</b>
    +044     * 
    +045     * <pre class="brush:java">
    +046     * //&quot;bi-weekly&quot;
    +047     * Recurrence rrule = new Recurrence.Builder(Frequency.WEEKLY).interval(2).build();
    +048     * Recurrence copy = new Recurrence.Builder(rrule).interval(3).build();
    +049     * </pre>
    +050     * 
    +051     * </p>
    +052     * @author Michael Angstadt
    +053     * @rfc 5545 p.38-45
    +054     */
    +055    public final class Recurrence {
    +056            private final Frequency frequency;
    +057            private final Integer interval;
    +058            private final Integer count;
    +059            private final Date until;
    +060            private final boolean untilHasTime;
    +061            private final List<Integer> bySecond;
    +062            private final List<Integer> byMinute;
    +063            private final List<Integer> byHour;
    +064            private final List<Integer> byMonthDay;
    +065            private final List<Integer> byYearDay;
    +066            private final List<Integer> byWeekNo;
    +067            private final List<Integer> byMonth;
    +068            private final List<Integer> bySetPos;
    +069            private final List<DayOfWeek> byDay;
    +070            private final List<Integer> byDayPrefixes;
    +071            private final DayOfWeek workweekStarts;
    +072            private final Map<String, List<String>> xrules;
    +073    
    +074            private Recurrence(Builder builder) {
    +075                    frequency = builder.frequency;
    +076                    interval = builder.interval;
    +077                    count = builder.count;
    +078                    until = builder.until;
    +079                    untilHasTime = builder.untilHasTime;
    +080                    bySecond = Collections.unmodifiableList(builder.bySecond);
    +081                    byMinute = Collections.unmodifiableList(builder.byMinute);
    +082                    byHour = Collections.unmodifiableList(builder.byHour);
    +083                    byMonthDay = Collections.unmodifiableList(builder.byMonthDay);
    +084                    byYearDay = Collections.unmodifiableList(builder.byYearDay);
    +085                    byWeekNo = Collections.unmodifiableList(builder.byWeekNo);
    +086                    byMonth = Collections.unmodifiableList(builder.byMonth);
    +087                    bySetPos = Collections.unmodifiableList(builder.bySetPos);
    +088                    byDay = Collections.unmodifiableList(builder.byDay);
    +089                    byDayPrefixes = Collections.unmodifiableList(builder.byDayPrefixes);
    +090                    workweekStarts = builder.workweekStarts;
    +091    
    +092                    Map<String, List<String>> map = builder.xrules.getMap();
    +093                    for (String key : map.keySet()) {
    +094                            List<String> value = map.get(key);
    +095                            map.put(key, Collections.unmodifiableList(value));
    +096                    }
    +097                    xrules = Collections.unmodifiableMap(map);
    +098            }
    +099    
    +100            /**
    +101             * Gets the frequency.
    +102             * @return the frequency or null if not set
    +103             */
    +104            public Frequency getFrequency() {
    +105                    return frequency;
    +106            }
    +107    
    +108            /**
    +109             * Gets the date that the recurrence stops.
    +110             * @return the date or null if not set
    +111             */
    +112            public Date getUntil() {
    +113                    return (until == null) ? null : new Date(until.getTime());
    +114            }
    +115    
    +116            /**
    +117             * Determines whether the UNTIL date has a time component.
    +118             * @return true if it has a time component, false if it is strictly a date
    +119             */
    +120            public boolean hasTimeUntilDate() {
    +121                    return untilHasTime;
    +122            }
    +123    
    +124            /**
    +125             * Gets the number of times the rule will be repeated.
    +126             * @return the number of times to repeat the rule or null if not set
    +127             */
    +128            public Integer getCount() {
    +129                    return count;
    +130            }
    +131    
    +132            /**
    +133             * Gets how often the rule repeats, in relation to the frequency.
    +134             * @return the repetition interval or null if not set
    +135             */
    +136            public Integer getInterval() {
    +137                    return interval;
    +138            }
    +139    
    +140            /**
    +141             * Gets the BYSECOND rule part.
    +142             * @return the BYSECOND rule part or empty list if not set
    +143             */
    +144            public List<Integer> getBySecond() {
    +145                    return bySecond;
    +146            }
    +147    
    +148            /**
    +149             * Gets the BYMINUTE rule part.
    +150             * @return the BYMINUTE rule part or empty list if not set
    +151             */
    +152            public List<Integer> getByMinute() {
    +153                    return byMinute;
    +154            }
    +155    
    +156            /**
    +157             * Gets the BYHOUR rule part.
    +158             * @return the BYHOUR rule part or empty list if not set
    +159             */
    +160            public List<Integer> getByHour() {
    +161                    return byHour;
    +162            }
    +163    
    +164            /**
    +165             * Gets the day components of the BYDAY rule part.
    +166             * @return the day components of the BYDAY rule part or empty list if not
    +167             * set
    +168             */
    +169            public List<DayOfWeek> getByDay() {
    +170                    return byDay;
    +171            }
    +172    
    +173            /**
    +174             * Gets the numeric components of the BYDAY rule part.
    +175             * @return the numeric components of the BYDAY rule part or empty list if
    +176             * not set (BYDAY values without numeric components will have a "null"
    +177             * number)
    +178             */
    +179            public List<Integer> getByDayPrefixes() {
    +180                    return byDayPrefixes;
    +181            }
    +182    
    +183            /**
    +184             * Gets the BYMONTHDAY rule part.
    +185             * @return the BYMONTHDAY rule part or empty list if not set
    +186             */
    +187            public List<Integer> getByMonthDay() {
    +188                    return byMonthDay;
    +189            }
    +190    
    +191            /**
    +192             * Gets the BYYEARDAY rule part.
    +193             * @return the BYYEARDAY rule part or empty list if not set
    +194             */
    +195            public List<Integer> getByYearDay() {
    +196                    return byYearDay;
    +197            }
    +198    
    +199            /**
    +200             * Gets the BYWEEKNO rule part.
    +201             * @return the BYWEEKNO rule part or empty list if not set
    +202             */
    +203            public List<Integer> getByWeekNo() {
    +204                    return byWeekNo;
    +205            }
    +206    
    +207            /**
    +208             * Gets the BYMONTH rule part.
    +209             * @return the BYMONTH rule part or empty list if not set
    +210             */
    +211            public List<Integer> getByMonth() {
    +212                    return byMonth;
    +213            }
    +214    
    +215            /**
    +216             * Gets the BYSETPOS rule part.
    +217             * @return the BYSETPOS rule part or empty list if not set
    +218             */
    +219            public List<Integer> getBySetPos() {
    +220                    return bySetPos;
    +221            }
    +222    
    +223            /**
    +224             * Gets the day that the work week starts.
    +225             * @return the day that the work week starts or null if not set
    +226             */
    +227            public DayOfWeek getWorkweekStarts() {
    +228                    return workweekStarts;
    +229            }
    +230    
    +231            /**
    +232             * Gets the non-standard rule parts.
    +233             * @return the non-standard rule parts
    +234             */
    +235            public Map<String, List<String>> getXRules() {
    +236                    return xrules;
    +237            }
    +238    
    +239            @Override
    +240            public int hashCode() {
    +241                    final int prime = 31;
    +242                    int result = 1;
    +243                    result = prime * result + ((byDay == null) ? 0 : byDay.hashCode());
    +244                    result = prime * result + ((byDayPrefixes == null) ? 0 : byDayPrefixes.hashCode());
    +245                    result = prime * result + ((byHour == null) ? 0 : byHour.hashCode());
    +246                    result = prime * result + ((byMinute == null) ? 0 : byMinute.hashCode());
    +247                    result = prime * result + ((byMonth == null) ? 0 : byMonth.hashCode());
    +248                    result = prime * result + ((byMonthDay == null) ? 0 : byMonthDay.hashCode());
    +249                    result = prime * result + ((bySecond == null) ? 0 : bySecond.hashCode());
    +250                    result = prime * result + ((bySetPos == null) ? 0 : bySetPos.hashCode());
    +251                    result = prime * result + ((byWeekNo == null) ? 0 : byWeekNo.hashCode());
    +252                    result = prime * result + ((byYearDay == null) ? 0 : byYearDay.hashCode());
    +253                    result = prime * result + ((count == null) ? 0 : count.hashCode());
    +254                    result = prime * result + ((xrules == null) ? 0 : xrules.hashCode());
    +255                    result = prime * result + ((frequency == null) ? 0 : frequency.hashCode());
    +256                    result = prime * result + ((interval == null) ? 0 : interval.hashCode());
    +257                    result = prime * result + ((until == null) ? 0 : until.hashCode());
    +258                    result = prime * result + (untilHasTime ? 1231 : 1237);
    +259                    result = prime * result + ((workweekStarts == null) ? 0 : workweekStarts.hashCode());
    +260                    return result;
    +261            }
    +262    
    +263            @Override
    +264            public boolean equals(Object obj) {
    +265                    if (this == obj)
    +266                            return true;
    +267                    if (obj == null)
    +268                            return false;
    +269                    if (getClass() != obj.getClass())
    +270                            return false;
    +271                    Recurrence other = (Recurrence) obj;
    +272                    if (byDay == null) {
    +273                            if (other.byDay != null)
    +274                                    return false;
    +275                    } else if (!byDay.equals(other.byDay))
    +276                            return false;
    +277                    if (byDayPrefixes == null) {
    +278                            if (other.byDayPrefixes != null)
    +279                                    return false;
    +280                    } else if (!byDayPrefixes.equals(other.byDayPrefixes))
    +281                            return false;
    +282                    if (byHour == null) {
    +283                            if (other.byHour != null)
    +284                                    return false;
    +285                    } else if (!byHour.equals(other.byHour))
    +286                            return false;
    +287                    if (byMinute == null) {
    +288                            if (other.byMinute != null)
    +289                                    return false;
    +290                    } else if (!byMinute.equals(other.byMinute))
    +291                            return false;
    +292                    if (byMonth == null) {
    +293                            if (other.byMonth != null)
    +294                                    return false;
    +295                    } else if (!byMonth.equals(other.byMonth))
    +296                            return false;
    +297                    if (byMonthDay == null) {
    +298                            if (other.byMonthDay != null)
    +299                                    return false;
    +300                    } else if (!byMonthDay.equals(other.byMonthDay))
    +301                            return false;
    +302                    if (bySecond == null) {
    +303                            if (other.bySecond != null)
    +304                                    return false;
    +305                    } else if (!bySecond.equals(other.bySecond))
    +306                            return false;
    +307                    if (bySetPos == null) {
    +308                            if (other.bySetPos != null)
    +309                                    return false;
    +310                    } else if (!bySetPos.equals(other.bySetPos))
    +311                            return false;
    +312                    if (byWeekNo == null) {
    +313                            if (other.byWeekNo != null)
    +314                                    return false;
    +315                    } else if (!byWeekNo.equals(other.byWeekNo))
    +316                            return false;
    +317                    if (byYearDay == null) {
    +318                            if (other.byYearDay != null)
    +319                                    return false;
    +320                    } else if (!byYearDay.equals(other.byYearDay))
    +321                            return false;
    +322                    if (count == null) {
    +323                            if (other.count != null)
    +324                                    return false;
    +325                    } else if (!count.equals(other.count))
    +326                            return false;
    +327                    if (xrules == null) {
    +328                            if (other.xrules != null)
    +329                                    return false;
    +330                    } else if (!xrules.equals(other.xrules))
    +331                            return false;
    +332                    if (frequency != other.frequency)
    +333                            return false;
    +334                    if (interval == null) {
    +335                            if (other.interval != null)
    +336                                    return false;
    +337                    } else if (!interval.equals(other.interval))
    +338                            return false;
    +339                    if (until == null) {
    +340                            if (other.until != null)
    +341                                    return false;
    +342                    } else if (!until.equals(other.until))
    +343                            return false;
    +344                    if (untilHasTime != other.untilHasTime)
    +345                            return false;
    +346                    if (workweekStarts != other.workweekStarts)
    +347                            return false;
    +348                    return true;
    +349            }
    +350    
    +351            /**
    +352             * Represents the frequency at which a recurrence rule repeats itself.
    +353             * @author Michael Angstadt
    +354             */
    +355            public static enum Frequency {
    +356                    SECONDLY, MINUTELY, HOURLY, DAILY, WEEKLY, MONTHLY, YEARLY
    +357            }
    +358    
    +359            /**
    +360             * Represents each of the seven days of the week.
    +361             * @author Michael Angstadt
    +362             */
    +363            public static enum DayOfWeek {
    +364                    MONDAY("MO"), TUESDAY("TU"), WEDNESDAY("WE"), THURSDAY("TH"), FRIDAY("FR"), SATURDAY("SA"), SUNDAY("SU");
    +365    
    +366                    private final String abbr;
    +367    
    +368                    private DayOfWeek(String abbr) {
    +369                            this.abbr = abbr;
    +370                    }
    +371    
    +372                    /**
    +373                     * Gets the day's abbreviation.
    +374                     * @return the abbreviation (e.g. "MO" for Monday)
    +375                     */
    +376                    public String getAbbr() {
    +377                            return abbr;
    +378                    }
    +379    
    +380                    /**
    +381                     * Gets a day by its abbreviation.
    +382                     * @param abbr the abbreviation (case-insensitive, e.g. "MO" for Monday)
    +383                     * @return the day or null if not found
    +384                     */
    +385                    public static DayOfWeek valueOfAbbr(String abbr) {
    +386                            for (DayOfWeek day : values()) {
    +387                                    if (day.abbr.equalsIgnoreCase(abbr)) {
    +388                                            return day;
    +389                                    }
    +390                            }
    +391                            return null;
    +392                    }
    +393            }
    +394    
    +395            /**
    +396             * Constructs {@link Recurrence} objects.
    +397             * @author Michael Angstadt
    +398             */
    +399            public static class Builder {
    +400                    private Frequency frequency;
    +401                    private Integer interval;
    +402                    private Integer count;
    +403                    private Date until;
    +404                    private boolean untilHasTime;
    +405                    private List<Integer> bySecond;
    +406                    private List<Integer> byMinute;
    +407                    private List<Integer> byHour;
    +408                    private List<DayOfWeek> byDay;
    +409                    private List<Integer> byDayPrefixes;
    +410                    private List<Integer> byMonthDay;
    +411                    private List<Integer> byYearDay;
    +412                    private List<Integer> byWeekNo;
    +413                    private List<Integer> byMonth;
    +414                    private List<Integer> bySetPos;
    +415                    private DayOfWeek workweekStarts;
    +416                    private ListMultimap<String, String> xrules;
    +417    
    +418                    /**
    +419                     * Constructs a new builder.
    +420                     * @param frequency the recurrence frequency
    +421                     */
    +422                    public Builder(Frequency frequency) {
    +423                            this.frequency = frequency;
    +424                            bySecond = new ArrayList<Integer>(0);
    +425                            byMinute = new ArrayList<Integer>(0);
    +426                            byHour = new ArrayList<Integer>(0);
    +427                            byDay = new ArrayList<DayOfWeek>(0);
    +428                            byDayPrefixes = new ArrayList<Integer>(0);
    +429                            byMonthDay = new ArrayList<Integer>(0);
    +430                            byYearDay = new ArrayList<Integer>(0);
    +431                            byWeekNo = new ArrayList<Integer>(0);
    +432                            byMonth = new ArrayList<Integer>(0);
    +433                            bySetPos = new ArrayList<Integer>(0);
    +434                            xrules = new ListMultimap<String, String>(0);
    +435                    }
    +436    
    +437                    /**
    +438                     * Constructs a new builder
    +439                     * @param recur the recurrence object to copy from
    +440                     */
    +441                    public Builder(Recurrence recur) {
    +442                            frequency = recur.frequency;
    +443                            interval = recur.interval;
    +444                            count = recur.count;
    +445                            until = recur.until;
    +446                            untilHasTime = recur.untilHasTime;
    +447                            bySecond = new ArrayList<Integer>(recur.bySecond);
    +448                            byMinute = new ArrayList<Integer>(recur.byMinute);
    +449                            byHour = new ArrayList<Integer>(recur.byHour);
    +450                            byDay = new ArrayList<DayOfWeek>(recur.byDay);
    +451                            byDayPrefixes = new ArrayList<Integer>(recur.byDayPrefixes);
    +452                            byMonthDay = new ArrayList<Integer>(recur.byMonthDay);
    +453                            byYearDay = new ArrayList<Integer>(recur.byYearDay);
    +454                            byWeekNo = new ArrayList<Integer>(recur.byWeekNo);
    +455                            byMonth = new ArrayList<Integer>(recur.byMonth);
    +456                            bySetPos = new ArrayList<Integer>(recur.bySetPos);
    +457                            workweekStarts = recur.workweekStarts;
    +458                            xrules = new ListMultimap<String, String>(recur.xrules);
    +459                    }
    +460    
    +461                    /**
    +462                     * Sets the frequency
    +463                     * @param frequency the frequency
    +464                     * @return this
    +465                     */
    +466                    public Builder frequency(Frequency frequency) {
    +467                            this.frequency = frequency;
    +468                            return this;
    +469                    }
    +470    
    +471                    /**
    +472                     * Sets the date that the recurrence stops. Note that the UNTIL and
    +473                     * COUNT fields cannot both be defined within the same rule.
    +474                     * @param until the date (time component is included)
    +475                     * @return this
    +476                     */
    +477                    public Builder until(Date until) {
    +478                            return until(until, true);
    +479                    }
    +480    
    +481                    /**
    +482                     * Sets the date that the recurrence stops. Note that the UNTIL and
    +483                     * COUNT fields cannot both be defined within the same rule.
    +484                     * @param until the date
    +485                     * @param hasTime true if the date has a time component, false if it's
    +486                     * strictly a date
    +487                     * @return this
    +488                     */
    +489                    public Builder until(Date until, boolean hasTime) {
    +490                            if (until == null) {
    +491                                    this.until = null;
    +492                                    this.untilHasTime = false;
    +493                            } else {
    +494                                    this.until = new Date(until.getTime());
    +495                                    this.untilHasTime = hasTime;
    +496                            }
    +497                            return this;
    +498                    }
    +499    
    +500                    /**
    +501                     * Gets the number of times the rule will be repeated. Note that the
    +502                     * UNTIL and COUNT fields cannot both be defined within the same rule.
    +503                     * @param count the number of times to repeat the rule
    +504                     * @return this
    +505                     */
    +506                    public Builder count(Integer count) {
    +507                            this.count = count;
    +508                            return this;
    +509                    }
    +510    
    +511                    /**
    +512                     * Gets how often the rule repeats, in relation to the frequency.
    +513                     * @param interval the repetition interval
    +514                     * @return this
    +515                     */
    +516                    public Builder interval(Integer interval) {
    +517                            this.interval = interval;
    +518                            return this;
    +519                    }
    +520    
    +521                    /**
    +522                     * Adds a BYSECOND rule part.
    +523                     * @param bySecond the value to add
    +524                     * @return this
    +525                     */
    +526                    public Builder bySecond(Integer bySecond) {
    +527                            this.bySecond.add(bySecond);
    +528                            return this;
    +529                    }
    +530    
    +531                    /**
    +532                     * Adds a BYMINUTE rule part.
    +533                     * @param byMinute the value to add
    +534                     * @return this
    +535                     */
    +536                    public Builder byMinute(Integer byMinute) {
    +537                            this.byMinute.add(byMinute);
    +538                            return this;
    +539                    }
    +540    
    +541                    /**
    +542                     * Adds a BYHOUR rule part.
    +543                     * @param byHour the value to add
    +544                     * @return this
    +545                     */
    +546                    public Builder byHour(Integer byHour) {
    +547                            this.byHour.add(byHour);
    +548                            return this;
    +549                    }
    +550    
    +551                    /**
    +552                     * Adds a BYMONTHDAY rule part.
    +553                     * @param byMonthDay the value to add
    +554                     * @return this
    +555                     */
    +556                    public Builder byMonthDay(Integer byMonthDay) {
    +557                            this.byMonthDay.add(byMonthDay);
    +558                            return this;
    +559                    }
    +560    
    +561                    /**
    +562                     * Adds a BYYEARDAY rule part.
    +563                     * @param byYearDay the value to add
    +564                     * @return this
    +565                     */
    +566                    public Builder byYearDay(Integer byYearDay) {
    +567                            this.byYearDay.add(byYearDay);
    +568                            return this;
    +569                    }
    +570    
    +571                    /**
    +572                     * Adds a BYWEEKNO rule part.
    +573                     * @param byWeekNo the value to add
    +574                     * @return this
    +575                     */
    +576                    public Builder byWeekNo(Integer byWeekNo) {
    +577                            this.byWeekNo.add(byWeekNo);
    +578                            return this;
    +579                    }
    +580    
    +581                    /**
    +582                     * Adds a BYMONTH rule part.
    +583                     * @param byMonth the value to add
    +584                     * @return this
    +585                     */
    +586                    public Builder byMonth(Integer byMonth) {
    +587                            this.byMonth.add(byMonth);
    +588                            return this;
    +589                    }
    +590    
    +591                    /**
    +592                     * Adds a BYSETPOS rule part.
    +593                     * @param bySetPos the value to add
    +594                     * @return this
    +595                     */
    +596                    public Builder bySetPos(Integer bySetPos) {
    +597                            this.bySetPos.add(bySetPos);
    +598                            return this;
    +599                    }
    +600    
    +601                    /**
    +602                     * Adds a BYDAY rule part.
    +603                     * @param byDay the value to add
    +604                     * @return this
    +605                     */
    +606                    public Builder byDay(DayOfWeek byDay) {
    +607                            return byDay(null, byDay);
    +608                    }
    +609    
    +610                    /**
    +611                     * Adds a BYDAY rule part.
    +612                     * @param prefix the numeric prefix
    +613                     * @param byDay the value to add
    +614                     * @return this
    +615                     */
    +616                    public Builder byDay(Integer prefix, DayOfWeek byDay) {
    +617                            this.byDayPrefixes.add(prefix);
    +618                            this.byDay.add(byDay);
    +619                            return this;
    +620                    }
    +621    
    +622                    /**
    +623                     * Sets the day that the work week starts.
    +624                     * @param workweekStarts the day
    +625                     * @return this
    +626                     */
    +627                    public Builder workweekStarts(DayOfWeek workweekStarts) {
    +628                            this.workweekStarts = workweekStarts;
    +629                            return this;
    +630                    }
    +631    
    +632                    /**
    +633                     * Adds a non-standard rule part.
    +634                     * @param name the name
    +635                     * @param value the value or null to remove the rule part
    +636                     * @return this
    +637                     */
    +638                    public Builder xrule(String name, String value) {
    +639                            name = name.toUpperCase();
    +640    
    +641                            if (value == null) {
    +642                                    xrules.removeAll(name);
    +643                            } else {
    +644                                    xrules.put(name, value);
    +645                            }
    +646    
    +647                            return this;
    +648                    }
    +649    
    +650                    /**
    +651                     * Builds the final {@link Recurrence} object.
    +652                     * @return the object
    +653                     */
    +654                    public Recurrence build() {
    +655                            return new Recurrence(this);
    +656                    }
    +657            }
    +658    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.Frequency.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.Frequency.html new file mode 100644 index 000000000..f1d0731f2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.Frequency.html @@ -0,0 +1,724 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.Collections;
    +005    import java.util.Date;
    +006    import java.util.List;
    +007    import java.util.Map;
    +008    
    +009    /*
    +010     Copyright (c) 2013, Michael Angstadt
    +011     All rights reserved.
    +012    
    +013     Redistribution and use in source and binary forms, with or without
    +014     modification, are permitted provided that the following conditions are met: 
    +015    
    +016     1. Redistributions of source code must retain the above copyright notice, this
    +017     list of conditions and the following disclaimer. 
    +018     2. Redistributions in binary form must reproduce the above copyright notice,
    +019     this list of conditions and the following disclaimer in the documentation
    +020     and/or other materials provided with the distribution. 
    +021    
    +022     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +023     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +024     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +025     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +026     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +027     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +028     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +029     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +030     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +031     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +032     */
    +033    
    +034    /**
    +035     * <p>
    +036     * Represents a recurrence rule value.
    +037     * </p>
    +038     * <p>
    +039     * This class is immutable. Use the {@link Builder} object to construct a new
    +040     * instance.
    +041     * </p>
    +042     * <p>
    +043     * <b>Examples:</b>
    +044     * 
    +045     * <pre class="brush:java">
    +046     * //&quot;bi-weekly&quot;
    +047     * Recurrence rrule = new Recurrence.Builder(Frequency.WEEKLY).interval(2).build();
    +048     * Recurrence copy = new Recurrence.Builder(rrule).interval(3).build();
    +049     * </pre>
    +050     * 
    +051     * </p>
    +052     * @author Michael Angstadt
    +053     * @rfc 5545 p.38-45
    +054     */
    +055    public final class Recurrence {
    +056            private final Frequency frequency;
    +057            private final Integer interval;
    +058            private final Integer count;
    +059            private final Date until;
    +060            private final boolean untilHasTime;
    +061            private final List<Integer> bySecond;
    +062            private final List<Integer> byMinute;
    +063            private final List<Integer> byHour;
    +064            private final List<Integer> byMonthDay;
    +065            private final List<Integer> byYearDay;
    +066            private final List<Integer> byWeekNo;
    +067            private final List<Integer> byMonth;
    +068            private final List<Integer> bySetPos;
    +069            private final List<DayOfWeek> byDay;
    +070            private final List<Integer> byDayPrefixes;
    +071            private final DayOfWeek workweekStarts;
    +072            private final Map<String, List<String>> xrules;
    +073    
    +074            private Recurrence(Builder builder) {
    +075                    frequency = builder.frequency;
    +076                    interval = builder.interval;
    +077                    count = builder.count;
    +078                    until = builder.until;
    +079                    untilHasTime = builder.untilHasTime;
    +080                    bySecond = Collections.unmodifiableList(builder.bySecond);
    +081                    byMinute = Collections.unmodifiableList(builder.byMinute);
    +082                    byHour = Collections.unmodifiableList(builder.byHour);
    +083                    byMonthDay = Collections.unmodifiableList(builder.byMonthDay);
    +084                    byYearDay = Collections.unmodifiableList(builder.byYearDay);
    +085                    byWeekNo = Collections.unmodifiableList(builder.byWeekNo);
    +086                    byMonth = Collections.unmodifiableList(builder.byMonth);
    +087                    bySetPos = Collections.unmodifiableList(builder.bySetPos);
    +088                    byDay = Collections.unmodifiableList(builder.byDay);
    +089                    byDayPrefixes = Collections.unmodifiableList(builder.byDayPrefixes);
    +090                    workweekStarts = builder.workweekStarts;
    +091    
    +092                    Map<String, List<String>> map = builder.xrules.getMap();
    +093                    for (String key : map.keySet()) {
    +094                            List<String> value = map.get(key);
    +095                            map.put(key, Collections.unmodifiableList(value));
    +096                    }
    +097                    xrules = Collections.unmodifiableMap(map);
    +098            }
    +099    
    +100            /**
    +101             * Gets the frequency.
    +102             * @return the frequency or null if not set
    +103             */
    +104            public Frequency getFrequency() {
    +105                    return frequency;
    +106            }
    +107    
    +108            /**
    +109             * Gets the date that the recurrence stops.
    +110             * @return the date or null if not set
    +111             */
    +112            public Date getUntil() {
    +113                    return (until == null) ? null : new Date(until.getTime());
    +114            }
    +115    
    +116            /**
    +117             * Determines whether the UNTIL date has a time component.
    +118             * @return true if it has a time component, false if it is strictly a date
    +119             */
    +120            public boolean hasTimeUntilDate() {
    +121                    return untilHasTime;
    +122            }
    +123    
    +124            /**
    +125             * Gets the number of times the rule will be repeated.
    +126             * @return the number of times to repeat the rule or null if not set
    +127             */
    +128            public Integer getCount() {
    +129                    return count;
    +130            }
    +131    
    +132            /**
    +133             * Gets how often the rule repeats, in relation to the frequency.
    +134             * @return the repetition interval or null if not set
    +135             */
    +136            public Integer getInterval() {
    +137                    return interval;
    +138            }
    +139    
    +140            /**
    +141             * Gets the BYSECOND rule part.
    +142             * @return the BYSECOND rule part or empty list if not set
    +143             */
    +144            public List<Integer> getBySecond() {
    +145                    return bySecond;
    +146            }
    +147    
    +148            /**
    +149             * Gets the BYMINUTE rule part.
    +150             * @return the BYMINUTE rule part or empty list if not set
    +151             */
    +152            public List<Integer> getByMinute() {
    +153                    return byMinute;
    +154            }
    +155    
    +156            /**
    +157             * Gets the BYHOUR rule part.
    +158             * @return the BYHOUR rule part or empty list if not set
    +159             */
    +160            public List<Integer> getByHour() {
    +161                    return byHour;
    +162            }
    +163    
    +164            /**
    +165             * Gets the day components of the BYDAY rule part.
    +166             * @return the day components of the BYDAY rule part or empty list if not
    +167             * set
    +168             */
    +169            public List<DayOfWeek> getByDay() {
    +170                    return byDay;
    +171            }
    +172    
    +173            /**
    +174             * Gets the numeric components of the BYDAY rule part.
    +175             * @return the numeric components of the BYDAY rule part or empty list if
    +176             * not set (BYDAY values without numeric components will have a "null"
    +177             * number)
    +178             */
    +179            public List<Integer> getByDayPrefixes() {
    +180                    return byDayPrefixes;
    +181            }
    +182    
    +183            /**
    +184             * Gets the BYMONTHDAY rule part.
    +185             * @return the BYMONTHDAY rule part or empty list if not set
    +186             */
    +187            public List<Integer> getByMonthDay() {
    +188                    return byMonthDay;
    +189            }
    +190    
    +191            /**
    +192             * Gets the BYYEARDAY rule part.
    +193             * @return the BYYEARDAY rule part or empty list if not set
    +194             */
    +195            public List<Integer> getByYearDay() {
    +196                    return byYearDay;
    +197            }
    +198    
    +199            /**
    +200             * Gets the BYWEEKNO rule part.
    +201             * @return the BYWEEKNO rule part or empty list if not set
    +202             */
    +203            public List<Integer> getByWeekNo() {
    +204                    return byWeekNo;
    +205            }
    +206    
    +207            /**
    +208             * Gets the BYMONTH rule part.
    +209             * @return the BYMONTH rule part or empty list if not set
    +210             */
    +211            public List<Integer> getByMonth() {
    +212                    return byMonth;
    +213            }
    +214    
    +215            /**
    +216             * Gets the BYSETPOS rule part.
    +217             * @return the BYSETPOS rule part or empty list if not set
    +218             */
    +219            public List<Integer> getBySetPos() {
    +220                    return bySetPos;
    +221            }
    +222    
    +223            /**
    +224             * Gets the day that the work week starts.
    +225             * @return the day that the work week starts or null if not set
    +226             */
    +227            public DayOfWeek getWorkweekStarts() {
    +228                    return workweekStarts;
    +229            }
    +230    
    +231            /**
    +232             * Gets the non-standard rule parts.
    +233             * @return the non-standard rule parts
    +234             */
    +235            public Map<String, List<String>> getXRules() {
    +236                    return xrules;
    +237            }
    +238    
    +239            @Override
    +240            public int hashCode() {
    +241                    final int prime = 31;
    +242                    int result = 1;
    +243                    result = prime * result + ((byDay == null) ? 0 : byDay.hashCode());
    +244                    result = prime * result + ((byDayPrefixes == null) ? 0 : byDayPrefixes.hashCode());
    +245                    result = prime * result + ((byHour == null) ? 0 : byHour.hashCode());
    +246                    result = prime * result + ((byMinute == null) ? 0 : byMinute.hashCode());
    +247                    result = prime * result + ((byMonth == null) ? 0 : byMonth.hashCode());
    +248                    result = prime * result + ((byMonthDay == null) ? 0 : byMonthDay.hashCode());
    +249                    result = prime * result + ((bySecond == null) ? 0 : bySecond.hashCode());
    +250                    result = prime * result + ((bySetPos == null) ? 0 : bySetPos.hashCode());
    +251                    result = prime * result + ((byWeekNo == null) ? 0 : byWeekNo.hashCode());
    +252                    result = prime * result + ((byYearDay == null) ? 0 : byYearDay.hashCode());
    +253                    result = prime * result + ((count == null) ? 0 : count.hashCode());
    +254                    result = prime * result + ((xrules == null) ? 0 : xrules.hashCode());
    +255                    result = prime * result + ((frequency == null) ? 0 : frequency.hashCode());
    +256                    result = prime * result + ((interval == null) ? 0 : interval.hashCode());
    +257                    result = prime * result + ((until == null) ? 0 : until.hashCode());
    +258                    result = prime * result + (untilHasTime ? 1231 : 1237);
    +259                    result = prime * result + ((workweekStarts == null) ? 0 : workweekStarts.hashCode());
    +260                    return result;
    +261            }
    +262    
    +263            @Override
    +264            public boolean equals(Object obj) {
    +265                    if (this == obj)
    +266                            return true;
    +267                    if (obj == null)
    +268                            return false;
    +269                    if (getClass() != obj.getClass())
    +270                            return false;
    +271                    Recurrence other = (Recurrence) obj;
    +272                    if (byDay == null) {
    +273                            if (other.byDay != null)
    +274                                    return false;
    +275                    } else if (!byDay.equals(other.byDay))
    +276                            return false;
    +277                    if (byDayPrefixes == null) {
    +278                            if (other.byDayPrefixes != null)
    +279                                    return false;
    +280                    } else if (!byDayPrefixes.equals(other.byDayPrefixes))
    +281                            return false;
    +282                    if (byHour == null) {
    +283                            if (other.byHour != null)
    +284                                    return false;
    +285                    } else if (!byHour.equals(other.byHour))
    +286                            return false;
    +287                    if (byMinute == null) {
    +288                            if (other.byMinute != null)
    +289                                    return false;
    +290                    } else if (!byMinute.equals(other.byMinute))
    +291                            return false;
    +292                    if (byMonth == null) {
    +293                            if (other.byMonth != null)
    +294                                    return false;
    +295                    } else if (!byMonth.equals(other.byMonth))
    +296                            return false;
    +297                    if (byMonthDay == null) {
    +298                            if (other.byMonthDay != null)
    +299                                    return false;
    +300                    } else if (!byMonthDay.equals(other.byMonthDay))
    +301                            return false;
    +302                    if (bySecond == null) {
    +303                            if (other.bySecond != null)
    +304                                    return false;
    +305                    } else if (!bySecond.equals(other.bySecond))
    +306                            return false;
    +307                    if (bySetPos == null) {
    +308                            if (other.bySetPos != null)
    +309                                    return false;
    +310                    } else if (!bySetPos.equals(other.bySetPos))
    +311                            return false;
    +312                    if (byWeekNo == null) {
    +313                            if (other.byWeekNo != null)
    +314                                    return false;
    +315                    } else if (!byWeekNo.equals(other.byWeekNo))
    +316                            return false;
    +317                    if (byYearDay == null) {
    +318                            if (other.byYearDay != null)
    +319                                    return false;
    +320                    } else if (!byYearDay.equals(other.byYearDay))
    +321                            return false;
    +322                    if (count == null) {
    +323                            if (other.count != null)
    +324                                    return false;
    +325                    } else if (!count.equals(other.count))
    +326                            return false;
    +327                    if (xrules == null) {
    +328                            if (other.xrules != null)
    +329                                    return false;
    +330                    } else if (!xrules.equals(other.xrules))
    +331                            return false;
    +332                    if (frequency != other.frequency)
    +333                            return false;
    +334                    if (interval == null) {
    +335                            if (other.interval != null)
    +336                                    return false;
    +337                    } else if (!interval.equals(other.interval))
    +338                            return false;
    +339                    if (until == null) {
    +340                            if (other.until != null)
    +341                                    return false;
    +342                    } else if (!until.equals(other.until))
    +343                            return false;
    +344                    if (untilHasTime != other.untilHasTime)
    +345                            return false;
    +346                    if (workweekStarts != other.workweekStarts)
    +347                            return false;
    +348                    return true;
    +349            }
    +350    
    +351            /**
    +352             * Represents the frequency at which a recurrence rule repeats itself.
    +353             * @author Michael Angstadt
    +354             */
    +355            public static enum Frequency {
    +356                    SECONDLY, MINUTELY, HOURLY, DAILY, WEEKLY, MONTHLY, YEARLY
    +357            }
    +358    
    +359            /**
    +360             * Represents each of the seven days of the week.
    +361             * @author Michael Angstadt
    +362             */
    +363            public static enum DayOfWeek {
    +364                    MONDAY("MO"), TUESDAY("TU"), WEDNESDAY("WE"), THURSDAY("TH"), FRIDAY("FR"), SATURDAY("SA"), SUNDAY("SU");
    +365    
    +366                    private final String abbr;
    +367    
    +368                    private DayOfWeek(String abbr) {
    +369                            this.abbr = abbr;
    +370                    }
    +371    
    +372                    /**
    +373                     * Gets the day's abbreviation.
    +374                     * @return the abbreviation (e.g. "MO" for Monday)
    +375                     */
    +376                    public String getAbbr() {
    +377                            return abbr;
    +378                    }
    +379    
    +380                    /**
    +381                     * Gets a day by its abbreviation.
    +382                     * @param abbr the abbreviation (case-insensitive, e.g. "MO" for Monday)
    +383                     * @return the day or null if not found
    +384                     */
    +385                    public static DayOfWeek valueOfAbbr(String abbr) {
    +386                            for (DayOfWeek day : values()) {
    +387                                    if (day.abbr.equalsIgnoreCase(abbr)) {
    +388                                            return day;
    +389                                    }
    +390                            }
    +391                            return null;
    +392                    }
    +393            }
    +394    
    +395            /**
    +396             * Constructs {@link Recurrence} objects.
    +397             * @author Michael Angstadt
    +398             */
    +399            public static class Builder {
    +400                    private Frequency frequency;
    +401                    private Integer interval;
    +402                    private Integer count;
    +403                    private Date until;
    +404                    private boolean untilHasTime;
    +405                    private List<Integer> bySecond;
    +406                    private List<Integer> byMinute;
    +407                    private List<Integer> byHour;
    +408                    private List<DayOfWeek> byDay;
    +409                    private List<Integer> byDayPrefixes;
    +410                    private List<Integer> byMonthDay;
    +411                    private List<Integer> byYearDay;
    +412                    private List<Integer> byWeekNo;
    +413                    private List<Integer> byMonth;
    +414                    private List<Integer> bySetPos;
    +415                    private DayOfWeek workweekStarts;
    +416                    private ListMultimap<String, String> xrules;
    +417    
    +418                    /**
    +419                     * Constructs a new builder.
    +420                     * @param frequency the recurrence frequency
    +421                     */
    +422                    public Builder(Frequency frequency) {
    +423                            this.frequency = frequency;
    +424                            bySecond = new ArrayList<Integer>(0);
    +425                            byMinute = new ArrayList<Integer>(0);
    +426                            byHour = new ArrayList<Integer>(0);
    +427                            byDay = new ArrayList<DayOfWeek>(0);
    +428                            byDayPrefixes = new ArrayList<Integer>(0);
    +429                            byMonthDay = new ArrayList<Integer>(0);
    +430                            byYearDay = new ArrayList<Integer>(0);
    +431                            byWeekNo = new ArrayList<Integer>(0);
    +432                            byMonth = new ArrayList<Integer>(0);
    +433                            bySetPos = new ArrayList<Integer>(0);
    +434                            xrules = new ListMultimap<String, String>(0);
    +435                    }
    +436    
    +437                    /**
    +438                     * Constructs a new builder
    +439                     * @param recur the recurrence object to copy from
    +440                     */
    +441                    public Builder(Recurrence recur) {
    +442                            frequency = recur.frequency;
    +443                            interval = recur.interval;
    +444                            count = recur.count;
    +445                            until = recur.until;
    +446                            untilHasTime = recur.untilHasTime;
    +447                            bySecond = new ArrayList<Integer>(recur.bySecond);
    +448                            byMinute = new ArrayList<Integer>(recur.byMinute);
    +449                            byHour = new ArrayList<Integer>(recur.byHour);
    +450                            byDay = new ArrayList<DayOfWeek>(recur.byDay);
    +451                            byDayPrefixes = new ArrayList<Integer>(recur.byDayPrefixes);
    +452                            byMonthDay = new ArrayList<Integer>(recur.byMonthDay);
    +453                            byYearDay = new ArrayList<Integer>(recur.byYearDay);
    +454                            byWeekNo = new ArrayList<Integer>(recur.byWeekNo);
    +455                            byMonth = new ArrayList<Integer>(recur.byMonth);
    +456                            bySetPos = new ArrayList<Integer>(recur.bySetPos);
    +457                            workweekStarts = recur.workweekStarts;
    +458                            xrules = new ListMultimap<String, String>(recur.xrules);
    +459                    }
    +460    
    +461                    /**
    +462                     * Sets the frequency
    +463                     * @param frequency the frequency
    +464                     * @return this
    +465                     */
    +466                    public Builder frequency(Frequency frequency) {
    +467                            this.frequency = frequency;
    +468                            return this;
    +469                    }
    +470    
    +471                    /**
    +472                     * Sets the date that the recurrence stops. Note that the UNTIL and
    +473                     * COUNT fields cannot both be defined within the same rule.
    +474                     * @param until the date (time component is included)
    +475                     * @return this
    +476                     */
    +477                    public Builder until(Date until) {
    +478                            return until(until, true);
    +479                    }
    +480    
    +481                    /**
    +482                     * Sets the date that the recurrence stops. Note that the UNTIL and
    +483                     * COUNT fields cannot both be defined within the same rule.
    +484                     * @param until the date
    +485                     * @param hasTime true if the date has a time component, false if it's
    +486                     * strictly a date
    +487                     * @return this
    +488                     */
    +489                    public Builder until(Date until, boolean hasTime) {
    +490                            if (until == null) {
    +491                                    this.until = null;
    +492                                    this.untilHasTime = false;
    +493                            } else {
    +494                                    this.until = new Date(until.getTime());
    +495                                    this.untilHasTime = hasTime;
    +496                            }
    +497                            return this;
    +498                    }
    +499    
    +500                    /**
    +501                     * Gets the number of times the rule will be repeated. Note that the
    +502                     * UNTIL and COUNT fields cannot both be defined within the same rule.
    +503                     * @param count the number of times to repeat the rule
    +504                     * @return this
    +505                     */
    +506                    public Builder count(Integer count) {
    +507                            this.count = count;
    +508                            return this;
    +509                    }
    +510    
    +511                    /**
    +512                     * Gets how often the rule repeats, in relation to the frequency.
    +513                     * @param interval the repetition interval
    +514                     * @return this
    +515                     */
    +516                    public Builder interval(Integer interval) {
    +517                            this.interval = interval;
    +518                            return this;
    +519                    }
    +520    
    +521                    /**
    +522                     * Adds a BYSECOND rule part.
    +523                     * @param bySecond the value to add
    +524                     * @return this
    +525                     */
    +526                    public Builder bySecond(Integer bySecond) {
    +527                            this.bySecond.add(bySecond);
    +528                            return this;
    +529                    }
    +530    
    +531                    /**
    +532                     * Adds a BYMINUTE rule part.
    +533                     * @param byMinute the value to add
    +534                     * @return this
    +535                     */
    +536                    public Builder byMinute(Integer byMinute) {
    +537                            this.byMinute.add(byMinute);
    +538                            return this;
    +539                    }
    +540    
    +541                    /**
    +542                     * Adds a BYHOUR rule part.
    +543                     * @param byHour the value to add
    +544                     * @return this
    +545                     */
    +546                    public Builder byHour(Integer byHour) {
    +547                            this.byHour.add(byHour);
    +548                            return this;
    +549                    }
    +550    
    +551                    /**
    +552                     * Adds a BYMONTHDAY rule part.
    +553                     * @param byMonthDay the value to add
    +554                     * @return this
    +555                     */
    +556                    public Builder byMonthDay(Integer byMonthDay) {
    +557                            this.byMonthDay.add(byMonthDay);
    +558                            return this;
    +559                    }
    +560    
    +561                    /**
    +562                     * Adds a BYYEARDAY rule part.
    +563                     * @param byYearDay the value to add
    +564                     * @return this
    +565                     */
    +566                    public Builder byYearDay(Integer byYearDay) {
    +567                            this.byYearDay.add(byYearDay);
    +568                            return this;
    +569                    }
    +570    
    +571                    /**
    +572                     * Adds a BYWEEKNO rule part.
    +573                     * @param byWeekNo the value to add
    +574                     * @return this
    +575                     */
    +576                    public Builder byWeekNo(Integer byWeekNo) {
    +577                            this.byWeekNo.add(byWeekNo);
    +578                            return this;
    +579                    }
    +580    
    +581                    /**
    +582                     * Adds a BYMONTH rule part.
    +583                     * @param byMonth the value to add
    +584                     * @return this
    +585                     */
    +586                    public Builder byMonth(Integer byMonth) {
    +587                            this.byMonth.add(byMonth);
    +588                            return this;
    +589                    }
    +590    
    +591                    /**
    +592                     * Adds a BYSETPOS rule part.
    +593                     * @param bySetPos the value to add
    +594                     * @return this
    +595                     */
    +596                    public Builder bySetPos(Integer bySetPos) {
    +597                            this.bySetPos.add(bySetPos);
    +598                            return this;
    +599                    }
    +600    
    +601                    /**
    +602                     * Adds a BYDAY rule part.
    +603                     * @param byDay the value to add
    +604                     * @return this
    +605                     */
    +606                    public Builder byDay(DayOfWeek byDay) {
    +607                            return byDay(null, byDay);
    +608                    }
    +609    
    +610                    /**
    +611                     * Adds a BYDAY rule part.
    +612                     * @param prefix the numeric prefix
    +613                     * @param byDay the value to add
    +614                     * @return this
    +615                     */
    +616                    public Builder byDay(Integer prefix, DayOfWeek byDay) {
    +617                            this.byDayPrefixes.add(prefix);
    +618                            this.byDay.add(byDay);
    +619                            return this;
    +620                    }
    +621    
    +622                    /**
    +623                     * Sets the day that the work week starts.
    +624                     * @param workweekStarts the day
    +625                     * @return this
    +626                     */
    +627                    public Builder workweekStarts(DayOfWeek workweekStarts) {
    +628                            this.workweekStarts = workweekStarts;
    +629                            return this;
    +630                    }
    +631    
    +632                    /**
    +633                     * Adds a non-standard rule part.
    +634                     * @param name the name
    +635                     * @param value the value or null to remove the rule part
    +636                     * @return this
    +637                     */
    +638                    public Builder xrule(String name, String value) {
    +639                            name = name.toUpperCase();
    +640    
    +641                            if (value == null) {
    +642                                    xrules.removeAll(name);
    +643                            } else {
    +644                                    xrules.put(name, value);
    +645                            }
    +646    
    +647                            return this;
    +648                    }
    +649    
    +650                    /**
    +651                     * Builds the final {@link Recurrence} object.
    +652                     * @return the object
    +653                     */
    +654                    public Recurrence build() {
    +655                            return new Recurrence(this);
    +656                    }
    +657            }
    +658    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.html new file mode 100644 index 000000000..f1d0731f2 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/Recurrence.html @@ -0,0 +1,724 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.util.ArrayList;
    +004    import java.util.Collections;
    +005    import java.util.Date;
    +006    import java.util.List;
    +007    import java.util.Map;
    +008    
    +009    /*
    +010     Copyright (c) 2013, Michael Angstadt
    +011     All rights reserved.
    +012    
    +013     Redistribution and use in source and binary forms, with or without
    +014     modification, are permitted provided that the following conditions are met: 
    +015    
    +016     1. Redistributions of source code must retain the above copyright notice, this
    +017     list of conditions and the following disclaimer. 
    +018     2. Redistributions in binary form must reproduce the above copyright notice,
    +019     this list of conditions and the following disclaimer in the documentation
    +020     and/or other materials provided with the distribution. 
    +021    
    +022     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +023     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +024     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +025     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +026     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +027     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +028     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +029     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +030     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +031     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +032     */
    +033    
    +034    /**
    +035     * <p>
    +036     * Represents a recurrence rule value.
    +037     * </p>
    +038     * <p>
    +039     * This class is immutable. Use the {@link Builder} object to construct a new
    +040     * instance.
    +041     * </p>
    +042     * <p>
    +043     * <b>Examples:</b>
    +044     * 
    +045     * <pre class="brush:java">
    +046     * //&quot;bi-weekly&quot;
    +047     * Recurrence rrule = new Recurrence.Builder(Frequency.WEEKLY).interval(2).build();
    +048     * Recurrence copy = new Recurrence.Builder(rrule).interval(3).build();
    +049     * </pre>
    +050     * 
    +051     * </p>
    +052     * @author Michael Angstadt
    +053     * @rfc 5545 p.38-45
    +054     */
    +055    public final class Recurrence {
    +056            private final Frequency frequency;
    +057            private final Integer interval;
    +058            private final Integer count;
    +059            private final Date until;
    +060            private final boolean untilHasTime;
    +061            private final List<Integer> bySecond;
    +062            private final List<Integer> byMinute;
    +063            private final List<Integer> byHour;
    +064            private final List<Integer> byMonthDay;
    +065            private final List<Integer> byYearDay;
    +066            private final List<Integer> byWeekNo;
    +067            private final List<Integer> byMonth;
    +068            private final List<Integer> bySetPos;
    +069            private final List<DayOfWeek> byDay;
    +070            private final List<Integer> byDayPrefixes;
    +071            private final DayOfWeek workweekStarts;
    +072            private final Map<String, List<String>> xrules;
    +073    
    +074            private Recurrence(Builder builder) {
    +075                    frequency = builder.frequency;
    +076                    interval = builder.interval;
    +077                    count = builder.count;
    +078                    until = builder.until;
    +079                    untilHasTime = builder.untilHasTime;
    +080                    bySecond = Collections.unmodifiableList(builder.bySecond);
    +081                    byMinute = Collections.unmodifiableList(builder.byMinute);
    +082                    byHour = Collections.unmodifiableList(builder.byHour);
    +083                    byMonthDay = Collections.unmodifiableList(builder.byMonthDay);
    +084                    byYearDay = Collections.unmodifiableList(builder.byYearDay);
    +085                    byWeekNo = Collections.unmodifiableList(builder.byWeekNo);
    +086                    byMonth = Collections.unmodifiableList(builder.byMonth);
    +087                    bySetPos = Collections.unmodifiableList(builder.bySetPos);
    +088                    byDay = Collections.unmodifiableList(builder.byDay);
    +089                    byDayPrefixes = Collections.unmodifiableList(builder.byDayPrefixes);
    +090                    workweekStarts = builder.workweekStarts;
    +091    
    +092                    Map<String, List<String>> map = builder.xrules.getMap();
    +093                    for (String key : map.keySet()) {
    +094                            List<String> value = map.get(key);
    +095                            map.put(key, Collections.unmodifiableList(value));
    +096                    }
    +097                    xrules = Collections.unmodifiableMap(map);
    +098            }
    +099    
    +100            /**
    +101             * Gets the frequency.
    +102             * @return the frequency or null if not set
    +103             */
    +104            public Frequency getFrequency() {
    +105                    return frequency;
    +106            }
    +107    
    +108            /**
    +109             * Gets the date that the recurrence stops.
    +110             * @return the date or null if not set
    +111             */
    +112            public Date getUntil() {
    +113                    return (until == null) ? null : new Date(until.getTime());
    +114            }
    +115    
    +116            /**
    +117             * Determines whether the UNTIL date has a time component.
    +118             * @return true if it has a time component, false if it is strictly a date
    +119             */
    +120            public boolean hasTimeUntilDate() {
    +121                    return untilHasTime;
    +122            }
    +123    
    +124            /**
    +125             * Gets the number of times the rule will be repeated.
    +126             * @return the number of times to repeat the rule or null if not set
    +127             */
    +128            public Integer getCount() {
    +129                    return count;
    +130            }
    +131    
    +132            /**
    +133             * Gets how often the rule repeats, in relation to the frequency.
    +134             * @return the repetition interval or null if not set
    +135             */
    +136            public Integer getInterval() {
    +137                    return interval;
    +138            }
    +139    
    +140            /**
    +141             * Gets the BYSECOND rule part.
    +142             * @return the BYSECOND rule part or empty list if not set
    +143             */
    +144            public List<Integer> getBySecond() {
    +145                    return bySecond;
    +146            }
    +147    
    +148            /**
    +149             * Gets the BYMINUTE rule part.
    +150             * @return the BYMINUTE rule part or empty list if not set
    +151             */
    +152            public List<Integer> getByMinute() {
    +153                    return byMinute;
    +154            }
    +155    
    +156            /**
    +157             * Gets the BYHOUR rule part.
    +158             * @return the BYHOUR rule part or empty list if not set
    +159             */
    +160            public List<Integer> getByHour() {
    +161                    return byHour;
    +162            }
    +163    
    +164            /**
    +165             * Gets the day components of the BYDAY rule part.
    +166             * @return the day components of the BYDAY rule part or empty list if not
    +167             * set
    +168             */
    +169            public List<DayOfWeek> getByDay() {
    +170                    return byDay;
    +171            }
    +172    
    +173            /**
    +174             * Gets the numeric components of the BYDAY rule part.
    +175             * @return the numeric components of the BYDAY rule part or empty list if
    +176             * not set (BYDAY values without numeric components will have a "null"
    +177             * number)
    +178             */
    +179            public List<Integer> getByDayPrefixes() {
    +180                    return byDayPrefixes;
    +181            }
    +182    
    +183            /**
    +184             * Gets the BYMONTHDAY rule part.
    +185             * @return the BYMONTHDAY rule part or empty list if not set
    +186             */
    +187            public List<Integer> getByMonthDay() {
    +188                    return byMonthDay;
    +189            }
    +190    
    +191            /**
    +192             * Gets the BYYEARDAY rule part.
    +193             * @return the BYYEARDAY rule part or empty list if not set
    +194             */
    +195            public List<Integer> getByYearDay() {
    +196                    return byYearDay;
    +197            }
    +198    
    +199            /**
    +200             * Gets the BYWEEKNO rule part.
    +201             * @return the BYWEEKNO rule part or empty list if not set
    +202             */
    +203            public List<Integer> getByWeekNo() {
    +204                    return byWeekNo;
    +205            }
    +206    
    +207            /**
    +208             * Gets the BYMONTH rule part.
    +209             * @return the BYMONTH rule part or empty list if not set
    +210             */
    +211            public List<Integer> getByMonth() {
    +212                    return byMonth;
    +213            }
    +214    
    +215            /**
    +216             * Gets the BYSETPOS rule part.
    +217             * @return the BYSETPOS rule part or empty list if not set
    +218             */
    +219            public List<Integer> getBySetPos() {
    +220                    return bySetPos;
    +221            }
    +222    
    +223            /**
    +224             * Gets the day that the work week starts.
    +225             * @return the day that the work week starts or null if not set
    +226             */
    +227            public DayOfWeek getWorkweekStarts() {
    +228                    return workweekStarts;
    +229            }
    +230    
    +231            /**
    +232             * Gets the non-standard rule parts.
    +233             * @return the non-standard rule parts
    +234             */
    +235            public Map<String, List<String>> getXRules() {
    +236                    return xrules;
    +237            }
    +238    
    +239            @Override
    +240            public int hashCode() {
    +241                    final int prime = 31;
    +242                    int result = 1;
    +243                    result = prime * result + ((byDay == null) ? 0 : byDay.hashCode());
    +244                    result = prime * result + ((byDayPrefixes == null) ? 0 : byDayPrefixes.hashCode());
    +245                    result = prime * result + ((byHour == null) ? 0 : byHour.hashCode());
    +246                    result = prime * result + ((byMinute == null) ? 0 : byMinute.hashCode());
    +247                    result = prime * result + ((byMonth == null) ? 0 : byMonth.hashCode());
    +248                    result = prime * result + ((byMonthDay == null) ? 0 : byMonthDay.hashCode());
    +249                    result = prime * result + ((bySecond == null) ? 0 : bySecond.hashCode());
    +250                    result = prime * result + ((bySetPos == null) ? 0 : bySetPos.hashCode());
    +251                    result = prime * result + ((byWeekNo == null) ? 0 : byWeekNo.hashCode());
    +252                    result = prime * result + ((byYearDay == null) ? 0 : byYearDay.hashCode());
    +253                    result = prime * result + ((count == null) ? 0 : count.hashCode());
    +254                    result = prime * result + ((xrules == null) ? 0 : xrules.hashCode());
    +255                    result = prime * result + ((frequency == null) ? 0 : frequency.hashCode());
    +256                    result = prime * result + ((interval == null) ? 0 : interval.hashCode());
    +257                    result = prime * result + ((until == null) ? 0 : until.hashCode());
    +258                    result = prime * result + (untilHasTime ? 1231 : 1237);
    +259                    result = prime * result + ((workweekStarts == null) ? 0 : workweekStarts.hashCode());
    +260                    return result;
    +261            }
    +262    
    +263            @Override
    +264            public boolean equals(Object obj) {
    +265                    if (this == obj)
    +266                            return true;
    +267                    if (obj == null)
    +268                            return false;
    +269                    if (getClass() != obj.getClass())
    +270                            return false;
    +271                    Recurrence other = (Recurrence) obj;
    +272                    if (byDay == null) {
    +273                            if (other.byDay != null)
    +274                                    return false;
    +275                    } else if (!byDay.equals(other.byDay))
    +276                            return false;
    +277                    if (byDayPrefixes == null) {
    +278                            if (other.byDayPrefixes != null)
    +279                                    return false;
    +280                    } else if (!byDayPrefixes.equals(other.byDayPrefixes))
    +281                            return false;
    +282                    if (byHour == null) {
    +283                            if (other.byHour != null)
    +284                                    return false;
    +285                    } else if (!byHour.equals(other.byHour))
    +286                            return false;
    +287                    if (byMinute == null) {
    +288                            if (other.byMinute != null)
    +289                                    return false;
    +290                    } else if (!byMinute.equals(other.byMinute))
    +291                            return false;
    +292                    if (byMonth == null) {
    +293                            if (other.byMonth != null)
    +294                                    return false;
    +295                    } else if (!byMonth.equals(other.byMonth))
    +296                            return false;
    +297                    if (byMonthDay == null) {
    +298                            if (other.byMonthDay != null)
    +299                                    return false;
    +300                    } else if (!byMonthDay.equals(other.byMonthDay))
    +301                            return false;
    +302                    if (bySecond == null) {
    +303                            if (other.bySecond != null)
    +304                                    return false;
    +305                    } else if (!bySecond.equals(other.bySecond))
    +306                            return false;
    +307                    if (bySetPos == null) {
    +308                            if (other.bySetPos != null)
    +309                                    return false;
    +310                    } else if (!bySetPos.equals(other.bySetPos))
    +311                            return false;
    +312                    if (byWeekNo == null) {
    +313                            if (other.byWeekNo != null)
    +314                                    return false;
    +315                    } else if (!byWeekNo.equals(other.byWeekNo))
    +316                            return false;
    +317                    if (byYearDay == null) {
    +318                            if (other.byYearDay != null)
    +319                                    return false;
    +320                    } else if (!byYearDay.equals(other.byYearDay))
    +321                            return false;
    +322                    if (count == null) {
    +323                            if (other.count != null)
    +324                                    return false;
    +325                    } else if (!count.equals(other.count))
    +326                            return false;
    +327                    if (xrules == null) {
    +328                            if (other.xrules != null)
    +329                                    return false;
    +330                    } else if (!xrules.equals(other.xrules))
    +331                            return false;
    +332                    if (frequency != other.frequency)
    +333                            return false;
    +334                    if (interval == null) {
    +335                            if (other.interval != null)
    +336                                    return false;
    +337                    } else if (!interval.equals(other.interval))
    +338                            return false;
    +339                    if (until == null) {
    +340                            if (other.until != null)
    +341                                    return false;
    +342                    } else if (!until.equals(other.until))
    +343                            return false;
    +344                    if (untilHasTime != other.untilHasTime)
    +345                            return false;
    +346                    if (workweekStarts != other.workweekStarts)
    +347                            return false;
    +348                    return true;
    +349            }
    +350    
    +351            /**
    +352             * Represents the frequency at which a recurrence rule repeats itself.
    +353             * @author Michael Angstadt
    +354             */
    +355            public static enum Frequency {
    +356                    SECONDLY, MINUTELY, HOURLY, DAILY, WEEKLY, MONTHLY, YEARLY
    +357            }
    +358    
    +359            /**
    +360             * Represents each of the seven days of the week.
    +361             * @author Michael Angstadt
    +362             */
    +363            public static enum DayOfWeek {
    +364                    MONDAY("MO"), TUESDAY("TU"), WEDNESDAY("WE"), THURSDAY("TH"), FRIDAY("FR"), SATURDAY("SA"), SUNDAY("SU");
    +365    
    +366                    private final String abbr;
    +367    
    +368                    private DayOfWeek(String abbr) {
    +369                            this.abbr = abbr;
    +370                    }
    +371    
    +372                    /**
    +373                     * Gets the day's abbreviation.
    +374                     * @return the abbreviation (e.g. "MO" for Monday)
    +375                     */
    +376                    public String getAbbr() {
    +377                            return abbr;
    +378                    }
    +379    
    +380                    /**
    +381                     * Gets a day by its abbreviation.
    +382                     * @param abbr the abbreviation (case-insensitive, e.g. "MO" for Monday)
    +383                     * @return the day or null if not found
    +384                     */
    +385                    public static DayOfWeek valueOfAbbr(String abbr) {
    +386                            for (DayOfWeek day : values()) {
    +387                                    if (day.abbr.equalsIgnoreCase(abbr)) {
    +388                                            return day;
    +389                                    }
    +390                            }
    +391                            return null;
    +392                    }
    +393            }
    +394    
    +395            /**
    +396             * Constructs {@link Recurrence} objects.
    +397             * @author Michael Angstadt
    +398             */
    +399            public static class Builder {
    +400                    private Frequency frequency;
    +401                    private Integer interval;
    +402                    private Integer count;
    +403                    private Date until;
    +404                    private boolean untilHasTime;
    +405                    private List<Integer> bySecond;
    +406                    private List<Integer> byMinute;
    +407                    private List<Integer> byHour;
    +408                    private List<DayOfWeek> byDay;
    +409                    private List<Integer> byDayPrefixes;
    +410                    private List<Integer> byMonthDay;
    +411                    private List<Integer> byYearDay;
    +412                    private List<Integer> byWeekNo;
    +413                    private List<Integer> byMonth;
    +414                    private List<Integer> bySetPos;
    +415                    private DayOfWeek workweekStarts;
    +416                    private ListMultimap<String, String> xrules;
    +417    
    +418                    /**
    +419                     * Constructs a new builder.
    +420                     * @param frequency the recurrence frequency
    +421                     */
    +422                    public Builder(Frequency frequency) {
    +423                            this.frequency = frequency;
    +424                            bySecond = new ArrayList<Integer>(0);
    +425                            byMinute = new ArrayList<Integer>(0);
    +426                            byHour = new ArrayList<Integer>(0);
    +427                            byDay = new ArrayList<DayOfWeek>(0);
    +428                            byDayPrefixes = new ArrayList<Integer>(0);
    +429                            byMonthDay = new ArrayList<Integer>(0);
    +430                            byYearDay = new ArrayList<Integer>(0);
    +431                            byWeekNo = new ArrayList<Integer>(0);
    +432                            byMonth = new ArrayList<Integer>(0);
    +433                            bySetPos = new ArrayList<Integer>(0);
    +434                            xrules = new ListMultimap<String, String>(0);
    +435                    }
    +436    
    +437                    /**
    +438                     * Constructs a new builder
    +439                     * @param recur the recurrence object to copy from
    +440                     */
    +441                    public Builder(Recurrence recur) {
    +442                            frequency = recur.frequency;
    +443                            interval = recur.interval;
    +444                            count = recur.count;
    +445                            until = recur.until;
    +446                            untilHasTime = recur.untilHasTime;
    +447                            bySecond = new ArrayList<Integer>(recur.bySecond);
    +448                            byMinute = new ArrayList<Integer>(recur.byMinute);
    +449                            byHour = new ArrayList<Integer>(recur.byHour);
    +450                            byDay = new ArrayList<DayOfWeek>(recur.byDay);
    +451                            byDayPrefixes = new ArrayList<Integer>(recur.byDayPrefixes);
    +452                            byMonthDay = new ArrayList<Integer>(recur.byMonthDay);
    +453                            byYearDay = new ArrayList<Integer>(recur.byYearDay);
    +454                            byWeekNo = new ArrayList<Integer>(recur.byWeekNo);
    +455                            byMonth = new ArrayList<Integer>(recur.byMonth);
    +456                            bySetPos = new ArrayList<Integer>(recur.bySetPos);
    +457                            workweekStarts = recur.workweekStarts;
    +458                            xrules = new ListMultimap<String, String>(recur.xrules);
    +459                    }
    +460    
    +461                    /**
    +462                     * Sets the frequency
    +463                     * @param frequency the frequency
    +464                     * @return this
    +465                     */
    +466                    public Builder frequency(Frequency frequency) {
    +467                            this.frequency = frequency;
    +468                            return this;
    +469                    }
    +470    
    +471                    /**
    +472                     * Sets the date that the recurrence stops. Note that the UNTIL and
    +473                     * COUNT fields cannot both be defined within the same rule.
    +474                     * @param until the date (time component is included)
    +475                     * @return this
    +476                     */
    +477                    public Builder until(Date until) {
    +478                            return until(until, true);
    +479                    }
    +480    
    +481                    /**
    +482                     * Sets the date that the recurrence stops. Note that the UNTIL and
    +483                     * COUNT fields cannot both be defined within the same rule.
    +484                     * @param until the date
    +485                     * @param hasTime true if the date has a time component, false if it's
    +486                     * strictly a date
    +487                     * @return this
    +488                     */
    +489                    public Builder until(Date until, boolean hasTime) {
    +490                            if (until == null) {
    +491                                    this.until = null;
    +492                                    this.untilHasTime = false;
    +493                            } else {
    +494                                    this.until = new Date(until.getTime());
    +495                                    this.untilHasTime = hasTime;
    +496                            }
    +497                            return this;
    +498                    }
    +499    
    +500                    /**
    +501                     * Gets the number of times the rule will be repeated. Note that the
    +502                     * UNTIL and COUNT fields cannot both be defined within the same rule.
    +503                     * @param count the number of times to repeat the rule
    +504                     * @return this
    +505                     */
    +506                    public Builder count(Integer count) {
    +507                            this.count = count;
    +508                            return this;
    +509                    }
    +510    
    +511                    /**
    +512                     * Gets how often the rule repeats, in relation to the frequency.
    +513                     * @param interval the repetition interval
    +514                     * @return this
    +515                     */
    +516                    public Builder interval(Integer interval) {
    +517                            this.interval = interval;
    +518                            return this;
    +519                    }
    +520    
    +521                    /**
    +522                     * Adds a BYSECOND rule part.
    +523                     * @param bySecond the value to add
    +524                     * @return this
    +525                     */
    +526                    public Builder bySecond(Integer bySecond) {
    +527                            this.bySecond.add(bySecond);
    +528                            return this;
    +529                    }
    +530    
    +531                    /**
    +532                     * Adds a BYMINUTE rule part.
    +533                     * @param byMinute the value to add
    +534                     * @return this
    +535                     */
    +536                    public Builder byMinute(Integer byMinute) {
    +537                            this.byMinute.add(byMinute);
    +538                            return this;
    +539                    }
    +540    
    +541                    /**
    +542                     * Adds a BYHOUR rule part.
    +543                     * @param byHour the value to add
    +544                     * @return this
    +545                     */
    +546                    public Builder byHour(Integer byHour) {
    +547                            this.byHour.add(byHour);
    +548                            return this;
    +549                    }
    +550    
    +551                    /**
    +552                     * Adds a BYMONTHDAY rule part.
    +553                     * @param byMonthDay the value to add
    +554                     * @return this
    +555                     */
    +556                    public Builder byMonthDay(Integer byMonthDay) {
    +557                            this.byMonthDay.add(byMonthDay);
    +558                            return this;
    +559                    }
    +560    
    +561                    /**
    +562                     * Adds a BYYEARDAY rule part.
    +563                     * @param byYearDay the value to add
    +564                     * @return this
    +565                     */
    +566                    public Builder byYearDay(Integer byYearDay) {
    +567                            this.byYearDay.add(byYearDay);
    +568                            return this;
    +569                    }
    +570    
    +571                    /**
    +572                     * Adds a BYWEEKNO rule part.
    +573                     * @param byWeekNo the value to add
    +574                     * @return this
    +575                     */
    +576                    public Builder byWeekNo(Integer byWeekNo) {
    +577                            this.byWeekNo.add(byWeekNo);
    +578                            return this;
    +579                    }
    +580    
    +581                    /**
    +582                     * Adds a BYMONTH rule part.
    +583                     * @param byMonth the value to add
    +584                     * @return this
    +585                     */
    +586                    public Builder byMonth(Integer byMonth) {
    +587                            this.byMonth.add(byMonth);
    +588                            return this;
    +589                    }
    +590    
    +591                    /**
    +592                     * Adds a BYSETPOS rule part.
    +593                     * @param bySetPos the value to add
    +594                     * @return this
    +595                     */
    +596                    public Builder bySetPos(Integer bySetPos) {
    +597                            this.bySetPos.add(bySetPos);
    +598                            return this;
    +599                    }
    +600    
    +601                    /**
    +602                     * Adds a BYDAY rule part.
    +603                     * @param byDay the value to add
    +604                     * @return this
    +605                     */
    +606                    public Builder byDay(DayOfWeek byDay) {
    +607                            return byDay(null, byDay);
    +608                    }
    +609    
    +610                    /**
    +611                     * Adds a BYDAY rule part.
    +612                     * @param prefix the numeric prefix
    +613                     * @param byDay the value to add
    +614                     * @return this
    +615                     */
    +616                    public Builder byDay(Integer prefix, DayOfWeek byDay) {
    +617                            this.byDayPrefixes.add(prefix);
    +618                            this.byDay.add(byDay);
    +619                            return this;
    +620                    }
    +621    
    +622                    /**
    +623                     * Sets the day that the work week starts.
    +624                     * @param workweekStarts the day
    +625                     * @return this
    +626                     */
    +627                    public Builder workweekStarts(DayOfWeek workweekStarts) {
    +628                            this.workweekStarts = workweekStarts;
    +629                            return this;
    +630                    }
    +631    
    +632                    /**
    +633                     * Adds a non-standard rule part.
    +634                     * @param name the name
    +635                     * @param value the value or null to remove the rule part
    +636                     * @return this
    +637                     */
    +638                    public Builder xrule(String name, String value) {
    +639                            name = name.toUpperCase();
    +640    
    +641                            if (value == null) {
    +642                                    xrules.removeAll(name);
    +643                            } else {
    +644                                    xrules.put(name, value);
    +645                            }
    +646    
    +647                            return this;
    +648                    }
    +649    
    +650                    /**
    +651                     * Builds the final {@link Recurrence} object.
    +652                     * @return the object
    +653                     */
    +654                    public Recurrence build() {
    +655                            return new Recurrence(this);
    +656                    }
    +657            }
    +658    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/StringUtils.JoinCallback.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/StringUtils.JoinCallback.html new file mode 100644 index 000000000..482110b18 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/StringUtils.JoinCallback.html @@ -0,0 +1,204 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.util.Collection;
    +004    import java.util.Map;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Contains miscellaneous string utilities.
    +033     * @author Michael Angstadt
    +034     */
    +035    public class StringUtils {
    +036            /**
    +037             * The local computer's newline character sequence.
    +038             */
    +039            public static final String NEWLINE = System.getProperty("line.separator");
    +040    
    +041            /**
    +042             * Joins a collection of values into a delimited list.
    +043             * @param collection the collection of values
    +044             * @param delimiter the delimiter (e.g. ",")
    +045             * @return the final string
    +046             */
    +047            public static <T> String join(Collection<T> collection, String delimiter) {
    +048                    StringBuilder sb = new StringBuilder();
    +049                    join(collection, delimiter, sb);
    +050                    return sb.toString();
    +051            }
    +052    
    +053            /**
    +054             * Joins a collection of values into a delimited list.
    +055             * @param collection the collection of values
    +056             * @param delimiter the delimiter (e.g. ",")
    +057             * @param sb the string builder to append onto
    +058             */
    +059            public static <T> void join(Collection<T> collection, String delimiter, StringBuilder sb) {
    +060                    join(collection, delimiter, sb, new JoinCallback<T>() {
    +061                            public void handle(StringBuilder sb, T value) {
    +062                                    sb.append(value);
    +063                            }
    +064                    });
    +065            }
    +066    
    +067            /**
    +068             * Joins a collection of values into a delimited list.
    +069             * @param collection the collection of values
    +070             * @param delimiter the delimiter (e.g. ",")
    +071             * @param join callback function to call on every element in the collection
    +072             * @return the final string
    +073             */
    +074            public static <T> String join(Collection<T> collection, String delimiter, JoinCallback<T> join) {
    +075                    StringBuilder sb = new StringBuilder();
    +076                    join(collection, delimiter, sb, join);
    +077                    return sb.toString();
    +078            }
    +079    
    +080            /**
    +081             * Joins a collection of values into a delimited list.
    +082             * @param collection the collection of values
    +083             * @param delimiter the delimiter (e.g. ",")
    +084             * @param sb the string builder to append onto
    +085             * @param join callback function to call on every element in the collection
    +086             */
    +087            public static <T> void join(Collection<T> collection, String delimiter, StringBuilder sb, JoinCallback<T> join) {
    +088                    boolean first = true;
    +089                    for (T element : collection) {
    +090                            if (first) {
    +091                                    first = false;
    +092                            } else {
    +093                                    sb.append(delimiter);
    +094                            }
    +095                            join.handle(sb, element);
    +096                    }
    +097            }
    +098    
    +099            /**
    +100             * Joins a map into a delimited list.
    +101             * @param map the map
    +102             * @param delimiter the delimiter (e.g. ",")
    +103             * @param join callback function to call on every element in the collection
    +104             * @return the final string
    +105             */
    +106            public static <K, V> String join(Map<K, V> map, String delimiter, final JoinMapCallback<K, V> join) {
    +107                    return join(map.entrySet(), delimiter, new JoinCallback<Map.Entry<K, V>>() {
    +108                            public void handle(StringBuilder sb, Map.Entry<K, V> entry) {
    +109                                    join.handle(sb, entry.getKey(), entry.getValue());
    +110                            }
    +111                    });
    +112            }
    +113    
    +114            /**
    +115             * Callback interface used with the
    +116             * {@link StringUtils#join(Collection, String, JoinCallback)} method.
    +117             * @author Michael Angstadt
    +118             * @param <T> the value type
    +119             */
    +120            public static interface JoinCallback<T> {
    +121                    void handle(StringBuilder sb, T value);
    +122            }
    +123    
    +124            /**
    +125             * Callback interface used with the
    +126             * {@link StringUtils#join(Map, String, JoinMapCallback)} method.
    +127             * @author Michael Angstadt
    +128             * @param <K> the key class
    +129             * @param <V> the value class
    +130             */
    +131            public static interface JoinMapCallback<K, V> {
    +132                    void handle(StringBuilder sb, K key, V value);
    +133            }
    +134    
    +135            private StringUtils() {
    +136                    //hide
    +137            }
    +138    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/StringUtils.JoinMapCallback.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/StringUtils.JoinMapCallback.html new file mode 100644 index 000000000..482110b18 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/StringUtils.JoinMapCallback.html @@ -0,0 +1,204 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.util.Collection;
    +004    import java.util.Map;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Contains miscellaneous string utilities.
    +033     * @author Michael Angstadt
    +034     */
    +035    public class StringUtils {
    +036            /**
    +037             * The local computer's newline character sequence.
    +038             */
    +039            public static final String NEWLINE = System.getProperty("line.separator");
    +040    
    +041            /**
    +042             * Joins a collection of values into a delimited list.
    +043             * @param collection the collection of values
    +044             * @param delimiter the delimiter (e.g. ",")
    +045             * @return the final string
    +046             */
    +047            public static <T> String join(Collection<T> collection, String delimiter) {
    +048                    StringBuilder sb = new StringBuilder();
    +049                    join(collection, delimiter, sb);
    +050                    return sb.toString();
    +051            }
    +052    
    +053            /**
    +054             * Joins a collection of values into a delimited list.
    +055             * @param collection the collection of values
    +056             * @param delimiter the delimiter (e.g. ",")
    +057             * @param sb the string builder to append onto
    +058             */
    +059            public static <T> void join(Collection<T> collection, String delimiter, StringBuilder sb) {
    +060                    join(collection, delimiter, sb, new JoinCallback<T>() {
    +061                            public void handle(StringBuilder sb, T value) {
    +062                                    sb.append(value);
    +063                            }
    +064                    });
    +065            }
    +066    
    +067            /**
    +068             * Joins a collection of values into a delimited list.
    +069             * @param collection the collection of values
    +070             * @param delimiter the delimiter (e.g. ",")
    +071             * @param join callback function to call on every element in the collection
    +072             * @return the final string
    +073             */
    +074            public static <T> String join(Collection<T> collection, String delimiter, JoinCallback<T> join) {
    +075                    StringBuilder sb = new StringBuilder();
    +076                    join(collection, delimiter, sb, join);
    +077                    return sb.toString();
    +078            }
    +079    
    +080            /**
    +081             * Joins a collection of values into a delimited list.
    +082             * @param collection the collection of values
    +083             * @param delimiter the delimiter (e.g. ",")
    +084             * @param sb the string builder to append onto
    +085             * @param join callback function to call on every element in the collection
    +086             */
    +087            public static <T> void join(Collection<T> collection, String delimiter, StringBuilder sb, JoinCallback<T> join) {
    +088                    boolean first = true;
    +089                    for (T element : collection) {
    +090                            if (first) {
    +091                                    first = false;
    +092                            } else {
    +093                                    sb.append(delimiter);
    +094                            }
    +095                            join.handle(sb, element);
    +096                    }
    +097            }
    +098    
    +099            /**
    +100             * Joins a map into a delimited list.
    +101             * @param map the map
    +102             * @param delimiter the delimiter (e.g. ",")
    +103             * @param join callback function to call on every element in the collection
    +104             * @return the final string
    +105             */
    +106            public static <K, V> String join(Map<K, V> map, String delimiter, final JoinMapCallback<K, V> join) {
    +107                    return join(map.entrySet(), delimiter, new JoinCallback<Map.Entry<K, V>>() {
    +108                            public void handle(StringBuilder sb, Map.Entry<K, V> entry) {
    +109                                    join.handle(sb, entry.getKey(), entry.getValue());
    +110                            }
    +111                    });
    +112            }
    +113    
    +114            /**
    +115             * Callback interface used with the
    +116             * {@link StringUtils#join(Collection, String, JoinCallback)} method.
    +117             * @author Michael Angstadt
    +118             * @param <T> the value type
    +119             */
    +120            public static interface JoinCallback<T> {
    +121                    void handle(StringBuilder sb, T value);
    +122            }
    +123    
    +124            /**
    +125             * Callback interface used with the
    +126             * {@link StringUtils#join(Map, String, JoinMapCallback)} method.
    +127             * @author Michael Angstadt
    +128             * @param <K> the key class
    +129             * @param <V> the value class
    +130             */
    +131            public static interface JoinMapCallback<K, V> {
    +132                    void handle(StringBuilder sb, K key, V value);
    +133            }
    +134    
    +135            private StringUtils() {
    +136                    //hide
    +137            }
    +138    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/StringUtils.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/StringUtils.html new file mode 100644 index 000000000..482110b18 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/StringUtils.html @@ -0,0 +1,204 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.util.Collection;
    +004    import java.util.Map;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Contains miscellaneous string utilities.
    +033     * @author Michael Angstadt
    +034     */
    +035    public class StringUtils {
    +036            /**
    +037             * The local computer's newline character sequence.
    +038             */
    +039            public static final String NEWLINE = System.getProperty("line.separator");
    +040    
    +041            /**
    +042             * Joins a collection of values into a delimited list.
    +043             * @param collection the collection of values
    +044             * @param delimiter the delimiter (e.g. ",")
    +045             * @return the final string
    +046             */
    +047            public static <T> String join(Collection<T> collection, String delimiter) {
    +048                    StringBuilder sb = new StringBuilder();
    +049                    join(collection, delimiter, sb);
    +050                    return sb.toString();
    +051            }
    +052    
    +053            /**
    +054             * Joins a collection of values into a delimited list.
    +055             * @param collection the collection of values
    +056             * @param delimiter the delimiter (e.g. ",")
    +057             * @param sb the string builder to append onto
    +058             */
    +059            public static <T> void join(Collection<T> collection, String delimiter, StringBuilder sb) {
    +060                    join(collection, delimiter, sb, new JoinCallback<T>() {
    +061                            public void handle(StringBuilder sb, T value) {
    +062                                    sb.append(value);
    +063                            }
    +064                    });
    +065            }
    +066    
    +067            /**
    +068             * Joins a collection of values into a delimited list.
    +069             * @param collection the collection of values
    +070             * @param delimiter the delimiter (e.g. ",")
    +071             * @param join callback function to call on every element in the collection
    +072             * @return the final string
    +073             */
    +074            public static <T> String join(Collection<T> collection, String delimiter, JoinCallback<T> join) {
    +075                    StringBuilder sb = new StringBuilder();
    +076                    join(collection, delimiter, sb, join);
    +077                    return sb.toString();
    +078            }
    +079    
    +080            /**
    +081             * Joins a collection of values into a delimited list.
    +082             * @param collection the collection of values
    +083             * @param delimiter the delimiter (e.g. ",")
    +084             * @param sb the string builder to append onto
    +085             * @param join callback function to call on every element in the collection
    +086             */
    +087            public static <T> void join(Collection<T> collection, String delimiter, StringBuilder sb, JoinCallback<T> join) {
    +088                    boolean first = true;
    +089                    for (T element : collection) {
    +090                            if (first) {
    +091                                    first = false;
    +092                            } else {
    +093                                    sb.append(delimiter);
    +094                            }
    +095                            join.handle(sb, element);
    +096                    }
    +097            }
    +098    
    +099            /**
    +100             * Joins a map into a delimited list.
    +101             * @param map the map
    +102             * @param delimiter the delimiter (e.g. ",")
    +103             * @param join callback function to call on every element in the collection
    +104             * @return the final string
    +105             */
    +106            public static <K, V> String join(Map<K, V> map, String delimiter, final JoinMapCallback<K, V> join) {
    +107                    return join(map.entrySet(), delimiter, new JoinCallback<Map.Entry<K, V>>() {
    +108                            public void handle(StringBuilder sb, Map.Entry<K, V> entry) {
    +109                                    join.handle(sb, entry.getKey(), entry.getValue());
    +110                            }
    +111                    });
    +112            }
    +113    
    +114            /**
    +115             * Callback interface used with the
    +116             * {@link StringUtils#join(Collection, String, JoinCallback)} method.
    +117             * @author Michael Angstadt
    +118             * @param <T> the value type
    +119             */
    +120            public static interface JoinCallback<T> {
    +121                    void handle(StringBuilder sb, T value);
    +122            }
    +123    
    +124            /**
    +125             * Callback interface used with the
    +126             * {@link StringUtils#join(Map, String, JoinMapCallback)} method.
    +127             * @author Michael Angstadt
    +128             * @param <K> the key class
    +129             * @param <V> the value class
    +130             */
    +131            public static interface JoinMapCallback<K, V> {
    +132                    void handle(StringBuilder sb, K key, V value);
    +133            }
    +134    
    +135            private StringUtils() {
    +136                    //hide
    +137            }
    +138    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/UtcOffset.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/UtcOffset.html new file mode 100644 index 000000000..7892e37f4 --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/UtcOffset.html @@ -0,0 +1,229 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.util.regex.Matcher;
    +004    import java.util.regex.Pattern;
    +005    
    +006    /*
    +007     Copyright (c) 2013, Michael Angstadt
    +008     All rights reserved.
    +009    
    +010     Redistribution and use in source and binary forms, with or without
    +011     modification, are permitted provided that the following conditions are met: 
    +012    
    +013     1. Redistributions of source code must retain the above copyright notice, this
    +014     list of conditions and the following disclaimer. 
    +015     2. Redistributions in binary form must reproduce the above copyright notice,
    +016     this list of conditions and the following disclaimer in the documentation
    +017     and/or other materials provided with the distribution. 
    +018    
    +019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +026     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +029     */
    +030    
    +031    /**
    +032     * Represents a UTC offset.
    +033     * @author Michael Angstadt
    +034     */
    +035    public final class UtcOffset {
    +036            private final int hour;
    +037            private final int minute;
    +038    
    +039            /**
    +040             * Creates a new UTC offset.
    +041             * @param hour the hour component (may be negative)
    +042             * @param minute the minute component (must be between 0 and 59)
    +043             */
    +044            public UtcOffset(int hour, int minute) {
    +045                    this.hour = hour;
    +046                    this.minute = minute;
    +047            }
    +048    
    +049            /**
    +050             * Parses a UTC offset from a string.
    +051             * @param text the text to parse (e.g. "-0500")
    +052             * @return the parsed UTC offset
    +053             * @throws IllegalArgumentException if the text cannot be parsed
    +054             */
    +055            public static UtcOffset parse(String text) {
    +056                    Pattern timeZoneRegex = Pattern.compile("^([-\\+])?(\\d{1,2})(:?(\\d{2}))?$");
    +057                    Matcher m = timeZoneRegex.matcher(text);
    +058    
    +059                    if (!m.find()) {
    +060                            throw new IllegalArgumentException("Offset string is not in ISO8610 format: " + text);
    +061                    }
    +062    
    +063                    String sign = m.group(1);
    +064                    boolean positive;
    +065                    if ("-".equals(sign)) {
    +066                            positive = false;
    +067                    } else {
    +068                            positive = true;
    +069                    }
    +070    
    +071                    String hourStr = m.group(2);
    +072                    int hourOffset = Integer.parseInt(hourStr);
    +073                    if (!positive) {
    +074                            hourOffset *= -1;
    +075                    }
    +076    
    +077                    String minuteStr = m.group(4);
    +078                    int minuteOffset = (minuteStr == null) ? 0 : Integer.parseInt(minuteStr);
    +079    
    +080                    return new UtcOffset(hourOffset, minuteOffset);
    +081            }
    +082    
    +083            /**
    +084             * Gets the hour component.
    +085             * @return the hour component
    +086             */
    +087            public int getHour() {
    +088                    return hour;
    +089            }
    +090    
    +091            /**
    +092             * Gets the minute component.
    +093             * @return the minute component
    +094             */
    +095            public int getMinute() {
    +096                    return minute;
    +097            }
    +098    
    +099            /**
    +100             * Converts this offset to its ISO string representation using "basic"
    +101             * format.
    +102             * @return the ISO string representation (e.g. "-0500")
    +103             */
    +104            @Override
    +105            public String toString() {
    +106                    return toString(false);
    +107            }
    +108    
    +109            /**
    +110             * Converts this offset to its ISO string representation.
    +111             * @param extended true to use extended format (e.g. "-05:00"), false to use
    +112             * basic format (e.g. "-0500")
    +113             * @return the ISO string representation
    +114             */
    +115            public String toString(boolean extended) {
    +116                    StringBuilder sb = new StringBuilder();
    +117    
    +118                    boolean positive = hour >= 0;
    +119                    sb.append(positive ? '+' : '-');
    +120    
    +121                    int hour = Math.abs(this.hour);
    +122                    if (hour < 10) {
    +123                            sb.append('0');
    +124                    }
    +125                    sb.append(hour);
    +126    
    +127                    if (extended) {
    +128                            sb.append(':');
    +129                    }
    +130    
    +131                    if (minute < 10) {
    +132                            sb.append('0');
    +133                    }
    +134                    sb.append(minute);
    +135    
    +136                    return sb.toString();
    +137            }
    +138    
    +139            @Override
    +140            public int hashCode() {
    +141                    final int prime = 31;
    +142                    int result = 1;
    +143                    result = prime * result + hour;
    +144                    result = prime * result + minute;
    +145                    return result;
    +146            }
    +147    
    +148            @Override
    +149            public boolean equals(Object obj) {
    +150                    if (this == obj)
    +151                            return true;
    +152                    if (obj == null)
    +153                            return false;
    +154                    if (getClass() != obj.getClass())
    +155                            return false;
    +156                    UtcOffset other = (UtcOffset) obj;
    +157                    if (hour != other.hour)
    +158                            return false;
    +159                    if (minute != other.minute)
    +160                            return false;
    +161                    return true;
    +162            }
    +163    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/XmlUtils.html b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/XmlUtils.html new file mode 100644 index 000000000..6358f405f --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/src-html/biweekly/util/XmlUtils.html @@ -0,0 +1,327 @@ + + +
    +001    package biweekly.util;
    +002    
    +003    import java.io.IOException;
    +004    import java.io.InputStream;
    +005    import java.io.Reader;
    +006    import java.io.StringReader;
    +007    import java.io.StringWriter;
    +008    import java.io.Writer;
    +009    import java.util.ArrayList;
    +010    import java.util.HashMap;
    +011    import java.util.List;
    +012    import java.util.Map;
    +013    
    +014    import javax.xml.parsers.DocumentBuilder;
    +015    import javax.xml.parsers.DocumentBuilderFactory;
    +016    import javax.xml.parsers.ParserConfigurationException;
    +017    import javax.xml.transform.Transformer;
    +018    import javax.xml.transform.TransformerConfigurationException;
    +019    import javax.xml.transform.TransformerException;
    +020    import javax.xml.transform.TransformerFactory;
    +021    import javax.xml.transform.TransformerFactoryConfigurationError;
    +022    import javax.xml.transform.dom.DOMSource;
    +023    import javax.xml.transform.stream.StreamResult;
    +024    
    +025    import org.w3c.dom.Document;
    +026    import org.w3c.dom.Element;
    +027    import org.w3c.dom.Node;
    +028    import org.w3c.dom.NodeList;
    +029    import org.xml.sax.InputSource;
    +030    import org.xml.sax.SAXException;
    +031    
    +032    /*
    +033     Copyright (c) 2013, Michael Angstadt
    +034     All rights reserved.
    +035    
    +036     Redistribution and use in source and binary forms, with or without
    +037     modification, are permitted provided that the following conditions are met: 
    +038    
    +039     1. Redistributions of source code must retain the above copyright notice, this
    +040     list of conditions and the following disclaimer. 
    +041     2. Redistributions in binary form must reproduce the above copyright notice,
    +042     this list of conditions and the following disclaimer in the documentation
    +043     and/or other materials provided with the distribution. 
    +044    
    +045     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +046     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +047     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +048     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +049     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +050     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +051     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +052     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +053     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +054     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +055    
    +056     The views and conclusions contained in the software and documentation are those
    +057     of the authors and should not be interpreted as representing official policies, 
    +058     either expressed or implied, of the FreeBSD Project.
    +059     */
    +060    
    +061    /**
    +062     * Generic XML utility methods.
    +063     * @author Michael Angstadt
    +064     */
    +065    public class XmlUtils {
    +066            /**
    +067             * Creates a new XML document.
    +068             * @return the XML document
    +069             */
    +070            public static Document createDocument() {
    +071                    try {
    +072                            DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
    +073                            fact.setNamespaceAware(true);
    +074                            DocumentBuilder db = fact.newDocumentBuilder();
    +075                            return db.newDocument();
    +076                    } catch (ParserConfigurationException e) {
    +077                            //will probably never be thrown because we're not doing anything fancy with the configuration
    +078                            throw new RuntimeException(e);
    +079                    }
    +080            }
    +081    
    +082            /**
    +083             * Parses an XML string into a DOM.
    +084             * @param xml the XML string
    +085             * @return the parsed DOM
    +086             * @throws SAXException if the string is not valid XML
    +087             */
    +088            public static Document toDocument(String xml) throws SAXException {
    +089                    try {
    +090                            return toDocument(new StringReader(xml));
    +091                    } catch (IOException e) {
    +092                            //reading from string
    +093                            throw new RuntimeException(e);
    +094                    }
    +095            }
    +096    
    +097            /**
    +098             * Parses an XML document from an input stream.
    +099             * @param in the input stream
    +100             * @return the parsed DOM
    +101             * @throws SAXException if the XML is not valid
    +102             * @throws IOException if there is a problem reading from the input stream
    +103             */
    +104            public static Document toDocument(InputStream in) throws SAXException, IOException {
    +105                    return toDocument(new InputSource(in));
    +106            }
    +107    
    +108            /**
    +109             * <p>
    +110             * Parses an XML document from a reader.
    +111             * </p>
    +112             * <p>
    +113             * Note that use of this method is discouraged. It ignores the character
    +114             * encoding that is defined within the XML document itself, and should only
    +115             * be used if the encoding is undefined or if the encoding needs to be
    +116             * ignored for whatever reason. The {@link #toDocument(InputStream)} method
    +117             * should be used instead, since it takes the XML document's character
    +118             * encoding into account when parsing.
    +119             * </p>
    +120             * @param reader the reader
    +121             * @return the parsed DOM
    +122             * @throws SAXException if the XML is not valid
    +123             * @throws IOException if there is a problem reading from the reader
    +124             * @see <a
    +125             * href="http://stackoverflow.com/q/3482494/13379">http://stackoverflow.com/q/3482494/13379</a>
    +126             */
    +127            public static Document toDocument(Reader reader) throws SAXException, IOException {
    +128                    return toDocument(new InputSource(reader));
    +129            }
    +130    
    +131            private static Document toDocument(InputSource in) throws SAXException, IOException {
    +132                    try {
    +133                            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    +134                            dbf.setNamespaceAware(true);
    +135                            dbf.setIgnoringComments(true);
    +136                            DocumentBuilder db = dbf.newDocumentBuilder();
    +137                            return db.parse(in);
    +138                    } catch (ParserConfigurationException e) {
    +139                            //will probably never be thrown because we're not doing anything fancy with the configuration
    +140                            throw new RuntimeException(e);
    +141                    }
    +142            }
    +143    
    +144            /**
    +145             * Converts an XML node to a string.
    +146             * @param node the XML node
    +147             * @return the string
    +148             */
    +149            public static String toString(Node node) {
    +150                    return toString(node, new HashMap<String, String>());
    +151            }
    +152    
    +153            /**
    +154             * Converts an XML node to a string.
    +155             * @param node the XML node
    +156             * @param outputProperties the output properties
    +157             * @return the string
    +158             */
    +159            public static String toString(Node node, Map<String, String> outputProperties) {
    +160                    try {
    +161                            StringWriter writer = new StringWriter();
    +162                            toWriter(node, writer, outputProperties);
    +163                            return writer.toString();
    +164                    } catch (TransformerException e) {
    +165                            //should never be thrown because we're writing to string
    +166                            throw new RuntimeException(e);
    +167                    }
    +168            }
    +169    
    +170            /**
    +171             * Writes an XML node to a writer.
    +172             * @param node the XML node
    +173             * @param writer the writer
    +174             * @throws TransformerException if there's a problem writing to the writer
    +175             */
    +176            public static void toWriter(Node node, Writer writer) throws TransformerException {
    +177                    toWriter(node, writer, new HashMap<String, String>());
    +178            }
    +179    
    +180            /**
    +181             * Writes an XML node to a writer.
    +182             * @param node the XML node
    +183             * @param writer the writer
    +184             * @param outputProperties the output properties
    +185             * @throws TransformerException if there's a problem writing to the writer
    +186             */
    +187            public static void toWriter(Node node, Writer writer, Map<String, String> outputProperties) throws TransformerException {
    +188                    try {
    +189                            Transformer transformer = TransformerFactory.newInstance().newTransformer();
    +190                            for (Map.Entry<String, String> property : outputProperties.entrySet()) {
    +191                                    try {
    +192                                            transformer.setOutputProperty(property.getKey(), property.getValue());
    +193                                    } catch (IllegalArgumentException e) {
    +194                                            //ignore invalid output properties
    +195                                    }
    +196                            }
    +197    
    +198                            DOMSource source = new DOMSource(node);
    +199                            StreamResult result = new StreamResult(writer);
    +200                            transformer.transform(source, result);
    +201                    } catch (TransformerConfigurationException e) {
    +202                            //no complex configurations
    +203                    } catch (TransformerFactoryConfigurationError e) {
    +204                            //no complex configurations
    +205                    }
    +206            }
    +207    
    +208            /**
    +209             * Gets all the elements out of a {@link NodeList}.
    +210             * @param nodeList the node list
    +211             * @return the elements
    +212             */
    +213            public static List<Element> toElementList(NodeList nodeList) {
    +214                    List<Element> elements = new ArrayList<Element>();
    +215                    for (int i = 0; i < nodeList.getLength(); i++) {
    +216                            Node node = nodeList.item(i);
    +217                            if (node instanceof Element) {
    +218                                    elements.add((Element) node);
    +219                            }
    +220                    }
    +221                    return elements;
    +222            }
    +223    
    +224            /**
    +225             * Gets the root element of a document.
    +226             * @param parent the document
    +227             * @return the root element
    +228             */
    +229            public static Element getRootElement(Document parent) {
    +230                    return getFirstChildElement((Node) parent);
    +231            }
    +232    
    +233            /**
    +234             * Gets the first child element of an element.
    +235             * @param parent the parent element
    +236             * @return the first child element or null if there are no child elements
    +237             */
    +238            public static Element getFirstChildElement(Element parent) {
    +239                    return getFirstChildElement((Node) parent);
    +240            }
    +241    
    +242            /**
    +243             * Gets the first child element of a node.
    +244             * @param parent the node
    +245             * @return the first child element or null if there are no child elements
    +246             */
    +247            private static Element getFirstChildElement(Node parent) {
    +248                    NodeList nodeList = parent.getChildNodes();
    +249                    for (int i = 0; i < nodeList.getLength(); i++) {
    +250                            Node node = nodeList.item(i);
    +251                            if (node instanceof Element) {
    +252                                    return (Element) node;
    +253                            }
    +254                    }
    +255                    return null;
    +256            }
    +257    
    +258            private XmlUtils() {
    +259                    //hide
    +260            }
    +261    }
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/libs/biweekly-0.3.1-javadoc/syntaxhighlighter.css b/libs/biweekly-0.3.1-javadoc/syntaxhighlighter.css new file mode 100644 index 000000000..95255f2fe --- /dev/null +++ b/libs/biweekly-0.3.1-javadoc/syntaxhighlighter.css @@ -0,0 +1,352 @@ +/* ====== shCore.css ====== */ + +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +.syntaxhighlighter a, +.syntaxhighlighter div, +.syntaxhighlighter code, +.syntaxhighlighter table, +.syntaxhighlighter table td, +.syntaxhighlighter table tr, +.syntaxhighlighter table tbody, +.syntaxhighlighter table thead, +.syntaxhighlighter table caption, +.syntaxhighlighter textarea { + -moz-border-radius: 0 0 0 0 !important; + -webkit-border-radius: 0 0 0 0 !important; + background: none !important; + border: 0 !important; + bottom: auto !important; + float: none !important; + height: auto !important; + left: auto !important; + line-height: 1.1em !important; + margin: 0 !important; + outline: 0 !important; + overflow: visible !important; + padding: 0 !important; + position: static !important; + right: auto !important; + text-align: left !important; + top: auto !important; + vertical-align: baseline !important; + width: auto !important; + box-sizing: content-box !important; + font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; + font-weight: normal !important; + font-style: normal !important; + font-size: 1em !important; + min-height: inherit !important; + min-height: auto !important; +} + +.syntaxhighlighter { + width: 100% !important; + margin: 1em 0 1em 0 !important; + position: relative !important; + overflow: auto !important; + font-size: 1em !important; +} +.syntaxhighlighter.source { + overflow: hidden !important; +} +.syntaxhighlighter .bold { + font-weight: bold !important; +} +.syntaxhighlighter .italic { + font-style: italic !important; +} +.syntaxhighlighter .line { + white-space: pre !important; +} +.syntaxhighlighter table { + width: 100% !important; +} +.syntaxhighlighter table caption { + text-align: left !important; + padding: .5em 0 0.5em 1em !important; +} +.syntaxhighlighter table td.code { + width: 100% !important; +} +.syntaxhighlighter table td.code .container { + position: relative !important; +} +.syntaxhighlighter table td.code .container textarea { + box-sizing: border-box !important; + position: absolute !important; + left: 0 !important; + top: 0 !important; + width: 100% !important; + height: 100% !important; + border: none !important; + background: white !important; + padding-left: 1em !important; + overflow: hidden !important; + white-space: pre !important; +} +.syntaxhighlighter table td.gutter .line { + text-align: right !important; + padding: 0 0.5em 0 1em !important; +} +.syntaxhighlighter table td.code .line { + padding: 0 1em !important; +} +.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line { + padding-left: 0em !important; +} +.syntaxhighlighter.show { + display: block !important; +} +.syntaxhighlighter.collapsed table { + display: none !important; +} +.syntaxhighlighter.collapsed .toolbar { + padding: 0.1em 0.8em 0em 0.8em !important; + font-size: 1em !important; + position: static !important; + width: auto !important; + height: auto !important; +} +.syntaxhighlighter.collapsed .toolbar span { + display: inline !important; + margin-right: 1em !important; +} +.syntaxhighlighter.collapsed .toolbar span a { + padding: 0 !important; + display: none !important; +} +.syntaxhighlighter.collapsed .toolbar span a.expandSource { + display: inline !important; +} +.syntaxhighlighter .toolbar { + position: absolute !important; + right: 1px !important; + top: 1px !important; + width: 11px !important; + height: 11px !important; + font-size: 10px !important; + z-index: 10 !important; +} +.syntaxhighlighter .toolbar span.title { + display: inline !important; +} +.syntaxhighlighter .toolbar a { + display: block !important; + text-align: center !important; + text-decoration: none !important; + padding-top: 1px !important; +} +.syntaxhighlighter .toolbar a.expandSource { + display: none !important; +} +.syntaxhighlighter.ie { + font-size: .9em !important; + padding: 1px 0 1px 0 !important; +} +.syntaxhighlighter.ie .toolbar { + line-height: 8px !important; +} +.syntaxhighlighter.ie .toolbar a { + padding-top: 0px !important; +} +.syntaxhighlighter.printing .line.alt1 .content, +.syntaxhighlighter.printing .line.alt2 .content, +.syntaxhighlighter.printing .line.highlighted .number, +.syntaxhighlighter.printing .line.highlighted.alt1 .content, +.syntaxhighlighter.printing .line.highlighted.alt2 .content { + background: none !important; +} +.syntaxhighlighter.printing .line .number { + color: #bbbbbb !important; +} +.syntaxhighlighter.printing .line .content { + color: black !important; +} +.syntaxhighlighter.printing .toolbar { + display: none !important; +} +.syntaxhighlighter.printing a { + text-decoration: none !important; +} +.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a { + color: black !important; +} +.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a { + color: #008200 !important; +} +.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a { + color: blue !important; +} +.syntaxhighlighter.printing .keyword { + color: #006699 !important; + font-weight: bold !important; +} +.syntaxhighlighter.printing .preprocessor { + color: gray !important; +} +.syntaxhighlighter.printing .variable { + color: #aa7700 !important; +} +.syntaxhighlighter.printing .value { + color: #009900 !important; +} +.syntaxhighlighter.printing .functions { + color: #ff1493 !important; +} +.syntaxhighlighter.printing .constants { + color: #0066cc !important; +} +.syntaxhighlighter.printing .script { + font-weight: bold !important; +} +.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a { + color: gray !important; +} +.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a { + color: #ff1493 !important; +} +.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a { + color: red !important; +} +.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a { + color: black !important; +} + +/* ====== shThemeDefault.css ====== */ + +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +.syntaxhighlighter { + background-color: white !important; + + /* ADDED */ + font-size: 0.9em !important; + padding-left: 20px; +} +.syntaxhighlighter .line.alt1 { + background-color: white !important; +} +.syntaxhighlighter .line.alt2 { + background-color: white !important; +} +.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 { + background-color: #e0e0e0 !important; +} +.syntaxhighlighter .line.highlighted.number { + color: black !important; +} +.syntaxhighlighter table caption { + color: black !important; +} +.syntaxhighlighter .gutter { + color: #afafaf !important; +} +.syntaxhighlighter .gutter .line { + border-right: 3px solid #6ce26c !important; +} +.syntaxhighlighter .gutter .line.highlighted { + background-color: #6ce26c !important; + color: white !important; +} +.syntaxhighlighter.printing .line .content { + border: none !important; +} +.syntaxhighlighter.collapsed { + overflow: visible !important; +} +.syntaxhighlighter.collapsed .toolbar { + color: blue !important; + background: white !important; + border: 1px solid #6ce26c !important; +} +.syntaxhighlighter.collapsed .toolbar a { + color: blue !important; +} +.syntaxhighlighter.collapsed .toolbar a:hover { + color: red !important; +} +.syntaxhighlighter .toolbar { + color: white !important; + background: #6ce26c !important; + border: none !important; +} +.syntaxhighlighter .toolbar a { + color: white !important; +} +.syntaxhighlighter .toolbar a:hover { + color: black !important; +} +.syntaxhighlighter .plain, .syntaxhighlighter .plain a { + color: black !important; +} +.syntaxhighlighter .comments, .syntaxhighlighter .comments a { + color: #008200 !important; +} +.syntaxhighlighter .string, .syntaxhighlighter .string a { + color: blue !important; +} +.syntaxhighlighter .keyword { + color: #006699 !important; +} +.syntaxhighlighter .preprocessor { + color: gray !important; +} +.syntaxhighlighter .variable { + color: #aa7700 !important; +} +.syntaxhighlighter .value { + color: #009900 !important; +} +.syntaxhighlighter .functions { + color: #ff1493 !important; +} +.syntaxhighlighter .constants { + color: #0066cc !important; +} +.syntaxhighlighter .script { + font-weight: bold !important; + color: #006699 !important; + background-color: none !important; +} +.syntaxhighlighter .color1, .syntaxhighlighter .color1 a { + color: gray !important; +} +.syntaxhighlighter .color2, .syntaxhighlighter .color2 a { + color: #ff1493 !important; +} +.syntaxhighlighter .color3, .syntaxhighlighter .color3 a { + color: red !important; +} + +.syntaxhighlighter .keyword { + font-weight: bold !important; +} diff --git a/libs/biweekly-0.3.1.jar b/libs/biweekly-0.3.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..0b85154dc13a6cecbccd869ccfc345b7dec371b0 GIT binary patch literal 328180 zcmb5W19W81y6_#_wylYciPN!d+qUgY>||own%K5&JDFtOoO{o`@Bf_dzUQ8=d+qLC zYd^JDRqd+Ze%SI-pkOdSe|rtbunGUikH3FFe|^h{DhtvBWW~P8|6L3UXy{Aq{G`;y z?CZ48*Mas|F&RNwfS9O~GJ}lRz0Ab8v=lwVEW8vw&D6wngCgSs%g&)Ao#fOAofN$g z6y(8A)gKtNy=3lfSy76pQi@8>*)&yXc(5o*EQ;vfsN;(FUuPs)oFseq+9Eto2g#8V z&~$2kSjXR*dP3Y5hjwarY6JaO$AEx-{SW;&v~V*qv9k8~@BaUP#ZbTc|KDOpb~g5Q zwkEdD|DplG|J=aFz|qOvz}nix@n5us`)gYZyMG~x{7;gWPIk8cKg69)-2c@WkpAiF z?l#tcxp?0{&E!Ay#nQmlz}U{{FXI0^@&7QR_6CjyHYU#ha#m3O+8cXEJ9`sH=YMs} z@c&2of9nPy{I#izv&H`%Hq?JCp#93cptLWUzOMuOud+gaUrA(43`W)lPEI_JcFX(_ z5D>x;1g;RSt`H1j5Y;=s=L!y#TPCuU#UOM`Chis%F0v%MDhKLC#2|c^I}fsc?@e?% zZ!aW9|3-6#uoZ*YB`YQINwY*37K4BggCLmh>|7u@&KlU;TQC%Z0FK9gxiTpn(2%7iUC!mu;}>FL8RMCm1m={go|k* znr|p1LOh2g(Rm;rYvQnK*p5WzG=srR6={b+`DY(4%YBsj;)kQi^t96m~P#T-nZuxLHJhta>YQQk~H zKN_$aT4e zu1`KyHi^7(l3tjlo?Tdq-*9}^*(LU7gh$grQgvA;QFNFjYk=$n>ntfFpDSqqC5E2q zMd=7ffqmK{)V;H*ji!=SZ!x5^D1G-0rG>Q&Guk&DM7SS>oT_qxdl@ctq|zY1z-b-h z;DSEIsJ#}Oic3!Igf47r62BJ_k1*qB`v{uQ>mF?Rhjk-XV#7pMZI+J9JZ;ZAD+bKd zo)Tc7oDZZ3YnV|Hm7(8}-eEMKMxjW2voUw^$2p+Z=!)>l0NQtGVE-J~j-5FK0zuqLvG*i%KYW1KDc0IJfz1!ss&I7kTuk%iml*<~ zMNU7`-p?QQGz2Az?%My^^2%Z815UVA=uKtre3Th3*?Rc|c1X>VHmgUFW8~U)FNIdz zeoD0H8^T7PhTjR{e?5f$bJNiuxwEQ+0RiezKkR^pd0JCe7fps=(hK$~5RMh5|bOs@Vtp@D4uzr2mkE-JM;&z=*Co6$X zve^nHn4e&OLZ8pP*mKDeJnPw#Lz1>M5UyO zDJA`pzBfDdZC06BD~e))TbeE+ukYOqCBwdl(?5Z&ZdvI!)}9$^a?|ak!1mM}Vr*Qb zk0xgCLZJ;9u{ct7HZT&OUb`I_^{T#5*OgmrE!<;Y!fLky?K0F@>rN|=q#~hNx^0ehvlk!gfD@i3 zBT+aWNR#}Q;bWOENpjbWg*!__RlM%^YY3|ogZloBpl-`cu0gtggQU61=G3*=(glw) zdguIzf}VDzGnna(_CXn!o4PDSi>x&I?6;sT2K?sKWmFuUPG2G#XuFNR;9Fj3>FEldN7VacEujb*5}zNzwh7t{DD7_419y5ej^vZ7-=5~ z7=<2?0DyT!fYy+Ok&F<488|_A_TCnO=@#L?)3u`!Iu8A?z!6Pj#T+`#_mlFNbsKZO z3q!~+?hh{cK*HY*f{^`?RQnTC{pp2Y@_W&WO2+GkgFTh#6Yx`oPvp+FQ`_{BMg?t# zH~*8g7N?M}0OwEX80c;p<7$u^9tG?rh;9)~(`SyOpDu(CbPbmyObH-|qKB~IB&l;? zOoM2rsKy2Zll;2pAK?U#Ef$*n1*hvTO^E*Afs>+%fw76>f9VFBUx-5cvuQ0M(QX3* zMW5HKA}MT$%Wqu)KFf|CQtU5p5w+-wilGjdIbmwFy9)USpW7%CJKMqgu8%VJcgC&N zPz|J>_pNA&=aeZx$k8YXuD{J~didJys_l3ybDGfS0otFb5)!!=BuW&+4s1562xu}z zL)+|@;#~E2>*zi`Mul%Ddhi%AO;~C4Ow>BvmT8)s`i6nSGNMecQ5s0sDE%cLy{++n zgK4$?xAl~28#x&F<(Oy&`=8c1`F3;fBi+SXAiMP@qqDU(V~p@#nmg(uk=*q{tq~VE zyP=7pWz(3=O6@K>QcOy2%$ZBfv>7HhEfo)InPNGK+6$GPw&d(={aNE?ljIzbE=#O{ z?Abey>iwMRp3K!4Jy%NMIf=0*T1R`6EG@a8t}>OEjSujob}ZYQ5+TH9CQj`p z*F!B421?_`&b0iQGt5!dpPCwctCG5XFj>8A%_m@Q2uqF}Eqc?Lmq4g?>&lML!2_r6*#mZ2rdipAyi5@sz<8cH0OYpf{mq3qA+LYa6VE$dO0)r#a-{tXR; zgpF-)M>ks33dekt%ie!(;+L{Oe8H-Vv5!((vj6=o#*nXx*N%C;bx2#z{= zG_FZ!L|apD^PE8+Nu_GCwqF7F{Cb>=%}XJ6u&k%AHBbdjo!NUX_4@Ks@Y3v$>22s!@t*l zGK79LjOn=h=_2~Jfr14#E1^dkzK_I3PDprJUIrIxLZDl%IK!6Gc5TP8S-5GaTyHeYYhg6wzR%)CsZCn464(T)wLk9qc9bKHH2atI@iOCWeV>rtldgC03~ z>%`7q)7^cEbMzvPIrd(=fDzSXX9zDDSJTV_#GYV8j6|J%BYSg{oI{@yNPh^F=Yg1% z0*N7!dqp47ymMt7o4XDHE-QsmQWL<)$^6*Ku&YS1X_KPoquW)*93_PA)IbxVvnq(w zdtaGH!4tpjh^CSWhhMM|e9=64Xm zAu_}dKc)+GS=S=Cq0I}1xt>(kq+Ka*`AxjNDU86k{BV2l=Ejk4<@(%YjLr+>j5<}n zW+wO8&qP};oPh`mv|^RY+iJ9(2pJqEp~I@Fv1R4%Ilq)eq0oDgd(MSPgBjo~2Z!qT zIK^MoLT%p$xfJd={pYV2Cc>6)xOoxwD&c15dG}_y2e_~c%n2N7aS|?yWaaiUSf=(h za3CcJd*OM7?_gq}+~z{OLDjml{{a6Z=YE)>R>6L8?)1y#{{SIPd~yPH34tarz@qawCe- z`tQm1swXYste7e(iTACTwvo0>X00QSGO=_SCD;WTv4^C**1lzE&PU@nS!=b|B^iYu zxd^wUVpFhmt>6D@)3#)5BZ=RmG$hOK zi+lI*v5Tnu9WujYCjN}!c+qoy$;vXK+>$8IxrL=)aaoby{mM@(1>d9bO5*JSk7|ps zym+>@%5-sSXRW#Pqyn4J-?rS#xTZS3wHla9)OW55f-ghKSBhAGqnXX1x3rgHa|bG~ z_35Q{?7Z0)rxCLlZ4MMr%_nK%iE%IZB9yu6Pv}z*T6cWD%d!}l#!0ezFpXZ*v z6yEnCvSN{Y#UU_;u@@lcA^OlZe(2y~A8Z(Yqt@TCv{dsoz4)OK{;)%g^RteH7AtT3 zc6N~~x})j?iA19??U@B_WA+~#ND<$@JBLc8tC>-p3r$1xHwvt0cBFU^b$c1doFSSu~Mq$ zGqne|7XwK>Q^L!50z1Qb{6&**tQG$$c#uY60Ld&F8c*RZAHl8+vP`8Pii<#Zugd>( zwi0zt9AR{lDA62f^dX(hiH|IueYCTbz&J?45SUDDib&zc0W%^{ZjG#^RK;Ok>K6(z z4DKuZp4QkkR7*UkEoI+f+wM)PI^`aVgBf3Red@@MIib7O2Z%ciQQo(feWF==#>8eTiTect(BX?n)Cs zP|IxbQTV$GZMq6yv`=I>l`jQ3Pd^=wc(b&Trb0d)PAEzQi<&QXc}X&Bqvk=p@WY)Z zn>a(9W)>kWWXe+v8~RnQr|=lZ^= zvh?Lo`Cm;tJ>w9P~l++ZkE1bGW{$gVkn`O!EyBWC?y9d5g{(4^j&7X+v$6HR*jnnpz%j?^EplO1F z;+VE4Cqt8}R~RO3cM$I{Dpwi<1QTduC?R9e4i(WI7!at=3WxKjd00xwr|H3KlVaY|yF)hCiR6YB7- z4tK)v$0sv*z#ZF}2eUNPIdrt9fR*l_E>McD(``o`F`uQ^M>VH;!G{v};}saC$fH2a zn0cO*#yu4|r8nW&&E!rdXis>q_UwE1C_W7yL#$o-WpKNK6FjUx&5L1*8!|OFJ**E0 zTn8M-nl%YmI$}@pTS0PuEhr)R8h4O~ZekMFv}tOx!loo~=)jn>lPb;3|7NehhAh-? zb+yA(BG|t>T%u#Ki^%hR*O*#+z9>+NG!zybp_{Q(RV``-86y8pFOqI(b=blYI4mt9f8+pc#&7L5zkV@B7FzKKJ7nfJ$UoYuf`2m*uUUIJ^- zI0x=XN|+)3mA;Fd=P_lxdNiquMShYN0LH3@1He`N$Vn@-WmE#LtE3%9Q``1SE!ND* zsP4xM-dt(6^1xl3FWa9a|HzsihhuNYJzk&JayhA>tKuii$L{w_x*}XjQRDnUJfZB* zFcvaVwar~s-6X|PJ$f^Re=Y;ikY8qsrSw-WII&*RvE_~s#lRXT&BR>E`-YSyIP$|FdYn78E< zLT7O30A_kkE?l-#Xno=e~L)-zKPsI35>UY+&A7*cO{d-Co1zUK1+J= zWfl1pAC#c^#QYT-DqKtn8StT&*%;uaWK0hzk~S$MhB6*nm(aV)?L0y|UEM8EM|Iy} z+5RN-`cX-I$H{$t;O3{mC+mqyVykT0p`kXUmv+TiZcOp}C*A5iJDgzgi-K>6|Aub$ zHwylv4Y~a{-RkoS1tpP!-2XeUm6j+JU>)s80eA&HT8LtvKiV9O^)C=ugQQh!x|0*m zec`_tkzd+X)?_{OXpGEVywi0K;r5r|_?(mJ_xbT52UIu$wlmBfWk$yiaxz$)YYL4q ztBet;-`X!^lJG!`{yltO2oKXRP4}XH2FogLkUt6(qa85}B+?ej`5RvOc7+2U zYA#E?ht(o8+oQW;Z$n85Tflg=M@l!~n*6=m6ed__JhIAQ{fF(zl1~6FGWFRA_pYp& zD|CyGAV=fiZwEz|NAp+{9WTSRwXu(v(95(@t=6S&^rkf?T2QH(j3=d4 zS*qq=n3(WNPa92#j*Ax`>I?n$$|-S2Y2^b^vFsvc^NtPap7s|)s9+^? z#tT(V70rxEUqcnk%QRRtX&R(MDUskD{tR!%HB$WPh( zes~bun`f*?-W`|OlYr9LX4>I^o`R^10R^YR3zImB)3gnCX#68rHeF*U<@aL+G)9@H zt7Ut$S{8c1pc`RnS^G4eUUaV|gb{s0_7-91^@ris4-hC%@DHCd6` z)@By@vuC`jqGLd}M8T1+vof}Q(5KepoL?J;v!jOj(x_;icsWuGzI>~%^HTM^S|Bev zj#mMF0gxQ)6GWB5Erc#c_p-49RMLfc(J6E1n3A@lDw3+|Y*pp1@VY7K4k;Y)Q*?UB zB#ZXoew|0~IBL=jFKG_^-YQuR*e!2OUq3DForq=S@KMB~<}}8wHR?3NZRtQ#WnX`C zA;k!fH2aZ8K|S#@9=zdk=x%U(Iq16VG;0APJSlsiDRVKG<7ux_YH=QW0s*wm#s~RBCN)1udQkqp~^aCb-NXlqDUiQs+cS z$9aD!23PH}j!%4aHm9)qqmXxthlNa-`3G4h$Mta6w%fMbwa;kJpO05ee?X<^Y=|~m zi9L@{16R&u*e$XjrpL&AE!xnqf(Ty!AtOKZzAPG_`tBo*u=iNM4gvrE?mgobG#GuG z5%j|`L8)F@Sz>uj$z4j>>G?cJeq*uKQgrY4&R2Kq^emR4478I;i}tJvYmA?5KQSZ| zccTk5HC1I|maj}_)@H`Qn)5PDEKJ#zW%NiKA?1it7G2gD$`0$v8tSwK*HiAs=WH#P zvZLQT74tTWwU@_ISi!G`&waIu>&RuSIGO;yxRzyPlgjLcDHt0c>rI!Zt}6vDoB>hz zv(Rt^%I0oXdPO|hK*dS?y1MhH*n80jO)ff3G!(Pmn+dX2H;tqweW;?dD;vztWm+)? z#!rac6U#*iTwqtON2e-fS8ly4Q^OqiTitBGn{mvw*jzFcw`DrIbn6-wX~cCFG350M z8+w)dRoDD3eY8xiJr;%}G#{)fw{i+BCC@YHaIBt4Sqb!PhWW@`N~{KHHa~P{XU0=B zs5PS$b@rEctv7;-v8jEnFGaW@f@dB>OjAyQ2_7`-Ll%~m*^z?zceH;1)!#3>MLLep z!DUZ@C?hr5$5{cRhSk1OCyBC{XfcuLiq;$-XJ)_R8zb3`W{o zWY)Wm0Am=XiDdw`jN3WVIH&ra5 z`31-ZSQX|b|I|Q4Q%!Z9nmMBYX@oG0@Glhtkok%4P*mt(j-c#BL9ZekuyiGB^EY@I?RWpQ4EUQLGP42E@ZE? zchfCgJ$IEjwn=Oy1dN0o3=0E>G9*yg63Hg15`4)F2orM=h`-|ww#i9Ux2alV5(qAb8_Ygop6#rX5K;6dr z?-s4{x-6;!nhuMN1vW%&I8|g|_!@}jEkhL*hC*X0a>2krnlMkwtbwFyabO((J4*&u zH2;hK9(kvG1mf8+)^d7^E>IuEeAje$Rns#+3$5Q)Hz;E;E{-$a{7f)0{IEko!Wy6~ z+wzx1R>GRbDIX<%|6Ll~zBd*r431*4ji)k5-3vZ=pEI!;mHA{^vqK@LfEDMw;Zi{n zz0wHGd91y(2Lo=NgXCm!S^C(NTDLwOHF?7vg&n5@>w$lE%_% zOE9CFcmvIk)xuWNWidC#PBBWRTNt{tyAp=y-#^naCKC&e(HgeYi=K1VUadEL`U3?F zp6>O7KxEkN)flrf2pDGTg0tl|vV4q}r-k%1VI4pt54PDn2BkqK;af{_d#O}Z#F41f0#sP*VZ`*OEE*BZAh1}q; zUD@a{-fMVY7sIPFjcdd7aPaRi_xeQx_0TN~e?&Gu^@QFfN&>CFY!k(td5M&r7XdXI zK$?hWn^2Ow`OB92wwe6^9{ZpxF@;D$PP_06*%22h+TnVDfTy`a=q~;4A|ZAL8N3iT zvmh5WN31N)Lx701yzdN3hM=}TGY@ZZI&yiC(6-)uIZ&AtmxI9qWL0F z=0n_6^YbZYp*v|Uj=l{4yI#5`q)D>os9SuqW@1=r1?NOqjjBiNGqs7S)gNY(bYNy{ z?NE04q9u~u#oV7yu#;zYxr)%0O+oyW%H%SK{HzU0y3U{97pc`mtUJ-_;;^z2HRpS_LqxCB|&o;?XqooCJSkozHJ0mlMYGKuP(^4P-R+GsoCMEQ8MD*r)=ya*UZZQ9B9x{&KB+{ z-i%Y;q?*iDs64;SqdCxNAg`T@3!nUC0%KBDRK9%{HivJ=i0S>~;LB58z-GN@7(c%m zW$Oc%rYeE z&V&7GGmtBQ^(jvsys#0AC;+*wbSbn-t-hH-_l@7j*lk6 z59-dBTwm+T?FZ!FY5I>&Fqwdu1%Gh|hR zhgM-ON!i{+?rl*s{ z!GX>2M=v4Lop2e80z@*Nrq=4|qu9WTt*K#T(Pz;9v=Rl~0hG`Y_}Y>!*X5EQ#82IhrvyT(xi4;Q;``+E_C2EU>1ID<{M@oJ)l4d%^rf{W z7j|3z$fz0I$0n_WlO!HuhV%@$eeG!{HRF4Z$(vx4-CT#3iGw*7If#-tXi6pt;aFoIa3tf-*m3y&4JD$z49kM+EYG1Bzcd*P>X@VO0IOQyYIGM_j{eOML`A?%x2@KRSK1l-9-2K9@jnJ7ChRP!ie6fDJGFTUk><^1(sjV^FDn zE?CT?7z8WOj7QUP+^mIt5-`sXuv|))$oZVaoju@bU>Vim?%z(VF1C4ZuQr&ueN6ZC z{DIbofkY0j>)W%!$V7fHqLpqqrt3DSn{2lecJJGFqw7Z8H39od6~HTC783B)za{Oz zsC6F{LNrh#(q9AlC|iD;ZZ|z@VtcPWv2BaZKRyCmdy*MPI;l)kJI#C$tiQ&N{oZJ} z`oLm*0$ZIVkR{cDne29e1cK2HzBR3(RM z2g#Bvr`Qr*t8|N!sQt+SBK$DllB0-yo>t1PxfNh@?dDOA_N=Y$Xg)G4A9}+oLPmeb zn>Y?pE-Kv?+@7B}qTDrGi)iX5CB4a|9dSin#r`gB6inENA)NDjMlx!or z>W*)WrS9ifnvrVZd01lJLK|m|C8`DU9mwg^h4GzhpGzdR8&@v%QK>D6a2*X;yHTuT zN=oruj_1v-9@iLFST&%J*jQ)hPD&Fv%W~SSY8ytk76yj)-`GPNd9xLU?Z)=P5 zj+z*_eXv*x@SH|pU9xzqs;wU`>clfKAOW)(uv+!lN?ShooEdxKGNu?rNb?PAVz-6PsAOFQQ$_@1NcU2VJKRT*|H6x8b@5=oXIH4BZJ;d zrkWddv7dAWzY^nXqmjm`>Nbc|uE7HdMaT?Yb8P$Mzuc-;Pbr2s#EcD}kd|e-B{_2&-zZvbO$)Do6@Ofqc5Q&B^?N%f zAeQHb9NCbRl1hf>0H>yY1zHvuzzg~rfX}))k#xTKHcY(@mI&Vv@Hzf;JPb-6gRC1! zro?NnFy`!<+?Rgi9B0nzK5{56Da;doDT-^5=9k1S0XwWhGb_DtKsYW}Ya${rf(J&t zrNuVP^B5R+370btFYp+!S`0V-_WZ8Idq3o|QS1=^V9*|Eo1mSKJd4mCKQGbb^8240 zH_}lVn@nGbL;BLa{vE{qqu)lxXPz#A=Vn%hpTR)k5I$qo-($~5 z=nD{1(B3T_Nfb|sXfWx!2AKIzG_v$&Z1=&{>i37j_uJ?GIJ};b?l@yA^fV69#(Plr$D`zcn*37)H;|@jC9M zb}%e%zmz#VJG3vJUO>4=62+;8nzO?*%D`K=Nh?EVL&c?GjgglVqRcp>(W{i!n&%u1#i-{mC)X5O;xEO+owp-wxis@yjhW^d?>WXucM=j zlY>*^3@c{$Ox_wUiSlsOjsT#H4^bPBcng!kz<_L4U$88*Xt6GGKPk@)|H}!2eDOOH zTg7an^rW+AAr%2WTx!+1up;9I?i5SuY~41r5eM!z!s}hoZmwYdK#pZ5Yf*~UO-JYD zNvL9REH|ud@p9^}=CmrYH-4vbinc@d3B2+5X_ny3F1?0{6r&casYn$o4hfFXQ*9u@ z7PNNkWEy~%ao_qM)skX1{Oqj#71MCvvUPgLY`FG2XY(V_dx(4bfc@rW`K zipQHZaWm=1YoYio(K*t*!mkT^RB)R7+K3GP<-lkD;BoKkp? zGY|Wt7C=fuM(q3Q&uyvbn+lavDuAcz;_ajIbi zGYxtbU8v}Fw_MB;+jeC{arm2`$*(Mgg zA?6u4(EJ;JK$r}%9dP6R>EOXjH+r02q8IGCl}ET(6Q@edN+6SglEF*D=@?cep&67J>M4411nIL{_{w#Zf`C7k6 z8}oPYz`<`siRbbMD_HH^v`XPQ4d)KA5=>>cx7E8a>gjm*p>NMfWM;W zZv`};2Sz?sAV5IfkpHhr4K+uLuQHmyR%)pD$)O4&`Dj%){=k4Cfr-rXZ&u4IAd$$V zm>UR|_YD?L9UZz}PjBb; z0Mn783W7xu(}^PW?g2r>s~%M|kDp!SFh2{cL+=s`%cry{m|%UwyOHD7ar&7sr4>p% z7TY)h*WcT`!P2JG0NyXO{L?z0OaS(FmQ&L1sEv3+$JWfTd;!C&{%mE#G|i42Fh1!u zc6r86iS%y55@Q)S)m`bUk5#3Fy|E!B@C_dc75qI?wEjcGLXvWrG2vv(*)dFTT&rW@ z)?P4UPvf$d?1JPQwh*uu>n%b{(HaK=+u#`E%UVio?ftuU2HdR7{Lh%a3KhY=(aLeczWH+V-$*Of#k+s={5BVi^T5kmo zTZ#Nh7sXCLRfcQ#U{iNva@(!TrBuAiX&1co8g#*UPJIouY+g*xYYo$XIm@CRWCr{x zYdb@Y-p%eAdlJ-g!5^)T-Z)Of?5~kZAHi6jj!Zm%TeQ()>!8b#a4|8QjH>_1T!__A z(|-ZJ6;Bn49A^ktr~pTTGYGfz!vpOXcmF~gW&*Kq`!`Q#l(XWh*G^sK_N#ZRg1rP5 zcq^8NMDdfVYhi5}D3mByV7S>FQ%ZsAq35Y@3KSB(;|Fm`&mm91nv{>Ij31aFc5*Xr za5Bqr$O}rtCx4C#^oV(4iSqbDi%pm+4;hPX^o7Rv%W<6)7z57z&lfw=&%!rv425;Y z=MN@#ObZERE5>3^xATj9iA1b!DwYG^bOhIh)M*=Mhj`bpYz>-&*pFt*SF*%;uIIL{ z1aYs#-XqQ3Jmt>wGG1K`90({2 z_WzYf^Ox2Bml6q8Ej3g%v`>mrV<9XwwAw%@)gMRc%PdKFepIu&s`T{kop7@d`xx$jbMv}?Za#u89qW8++2Q>$KnU+?Rr-;dKl z;y_RP=Zwx-a7K`_s`A|A;})Q1a9QxA;ZBY|TfJ6yOxF4$S9&!Axb7^`lAYwsm?EA$ zaIl3WF%e^}63uj&q8z)ZsgKeU zI&F$mwlQ6fEX5_$GN8nBZQ25AV1BtWf273? z%bqfuu4&o~Z+U8flAh9qB$J{xU82Z6zOh~-6Q<)`EE{{h`$s1Z&mMFYt+glX2?BDd zjvha68&$;a*@Gfpwh6swRB1$Oa--6|YVk4ShcX-&D)soJi8&6f+z?K)(CpTT#Cz!7 zt;|oh1+lezAOI~JGOiww8V2)GZB++&@nyS+EqLeXMpJjH?D6Q;VHN!H6y*+bSJX*! zrrF?ZisIW?;Ka6bzplho#~8AydJ4lGui7SQ+zfj`5S-<*s0gSv_ycL}zUY@sbiZ#= z&WpWlsMmXZukPCekS{X>;;puOMjMO{sJU3JCVTAsY`56_$LIC!l@#5*sTAEHUQHI8 ztm%U3Ft>aO%cp_7I)lJ?c-e-B0Ov^>)L1zY8bZf;kK&Y4tyvc9p-QJo)iY>#c&my1 z@RzlE!;u989boS5iXgK#CMhSn^r^KH$Jk3r)<@CxR_zg`63qtJMStoRbZoC*qwUyH zK6NF=dBO9(v`N{GX~IVji8vaJ4b5Kd<`@yyBeMCk%)1}$U?epD@%u8_16#VbIDnBe zCHSGA$@sNqI-=BmWgyg#3UAIBG$j?OBK^%0ZNuL|Rx87QTum>7bi8!5f!-m!82eI% zP&s6^UhOS2x)DB)nGchAEBv{>nZBQoqinO?L-2uV=MSj$h3@cB%~cbpT>~O_z&PQT zTs_DUIL%uCtcEd2%A6e0*bnozmYb6%6u2R~!+pdmqV?8lpD_SCjrW$r=&R5`eumm_ zJb5rAE!;+334?`U8a#;dU?61(=jD36AT$XzR)~d!DaeWC>4{791kik7ls{&c&f3v- zVtAG-_!;CVjyw`LhAZ>NnDHKf61W||K8rSH6e22cZS+}Byq6jx`-LLw1AU5GYYrT} zqM!OiWxu(N&sj12T#h!o#Usus!Q0Wz-$C%S-)6i4dS1yeU;LPr1##UHp2YhFTJQG3 zC3i1oN`YiUC!%R$%UPWLfGCmzbrD%jHG%^v@DUi+@l&#Cv7;$6rE z1$Uu-BWuEw6V31a8$Esv0Gwkr`TCKg*5M&{e})fYgcHA=yiW;H401)xb9*p{#QEf3hU>eYzh10Yo9_xV=-b|+SzUN?#s6#mqHd2Cuj~x}XEEl>P zlN;`nQr3Oad~w9GtheqY8Dx|m`_%hXiPn;^?0RZEf4O#N=@N~nRLV7`k{(uiv$O5B zS;Hl>j&b||mnB~0Sm4R5EBWvQ9ZZM8K})e2b7-%y`Dt8wAd|{FW^*1m#-vW=5hY`V z#wtRq0OcmNIPE}bmTFsaj#ew+B{Ispt6++Tvxr!w|9DhqS3VN)7a1%xNf7b3Cen*Wx#s&@a_+T zmA3h99N5B;4<9}zDm;I8iw_#lOUE({ zwlY*-8#@t^_wm}$I@UAL^N{f{FUaVQ8`Rbwn}o1FyxWOJ@B={Pk(zg;#a#oRrw&q{ zGBNII-Gf~P%L8z?(B}l?<*^niTa8k^jEE`K%&d5)b>fEHUWP`luN?el0?}DdrCy0b z7wS_PAOM^d_0c_!=Mq@p1-V=2f%P#O%Ozs_op6Vs3s41hnW3`D^J5yxNLyIs4;a&j z6YF_yfoM^`O7Z6+ z%%Jlw6SsGkS+-Y@<7e>oZ|Y)_H?ewB&M-EqP2ZT>&q}?^% zGD(kf-VBJOZ0U}BFV<~;4~f)%(~nfGg}8!M zT&+LmD)R%xkjOCaEbi|U=94aRUSjrZX=>SrNojZ26d{-OBF?+e?R{{>t$?6LS{B@V zvpdLE76qTGvirGLBW^rxacxPf4fL;VtQT&;*>7qA{W{hJ7bjW$DY$<=btVg>3%4Z- zw*mPAGi84wg5LDdp}469h7<$AD$$2;qsQti5=~MA^%YVkchvchlit$g&T6BJRAX>3 zh#sXwD(~udn4*st$;QeELC1tWAi{0}*W~nDEcN5tvVSp<+|#+Sil^;T!<{Ak`AZ%D z-%`E|z*$7&z=A?B zF`GXI0Fk$}0}-hA7n)luxMWrBng*Fd0Yb1oig}26*K_PXz|cszs063`N`C@;t-WNu zWZ#Q&*L|tF+!{5jel``pyttb_O>Mk)JWpkBM}NNbxCsE+!+s)(e#@dLr7Csjj6^zm zH3}GvqTwI^C}iRdovwRvK$jCi?oU#9d+CfUdD*x4d=Wy^c_HDLw!f$2&{MoMxym(O zthqUSP$xNlZ7-@PbY@yy{jL~E*qc++r^X{G<>ET8rIc6KRg|E! z_4ol@=f99Sn+UoBx`F8bD5kfHFQfk-#@>NTux?2j?&`A9W!tu^%eHOXwr$(CZQHil zW#g;oy)$z)-@3EbIe%cs%G{Z;BO~3pn$E?hJGq||5=T{4*~J#0{R=}WBtI?B8L4fy zUl~7K$<7rilT^L+GIf`YyQ?-LhR%u8+Af&fCs>5A?8PHp*&P_FBz+^xeZVh5U>5^d zXwAVLhTQ#qfba+p2Kemo;-%P|vL>^eE+lSUObu3oQRIZCi1LEoJA~zn4$;Z^9+OuS zjfNnls&-~Na*YXN11kLXl`B^*fK%lWJY%e>+ac#P4<(*4ys$u)VhU;SIR~Z*Vh4 zJ+=GrOB&6{;}vR?0duTx@+bd!r_fKRA&*6B+LlLK)RuSC-I)AeO1)BO!Uo_>$x2%T zC+Jo~ROkpN`Ilh=Ae1aHXos`uxF80+z{bU6 zM9E5@{WSAvbSQind3?yphla*%QjTFtTUrd6a3xvDay5IVO?2PW<@e@Y=ipGDwS17u z&A{*M${AAZPGU>-A$C@%?E-x-eZXglF%Jf06*otiR!VY}dt-&33O3$|@yl}@E;I-iI7|}Y^ye@_t=7cUy3KNK3!pMATE&qXVdZA~YnZB>Yl=X0S zY$K8&o8*DB0a_swrp_|jGd)ZvKvOA;T~7$cs(@V5Fq#~rX_xv6Ft;-Jhv;_V`Gz3P zldh1J1^R|qfo+7eX?#vG&vQ1lMG-ek6I;5rTsR>P^h9VArMB53hdj;I6X1EN57`Z> z*mlhWp*ij#aFmypb_$Y>fJWk^S?0F#=sr^wzBgBz4CE{&H_{9&6IrL%+r_iM1u-My z(F(ra>;ba541CiRLMnudET&%evff9yl}ex{XQUc;TWx5SfLG)Vnq6#_Usn7~8vuSB zA~yczJzOEu)#&L_rp}P97i^odAQ-up=M~hU?O?_$$_TP3{JA_$6R!@n?T??5UNfq} zp75Fq2%7{KpF>0%gNdDfl73YellS&PW**@^<13>6<-pXs=PKKg6e~mh<|Z|npv%;| zZS^=Gp$gU7ywTF-V zDv$DK&hi2vMxy8Fd97@D^&nG0OW_#^cCA{psrrN1Yd2#9?>W308X%AM})F~ z!oDIvb?Eg@h)+H~M9bAVK18b(-ZIsIE`W6i=}@}H2Ni&IIB7q}&n+a`-o@=-vZIR> zt!_lZ%KIrkPl6MD@bKK2DA&FiIAPCVIFQc*0~(me(bAi&y@$rwbdFg*Ri3-)XK>P@$CY1U#TTS=bn5DfLH|ic!NyIsM>=S>c^a1 zy%l<%pn%CDp$;?SkVSJHgqes|vbVN~#69bXcR=&h+EB^m)J%3Ba(`QhzzCs@O<>uI zsM&i+02G@-9AVevctALP-aLYTO{IKG7LdKKn>dgy4Au0ZDuBPNAu3K8^gJV613ZyuFiuM7sH7V-f%el~LJDbegIpjw)6^g%z7k5h_~0&~&Vs zwD@VowfP{qoZ&e{(nPn-{l;eC>V%d-3JavdP$(ctR58JfBp<16_KsJ%%~Hp>a}Ejp zLOiAl5)wd8WvrbCp|r9uA}nq0IjSr{RzJ#USf@&Cwb62?R3wLaI?F)j#VC>MLL7~! zH4fq^k#tDwswdfckqW1(%pBh+3~TSfRixD0a=Ac}pzA3f9@INwt>h=>z;yYNww8%l zdE&!|)Wo=%WbAJLo2lWhPmL6l4rNlxEUvKxUsxo0v`D{5zyH$*lNq9H1uM)HpjDFR z0D=U>WM>Qtl7Tb1(*??yK{i@Awmf@3I{SIQ!-tNBddHZ??HafLLiC)XxoxBdw;nys zcW*$kjCek7fD84B512^z!5}?_;){OutUwEeWI01+Sob2^qPKy;QC zqc1cA-exp>yoGPmiR^H&x<%}%OIJ0VG~*Ma%GDN!S?*|vG0mET8RB^}{QTMfcA5AF z)rc5URhbf1G3Y>m#9iH5?C=#mPirsttLA2dr9cb3gwTmt2xUiC< zsN6175}=t3I#SZ(i>4;QRCsXkk!e-7o4E1^M;S8Fez(+ofh;-0i`+o9fJxn5>8qN) zKq9qi?_$XSBP*iXFfRsX6;u?6qEunVYY~a&g7>8?^24}72)^5F=64HgGf zpA-pSSE7tH{zacvT=2<{wryNWywSG}M-*HQpLMft%E7HjE|=d=J}|U%dykf)u$*n6 z_#_8Ka7wA1EB?VE+!ki80R;uo>*5zbUgwOJbLu;l{;Ww@tcJ+`aGwVcWYv#MY;q|q{KHNfI7g`d0*To`2SiulSgO^EqR6#oyohU>E2jH}B}=`$&8ksnp@-{Uswt4DGQ$rIes zZ0W;v&Bjo7?+=d0blqJBy{?p;;c2gNY9EDBNx7edWAFPa8}d9sK@{pP<9QUuUlNcI>f$5tJ2!$H#ZBI8ir68I{){UZt-@*3GgoxjK5nm3h268m>Qcn$m=?NJ2u!Wm|7bCmndDjR;phH zinH1DC*Dk0XrM1J5=h<@ZW4Y`2~=fUH&8hf;h$VW=rdzFJi2QD55zw32&|gI_&*NL zaot@!+yD}^5VOO&KKVcR{k#d3&eZw5J!%PEdGli88KexeJhzBWuz2p}0I-vE~-d1hrK+Y;|m2VBF^OgMZKd832Do%-05d zgm=2}pF;Zh2S%Xhn-M^th*7NkmZ^-8{R<=T_j3~E*R|mPZ$rz!olv8StB1lO(x;UX zF+-{=IGhNdfDQt3y~J-^9q14~pa^JQQ7C+qHxcYn|IrCr20S0}LMz8oadi|6O*6%{ zwp=~A0X6f#-rLMk$}1}?9ZNME+neU>uiWpBCe!HNUxlwW+_yWAv+gnv+gYYPu21%V z9EF-{QTBSVVBh3{y@|{C>skr9JTuY2?8vgf-0sk^bY1oDKL?>`arSmvzg`n|4Nl@= za}UO49TjdL9dT@UEJqr55MH@!DeSyyz5kfLef;2j!kp%s?!>XX`^mzycQo8_M`HE9 z5Q*aY&Ol@4YEPxLw>!S^o{_F?a|glFZ2;_bI8@yUw!`8vU`~0^tmSgeKHb?{u63+v z-FB0NGFj0N@E+xE?SAe4`QZ=heZM1Z^{(2p{tG)KfM1Oi`xk4QXFPX-sk%SMG0f1z z&V~~gvNjiL#5tguLG5qR;w==peScX=9rvt4@wMiX^~F|RrUjN}rjj8&arF4|%Dbbc z#Xk?ut!0|M-2Wt35AlZ5cGgX$!CRx9*3p5_GUJAVa|K#rQhT!T*+o zhD66%1nFC6a(9s$L&$2VbEU+Ez)W`a0(g7wAs0(W;xG}y$ytke&rm{U-uY%*_wjE|}ZX$>t6z){hxAz32c@ur@_npxv!LI&kf8Q`iP z(Kc4m-3a3tFBHd+)>HJoT#?Mr6;7sdt9#422d+^rG0MT!@LOA6?$q&UF!gwF;^M?6 z4cU}bl~F*l`U_bV`JS}%YWky97Pd;}wVaBmL*}QG z2|2y5i%nffEN#2r*_;aGj%E4^{buKL6dp-&)i$H5#X|f6(3Ui(%cpgym#4*c2WWLg zo}pK_y^{jgXfg&l6HUp)165%`prsn5mbo#=iMvA&mjN3-P8iH5yE1$O6NsvE9+aCM zeq++uEXWRL5l}J=zl)&OXo)u=d=-z3rMs8v9V?qGWunbGE6o~|VPmf(@apLo)?*$Z zjurA{-G~#6y$Y>)sRXtK(tX-Vb}J)*C{Mk-5chQvqpSej zI|YH}bFGPKcInDDQSQ~gf#K4;Julj^es1p> zDA*m(lXWBsciP8+_zd;F+5J+w#@=$?=YjYPhegCJ8bIJfB*xSuHKZ9vIt*$>C!5o?gJ?KOVk@5;A~v8hb?mBA z7&4ldMs0m6+u$Js`)DRBh)LuTmVzIJTyl3#=S_vs-)Ah6|^GU;?i;ofZZ5PJibE!iJRFUir~g0>1|wh*%Us!{Mk)9PUBoS@ua z@{c58Nd)vFb_+c`GPGEkh$JUbKeRbHu166 zuW8+>_xIwG@qwb9jf3K1EwP{RC_%85rRYhvQ5~lmqeW*)dEz20Kn)|8$A%#1p<0f4 zmQPerzE?y9N0J#so7DjQh9{;I{k?8)6HlgA|FV&mqN&@d1$$7CmQ%yeU~8e&Xz*-|y9e z9xTfV_4ModBA+cdL7DQ2S)46#NKGE*X-$;P7v>x)OI07u4*elSZ=zlcKXmZEeT=ir z;DOg=85G8+>;xbM+?;a7>7NNX-e8WK>fiAa^Hb#f6%D5NOBV>_)74A`F43!kcJAQjt1GR&XD z51$eYS6(r>nP+rnQaqKYE5jO!z%)=CH(+AGQJvLaqbZvqCEiz|BZ{o3qVlPz8W&ee zvPv~jG>=)F_&Fjr5gmu^Tql$#f?a+l{C%3U;b)w>CYI9k5BPnub3B0BXZkv4BtK^(z zzVZVXnxbd)cjNzw6SGTg%QD$+I+!bPaZ~MYZoyAb_#3cvgVf}spobS|X?_DNEy89$ z@F1D(G7@?S=+`3cQBm^I{sm2vSyveLx}1il#aLy6ooQQ}3(y^c?>l0Dyr7a;Dy)d^ z9juP8?2%<}cY=)H4C(V59q&mAf;y>svtCw6j-W-q9sIBnT}aGI6qX*Ca#&`IT1Ig2 zz>ABV2I=gU2=A{x1rJ{t$|Caz%DYYnbWxU&UA%geHWSG>N*L8H)&O-A8j=b97R6V+ zpV&i|$f`D-v{Egaby(Hi18QGH<{y{HmK&lR-`As2nPtplT<+)$o!tewIyIO$7VmT~ zgW(pqe5S$8fpxOVwpFv;o7G-*=W`tzr34*z+BVjSiJM34eC>$hZkf%NuZn!2xtF*t zKa(anx%$SU)#(P8LLN+BYMvRMw+ds#{umG6ByAMSM}(1rE>E)_B>q4XAD%{?Wk(Dj<|E^X4Qn4AhCz@k{| z)`Hg2XRT4vL4zIOXNWHHKUnQHu$qdQ2VZ!%XPxx<&g!&RNju=H?a@w%s$Gl+Th^nO z@miZy0Fo8nJ$_C&yl*+cmZ{*D&gc!r27GV3H|U~!Op*1P8~iSt;x3!g3)er^Lf4mO zHqiETF@)|YBchsV&l+ge^mP}kbQdiD-|z>e{cBy!2$n&>5(P>XF=Z! zM6Ug1tETlKlQ=JwIT0D0Izkz+6p*kvrIklP_*(@bh7-blixo|zFU8ln-+(UwFS2;f z3u@{G(3jjB98dch?nhS}8(!TYHNncr%$A%^I=i8OLB%liE=IepfhbU^{H2B-12L3I zYEY$SHu$JYo~47wyxmlN#MTsJ2k$xkis8X?1N8>vSEC`jmD@=KcvA~2=RhBKzag>Q zJ+XzjsuI9D(QznNF9)Hy6WTDC47EMdlqsODP^g3)u?97qLmD+GsR%Us_*VLEkK7W= z&!R)tl+f$ST{*!*v%dtdXjZcMVE<5@g&eU(>cBY-xSKBBzeYo@a2@hb)!6emfwVtf ztyFtIuQ=%L7t&EsE5#a?yboLJxZFvr5aB!53V3HCcz>JIo z)<;cNV|`A|R?RWD<&5wW?>n&9!f3}=R>@spAvkV-Hd0%UGg=uox4peSf7V1;pz2aS z;SsmE+3sT0mT*C_35V;l^?38dH|iS0+r9Rj3uJOy|nY zrKmC(0OViZIB<8T<`!(_X;q!1RiwUENQC-Jh6Weqnh=RW6d*~`G5kC#fXSMAUy1#p zt@I^f^1&t;|73pXXK|p)+j#weFCU$fdtJYOpE@k2*yC1}lQDi~! zCS=DlzFPl7eAO^_h$ulx^PRM@NNU#|mm0&OrTwezaC0a{e8S3PQkpMV} z>m(hdUbk6wKXw?Vy1n?#C5I(2i<@eeS(3#@2Vx-5+9yM5$qB_14_0Wt7mOY+7j#bA zm2M?Ca1_W(PAV)IC>1|Zr-fC)KPCwvZsu!ZtU{PaGK{)fpCGN$BBdTweCB6l$Q=?@ zH$(1z5`!b9=UL&gc{qyq2(f3k`7acCVIxYF2(+PdFPIC-dX-=IX13_kqr3>h!xsp0 z`jF<~0OB9fVhxzX+Zy<-Alw86AIHMiMq&Y&KfV5%p=>HI(2aR6kls|v^%*@fb=bD4 zE=m(iRV>-KNzY$$mNY8BwHaDKw?4>Om?hq3^u+4F-@MmJ=>{(OSSpR4x~DV%9YyKI zeF-{I$lnxq_kITraM?r1dhR3Y*d947q{tD#sT6OZzN@AIsMHDIlz(K3*u&FNWyWe| zjRlph6EpjAaGp;UX%Grvi|eK;+ze+lIsQK?}7GLnniiW(u)30v#8&}#`1p(G(#%`UAun` zvP`*kvHsuRL8fjN(d^dES1WSv&npN=?k50@_o`F46K`=o_ie{2DmU0YhXM@D(-Vzg zY;GC;nscOUWPFqn&oJKA#nt&kWzf$zl#y5xHHE&H))GGu4X_^M2vts9Zqy_lFN-Dt z4I#>#8Z}6xbU?OV7QPp}+GSz1#VgU>5L-mEIX$$5nm@>~8Q(gf<=*PDY`f()Q6_eC zhgan|i{$59&u*5?F(>QAeHheIDgp~Ac|=QD+>$`oOyVgmSn@fR!voX6O9j}HavalO zzR_>B;BMN5T_;J)4+EX_hRL{Xs4_k6v%+F872`ucZTq%@KOXc-PEH%0`J0*gkfsyo zGse1L{ZQrJT`WP7-jzc&3C@k8>-%L!9N4h^deZrbz;cUWf%J9v>`*5(Qqh4Oa*U;G z7K=WuoDfN&T=-tniclYI!e}al7BI+}6|jULv?6S|$(H36@N(00(>le`A{&m3a+O|P z!P%cXuzwJ|3nrV%&QGR$RK}W>LkH{f>xuV?uBRa3a87@#7srw0y zxXcU`JBqY_1LL4tT}>>L(SY5VJsFg-owFg@MyYjSi9M zWS=Fx-_vaK5P)6z>Y=vlhPNiTsUJ=Wv&$x6ZudX0k;H}@R!Hv0tF#~8z#-H|seV8r zY0n?Hri(*EmpxAv{^#hX{w+$I_Km#o{|R|{2i?D7+u*MkhJQ!?zpJOJbV*4`p1HK9 zfPg%12U8I-UU&gApeAkyK@+X95`U@osie(Dyst9X&>24O-`)x%SdF7aV0@3eTi-;v z{n3{0r`E?S;0~1*x{KakDKH=hGHRCU$Zo4|oUdk(h9)^03+mjVSTx=|M37(Zju;X9 zyr_17=GGH9SzE8q8yB{iCQYvdXA*orM>EZI!1GZyhriA(mki(FR6y`-%3Bv07R`~_ zNWZSK)W9%C%aD$@?B0cd-~vv}rdMm-7#SJKY_HjpX!u*DH`45F7A6_CG(SDJCc_Ta zJ_<2>UD?l@%8?r)EnS0S--XV1IDuN|oBrDwVnt>#rz7M@1S6qj87Eg=APDB-78 z{h)n!%c<+Oi?dX$?DE+8TUW$I1Rs=Oxk$4_?8g&2v>ENRE#ye?*}Sul4v>m7W)(Un z{#U;;L}o@Iv=x#o0E^dp6bXwxfWwF_=TkcoiA@G?f6pwuySpI*mf>;m&ej?0M$s>u zQfJb0ttPk7i?6-T0M>R+&cHoRtNmF{o-UAoMm(_vKBxQ}ajkE}8UJIfEAd+B+FAZP z*8d&lk?WR?wU1VU33WHUmbrd#@O)vo6`m%2eA#0LSWBiP^}0^-H`=G-z`))?_t~>rY_1o8`x#J}IGwNidc}j*f)?nv4M^W6 zLvrUtoq_uuNE@GN(eDFKZ@Tcs2_*EZ@U034_4SFi0|qnN#2?{G#tI~A=1yr1nxWx zLh7E9^Snkot1S0n9WCa5S+QWHs#u7we{Eb&DRp04X9&Hk!=Sq?z^vmqb1u+X4^qI+ zr|7DDG^5d1d?>HX;u5E<^!@@bbYSQX-)fvgLh~S$rtlIxox1*2d2IVWBtMV}Kw} z3?-4SlR_8UQ{l@7cn1}#S!$4C9AZ=l!(XwJ2@$j#r?6MDS_0ACS5A$08mGKp)$dul zPmKyWZO~IATQ+8nN4u_$7K z7ylua&tGtxSbYZye1*J)PcEKlsCiR!8gFozT*Pg&?Y{nz8_mh3o7DN8#NXtmd2U?m z9_+maO$WElX8JPoH(xP>lnCi|(}UUmIAs|24W$=319tZH(+y?96>it z*)G8UjI9|wk$d+yt}EZNXtw_x*g|%OhJ23pu78L3zc;yMDr){URJiF(PfI9)8@UkH zXr{gp1N1X&386p_mnu$RZRY;m6v0aOg0??RqU=4P>-kI^`-0#0d(0_&Ozm>}isGM z#%8USI%GklSE!_<{f2-PAYmZfD5y|Pmq!B;J&kgkUbu(SQ(E7}?}b~Hga1a;mGe;d- z9bPT|85fG-sgiA+!JaC4#Nv=AssA}!)_JJLD~{Cp+?IkD$G3tJXt-NIK|^m>an|@A zM7b75Wc=#jt`P>utYo_^@bgcKh~DJDa0;yqy{ypS09OUZ z^W1=P3Hl1{4U-vhS8sELYPVn7Gt4$*h9{TCuRr^k$Cp&kVtpNI)O{z)G`_1WQ8aKQ zyGyV)Yi1=zuP~04G|OU6@{X)=a{OF#uhNBbM8$$odgnQ z>Y#W%=MXWwCss^6o7UZJH)HZt7cEtle}* zh*%L){2SM$7s)-uM*W1NoEyM_xzugkIqBSwvCJUnR+u>uk2Yz0CVsY{CmZCmL;^*2 zcpYBzMBQpF%hotikZbzS$7B3%Pk@P*EEf^LxcQcLc;H|5pmWgAW5r*ZTwOe{s zf*HM*LfU<fl=mwp!VL7+o5@PR`soDrgp{HBj*KvS!`w7u-xFY5N8vig01DZSa|bZT9@ z<&41R6N^}%lKM2&Iqi9Md@$|p^@i2+0|J3K{kkXk>4vCVLNw*k7w^a)6gHjCUlm;Y zWoK}idw_13Xq%D1*VRik=31mrpZYyX8@cr~4mQ)Jk7gVp4nYZ3gnZahlS$vTP(e-{ zYA@j1f|byp167P3jEMKS!441Q&& z!s4X|TN)jNAiuIBg__KSoYd&CB12jRlcJ+ru|ih$=nz_!W!aMcJZV``p)K(TFG)(; zr3-0oVTVi}M^aKWaYLLS9AE4OTALJfI8u)tBewjl;yt}-TZ2{5BYQwgVOp4>4Zel{ zZV{lsB!hpmP{{7mAtRc{U|WeAO`Vfv0UBpomZI~hYew#!h1K|A{5wn*LzW5R31RP3 zr@w3@70WfXX?mO9Wy*o=O_-nyiO{XRrYG96cv7D6h_Ev40%>4>6eFw6#lgV>Y}KY$ z(0ZgKT3aSthO)Zp%&PIdbi4cB?X!!Nhxkxbs;n`S)-fz5aY3}OaHK05!Xhb2SLev=IfqC#6Av1h@#wXqsU?IrE+No=K$c&|RA+W=Q`qo_Vf zmvvW+S_V&|l%HoAerdBP!g5lB@}9{h0qkX0oxlY}6K8N(?>MYr_Af{@f)LCiR2wdb z%8#<2(P^|hfFa3lhzf|)jmws~=A309gcK~S!(>y4SJF&uD47CMY3BPtDMXZzBBLs4 zKaiTaRDTO?%^VUwrOFc=$}2^VKw$*I>J6`UMcxo&9?u-c(jqApWIuHu^~QefkX@d6 zAkOUaNzeMB-2y%Fhdtm8g}wC}K6w@^WM;VmrTIj(%4AR9!PlFx^isrMW`!L{gz$}R z!yZic6E#a=8eo851hP}uM9&3U+MxRhbxYwHu1kCN0vicmI0kKq6JQ#?$~KYubD{4V zWO;bN=NVK@n}5Uq3Dozp^P~N#!>y)hi=9~L=N|l)y)MxlUJN(S%jSyvo3cT+OY5b} z(2U+!I2;`iPY@X>0bzGAT$Wq{*@P}qxJp0$~GKxLMY-JeclSatO{Wf0o9<2ht%UUkCn3Zgd6EeY_D# zXSoUVLIa4X`AF3$t?6unG6jnWf>v~qe$4{j+M~JSFUuDv&B-)!4YlIuqw=+F5=$*@ z>y~5a6@ayAzyM31sW3SzRGP*Ku9~G_0mBLiq(YA7>j2o9T`2k8-O|1c0mdlsH!mE3 z_IeY=b*bzBS)BW~g|ko0l(I?RB`VE#DZ~7q%NQ|hM>{KBi@#Sf|CO)gH2>luxZZHnf9nV%t`^A8-z%N~Kh`uW?mKNE%(eV)eb>MOcA(F-~(b-bpMq2tC>Hovk^cU&i z_U%3PZ&1f=e?tv7+?}qStWmv4tX5g1NH;ugGyLR(|vx7!(t_)R)t zj4%{96~^si^KVc$p&}stQK6k!C_n)9_fmhB+;S2fUFv{wR^Lcwj~WnIi3jLcs-z0$ z%V;x}8b1HJ{)=Zi_L|wRqVOnQOz^x3KX_H4U{DbjgDU@Km(JkK7pbNCBg{+lXt@g2 zcC8Mn^BN@hoseKbxn;XQiW@;2pDr)CH^;Cy^_V++x8b!5um|=MNW9p0dD!?r$q<;< z&6LjHg0*2EsS0j*)1#4%Xvb?_E=uVwx=&i6Fq|Zt&s#JcGsDLHb2#xB`LxTdRB1*! zxFmS83;26x5j>Z z==^gv^6YJl5%LW=`ZweZ|2eo7tPQOH4eoy+l9kRsAOvHTW^!=B61xM$YBuP7wBBHz0 zli}+cv=F60Pf0g$2ONwi`9pp!yX>-ADAu&c)N*d4ZMH!{+$WDlyOP+} zfv~sH*@U6>)+f&w=#>7}OXjS(yDl|p?gsj&Wke^F)V8tOFQy#iW#SleTUCHvkH&j@ zi^jhBJt%}(CXs5eKT0}kQCsM>-~-k2_?S-2!C&=(-HZQ1wDbKrxp8UwnaDWhbJQ2_ zbRo(qnzEoar{59Y~NU#u%nxIwc@&1v}9 zpV$`HClSF1k8JME#psJTuZH4p3R%nU0cNy%Pa~UkwVgA_0&$oY`!H1b@4)``9LE_U z6hV%~o52q*a8ftA+#-mC4TYo-5R;^azYRTm6pq|f0bD%C8ZCOHzPB%?UusE$Fx z$aRF^gaO---dgd47FM#rTE<$ESfMkMgaKbUFb>IaDN~j9-((FlKNHi_igfMMYxq}9 z#ZS_`S(wY}o%om~ES z7J`G{KX(wMLUBWpq0?0eI$gf(TNL^0H4 zjhiqDLz*ielb%{PkgHhzV_6b%qryCXpop+6k!8_bn(5>{GLQH*bIrwb{a`QMI zY%m9^__o-_ld#5?l{Mp{I0Ssf>%q8y#XUVr*x6b})oQ zEb0#y$_wbDN`)Pvjm3LLGJ-lsgINtK;WjK$S|YsBO74-0jC8_B?K{wvPQ?V<_9Nap6RGlQn7?aIG5YrS!u$t8IL=-GT<`+AP25$wyOoske z5p{g^gd|Zo)RH#0A*k6-ff@RMK@dYYS)aS$%bPxN=QYTxR%-p8zJbYaNkp^S9gBSN zNyi9Er-4&V#p^{K28v$N#GaHUX=7o&L6mvqq-0wztDO7V5e9)FK@asI=W9*0?fxfK zeXSu$7bdLzIi{89V*}1;@d_u^Avi7Z1_gN^m0eK!Jk)$RRdV(EYgj|fp>)Cq#R+qI zuK=9!XK=5vTb}sb-I9O@aUK48BPy; z&hmq{pMLesjO5n#S_v}kF^0jwL_}REvce=VX1WQ5mIlSvC5TFn7Br@KDJ<`WS&<_9 zjyT z^{3L&%+v}FWnb4t@a)sje};+QC*Z$H)&*rbgtD$D(jzb|m>3`na?|A(M6JDnLcUq& zCcoxs!xSDX;jP^Uei>oN_Bj^5sAS|Dvl~SK6TR8<6QXvp-!n#H9$i~ZB;Z>+6VL!p z;HHv2DS19?QL)Tq?l>j z%|aOGc^M*<0-}*+t|a-B=(YMhBk&%`(d=5x?0oP*=^{sI3Ni_r^|TVWPWdOp(k20aA&CLbKnM z1wtz!u;usNCJIcGnlgi<2Z<{8ou86!GLHCxtcv!NNu!_O?eh9x2=;S?1Ti3)um;%j z@*_5{*px}~-(envR$ZxT5P_*2;qOrPZb!mhk>TaE{@B#O%~>VJB?Uu80h(Fw@%M?r z#XTV0(USfNvoCUJjLJr$eo-o& zT87W9X`txUPx8Uxyf{!2-2uaVqp02#Mz^R|aHgeCaR2ULmgr2II=8meXG36Q7_63e zhL!4_^Xl|T47OXlv-Pthx=kgXXw*s#cbMj;#p9YA zPG->-Saa7IE7&xb8da#N+-i52*ico60Pt>cLgKtmiVXrGrbiP>PNqn1g^MTgOFP7-R6zyiHgamg z!UdA7G>!X$WcV!`(v%OglkOZuFYILp!veQuD9+x#+Y}1H(;@Tie$H~$L07}TvLEKN zQN`EPV`AJL?Kbq3Us-Ci>yKTm!z7 z+SWzN)!;(b-x+PYGjL>U|H1hYRcqNVP#=cSMA<;ufF?0m?3c^dvJ1Nr-5T~TnVQ8d&K=sQiE!&OA)mURXJWK`o0ZFvGSUjy ze3OquJl`$=p7?^|f&KpD%t8-@(+Dm@4iwSzX>p#!5F*FHt7DhPQds9q=5htIuT#GhHvTp$Gf) zDb(G^kuMV%1BUrW=3!NY6!b&i{4y%(la>zW$C{$U>>~4&pUeuag_+Vm#@`F!zoZmt zT%Fsi-{;Kw|9{^9_=^5t=PfNM-Y)}}VL30Le-Z2)yRqP(Yb;I!EZvK(=H@Mm?2*<% zQY|`|eJFbUm-H+&eZ?O%xBc5vWs34*`DvKMhinM%l@*#6iWdKw!P0??6v|el3^jnEu319~1ogh5!G57ymnN{_m+& zsX@B_N1G?dG?p>R0~GiR5+M~Ne~lot^|t}BRFsH3QlD>=ml57!pAp$K5Qt_=`?5w; zc(}G!`MxUp;-5w$I#{Qwa48YZD}$wG=NfIRrjyNQld;JRgpK~^uC|*_kLlNMk7?fL zO`gv?p^o1;f=+xmQSY7<{cvuZ^fBNpJf}jeZ->SuJkDd5J&}0#d-|TbqA{UXEs=PS zhVXa~2lhOKG32Zty&=EA4mWgQ`4e|a4(}R+O%I>d-FQxfK(kZkVpuwNg_1t+^Mg}Z zE*Ea=;aOcpgljBZr$RJ7)O2*7_4&7FZ;OL-M&IR*?vnM~G)4K5Y51S_(eK}-5POJY zbjMm;M4qzIZ#?cS-M*vXA783?_-^-I?(d$lzU2M+_vNs@XrLb|(S72cdn{h$2XHxUBphqT+|u+2OH<6#a-k`tbz}w zs5Jyd8$IX-m=aC<13yY3G&V&UM>XJt1>@o%G~#%0l%#_}8Vx8^*dy;+=hl{{*x>Y9 zDbOSW0|Li{uo02+`w9b8E6I%jNYVI63+{#mb2v=>7wH?WY5f;)z5_R@*6i#fqz;_t zk-e8}l?a6QXCKFssy-Ta8Z>n#U29{#JeEWP#n%z(S*kHZ2^>kot*gX=Uw;#uNf28E zr=%)Z{r1)31%)YUixJ0}0h$LUi=kp9=wikhq>601V>akM}wf6cvX41}8jTTfhLc;i~@;1T@f&+@j%$feRV&f@T}?0pwsCPv%1a8|8tXrWIKULKWxt~Qz|7%&emWZq%4mYyr=JL`ZL8h z%KMsmL(T=XhdH6ly~_Go--NQGCuzQZ%QH1oTeTmXd5|5^21a#%wqe=6dC3^%+RfV3 z!)2MCdEQ<;ElsG7<3!f}2t^qYFyFw6!`?9cp%s-c%a^uxiGeOcIGgTLgn`oJ&~(m- z#K?@xzE*fO7Cq#ZQ0#%WR#-Mxox#!o`e4H%s5%?^&p@tfg07hp9FsaRkT{~hFGw;# z^^WKXLqUbma?`@&0*JVg;Faveei5e5!tR!hDPOc@j2xFf?~RH^kY<;!%29ypg>6H;K#a0m+LDk#>o>e>t63J#jZJ6&JhmSTsc>X(9Mx5-@pd7 z-o75poU7aa!F4Z$>&5Y2F-(^4{$D<Vz&& z8^|HGU#2#AHKD&@W3<$r(_g8lr$h;3uI7DvI>#b519KAB zT2{dUPBOEjRt&ZylzdaPRB3Q+YgdHdnxi#+9iEN&$`crylX{l+?=o1wrsOfLN>`d# z9&{j8n%t-Qq2mKYGNzU5`#&T)pC9)csg;Z!X&)xu^_!PaA;=L*p73eD#u#!B6{@k6>32l zIvyk#V-?K|edaw!J^SOoamf}AC;yOOG04fOY26=DckDG%Rwh8PQE8uP?q~%hvMvO!pV)vDnMIe5tvAIW)~PgyJ_c*E%p z+3e4=nVhU+z{S?tR1DsSy}mc2BC)p|hww*EBmP_Es6#rgZ^~cRxLN;Dc63hriG!6w z6P?-xBF1X$-}Hs3SWr z>jOhu^NEo!z_Y(r!Yy7%m&RMvZ(|`xW+FFYuL!b|^lfY>y9oRUZnL+tv{m1pCPSmu z4z)npGaK!ZATWn~apUQ6%Ka7e!CkLUUYb`24+<;eMbQ}}0{Vi(Ke4-K%FQn)3aOfl zLR}X~`dbs0T(69Y8)?Fh2s>#`LT!4Tbkn<$+s5R+!;{)3SNnD|qh6=7P*)z!$s>3^ zc%E-5G+Q-HB9XR?gEoWAIr-* zIKQku5KuF41&+(lI%@7fI+E3TRW*5`Qu)VL7d3U+!agA9HZI4hdZ2tXa`DoZ+EKND z!*6{lcKe2nl~H`-?}HAwOybl{v#u>EntXE`l2zIHd?AW~S{&`ga@Hl{#g!WDqpmEu zv#pRZ3PeadC<8Dg%_k*glj*Z`;S)pt3#W>BV+^l_O)z3fuLU>$7f#KaG}OUR41cu2 z@7AFRS}os~(fiAfngM7>FZr(lQFXtiD-zGXT!^edy_b}+VEApkW+Gk-gYn}#zu(!8nl~`Xt-NeVbfKh z`tVjAa>6SOrF__U1Pfmmtf!|acgP@>~iuF1YbQ)yJM(#?Qy zE42=0y;odAlBpWQ{GhY&0wl)1P%Sz9S*fo6mv0iBYoBzY2fWQ6-lEQb3we}l!NYdUqMhj9k(xE_f}!83hPtUT zKEgE$R`o4#PuhjOjuxHW8`}gex8h+F??tg;N|zCo+gx zdH&IuuPB>sG9;m^9qj8_zt;pg%R)T(&U0 z{}^xffUQtHX||o880%7B!Yf|FPwV^qZs>_!(@hNdbb2uf|7;4sQuUm;bHbZRe#jN| zl->;Da&Ayo?Fjqp5nZCs#cfpzxXmx&j6#NON8-{R(rGau(vGsIm&;shZc2Q{dit_% zvSWRL6U*~WvCrJs8trKh?+WR8fL$iVd!)j9T)S)CX2oOQCrfc%>=-&=iypah+b29B zdd_>HvuUmn@58)Yp3tZZF3uO5omCj^sID3qXx@06U7ZanE?NM$L!(~;SeG6?V}6>M zAhQeEQe~{g2tn1x^G~k_*9Viu80HB&s=J@EO-gT6DLPZ*bTqu%r?LPqq>sb3Oj(JE zNP1_b^7kh<+=`!3g5COqTu_{mJmqT*{{u7H*7DFXp8IueW7T*E`p#J6%N<$JHbAlN z_u69MX?%x)vk)?KiJFyMI1Pv6LCuDWSFM7^9}K#|AXH4NyigvG1x%5o9~EzreRX^L zamAsmjAkuV;Hkv}lT^3PcK4~i(E>7U<1~FV2(}ea=ZH@>3nyLtt{?@khsGP)wisi0 zMwlravx~AGW#f+0)d+sFfZXbzJ?I2LvB@p5hvp6FIOPN^Jh*1+4C=T;zMJFo<)+*b zc7?~Bu@bpwNt*Fb6|N6@%u0ox9 zm(uO>NfyGyTpWl+EF95epfEf_sQQ93Z{L;c*QSyrg;~En%3jeXE)Py^lD7&(pZ~xA z<%>Wpc7BXszdmLE&wrHvix&AmbLMnNPn5^U-ktX=l7=)GLP8u!v3d{$2*?nKQ9^Mb zgTq8S425+WXK^(44tp2ieAlMt?dIlXswNSS&}E%wECq{*rTnIrDzU1rMIBYmrezK5 z$M0=h6BkocZ{Uj@_?)%Z&*QFVkDcfDsdwCjksYsH?q3XImkhf=AO63&yytvBUr2Fn z+5a4*f4cq|;eL6R?ep6kBG&9*bQM}NWiB6^NHPG0(K9Y1K%y+=}ZE?&Taxo+L)I&%*q zz$*Lr9rolrpG|SU4SK;gntIM(;(up3@7Z#7R~}GveQo(NUzYovzLfvouzFm1iC)xQ zxy#Y=4xs;@zmoxWw`%pdctQLA3Zb`sIKl`U!z8EmDQj3I+xU;eoRAafdC4R)@-=Qa36uayb2DU+v+1w`S&X`Q0 z)VJ4ClZK5j*W%};Ngpr>rqe(ePZ>y8n%8k^$#_3an%~;7HU>fD4B<;lgYxJ z(aruYo7hVbWLOYF`PdoiTxApGwyl#%!KX5-#F=*-!r5O_&+r5l@ga8@b{f@6wz|OO zW3JwSHCI7C<^4BL02N^>9DP_}14NWxrJ^q?lL%BCfv9HoE0qE09pp$YUxiV1rYP+1 zM)LeLX-~0E^7N>ZcpTTCpb?Y`laF#GWga}4;PUf33bv&A{STy(GP%0&jO2Q%w#rSJDaXeHVV$=x1)AB~28El`u{YTBcgkGZTgZnV z*KG$L0$OJtIvQ_$vFNI=*Y!LjR~}+amX8|dMGtgY8bMG+z=HWH?A+qWqpqZ}pNS&O zpmUH^7-I1X>_r7*lYdyONj;u!BP!?ZCTcZ?E7&B42ipIgk^j1ULmy505~Ss6s2qC|VvlNuRPcOD4}_ zhLN55Z5rLd7A9?-2L0dWXb%8}b?No^5sgOt#Sw|hpQq+$FYzY2F^aHV*Ijo;EQF>; z%MQujXTrPl^jV{{pK9V=0Afs!vk{{4qMSy>`*}IZ6%?nwVF8`V^1skSiqjT-743^h zZ7>=FyBK-@B9q7Xs3bLXxX+7%X5t<8_T%EAQyN41>{NZJ6Y6pkPkEdb4RqAfkp9&( zkq$fLmnW*#u4~+v&m^Cy+Yjljr#Zzay?(6K7z$XI&wJD)XOjMq`NoQx4zbZW zFP{P$^xXH4e~pigf1QtomA_T!H8p-wjsDx$M4mEQDK=;< zZ305h(HxfW9I_Z6{98zhteY<`k@Uhto0R;*Bgq5BUG)$ARRu~T<0zZEpoXAYE90o> zsC42mNX3#l!3?Q zL$-)EI^(ZiSpJ&-)R5FzZ><@PYUzH}AKD$X(*Dm>S+y!P? zl&doDlcIDLjhnUmdDwuCX*zIHd$D!deNF{qBo`8?oe&fjt7wugvzrj1@eU3n&e(xu zXAT?%))3lPZw?2nP6#bGofy&?B90By7o%d7bOTyQ6(M;Y!||q6vA@+rG%@)WMJIC& zF%;|$^V5gyBj?29M1&`y^97|m`83N3Vu@!4tV@VREv!oIX}hGo#VB%$MIanC1csK1 zR@!8Vnr;5Uo8v{$`{h+y0_}jROwEzt@j|c#-c8*iK~5;T($277rJ2FNN$7utjtbpu zC>S9-l1!2kt+%kQzHcT^o0;;>*pEAbp(P{D8Uy+2NraeBuLHH zPt+%n=N!N59P%%a!xB^YLfrEDiuNN<6O7>}@|$zt8X{;<#%wx=CT@REy^q^CG>mSm zbR=YSY4eD4%57&mi2`AfUbo<3P#-8s*oC%y>*CQE7vt5Ao zs;4;E-%)Tz5@pc7wBHy?F+LSk>e48NeAO1eIa5+ZO`gaE6Q0Dmz41|_0_jfL72cV7 zk!ZV3Y5!C^|0T=55;0|*u#=zXnHa-O#`7zLLICgLArun6@0o%b?=c|&GNunc5#k9vcvs04 zIXkc<5vi@f28^pO@MM?0(H@@5Q?wMG=YVyO^aY#Lw*Wu&+#s9sI0BTc6S5|KU%0*3 z^0u8R^z}dtc{{*G#ua;8VcjL?D2;-l@cPKHUl^D=DNDg~c(6{*%m6l86^PrEgDiT; z9w3SPP7`=V%VbZ)MtQ|)3PUD4VnUkhF=MlDm055(wu!eo2jSmZGrT#OR_9(L%fj&=TH<`9Hb&z!=T^DcY z6|PnUXf-QlxO4CHGkF%2O>URTifQ%p!WN@OFuCMPZ+obOVv@F6Y;8$$AFZzlga5F}g zHCM_m*ln%ycA9W6*lab-W73!pre{Hr4~PYmx%uvPvZx!3$D66 ztGBH;3s!BGj3lra853l#=xHPhvM|Js$5vU5yO9MLLCY5kOV0`#alK07CY?#ak{MhI zQKhX4p<|IsxO0axvRjyeCj3C1Ki;tsSb+}d?1p7uo8XR`BM&W5Oz;#dl^-^)-PkBr znY%6aG{~JVSVimBie6RUr)d^q)G>}{0#P^ElvflTR~@uCe_z410n;fZVEHEw_Wg5c zmqzwlw=LoOPdMxdj%$7wF0~oB3rqN~4V7fv3H`n>&qEGu%KX?Az&zu9<|a4(Xb9U6X4xaWY56jRs*KoHi zYCevdNrZ0RV3P| zbHS=fCjO405jER%2XR^KSsJy0Ilgc;4K?ogcAx^1;=AXid=lcbpVFb;BvC)FgnbBn zzwlcB&M(+-q;|)j$w=@|iuusT!NwiE1D)RFk#oLzkkZl~p#W6kyT_$`)Fk9K%s{=8 z!oTeEzx988w(JQ=eE;$!Pwfsr3z2%W!2e7TenL_A=JNg8pnC%+y>fvZlhY+Wv+M-; z$j|eG>?qByl%9Tz0_eeK`C($j-$HiZ`v9!c{DSiQffMz(QB-ypO6msqbc;_Jk> zrT*T9h4^QABeC&cj4ysal|NpH07eDSDSnB9-~48b|Ct!mCxrz6x>Ssle83|E)(F@v z|8@R%Ug0O>hp+&@=zPrGyqx0vH;Q+0E`CA2E#cepueY25!y1vP;d6}-kB-gN)q2VAEE;MvLZfcb2+$wzBOO63VqO@^6UW zTz`GqQl=fA`jDIFgrK7UVB@>{q;gc}dmwz2XW2_n`K19VptIkQUo>amKt3w2ixj*T z0C&fz`GORRqgP%FWj6rj{ps+p7@gq1g<|x5I|1(naqq-L?}qs`{7*_go06aQntyyc zFR`L(#Mga#E1=%UBz6vqdZZ-2u{x`BZ58KsgaFTAv){)1mRg5Ddqn<)^P?#l(-gZK-WeLxYzMob)TNe(4=JHUlmHvt>AvJd4sG048(vG3qY-Dt z<<4+GEEs_lzl-+a>tXQ06W@ZOzm9f3#@%M)fDRl|yx=F~f7}q;CLd1e-20S{zRqe2 zY*!Nbgp7Vykcq)gq-IVgf%gDUeZWn|0%&#I5reT5eisDgd4tQ-S4Nl87Q-6``FE?# zx454UiIaBuB|*KZf_9nt)|$cOvYS8p&TFYKcu_CRBmx>d0aL>K0jHWkr&EGpxy`BG z9IDi(rc!TfI_^hSk*pjaUJ9d9TUKtRYP%ZE@BccmUfLq^9?F- zd{IPQTmXV544piDCT+n5Pb544GW{9#OpMNt3`q@SMjT@GTCIf*}o3ZRh~?KihUW?%y8 zr*I~cG=I(+y7(Ki*MIi^+p^ee<@q#{;72W?JVlp$3(|R$qdF@wZ1DHa3;#mP|F-(| z38TSYz_NlR-4lC;F7YG4p%y5GYR9pUU9|P#Hj>RwMB#6Z>Kkx2aB@<(_);Fu_m$-;g}4%f z`hT>a4{;PD&RT?C8fAd8fg7b#uGtc$(P^sn@1%Vt-d7g3-V(TV?)=84^}41x^^3H| zVQ!hHR}0&m5VE+TF}=Xz*0;?`P1Y<{owUn`1*4oA1*RGWh8Y+m9VzGKy|?&OITCnu zFb3P+g|XoxBg+Cq%LwM<3iv)OybDXxXD)mfY~{f9JgUb2A?>UdEtzEQF@vB(K5d7Z z0U0=#oRX-=YBs@Ywq*tEi?S$KKWi)J7C+7VxqVa3G8t|S(^>5lrgLl*g&U~Iw=^SD z?5jhmFn4y5E^>l%(*tMD`Q|p#~NYiGmR@vZcP*HXZ(hGr7iHk*4V*GAVe@g5B^?^OHU>8&-8yU}f}v}0Qp zhuitP-HfpvF_(k(rV^ViNYB>4H&65g9i9yp8CR^6{%xt&Xu43Hw4=aL9Jg16x6uJ) zAVRuP8CJ3)%+C}=F^iZ{6u3|@ifGm_2enB>&d5=Ua=?Vm*|W*Lum*X*=Ip^@qUkuf zrU6mWKOWH^;i4lA=W~0W0d-;{ZVrx_HHX{9yWWJc??Ckp==3yU@2LA<9>1PNTTODfA{Gnt5sH$jc zqo%Ie!X0i!s&PID+uv)M&hc->w6XCp9w$bp#cm6VgtZISbfD9(=trmz%{mm%7QjOY z&L7JtXG;VZo@7KAS3|H(f1F13cXk9U^ zU!lDjotF*3vSy83UQV>bxs~9ouO7jcJWsG5^ilowT{4R1AI!dAV(m>UIYVv!hmEZz zkr#ryU9c(F#o4?`UV>T8_Menfl9DE|CAzb7(o+BEboIRk#==_B0$ynYwHCBfmiCe| zYm#@V4bEraRZh5u+0P?~hILj_kCuKqQW>QBhN%iYwJ3>CJ9==T5z~9VOt{(xk9BsE z=_N15ALb=5#Q*u;o11eu#ZYyGP}qJQ;D>kuCy;*56hbKFLJW4s1k!OGvIW!}-}iuK z?zq)ZY9)H=&7s??->RqJ*7Zb@sU_!qjq4AMALQm{h#uGcA?nV!(Jq|)#8o7+Yr&U;i>xaG8`}nwypw%p1LyzqrLj$#PA*QG9l?r?DxJUSMdZOn% z?cR5LBobUh!Nvpfx4y38spF%)eYD0he6i+{X-ToR`UenBgvJ~Rz1ZK!YH1F6x2##8 z3fXp@on)X5B_6`=U2_y9!C|+po8AXi6Eju!TZeqnk8t zxpq6_>6Bdc39ajRN_QaaEYqPLt%nTST@f23J}J!QYtuDb{*6d=juN+62^YBHvafq$ zv@d$Hx0mnG=`8fp=&ag8v6!`qqklDKfMK@d+!n_6!JP?_x;1Hsju5~|bVA)X;1DZD z4$ytjVuE1Z=i{uq-7-Cu?Iktn`A|mjCm+;!z0(OW9i(#8`U^%MKI97RjW#|+!E(6Q zL}y?J!5>mUKtoQNW>dKJ>DHl1sjz-_uPUkklNCGj{lB?0{D&Wv#%&}Q{u46EN%-p* z(f@%T^?wU=|7ZM=>ZbQYks9vFkUo|%!6QTlQb)mo(MTl$LDcdUB*Y4;H#cCZ_8RL9 z1aAmb?eU{z{2cC42>Rjii}6fR2}vwn<6EKjC}u<%T- z=>B`ahV6MIigkP7hV41I!0$90z;AO4#K(W!WBeEk;Xkmq$=*emb7%<3=&2o5!pdI0 zh1ubonEJQ*k(6=5+POPqaCx^Y()~3R0s7JbPVaWh#NX3D{@n-j-s-j#u#&2e&t7w% z*?HZEjrXB6kb$+0WJlkSuj{`K63V&AGUuX*TTf zps?^Dkn^##gUG@)Q<2H-Ld3jkwxV|tL6&Yl1va~As4`ca0U1bC_zZ2oCSvPd<$0)y z6v<5{d?|29*RU3DG#M-*3BNQ+#dlU{a;QMlveWwd$s$-|5qPdzRbrHJ^Q&@(_}9I5 zTt@%M1b-o%0#Z=dKlx^VdMPC_-N?#dkA_TT^SdhcM~%c>t$hy)2ul!FYpxIu1Ct0x z$Hx%@>+{PI4x5}+FC9g*PdtS@2SYWuCtDXXPe3j?=`nIMA38fTAJlZTSWkl1V@mDj zP@>BiiGxv_8~L0jg#XwsHPPa(@$KDnao9niY3mP{Wd2? z%&L-hil*ASDk_BwtJ;s5R( z!bAS`ms8Sl=*&REj2nwyA|ua8 z-%|^(A^r}DX#1Vkt-L9&QFm%o?Jn4y`==oRYF%+am8H?5(zI62zbbXJOJY(L7GBYC z3ek+_m%5Baq)}u8ObRl2#t-R~NaBnyO_C!CSwzs8Q-MidT^1!K;YhgCHMKmGqUm_e zB#@SmdbMkwMd@u)w6iUqUO`KBHEgV5D^$$fV{QX;h?QijTw9FJVO#3e-@&N`@p_tX z441XUN^LFMq>fpVlS)xH%w}u{TWTm|5-&pF+(G5W6K%zwNcF-M8{6pz=bm}pVXfG6 zO{1k&)5tk}Kz}da;eVtoU6v#=N~n(*+|-UUpF;erOmKuT2%SIpO@)Y?Q72M1!1wHA zC8AYE>{5OH!r*+)fo^Eg?W#8N`ht;FFkKQ7?P6X6MOcpGYh<%*&)8kMm=F~dZFy&{ ztqhIM&dNnMB9d-*A&878vv}T5?b$v%grdC|R@PpM?v1NE{5MfaryjNBI7P%|Rh-0e zj-dD~KMu>vzla!&>M%nReWpAS70zBjsfj5!;_PR5mM+YU31b8cN>nDy#9#&{NOnZU zj8Yp6Eb2?fOs`K`Pk(ZeFT!$>uYyw;5ilgJJ&DBUmt9$DOa`RN(n~J6LNFyx&|}W* z9C_<(NQ1a)WW_ut8K11I6PSokH0mHEn)oJjZ^?niUZylza&Y!1$47Zzrg@{ZJREyY zo+h5tn0?*z)i&b;K()X?Jps2Lz@|`YsL&QYrhMC+T}_2h>Z9T2HJQeC(`-z3U)C^s zSHC!lDzH7rrlLsyFd=047G+n?!e1fx_~luq-q*LTo0z*QQE$2?hEa5rpI)+SW=U~V zBx#ipr)Ha-k@!uMDN8D>%*SGqG+MUC(7KkGV}m85cT7RYhmuteLmQWrqtrJiqcdCs;^NG(Z@EBB#qe6opoG&fPU$}pZFQqdwGw1I(}^e9_WU+uX1Da8z3 zvJxH{JoR|!b_O{7ioYc>O!G*W(fCC=v5+m2Z47_bkRoi-!xqp$}Yz=z?=jAh?I zU#zuQ!HCVv@%zIvU^gIgofXiCx8w-U0`4LNVk@G8wbW0aXv}M~Xs`+eyHFo3KXFfZBy9s&~oXOSV$*P>&pQ0pC zQc-0<+V)puMMHHiThw|Rzs3_WC?uYVIxP;dG3i#D{!JXVf_q5Sg{`c@#CGFZ5V>O) zJA`ev8++TS4-V*NwBs-Nk#ld%gZP82IbkejM#HQ$+M7fJKGu{(P9blUNm1rD`I%P{ zAV*<-A+9F(x$Lxt;H`#h_J;{W!i!2e4d5$YA^l8bdeatm<~9GS2L4RrAQ$sVF8oA* z0rko%tf4OIk&uvkjP&o872%f!v~bUc=t;imN3Nc~S--v6FETzVOK9tgdhthP=e~D= zEQI--NJu34`LENLeHJakQ-pH9k3gy0GasivOt|vN%!*dp90FA5g2do@J~+w zQ&Q}?^ZL0gIVPD|<5|;_<{ZtK=J=?oVK@g0Y<`t*Cu2!h+_{g=qY}xhTRedHrPRMu zCB7v&-i2!HEI~kEyPSwWeKf|NpywC5cPOryphc&m zDobd@#n~l%l2cA8E!yhnX%;w3`y_u|8L3AspdQt7okYw;rK=H@mvqO?m>MOl@_3h> z+zyL$DEe-RVD0(a7C5t)TZaMmxV?bR4eDdWw(MsszyKdf8 z>e}vq@W+ryu(LAqvC`NciJ~6wPNmlNRU4qs)h_rqs}W}hW(DUBhT7m$UgR}#ub`GB z;%J1WvZyVD1j7<1SEmRrdU>tbVqqS&TAL9z_V}_W$eiiFiubwarEo(IxXLYEWva#y ztLq>uO6g3nbc9xvmXxx$+KrqqsI*n#DH}GPZ@omEFBFYi#3(v=&wrfneDUM4(0?R- zrmAhLawe?p)ez2$n|`3cOUl^KaIK}Hmof*TdLbj%l?hp2+kRMF(jMTOj->!NvqU`! zD?*Xu(Z@xaeFo{>)#)y^O~&XUmPavGoUCESdVkJj8?5Bf647^aN>+24jezIBdyCVM zG`S*8oJIU4U&8D@;IDdf64l|L)_ex2i0FuW!_c+V34-D#qTo93J`zdZh&>6?bplUoU_E zZ#wt?AbBbY6HIHQAA`LgYvLa;|I5JK#n{-=%8ma2@upV&ALoky0{Nsg4?X3hq~4h^ zlD32~nbC+qVIm>dAP^+s#N-rGUxdJ15J6&yEF+tEzcJ}lZs2|BrhL^Z|8>=afc#}K zO_U8T9w5nz!R5E&rsXXg7i*W6EsL%7D;xX{ra{-_>7l(H+<*)BhQvJT`PrKDA1O--0f5Q41e8Qfr2{(`PvC^nbj$H0Z`Vjt39b2 ze=ok&5JKRmYe$q@#Az=O7MUnx8qmMR#^=2-ygu#mLC7PwSYNUJ|2sLQKf&|Rly zA2sS`!LACQnl-?^$$#bcrpdD{n%={U0l4O50@kxFj$Ze0LI&#kK>(cYet+u21Dbui zd^e@j6`OxYC)8y(Wo*E{J)Zm{B6i+f{u z_5NxTOAqgQCqU14I26+MnTy_YJtPFhm%m#8@fsl*C+`XAU*c^7E_hvUCNG51LWVN8 zj`XRmVI`DHElq1|nZM;{Cq{s_Z`#1fzKuSQXtClL-0&jO>3pfiQ*CH2I&T&xsgQ1s91B1rSZGS6`D%Tz?meVw0h}$$C%J;=JKUAbz>UZ znsnee2lNPHX$RauL0?n=3~0~BF7x5qqraX;r!&mOlsbGXVw62dEm`i!ifBM06r6lk zVjtCjMZ30jcqEBXg#MykaJx3s-}h_kckEj)O=&%k%&gV zxxKnZaVuJotCGJxgTRU<$_uEiz{=m z?^d)YtczN_Dg+y)0^y()%n(X^(Vc57W)%Q+e@;-gK3Kg~Is zTXibCsXC8F(>ST*8ATEJc51L>rce{pKiei#JtLnV!U%r|JWj)rGku|hq5E*eLA_be zs{*TO3a^k(>)yd4=8VlzJ*9Qx1abbn!&>5`H=Ud%1`gueEFWx0Y>Qo}>0daZ^+N`c zBb?yFl0A&M-FmCGVwVv?;7*S@w^Ne=gE>T=p+Q6QgL4}g+T)*@z6x1XUfgzQ^iWFK z(8NYKbqDL+By0L~Mu!yza}$UerQdp##9z#eYBgh)jC?EDhBHj&7kAo8?j~4;>ht_RdW{zObv~SOb zdngh)W=WU#Y!f9T_>J3A%$1|{QsP9(mBfX`CLE_as1e{mhpMf@4N;vc%Z&)+*x@KV z%a}#OlU!T~(DDST{uyH-2cNWo(|d8PwbLNzu-%j7x2&~=n&hP{^-qvWdaxi~EYrc& zg@_QF7Rb<4_1m;64vpy5K&=eGvY;AYJE^=Nd1C5!0uYpjY3co3}|P@-N3yqh0kAN>*!3b=LB5EJ8E+Wa_6DA8n>QF{2T|> z698ZMG%rHn@{tLJKY;&AM>*4}U|Mzy=^x=sp{G147KB!+K>Z6fqE-zH@tunf6SIs} zY6y!bgsg&b1@!DhKjV@V2{R!ryulu>O6m+=+mo3JZ^)1euLQai#8jEbPlzh}aDuX% zXC?*R4kB-yPo$AVaE~D8PNhk7u<(?9TKxkMJNpw*NtG>%mBinRZXVxaNvx&J-Y|A^ zV`p~$^+)<)1=P?l+jWb^M;jhLcus}@39#Y>PC>C(i&kl=ct^@puv;5We*mxYLgy(L z6tb(2>N9wK+$4P9<&CP_#|$7yL}Yt;M|R)bL0>I;J@87`g$G!Ar%wWZaa`$qJT5km zAj}Cm;y<|5#nBN8d5bV(@3U~8F=r^dqI*xL@;7^XHXBO~{oV6I)jhE5o_4YAeTS&R z9t}&LR=HrS&JpRc)ZAdRQPYoYc5JRuYp%9#%lQlb{cB3RJ!hAAj>Dw}-fYVN=stwV zKhW9zD{k=J<=LFLiuO!Z;WmT_MQ86*JRN9|l>uRCOqIu?J7dZ$_}ATD#tT}%^nKEO z{<8@39>F_8RN(Wh2r)W^*WhW)Q)<_nVi%h_|L+r@waT5?35%du`~qL$_bA-?qGEl` zBRa5#Mm9Y|V#(t*v-M$~lBhcA+jr;-eF9JeY0LQ8I)iEEDC-(n6vr5&tOUfTl#^AV4e5Z zx1@r&?LuR2cjLw?Wq8Xcu)fR(wKVKm6=MHIlsT6OEk6UpA1TGR9KE!6q?EKcptGV| z7dt^js`D!Ui}q$qgO99q88G923h>&_i?0{mkXmFMYP?M z$p_Jg?-I}B?Rry{M0l~J*zSCvKZA0O)vzK+#NXa#YYWwLFoL)z=gP~Wxy}7X;=Odc zJxPt_iUQ&*ynsb8ymsK!Sv!>4J&Z$=z6A!5wk$D1ddSy|>>?LVJ5=onf|P2_Q+H65 ze$`TcYdhAa(qKL<;FWp$ey7@%Mz7!I_Z|Jg4)XE4ys+bOiEW;DR7Q*nsZ0VY<>m&I zZ7D)MpjP>ekf7#1p8Fy=ox;PSRImaI5Ib8Cx*#aWHcV62r2p`qn(vI|Zy_mgfQlOK zC|;J?CW&s<&7Z@AHXr3BtCizPulsCIi``TIT)mGvP*T`2KMpmv^j0Cg2@2?%mF&QWT=q@KdJ&+fpvK)6#~Z=FG>>7W8c;NAv=pIFqrhl9SHTbV_CLUOwzVlx3l z{@tsxK3bA;*g%k8b&+2p`95Po{~>A2;``RLE}%1iatP?|=lTSUZj(&dw$1Jsj(v9d zKULhaLVA_u(l;&ikQbF~MF(~(i+)q*e>XvY67Ue5-UNVeok^v2OV6fopYoH`?<5?> zXq|%7w)y;-RTLr5t3d#uI=}HtotYE=6tT0!QzNMdf<6#MMX6 zL{X_ADO%ese*G*zkr{q~t@vpLh*we+9(56*Q6Opd@7O6hV%JX4mxQb2EI-_iV@Zv{ z8>D~tx&VK|DRyZ0+)oGkQ_25H^VS;DD=N39Zeb>2exX@YP?xwsR~jItb(-Tx?El5U zW0~HOX_T7VU-%a*rjOI#Ge5u+6-A#qanAzUO=R31)cW6R20hZD7zm}c3CUrTf9JC7 zHX*4GTs+df2BsT&oJ&V6evqO62WPsP_JhuZ8~@)~Ifq#>${XOs=PWume*LkZ@Fi{# za#Db|z)j17E^QG%=#13qC)1mkuulW@C$yc$Y>xj;$HIG>cYSWnzu6n|x1X7K%TMPv z0OiwM;N74+d|h(pQb9%tskkx^ZiMv^FQ7~!wfPKEp+#D*L0J&*@#)v$UVywWe4i^1 z#FFc1zlz~gI{1N-R^w5MuzPSQ0LG&*CtlPYLnryCq?sqDm=~gp`y%`hcLhLwsO>9s z-Ii`&&qXN4{5&cocuNyMbZZ{>siA@u^D0sOYnkWGm4DZ!;hXFn4&QJ`U#5xgF4_*? z?Z#C;LbKhVwo<3qpk4)8UtW}->Mvn|-3p@Lzvp~T1;3SC#b$GYa@rQynLcR*_%{T; zP4mB@=f0PMzDm&ETtKcmZvR1gCFI)H&z-my0&e>FTRS!eui2noPFA<3DE;R%4N505 zPxi0*`{@<0zY^?jcwdT0=4Il=Po#g@$~H+Aey2^^7k-0om$+EjR7>2D{yQPnug3NI zq1#z%yd}lHvNnBEe`K63BmMgtwI#@zZh2q)<;EF>mUFMfcQnv5U>hjclk~3EvjceYON>dG@J542}v6QH? zq~-A-tl>kC@vSt@qucM9M*Vqrgv}mX_04AOlseFE1abUe z_Z7MORT-ce;Gc;{F@4r#mr_WR5_|Mb7y;`4F6aMXNRu4%`;d6HVU8tZ-5%$Jft?-@FGSOc!Fd6JKiPS&wDx?cP2cXxMa z+^ujctgw%FW^Ua3O~gcH{>aLR`mrOUa-XyIT2C7i+SB6Ddo*0@%789$8(i_GG{q*B zPJ4OGCrTp56V5)N+a6&UMPMhiboQondZ(xZqqD=8JZ_Knq=|LqhG&D?WlI^*jZh8r4qPh5K>fmWoGG)dmG?V0+>R&0dFJq9kBQ7|;l$E4^iMe4{TIMq5ieMK6#znhpd|1%xtOKvM| zcaZNd5A?>BOI`Y1T>xp-+{vb`_G1seDs_pXI-z68nZ$$d{>T+(rf7@Xd+BG)f|X>F zTAP?9=307;>{aoa)yxG2X`?lM`WAF?4q_S52Dg)S&@6s!jgzV}8mJ)VrOWI@xF$3< z-0soSFMn^wFAD9@W~jDJt+8=R4OQID(uxnekvR8{sdC7?1vBd3!sASrQ<=r}6k}M$ zqg*k*)jH3Y^UMC4E}v51U10+rlt1DHqR!*armHTz+%C3l4BJaslWem=rktMz38wuP zxC~N|62OD(7Z1$`(r;g zwD&+rx%#0Bl^VW+**7!8=UZJffs4uq)fKO21`~{uL^}v9-3j-;C=4K>+%j3*QqXwW zGkX(_-Po9iG74E;Ifg5a5C-8;!+C{L_`Me!tPrNpd+rJ}u*!2tNXx~Pku>ZU@{qbuRgg*?PikM{UG;U65o_jpKR6Yl+* zF=2JOFlVkC+)F_MDp`u{uDKHXhnVdM){`a(7BjpvKs^l^2-0p%|Vg@fatfFmwGy7Oj^Kij@mGH$jw}6$llmaK! zw5UCOPdtUl44O-4PfafrLj-9C%HZCfB%EOi!h!9N^=7X5RWj6n zVyLN0Tx=<7jV$#=*&Gcl!oCNnZ;r}~6fWe^RelA3)BoL@FP*Z+xKKAG7FE_f`yhX>)*D8BU2+hq|jI~(+Jk=`FH3ueew)9*$ zDYO$;@aInXII+ znl)7Djwyp(l>fqhoCuLx%SYKZQ(dHiqOgf!bwPi%QT2RacS)F&)iFNvSx-xEPCUb> z4^?#{v}5o<((j*>h0p1D&-tmxEYqZQzhI#yBxE2bi-$`f7EfDq>GULu@{?9;nQDD) zw@;NV_XsAuzT<5A1e12>%1rIbLPvHK%iCzW_7=B9kmD4wbbhNW<>s>wpJ=sqt?O>`!7oIN~o>=zKk#W-@N4H5;yExKGV{O>}C{ z^=)L+#y*CDEG3PK5sgHvr&`Dv>+ZOhQlr<|o#ne!|Jb=!)=Xr4F>b%Yh84|_iY>8e zL?YJ)(|EH~LATcLKpTxPW-dQb?O&3qbZn`MjX;d;y%&NC=bS8Qg@v)h1rSU!(piQ? zHQNf+23@nIkQVWZ>D3{Sf=~3ENiua%uOskIABtQ~$;+;A8>MMZ06CK3cjP11ywjEV zS&IP=-^Que1f?Hu7;)^rd_wZ6Lpf@K?`nmvC3j4SZ!%DcNDP z2)m7j@|Bni+XS}qotBSy&xLgXdP%?1>E?)t-6h8es^p1`yhP_}tMWfX$9gD^uFvL( z%2r<$1*M5#K}YS71fXvr+j=5lc<*7bz(0ka607(n^<+ur#cASMO*ThKI!DK)6#YUF z{?=R_Y7+}55TCzh)42JJyc9S}z+(tTBT9@w$wpopR3(X=qPTuiphY>E&$*wql{f@9 zpV2iiM5dk%;mh*@7;+qcvu+k27k4u(P^_=>wF~%&iXXX4yUlm`y(lqnBvuMVc`5&S z^RacXhwGItZb-zDvTq5uK@>E-h|F!FGu-f~4hocEen>(+Gn(AG52s|BenXSYa=d$_ zYt~}Y8##18nYh*~s$W=;om(xkkbVCjAkF`X6)2NU^!r%fzWtH^_KooWAy)h+iTA%8 z&)x>;%gcSU?dc}$iIQVcze$IVD3GDQqX_E4F#ccW7?Q(PxG zJMHE(zA}XV*Ly+Vn8LD+`)oZ@zbw!FfB2q7zue5f58NMjQ(fMe1^h#ZuJ)Lp&Yo3& zOx#$%&8)b-g?`8IVC-#^AALnAYsmFc9{qy9TkG@Y9fW^3wyA&T=C}AA^nOS}K=kkS z&-a+ehgMggp+7J!hk^vX#(gHdLyUyWx1EqO!`HV_*XPeaeq>xk4RRCy%3EWjUeI&pm%m`W|%=r4M*+`YwHw`nIpm{jvT> zZR3iC`(xw}`x|}lb9QX+$%(+tU?Vrbc^~W>S?_aV>@40~fd4TTw-if$B67_rgk-lutJCGu_NIOfn z^nM>m0$tNc*Vs%%pOZ+R2Vw3ndwc{t9K;dsA=q>2BwHpj=AtAex99uJY6C6{W+Z+; zi)RcW1MY)HCWNL~^Wu`jG(^K=_K|2`1}Bg!Ve8M3EBBhbV(rhmbReuH_NysY%=dXG+d&aD~SAHAqu5 z0~J_pL0;gtn#@)t(ONjt8kM1t?Aqm5W5=9Zsf^cC#LId zQ(O&w+KM^2n9^i4B4j2(S0=3O;kbZC=5r&(V36gavr|y{VP5hCeCr$;Ly}uCZV9zX zo3p5}j!E>wM6@L>W4KLB(-2uiPfCppO$tD}$gYw5r;LaWbbdmXU6e`H)#{(+!}!(^u}Hquob z2@w=%oA&ATKGZcCh!t}2B(JPo&Z4#Qjz%Q(IXVU$Q0TI9k}$Zf%$O7lw@!Uk-_#{e zsDq0&YIvz=E~g{n1VSHD0=;G{4ITa@Vbo7gZnY9Q?=^|HDV}wZO%kklHx`T%EL%An z%5~mhyva5!beFH@Z4ILxUMtE4(-!+mp%q{M6%Qjz678lLC2CA=hd5U3NjXh|^vYDi zQAKSBlSB1HFOp13#F9jxj+jgsv+k}Vzq7gt^eIVJ!7%YUL^mNJrytW1LqFtaAf+8^ zNmg81nvmdLjE`RM9!sn9*Yd7E? ziAc7dB^7t?k4j4>b`BiG+IhMKz+5Qqt!<>AMUfk&YEY{_c7Vw}dZ8DsWhP>+ zWllv*Hmq3t$_0SyWgA%&qed-0%l@paR$-K7Z(vJ^E!6tfJL_I+s;Q%+ z=1Vz2pGsTYb2X}7=1G#$jL@sp)uifTmdhSfPy83bORq?!*y~nI=#g%^qYHF6DBS{muPtmOg9O)gJ8!}U<58Tfth_Su>H%R zQll?A2fA<=Eh9JcKI~*DqI%1XWvO^^7NZWe=&OaqA#aE%U+JFMmbD13Yg}x&SFN}p zrfVFpK1z=6?!Q3wO0j~ZC?$s5Sj#fzvMU5}+NEgB@OFIr#~k$G<;MPw!N>d|Q_@`~()ufU7T z5_9k6(w|#;(<^8jmE}HcYmXJZY|3poCp?;4lKiF&_OMb&fz)lb$N zVFfp?2r^a`jZfb_xa)>%hzj?Ork51bq&;jHMf;|$aO|Z5FE>0<|DIpN6;0XeO1HSR zZ7mU`EU-I3zEjra@@!h9O06%ULP5LJJoit67ZZaAA`uLSV9bGVuBlsA2mOc^W)Oi= zl&*Vk%cfVx@&KYADsTRs?<)v4;i%fC2QnrPfOI$eam}fJl9|;f#vP zaNxOMTXT61gwYS~w5%G}hf2S3eWo0+7M%aXb|CX6rD^M; zB@gDBOyd2?t}$IBuwzNiEox#27T>fW;)pxbxB+cV$FFqVgsNXpOS-}>wMh5GW_6;f8%C6Rjbv^INB~Dw!$-XD-_g~Fy^8@q? zyDwB_2~TSrzmiOJ<7}tkoi{PBcT21`Sn5yq^9}xpXdKvk_`dAoA~DxGFZ8f~j29xHSqZMgf?B9IV?ZQH!pw>0Uy8;+WTmvxWT^DZi5B0-^F5MY|H=%7of^c$C3y^uH7?sNJ7{Mg z#Y9}^#&$gj|Kbz;DXGYs@M8_hyhU~A6FmG$o}1!u#3!?q3y%uI7Jm{v7b+%&{utmV z>+mD(>Yrrq&RkGMpY4P)%H0gTPPK0b@YS&V)t2h>K*k_YMi#$xyIx zt|%aep+`3zE+5FFM{MM}kX#^Oa;4M0`SO%|0lwD6QQUy@OSHpdJa^fN#n}6`dK>P= z08LtR-ZWk%$^QT?SF99#osVbiDg*H4P@3|VO&VUDwS#4354MVVtfQ>(&q81&J z(umwwg_WubBE8>6*e{`MypUI+(b)*TRhtW-$Ne4;eFfkI@c=Xsa0v=sn)2XV`mg~( zv-1Rt|H5Vmvt7j6;CgmfbHp>=G&PkG0A$GA;2;hiXNvv#yit*K>%f14u@P!car5m- znQ6bkin;vZZ+B6l`-=x8vgrZXd%Zp2`jF_yJ^N`qsZ$t^_U8EC39dsMe&jt(ts;qu zFUo-BraRXPjp-t&-Y7Qs#8{BnoOjSi7h_(LOseJ$b}wO;zSH=~3h7exE4?n@zZ_yF}T5#Wx z+>gAZoRln75G>BSvB;+|#JliKUEU57)DjRQ%P%Rf7JlwCa4d&%vR7qJ;PCV{4C1nN z4+X|IIj{EaEAhLybh#I z=k$E}cKwig81ri}fX#j&_hO*HpFvcR77Sm?Z)jJDca#Zu^kcuWlG-C+;nzfNE+K6` zY-Ju|B?eHO7Z?Y#KDsB43i=i37ad19DtVgwhe#SQItGv@29?8ta{J^V-qCJ~GW_66 ziD&`mKY-5RA0h?0m3f~LRQLWg7M5&e`S!>_1V7NQ5~vgq0=K|121rGF$AJZvp8AR! zUa4DwAm#kC@`$kVuE{~mBE4dQpG~FL{?r!!Uj}EuC>-e44{)v$3N;InXXIY9!IU*_Yd(c1!n zfq;)yxpzm1hfzdP|F`i)qFK0gtX)RbFX7KGF!#fY`aMcTF9?Wc0?efZ>B53i_b>!M zN#9gu1p*f3(SeCzz*e+(y@H+6JpZ+Oh8|LjPe}jNIeAQA;yX}3VWAhcRuVup3HUNl zzhVGu2L-_2D_JvEkJ;nlsmfdd4>(8z=z@Mif8I6}V&i_Z5d#0Nbo{fnblE>V3Vb69 z1nS?|!@Q^n@-NH#iAa4=c2SVz(vbNljQN)ke z^I%0BJnPZ#d;LJ4e}enr>remi?z;4}LJR8o#j&oa-E~d1D+2RQD%d+F-zzO807E4W zz#0cUp}zA&yrX9%7cz0E%JzmYGGYQtApyNYz$fJQZdedCAqWlpoi&RgU!N3^`g}_C zcY$LMzPVGnt+N!yT^_0JmB8r%Pkl3LCXukvHB~MTGB~jzFObOp}ctJq}g`OS_Hx>*t>QIfzP|oGh#|^)k^a~7n zWcqzXQKmd|GW;8$kHL6Fg?1b4WqzE*l9VY_Q!|VhEZX zlf$c~w9QTBG!}=+y>5Dajv5hkocBQTk2u$b$q6ur{b(%Wum1bYDtfBSv!)q9L^D>Z zd8iyUP@23-;-eK%iLY&)-QFtce1#O@r-1_qgD|;8XNtu10`#EbdHke|VrE(yrE%?#heMuONQLBo+{xp64*mM8ni21_e9;Z+zYr?4WvP@*PO zqK8tVA~RTPX5!?e1>3YoS1ArVd55tH1aPhBL%uAII|aK}gMR(ChIC_F)9ouTR}bH> ze209Y9R20`w@&u1ur{$I+BqcJt`(j1CEWHo6_B5P4Dl80${8p*Anl7L+?p3+`?G_# z60RPMVHf{%Y4S$R4VGUpihdvu85S(AU95N(FLEkrn$!}X9p%`T_mfXv5!6U3mAYFz zP#SgHVBiM4xmYD{IJo%j_LkjnpgIw|a=5nV7iN&8O1(x z-?UfWzpi0bn6qx7&{99YA*P40{q>dlVr`sMp`Rbq*}948QY{J3%DyXvXttQQEZe$% z91+@@ThLPJ7_`mfE35wL;^_EH%ri{7e79e&996Cs2LD!YE;_%j)S0phYN=eYd@dzV z=Z)FJ1@naW7HW47#b3=6!DKi7CChj)Oq$m4sr8Ut>N0uAh)+_8PxJ9FuX5|YU8cTu z;fZO|U$Moheet~7u#yrl^*FU3rn+QvJFJZj3+>t@S8A>g=qtZ%)#W7-qEFA}t@H9L zsZ@R(bb8U8s*z;_w!yjQr^j7rssqYhn62_6%=E1tso@b^_rP`Q23OMPrDDmBe5HDYtW|dl^(8V+9 zvj>zm8^$T;82{j^2zjwo=Z%eF)kc23tU9_;>k`OW9Q^W9Oyf6|Pt#yQxB|Ng5@vvQG=+*%bzgx?bf&~2w zRIE<46@l!gz6v@@+Xw%Gx@+8JLv-|epv3kz+-rWS;n z#n3&mOVsBKH)`HuUBp?7jXljvSP#vO@3q!Ed-Ru5bc;0u%FWgeA#U_~C0l=Zn&S=- z)?+*rI$?+w`6I3^IlxFV zyJDbO?xEX0sLaFH3&V3js&19urEkNvFVyGeAqpMpR&x8U^OGjDf9LSxRnKJi(&%Eh z_i=#{lA~dAh)@@Wcknp;Isun=(k#3?&}dWAHMcfXx@;5MXja2K+u_^O9vyUqqqqvX z;S=J@6=g+;o9G+9YWZxGzWc}jFeU#7XfXm4k{ST^?OVl{L`?8M)d5LiLmLr87ef_K z2h;yThr1?f%cBXRkA5~LrPOFsLql{GsO4dK-{zouQXAn`@+bWr+i*#5ikeh&Z~eJ5 z4(0p3Fk){F$&{C6Yj^#M{dDH&ZT5PK%lY^zm#FvK(ydHbtPrdy0j|`Y^1t|@cXS%= zg|Z2G`VcQzB$ME5`CubpfhFB8r=vVrzEbOPsLM?^H))9 zoBgAy(NPSxkVutpXnIiJOdUF&7oX2u>z1$~C}x}>A~Sb0<)MnDN|Xs!@yuoPjBAsq z!=)(OUmO>dqHF6U53Y`_zBkTlI{h$X0LU;JO=xAqax0VIdsu`UZGs{^)rad9;AC=u zfgCh4LALa<*hL}4^9U@3U%UOvCOQZWFs)M1HRg`VU}EP9l@f6tdaUxn=H`&y^L+8D zF43ax;0-Ce8jp+ts%MS1@ zTtjD=WLpbhn_A%DP$G_^jr=7yNo3`r9|W|JSqozh$i$6D-GRWU$&q7-Lnz??{$yIfvAC8j z&b}*V=QuY&ESZd~rQh>DZQnaxd#?F^yx%i^bHoou?$b&eYBk*KN7M7e8hLsq33nYK z(o7Sy2}ThT9p<#QsYo+uQnC4ESD9wwQ!!w+srYO7S!S5Eu+S*fQGJ-Mu+k{DzQQQy zwmlMJBv*wT+nVMqI)*p{Ht+XjM~$j9msz*nGKPz`opb7qnBCxZYnAzoVAWb(w#G!2 zc8-#eV3~=1r&*z9Bf1H11ga zS|C2R*`B*T7lmyuz-kO(CBS%4NoRix{a7_X-l%c*u-RbiLlXg}jt?c?k|Sb=jKN_JI&v8c&r&0gCr>wi!#ivew? z9n%Hg&C0vLP_>W+2}p%l5yA*1s2arAl~2nDcmfj>55;uP*=%N zKFWjdO2eG$(ls5jUWqhBq1=OoMz;?O;yF_^ost@^Sb^F{L%Rb!Vp-%i4M!fRR$8Z# zg-S1*RU4Vw$i0U&B95%-4D!)gK7;8uXe=WSTOfPm_6+c2blI99Al229goQ0l66p1B z>sern%M5}WRfiJZ<7yS|KwZk;^#Fm`PsO2~T|C1^8N={VnwZXX$C`9?5_Kf4*BX_+ zY;<>Whpa>)F$5KartJq8G}zqQT`B$ATn{a60<#y9T+67fr;N^FAHgU(Cq?tM$Ie!;qFHmj)0XhegWl_*T`bgv^ihxZX99$t3CL(>+NB56rs;$@u46URzEvK z%X&wi7!|#nqq5u|;&#qJkdmH>znMqL8y0X(g)-( z->W3<()ol?dcq@7qmjlBceT@XP{L>?G;DEbzr#S_cMDovl7fvw_lABVfLZ(Ux%95g z1?Qsq>3P)Ngx|moyawx|`$;~V?x_dsWBAE>^xm8g*h7CxJdX|tp!g|2)9sDe{5oCJ%FnEs3PE`ddORC)y*foKy@$vj|LMKEQu(0~CqWPb?szOxDWTgUnvebEJ&wmd8k8(fWldFr13to2X`_b%d@7ee4Yp$nl zXDani?<>+jsvcay%N|U@G`#2os6OPuxV%%n{4@u~Z*QC&abwTmalAAKiOhs>g8hY? zpVTp~dKp!DQ)Y=>qfc;WN|lveI!jD%@_UW=l>t}H3 zvs#M4?b(9cg;_=ulL|t5eAX1%WshXF-^1yo;~(2hIeXLgCs3Vp#EI9d6SW44Y_}wu zjNI0jjN|?IOdIIRK~Zl}JKb z4&8-8iF?rV0Qy{rVsQRtv7@(=#!FrGLXh1^kUPbluV#p!$zY+lv4UY-5%k{4oz3b0 zv;1m%FFIV^SZt*bXWhCu_bHf`X@qvn4F+?G6FAp2{SISm-H@$f?4`oSrcOdI;if#i zRgDY7ZA8t^Z}MK^b-*V|AJRI$B=RU0e@m}bnKi*qmR`bL3Zy{Im`77qrk0x;*=_O= zhL5*G*1=1exrg3R&+lrci7TF6QdRjtsE{|E z-Sdl3PR@E%dS%8>ro9MJX?UIX_Vb$RqnU~@(J`c=&SN8IpYhM!H-dY`Y7RJC|36hG zFc8*tYWwYu+k7(P&$7&d}P^H6>qKieWt(0Svom2T;s1R9^80CZChP*Q1lE_*+} zP(xgbn-F^aPq#lH1cu_WXlmBai-2kZ9j;NTIe+$iFf1qRo2Ena8x)kbJIv@+Gr^}|exL~;}K720xI8hm4*`i0P7!MPsCutV^ z5{$%3`}UMa{~7bgf-O^9av1BZTu##N9(_)HAv@F^bn4O(t=bV8R3E*QXJ1_eQ~M1< z@pqdiVc;eVtgc=xIpckIH|%6ynOe5*o5mUSIX^>2ml&(-6`+mX>xS~OrOD1>o^Uz* z%*D<{Zi;y}*mqk&!pJaZnSCohcK)bB?(fb^e<2W~u(V}_Y8CGtt|e7UBVYWiWT-8n zTRAJvj@`blxpkGNh(Vj(dqkD*R~Z3i%!>Qf{VUaUy|PmykB&2p|9G?*>cmJH;nN=>{A~8GUp6A2qm2DlH~Ku}Juzjv z;`Y8j3-y01KeHCy;3SzU$i+p%)5t5jH}QVpP3j$&?YF-i`MBAjxJc#7LjvDQ6P^&L^>P? zz#;8G|IPYGP|$^J8?}oNwsw@Rp0JVc+%ehd9iLi&sE+VQ>;pFXJfa~7-`a{5Eyzl! zb~10900b91S4lt3H(-_qdR%y!WVSCLjIE-Px#eg(@JC7hiaU+#ohYds(7t6y`JC>N ziQ$)Fgkath@@*BOk2p0o0-1kXgcgHPUP>(=4?EQlkimVp9MzDN`J^oQ1ZRp7#*%^Z zNzdq(Q4%Fy6g-O}(SuDa%2Ud~=u7&o#3cL7Jbi0ug=o?d1A?z8EM}r7FZuV463w!o zH9|P$U$u*VovQRRuU6=!{DCUY)TKb2r%%~2i($JkPqgNOQUNJv@z3-Ie(mCf_@TCQ$;Jb~U-8nvy=+Sh;cAI= zCk~Lkg(nnVJtDJ{z&AXr|4C@+`)asgbgR+Pzv!CHU*}iP_5W|UL_Lg69b7E!?f!Su zW&3yX3uKBO`f0f+X56G@i{f5jP-TFenrs&th^(V=>W3P}nIS`t#Ta)~u{!{DlRw0= znCFo`-2QR$YPc<+xAP4@|D^SrF-=bur|7NB=A7YZFLXn`kGN6cvD8Yt~*<3f1*6rRkT|1R%;RtL?B%?;HEU&acCZ{Mi@uk!w9fgt-; zTnj@R8&fAGQ*%pa7pMPPE_7?cc%X}7eprLa{0y}opcfxN`I@YC$P_^yNd8Ss9;`fU zwm|;FIXDMLPP0o_RIy7DW!AO39bOzAg^}0YRo8WS%T-r>#o2YG+hy2Sb!&0a*@SsK zUaE*0mQ?fm~P0U=-u@) zJd^urlr&JzNzgpO#wB&aTxM`zWGj_bo7naN#FL*`>|w?Mb!42Fu$hyJ6c-Y)R)*q^ zbSQ4Dqs)f)oNCaSvyLrw#++)f+I{)ZJSl?|7o3QytGD>g19H0#a6IwG)pd!ST?2B* zH*ntEquhpYTwnv3j={n7$E(B_IQW^t*#q^WtL6CGA$*C(nRSbt49ITWqoM;T4mzY4 z@UfG@+2fAwb&Z@Ya6Fj@G=?V*I`lTwqjH9moHb}}45J7GGY4&wt4^`H12ZRWs;dzA zogvkAjUn(ezZGtme`?7_>}U)4F8T~tGP`8AifPs!h6UQm`?V|S56#t2=$y}!YOt46~VrTc4i(^gB)4_O~|uUhuk8Zr&}?P{R=O zHBu@`eVEtaa+M0r>eMDSSFZjf(qvpp?&3r_k9ooC&ha7QLoQR-vFh<@ksW_f;!v8u zEcRRxCgxr2KCs935^vWCDs+EC7^LVY5DrBgw#((=3?ZR6A2JGcqxisWui4^v^&9Jy zTE?WV-ZrkJ3pjhy=)Lj(a*#| z#UCr)Waq2Mkv)C#K*D{1SDH9yed@1N`Fe&yKUo5*V>NF+dhAp9JfKdoO69YB+&{?5 zXXQ#>N`-&egBGZs-3(S^Z)~boqYFA2#kIBCNHqu$VPa9aAF+^CrR6s2d7&;1f1;ro(1$MOa)Cs$!;+#9h`3 zS+BhxU)*gXw`B?T1J)?xIdxF7;5(vXQbsSLtHq6VskJO{4R57*rDgqO&dB|?*HNHa zLw)JK#EtYqN*YP7$Xghhw3T5lGbU*oGuk!}?h4ncYuW`lmxa;EE4Dsa`9?BbJmVBq zRPB$}Zk-cO2laUHjUXp}C6r4lFIJBL09om>Yq)vTN49@g)^>rB>f1IsQ-N=TQrXft zjMx%PUmVb6l|#^m=00zjw7J%?tmXUEXbOLz^(zcIcjVb9oOx&hza|dFj5Iyp*Ru3y|hZyD3W?$#8#kHwZ3y@Kp6sO zd)%1AR;A^dXr&>-O0b`weHE;6hI83dnP77Xh3~V(r2!m1tE#0U5)0rKhospQk;Rv- z97&r~!Nt0N$y~oJT!E6qzI&Pe#g1PXp^equ_kvYU>I!|~aEJ;d^q1Gc%+95}fklwx zFUU%w$?}NuA+1`>R$x4C&{K+7rMzOJqrhJ!;|ftU{+}rb_Bv-I!O)VS+=g)cfn@|ew=w3DHMPM zWb2{2qbZ-&^PQLcrQj`r%#(j@-%-n+R9H!SBK0IueRU|g-K@kuNpl!JgyugN$HNPd zKVmmp$K#0Mbz{s-OkGW>g`w7=(B+9sPMC&|;1QkT{T)>ljs-h3KKtkKWGj&%j#@)F zKhdGKw$@92wbZ11;sWhDG_9h;f-y(NAhESr9~{eqO1$3BRZR?$uDW6qqwGUl z*R&FIK6RRvOTQN3C~bF#SPjrEK=bIJUMCp9@62fG9RB*%&b-U$ z;&+1ikFV_^(I)@j`ewrH(!vbZVTx1R;FsofO}R0J?^%+sp5>2{L64>;qSBf}ZN6P| zIA*HB1&NdxRd^kBR}RcnUUfN`Qks;-bX|Y2${QI(ND53C8$jKuQ{E`D`Y9Pb34gNq z^kxXnRO#9SMC_2`C&`_Jm585g@Y~g=y-|+*NRnTR1?{ST?P-$b3eD<@9CLc5L~-IT z|Is5wccw=5;>erTb5;Z#iuKQk4ffy7g<+%};sd=AYVp8HS^Yyerd(gG%V#oSpn=OU zKzb|`QE*U19y4?nrgYw4XmpeSBT^=|&^~QP@a++M8L(>!uxniKSX}T43$KNP(o%n$ zWan=vxT}8zJ9m@fcmBv|(Ir?xHo%vFc+CpQeq{^aYe?N|h}~<%(yIDe8~(c;jr-}HI@Y=Fp03~7??HC$M}lA4;E;w zmQ(U5$&~Kja4LaVS5V8jNsmUbTSkPc`pDIYkLpor|K0^hyvKi`PI>to1_TyKXHgDU zNzVYq8jk<+c@~+%A?Wa#Wf9XI_f1A3?(?Zn@BmVHW{_gohPku_>Em`h;gqWsN!UI%6Pm(F zhYqKllgrCf%Tx(k`H}hU5yqEJr2Y``J9b>+t|%x}q%tU?vxX=uczh@G5lNNS7LS`j zG!4^A{xk@22l-KLK^{7?yfq{!?pket1rj;#w1whDN1Gx-OKsOv8@+f@{DH9_4rxCN zQQCvW2u1*6hbR-N7V!CC5hJL$RP!D}Xyh3Z76~GWFxd=>B>AKfkucdL@$=#wXb((^ zpJFm3tPe~xHbbmJixe~@tilE9!Df=InRECNQZUJqtf_On5fd=esTSY!VIwe6E0W40 z=SU+eVCYjUVDgJm>B*XO3NV6a5&$+rClXBwbM2_q!D^C+q$*_bQWni3&B15nPH0+W z^IAfL5naJPs4pGAAl{zhkZtFP=GDj*tSn>+c~jq+qP}nwrx8(v2C8%=F44k=iPT_&CL7I zKcH9d)!kLQc2xjRfZ+vwjuDw%R(DkCY9@RC_UOWeBKKfVf8zy8PGj+bdnPiO_2+E> z4L05S$S#Q{flkX*A63h%+foZk?V8FSY^LZja_%4D*HhpB$NcdhkeW~kR|57&F@gNk zdH%1M&%)8xhEC!K`2BaNI$F`%7KtCh2aO!(K||vr@>-{Q@gPsDa%U)QwS<&)D5Hts z_Q0X4&2BUPpzfr0erR3@+1HP6oZT}knquh2_-}f;sY&kI;@F?xIW}CwbMn}fjyWB7zvnk)Y|~0aHM|e)eFx% tj7P1`!R)KP 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 literal 0 HcmV?d00001 diff --git a/libs/lombok-api.jar b/libs/lombok-api.jar new file mode 100644 index 0000000000000000000000000000000000000000..af0eda5c55b6f7b9d54d257add4f9831bf952fdd GIT binary patch literal 17262 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

    #j~NG8}#F({Q-1b1WUjoI2{;#XF==> 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

    sj!%S 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⪙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