Welcome
This topic contains the following sections:
The EWSoftware Personal Data Interchange (PDI) Library presents you with a
complete set of classes that let you have access to all objects, properties, parameter types, and data types as
defined by the vCard (RFC 2426 and 6350), vCalendar, and iCalendar (RFC 2445) specifications. Using these
classes, you can read and write data files in a well-defined format used by many applications on various
platforms to exchange personal information such as business cards, telephone numbers, addresses, dates and times
of appointments, etc. A recurrence engine is also provided that allows you to easily and reliably calculate
recurrence dates and times for even the most complex recurrence patterns. The classes can be used in both
desktop applications and web applications.
For flexibility, a number of the data type classes such as Duration,
Period, DateTimeCollection, and the Recurrence
class are implemented as standalone classes that can be used independently of the PDI calendar and vCard classes.
This lets you take advantage of their features without including any unnecessary overhead.
The library contains the following features:
The library is built in 100% .NET managed code written in C# and provides a complete
implementation of the vCard 2.1, vCard 3.0 (RFC 2426), vCalendar 1.0, and iCalendar 2.0 (RFC 2445) specifications.
Partial support for the Infrared Mobile Computing (IrMC) 1.1 specification is also provided to allow working with
vNote objects. Partial support is included for vCard 4.0 (RFC 6350).
Objects can be created by parsing them from a data stream such as a string, text file, or a URL
or in code using a rich, consistent object model.
Type-safe, enumerable, searchable, sortable collection classes are provided for all of the
objects that need a collection class. Almost all of the collections also have overloaded Add
and AddRange methods to quickly and easily add values to the them. Collections
containing objects with unique IDs (vCard, event, journal, to-do, and free/busy items) can be indexed using a
unique ID value.
PDI object collections support standard data binding on the collection, top level properties,
and child properties up to three levels deep.
Some of the classes like Holiday and Recurrence
support serialization (XML, SOAP, and binary).
The recurrence engine which supports all iCalendar 2.0 recurrence patterns and options is
separate from the PDI data classes. As such, if all you need is recurrence pattern generation without support
for exception dates or other features provided by the calendar classes, you only need to reference one assembly
containing just those classes that you need.
The recurrence engine is very fast and supports the full date/time range of the .NET
DateTime data type (01/01/0001 12:00:00AM to 12/31/9999 11:59:59PM).
The Recurrence class provides a type-safe enumerator so that you can
use a recurrence object in a foreach loop to enumerate the entire set of date/times
generated by a recurrence pattern. Alternately, you can use various class methods to obtain an enumerable list
of all instances or a range of instances generated by the pattern.
Additional classes are provided to define and determine the dates on which holidays fall
(Holiday and HolidayCollection). These can be used in
conjunction with the recurrence engine to filter out recurrence dates when they fall on a holiday. They can
also be used by themselves for any other purpose you may have that requires tracking holiday dates.
Holidays can be defined as fixed (occurring on a specific month and day with optional support
for moving them to the preceding Friday if they fall on a Saturday or the following Monday if they fall on a
Sunday) or as floating (occurring on a specific instance of a day of the week in a given month). As with the
recurrence engine, the holiday classes supports the full date/time range of the .NET DateTime
data type.
When the recurrence engine is used in conjunction with the PDI calendar classes
(VEvent, VToDo, and VJournal), full
support is provided for multiple recurrence rules, recurrence dates, exception rules, and exception dates so that
very complex recurrence sets can be generated. Instances can be generated in local time or the time zone of the
component.
Parser classes are provided to read vCard, vCalendar, and iCalendar files. The parsers are fast
and flexible enough to handle PDI data in any format regardless of spacing, line folding, text case, and object,
property, or parameter order. Simply pass them a string, filename, URL, or a
TextReader-derived stream class and they will do all of the work necessary to load the
objects.
All PDI classes are able to write themselves out in the appropriate format based on the
specification version including encoding and folding lines where appropriate. Simply use their ToString
method or use the WriteToStream method to save them to a
TextWriter-derived stream class.
Encoding and decoding support is built into the property classes and they can handle all
defined types including inline quoted-printable and Base64 encoded binary data.
Switching between specification versions is achieved by setting the Version
property on a top-level object such as VCard or VCalendar.
Support for iCalendar 2.0 time zones is provided. The VTimeZone and
VTimeZoneCollection classes contain information about time zone objects found in an
iCalendar file. For calender properties that utilize the TimeZoneID (TZID) parameter,
their date/time values are converted to/from local time automatically. You can also access the underlying
date/time for the time zone itself.
Utility methods are provided in the VCalendar class to convert
date/times from one time zone to another and between a time zone and local time. The methods are Daylight Saving
Time aware and will take it into account when necessary based on the observance rules defined in the
VTimeZone objects.
Other methods are provided in the components to apply a time zone with date/time adjustment to
the calendar as a whole or to individual components and to set a time zone ID without changing the date/time
values in the calendar as a whole or in individual components.
Some Windows Forms controls are provided for interacting with the PDI classes (i.e. a holiday
manager user control, holiday properties dialog, recurrence pattern user controls, and a recurrence properties
dialog).
An ASP.NET web server control is provided for editing recurrence patterns in a user-friendly
fashion similar to the Windows Forms Recurrence Pattern control.
All of the EWSoftware.PDI assemblies have strong names. As such, you can
install the assemblies in the Global Assembly Cache (GAC) if so desired. To do so, use the GACUTIL
command line tool as follows replacing the path to the assemblies to match the installed location on your system:
gacutil -i \GH\TFS01\EWSPDI\Deployment\EWSoftware.PDI.dll
gacutil -i \GH\TFS01\EWSPDI\Deployment\EWSoftware.PDI.Data.dll
gacutil -i \GH\TFS01\EWSPDI\Deployment\EWSoftware.PDI.Web.Controls.dll
gacutil -i \GH\TFS01\EWSPDI\Deployment\EWSoftware.PDI.Windows.Forms.dll
To remove the assemblies from the Global Assembly Cache, use the GACUTIL
command line tool as follows:
gacutil -u EWSoftware.PDI
gacutil -u EWSoftware.PDI.Data
gacutil -u EWSoftware.PDI.Web.Controls
gacutil -u EWSoftware.PDI.Windows.Forms
The Windows Forms controls and the web server controls provide rich design-time support. They
appear on the design surface as they do at runtime. Their properties can be edited using the normal Properties
Window. Installing the controls in the Visual Studio toolbox will allow you to use the controls at design time
by dragging them from the toolbox and dropping them on to your form. To install them for the first time or to
refresh the toolbox after the control assemblies have been updated, do the following:
Open the toolbox window. Right click on it and select the Show All option.
If you do not currently have a tab for the control library, create one by right clicking on the
toolbox window, selecting Add Tab, and then typing in a name for the tab such as EWSoftware
PDI Controls.
Click on the tab for the control library so that it is selected.
If the tab is not empty, remove the existing controls by doing the following:
Right click on the toolbox tab and select Choose Items....
In the dialog box that opens, select the .NET Framework Components tab. Click on
the Namespace header to sort the list of controls by namespace.
Locate the EWSoftware.PDI namespaces and uncheck all of the
controls in those namespaces.
Click the OK button and the controls will be removed from the toolbox. You are
now ready to add the new version of the control library.
To add the controls to the toolbox tab, do the following:
Right click on the toolbox tab and select Choose Items....
In the dialog box that opens, select the .NET Framework Components tab. Click on
the Namespace header to sort the list of controls by namespace.
Click on the Browse button and navigate to where the EWSoftware.PDI.Web.Controls.dll
and EWSoftware.PDI.Windows.Forms.dll assemblies are stored. Select one and click the
Open button. This will add the controls in the assembly to the list in the dialog box. They will all
be selected and checked by default. Repeat this step for the other assembly.
Click the OK button to complete the process and the new controls will appear in
the toolbox tab.
Note that both recurrence pattern controls are called RecurrencePattern so
you may want to put each one in its own tab or right click on them and use the Rename option to change
their names to their fully qualified namespace to keep them straight. However, this is not a necessity as when
developing a web project, the Windows Forms control will be disabled in the toolbox and when developing a Windows
Forms application, the web control will be disabled in the toolbox.
NuGet packages are available for the libraries. Search for the package names:
EWSoftware.PDI - Contains the date utility classes, recurrence engine,
and holiday classes.
EWSoftware.PDI.Data - Contains the classes used to create and consume
vCard, vCalendar, and iCalendar files.
EWSoftware.PDI.Web.Controls - Contains some web controls that can be
used to edit recurrence settings.
EWSoftware.PDI.Windows.Forms - Contains some Windows Forms controls that
can be used to edit holiday calculation settings and to edit recurrence settings.
The date utility and recurrence classes can be found in the assembly EWSoftware.PDI.dll.
The calendar and vCard classes can be found in the assembly EWSoftware.PDI.Data.dll. The
web server controls can be found in the assembly EWSoftware.PDI.Web.Controls. The Windows
Forms controls can be found in the assembly EWSoftware.PDI.Windows.Forms.dll. In order to
use the classes, add a reference to the appropriate assembly in your project. To add the reference, open your
project in Visual Studio, open the Solution Explorer pane of the project, right click on the
References folder, select Add Reference..., click the Browse button and navigate to
the folder in which you placed the assemblies, and finally select the appropriate assembly and click OK
to close the dialogs and add the reference.
In code modules that use classes from the EWSoftware.PDI namespaces, you
will have to add a using statement (Imports in VB.NET) for one
or more of the following namespaces:
EWSoftware.PDI - Date utility classes, recurrence engine, holiday
classes.
EWSoftware.PDI.Objects - Calendar and vCard object classes.
EWSoftware.PDI.Parser - Calendar and vCard parser classes.
EWSoftware.PDI.Properties - Calendar and vCard property classes.
EWSoftware.PDI.Web.Controls - Web server control classes.
EWSoftware.PDI.Windows.Forms - Windows Forms control classes.
Windows Forms and web applications in C# and VB.NET are provided that demonstrate the basic use of
the classes and controls.
Demo App | Purpose |
---|
PDIDatesTest | This is a console mode application that runs through a few simple configurations to test the
basics in the date utility, holiday, and recurrence classes found in the EWSoftware.PDI
namespace. |
PDIParserTest | This is a console mode application used to test the EWSoftware.PDI.Data
namespace classes. It scans the specified folder for vCard and vCalendar/iCalendar files and loads them to test
the parser. It then saves them to another specified folder so that the contents can be compared to verify that
the PDI output methods are working as expected. Note that the content order and formatting may change but the
information overall should still be the same. Some sample files of all types are included in the
.\PDIFiles folder. |
PDIWinFormsTest | This application is used to demonstrate various features of the EWSoftware PDI classes found
in all of the namespaces. With it, you can: Test the holiday classes, the interactive holiday manager Windows Forms control, and the
holiday editor Windows Forms dialog box. Test the recurrence parser, recurrence rule generation, and the interactive recurrence
pattern Windows Forms controls and dialog box. Test the calendar event parser and calendar recurrence generation with time zone support. Test the time zone conversion methods in the VCalendar class.
|
RFC2445RecurTest | This console mode application creates the example recurrence patterns given in the RFC 2445
iCalendar specification starting on page 118 and generates the instances for each one. Rather than parsing the
information from strings, this demonstration shows how to create the patterns using the API. The first part
calculates instances using only the Recurrence class (all instances are expressed in
local time). The second part calculates instances using the calendar classes with time zone support (results are
shown for the US-Eastern time zone used in the specification examples and in local time). |
vCardBrowser | This is a Windows Forms demonstration application that shows how to load, save, and manage a
set of vCards including how to edit the various vCard properties. Some sample vCard files are included in the
.\PDIFiles folder. |
CalendarBrowser | This is a Windows Forms demonstration application that shows how to load, save, and manage
vCalendar and iCalendar files including how to edit the properties on the various components. It also
demonstrates the ways that time zone components can be used with iCalendar files. Some sample calendar files are
included in the .\PDIFiles folder. |
PDIWebDemoCS / PDIWebDemoVB | This is a web application that demonstrates various aspects of the EWSoftware PDI classes (a
C# and a VB.NET version are included). It covers most of the same areas as the other Windows Forms applications
and shows several examples of data binding with the collection objects. It also demonstrates the recurrence
pattern editor web server control. To try out the demo web applications, open the projects in Visual Studio. Once built, they
are set up to run using the development web server. The startup page in each is Default.aspx.
If you are using a remote server, you will need to set up the virtual directories and copy the demo application
files to the server locations. |