diff --git a/WPI Calendar Event Creator.xcodeproj/project.pbxproj b/WPI Calendar Event Creator.xcodeproj/project.pbxproj
index 86c488118feef4f284166652147e8fd5ad253312..c75cbd93d4f1b25ccdf46a557a841c82399a3e7e 100644
--- a/WPI Calendar Event Creator.xcodeproj/project.pbxproj
+++ b/WPI Calendar Event Creator.xcodeproj/project.pbxproj
@@ -375,6 +375,8 @@
C74BF58618E3BB4F00856171 /* tutorial6.png in Resources */ = {isa = PBXBuildFile; fileRef = C74BF58018E3BB4F00856171 /* tutorial6.png */; };
C74BF58718E3BB4F00856171 /* tutorial7.png in Resources */ = {isa = PBXBuildFile; fileRef = C74BF58118E3BB4F00856171 /* tutorial7.png */; };
C74BF58918E3BF3B00856171 /* tutorial0.png in Resources */ = {isa = PBXBuildFile; fileRef = C74BF58818E3BF3B00856171 /* tutorial0.png */; };
+ C74BF58C18E4C1FC00856171 /* WPICalendarEventCreatorAppIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = C74BF58B18E4C1FC00856171 /* WPICalendarEventCreatorAppIcon.png */; };
+ C74BF58E18E4C2F000856171 /* rsz_wpicalendareventcreatorappicon.png in Resources */ = {isa = PBXBuildFile; fileRef = C74BF58D18E4C2F000856171 /* rsz_wpicalendareventcreatorappicon.png */; };
C751D4DA18AB046600CFA0FF /* camesano-formal.jpg in Resources */ = {isa = PBXBuildFile; fileRef = C751D4D918AB046600CFA0FF /* camesano-formal.jpg */; };
C751D4DC18AB04B900CFA0FF /* clark-formal.jpg in Resources */ = {isa = PBXBuildFile; fileRef = C751D4DB18AB04B900CFA0FF /* clark-formal.jpg */; };
C751D4DE18AB04F500CFA0FF /* Ravi_Recent_rdax_161x179.jpg in Resources */ = {isa = PBXBuildFile; fileRef = C751D4DD18AB04F500CFA0FF /* Ravi_Recent_rdax_161x179.jpg */; };
@@ -890,6 +892,8 @@
C74BF58018E3BB4F00856171 /* tutorial6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial6.png; sourceTree = "<group>"; };
C74BF58118E3BB4F00856171 /* tutorial7.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial7.png; sourceTree = "<group>"; };
C74BF58818E3BF3B00856171 /* tutorial0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial0.png; sourceTree = "<group>"; };
+ C74BF58B18E4C1FC00856171 /* WPICalendarEventCreatorAppIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = WPICalendarEventCreatorAppIcon.png; sourceTree = "<group>"; };
+ C74BF58D18E4C2F000856171 /* rsz_wpicalendareventcreatorappicon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = rsz_wpicalendareventcreatorappicon.png; sourceTree = "<group>"; };
C751D4D918AB046600CFA0FF /* camesano-formal.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "camesano-formal.jpg"; sourceTree = "<group>"; };
C751D4DB18AB04B900CFA0FF /* clark-formal.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "clark-formal.jpg"; sourceTree = "<group>"; };
C751D4DD18AB04F500CFA0FF /* Ravi_Recent_rdax_161x179.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = Ravi_Recent_rdax_161x179.jpg; sourceTree = "<group>"; };
@@ -1134,6 +1138,7 @@
2C490FD01846A99B00440D04 /* Supporting Files */ = {
isa = PBXGroup;
children = (
+ C74BF58A18E4C1EB00856171 /* Icons and Images */,
2C49103E1847043100440D04 /* preview.html */,
2C4910111846DA3500440D04 /* Model */,
2C490FD11846A99B00440D04 /* WPI Calendar Event Creator-Info.plist */,
@@ -1748,6 +1753,15 @@
name = Tutorial;
sourceTree = "<group>";
};
+ C74BF58A18E4C1EB00856171 /* Icons and Images */ = {
+ isa = PBXGroup;
+ children = (
+ C74BF58D18E4C2F000856171 /* rsz_wpicalendareventcreatorappicon.png */,
+ C74BF58B18E4C1FC00856171 /* WPICalendarEventCreatorAppIcon.png */,
+ );
+ name = "Icons and Images";
+ sourceTree = "<group>";
+ };
C751D4D818AB044F00CFA0FF /* Chemical Engineering */ = {
isa = PBXGroup;
children = (
@@ -2209,6 +2223,7 @@
C740EC2018AEB83B00C3A701 /* brian-meacham-formal_rdax_161x121.jpg in Resources */,
C740ED7118AECD4600C3A701 /* Stapleton_Informal-001_rdax_161x121.jpg in Resources */,
C740ED8E18AED3BA00C3A701 /* boynton_rdax_300x200.jpg in Resources */,
+ C74BF58C18E4C1FC00856171 /* WPICalendarEventCreatorAppIcon.png in Resources */,
C740ECF018AEC31400C3A701 /* me-chierichetti-profile.jpg in Resources */,
C74BF58318E3BB4F00856171 /* tutorial3.png in Resources */,
C740ECFB18AEC36500C3A701 /* me-demetriou-profile.jpg in Resources */,
@@ -2242,6 +2257,7 @@
C740EDC618AED73000C3A701 /* sports-and-recreation-center-complex.jpg in Resources */,
C740ECA318AEC0E900C3A701 /* math-formal-farr.jpg in Resources */,
2C3BEE971859533D00BC6753 /* borderTextView.png in Resources */,
+ C74BF58E18E4C2F000856171 /* rsz_wpicalendareventcreatorappicon.png in Resources */,
C740EC5A18AEBD3E00C3A701 /* hua-deloray-profile.jpg in Resources */,
C740ED5018AEC81F00C3A701 /* johnson-large-new.jpg in Resources */,
C751D56C18AB155C00CFA0FF /* cs-rich-formal.jpg in Resources */,
diff --git a/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/Contents.json b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/Contents.json
index a396706db4ec4cfca4d984d38b90dc8098bded40..dc2f18f6864eb2b8abc2276e3d1d57f923d96692 100644
--- a/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/Contents.json
+++ b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -1,18 +1,21 @@
{
"images" : [
{
- "idiom" : "iphone",
"size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "rsz_1rsz_1rsz_icon.png",
"scale" : "2x"
},
{
- "idiom" : "iphone",
"size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "rsz_1rsz_icon.png",
"scale" : "2x"
},
{
- "idiom" : "iphone",
"size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "rsz_icon.png",
"scale" : "2x"
}
],
diff --git a/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_1rsz_1rsz_icon.png b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_1rsz_1rsz_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..7d6b31e54d560fd3e2ecec3c1b285cb802b7e511
Binary files /dev/null and b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_1rsz_1rsz_icon.png differ
diff --git a/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_1rsz_icon.png b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_1rsz_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a23bd03a89e0f86d77c4dfcdbdda634bcc5020d
Binary files /dev/null and b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_1rsz_icon.png differ
diff --git a/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_icon.png b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..f5dcf87537f36d0a043aac307563dceec94d5f4f
Binary files /dev/null and b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_icon.png differ
diff --git a/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/BackGround4.png b/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/BackGround4.png
new file mode 100644
index 0000000000000000000000000000000000000000..fff55ba9ecb6ebbb9d04224ec6dc2d41b93949ad
Binary files /dev/null and b/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/BackGround4.png differ
diff --git a/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/BackGround5S.png b/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/BackGround5S.png
new file mode 100644
index 0000000000000000000000000000000000000000..9787537cc7b189a1088fcc3b627097a493367e25
Binary files /dev/null and b/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/BackGround5S.png differ
diff --git a/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/Contents.json b/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/Contents.json
index c79ebd3ada1309bae694b8e6760592b1254e035c..93f97a37f432d0ba2270bb6e0061f434adef23e2 100644
--- a/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/Contents.json
+++ b/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/Contents.json
@@ -5,14 +5,16 @@
"idiom" : "iphone",
"extent" : "full-screen",
"minimum-system-version" : "7.0",
+ "filename" : "BackGround4.png",
"scale" : "2x"
},
{
- "orientation" : "portrait",
+ "extent" : "full-screen",
"idiom" : "iphone",
"subtype" : "retina4",
- "extent" : "full-screen",
+ "filename" : "BackGround5S.png",
"minimum-system-version" : "7.0",
+ "orientation" : "portrait",
"scale" : "2x"
}
],
diff --git a/WPI Calendar Event Creator/WPICalendarEventCreatorAppIcon.png b/WPI Calendar Event Creator/WPICalendarEventCreatorAppIcon.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d75ceb8e9ef30090d5724fec9220e5e543f6166
Binary files /dev/null and b/WPI Calendar Event Creator/WPICalendarEventCreatorAppIcon.png differ
diff --git a/WPI Calendar Event Creator/WPIModel.m b/WPI Calendar Event Creator/WPIModel.m
index 834982fd7474319a67d466021ca14866d4b90ab1..8f9e7de2b026fde4047d52fcecd1cf8c71fa5c4b 100644
--- a/WPI Calendar Event Creator/WPIModel.m
+++ b/WPI Calendar Event Creator/WPIModel.m
@@ -8,7 +8,6 @@
#import "WPIModel.h"
-
@implementation WPIModel
static WPIModel *sharedDataModel = nil;
@@ -309,7 +308,9 @@ static WPIModel *sharedDataModel = nil;
NSError* error;
- [self.eventStore saveEvent:event span:EKSpanThisEvent error:&error];
+ //[self.eventStore saveEvent:event span:EKSpanThisEvent error:&error];
+
+
UIAlertView* alert;
if (error) {
@@ -328,6 +329,29 @@ static WPIModel *sharedDataModel = nil;
[alert show];
}
+-(NSString*)getICSFile {
+ NSString *title = [self getTitleForPurpose:1];
+ NSDate *sDate = [self getDateForPurpose:2];
+ NSDate *eDate = [self getDateForPurpose:3];
+ NSString *location = [self getLocation];
+
+ NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear | NSCalendarUnitHour | NSCalendarUnitMinute fromDate:sDate];
+ NSString *startDate = [NSString stringWithFormat:@"%4ld%2ld%2ldT%2ld%2ld00", (long)components.year, (long)components.month , (long)components.day, (long)components.hour, (long)components.minute];
+ startDate = [startDate stringByReplacingOccurrencesOfString:@" " withString:@"0"];
+ components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear | NSCalendarUnitHour | NSCalendarUnitMinute fromDate:eDate];
+ NSString *endDate = [NSString stringWithFormat:@"%4ld%2ld%2ldT%2ld%2ld00", (long)components.year, (long)components.month, (long)components.day, (long)components.hour, (long)components.minute];
+ endDate = [endDate stringByReplacingOccurrencesOfString:@" " withString:@"0"];
+
+ NSLog(@"Date start: %@", startDate);
+
+ title = [title stringByReplacingOccurrencesOfString:@"," withString:@"\\,"];
+ location = [location stringByReplacingOccurrencesOfString:@"," withString:@"\\,"];
+
+ NSString *result = [NSString stringWithFormat:@"BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:WPIEventCreatorApp\nBEGIN:VEVENT\nSUMMARY:%@\nLOCATION:%@\nDTSTART;TZID=America/New_York:%@\nDTEND;TZID=America/New_York:%@\nEND:VEVENT\nEND:VCALENDAR", title, location, startDate, endDate];
+
+ return result;
+}
+
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex) {
if ([MFMailComposeViewController canSendMail]) {
@@ -343,6 +367,9 @@ static WPIModel *sharedDataModel = nil;
NSString *message = [NSString stringWithFormat:@"Dear Professor %@:\n\n I am just writing you a reminder about an appointment we set on %@. \n\n Thank you!\n\n(This is an automated email from WPI Calendar Events Creator app)\n", [prof valueForKey:@"Name"], [self getDateForPurpose:4]];
[mailViewController setMessageBody:message isHTML:NO];
+
+ [mailViewController addAttachmentData:[[self getICSFile] dataUsingEncoding:NSUTF8StringEncoding] mimeType:@"text/calendar" fileName:@"AppointmentFile"];
+
[self.mainTable sendEmail:mailViewController];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Can't do that :(" message:@"Device is unable to send email in its current state." delegate:self cancelButtonTitle:@"Okey" otherButtonTitles: nil];
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/entries b/WPI Calendar Event Creator/iCalObjCSDK/.svn/entries
new file mode 100755
index 0000000000000000000000000000000000000000..f05fd5290f6ea241aa997be50962576c2645f969
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/entries
@@ -0,0 +1,581 @@
+10
+
+dir
+2866
+svn://cybergarage.org:3960/project/iphone/iCalObjCSDK/iCalObjCSDK
+svn://cybergarage.org:3960
+
+
+
+2011-05-19T10:30:15.863597Z
+2859
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+b45aa7d4-fa09-0410-9ebe-fd257a136781
+
+
+
+
+
+
+
+
+()
+
+CGICalendarValue.h
+file
+
+
+
+
+2011-05-13T13:57:29.000000Z
+373ece60bb39da6b589f5a61052fb7c0
+2011-05-13T13:57:59.619818Z
+2849
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1038
+
+CGICalendar.h
+file
+
+
+
+
+2011-05-19T11:58:56.000000Z
+6979973ac7015b875e63c6b5f743d468
+2011-05-19T10:30:15.863597Z
+2859
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+910
+
+CGICalendarParameter.h
+file
+
+
+
+
+2011-05-13T13:57:29.000000Z
+2d055fb3742887f778f16467fa6cd124
+2011-05-13T13:57:59.619818Z
+2849
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+375
+
+CGICalendarValue.m
+file
+
+
+
+
+2011-05-13T13:57:29.000000Z
+db516f2e09a816edcca3c10c13311019
+2011-05-13T13:57:59.619818Z
+2849
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1215
+
+CGICalendarContentLine.h
+file
+
+
+
+
+2011-05-13T13:57:29.000000Z
+e7b6429f016bdfea683822c475c44770
+2011-05-13T13:57:59.619818Z
+2849
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1197
+
+CGICalendarProperty.h
+file
+
+
+
+
+2011-05-19T11:58:56.000000Z
+f5e3e1f6189db1ce0c6bc054bc3cb604
+2011-05-19T10:30:15.863597Z
+2859
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3137
+
+CGICalendar.m
+file
+
+
+
+
+2011-05-19T11:58:56.000000Z
+8b06ee68e4cca712f92a8d7805aaa801
+2011-05-19T10:30:15.863597Z
+2859
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5867
+
+CGICalendarParameter.m
+file
+
+
+
+
+2011-05-13T13:57:29.000000Z
+f321a4e01af4f4391c1b583d01d82fcb
+2011-05-13T13:57:59.619818Z
+2849
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+869
+
+CGICalendarContentLine.m
+file
+
+
+
+
+2011-05-13T13:57:29.000000Z
+a785c9a99341910e0ce5e1976f54634d
+2011-05-13T13:57:59.619818Z
+2849
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4678
+
+CGICalendarProperty.m
+file
+
+
+
+
+2011-05-19T11:58:56.000000Z
+5bfe1322698bba692c9e40d3a109800f
+2011-05-19T10:30:15.863597Z
+2859
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6654
+
+NSDate+CGICalendar.h
+file
+
+
+
+
+2011-05-19T11:58:56.000000Z
+b2e88b2913f4bd32c864b1ef401e3e0d
+2011-05-19T10:30:15.863597Z
+2859
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+376
+
+NSDate+CGICalendar.m
+file
+
+
+
+
+2011-05-19T11:58:56.000000Z
+748a536821c18301c40360f5f683d6e2
+2011-05-19T10:30:15.863597Z
+2859
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1566
+
+CGICalendarComponent.h
+file
+
+
+
+
+2011-05-19T11:58:56.000000Z
+709e2e5672cf9091a6c18189156e5b19
+2011-05-19T10:30:15.863597Z
+2859
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4199
+
+CGICalendarObject.h
+file
+
+
+
+
+2011-05-16T13:49:45.000000Z
+5c4148d27566e93e879373c6cba47be7
+2011-05-16T13:50:01.791142Z
+2853
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+968
+
+CGICalendarComponent.m
+file
+
+
+
+
+2011-05-19T11:58:56.000000Z
+a3233db14271ca948a188751bbfddf10
+2011-05-19T10:30:15.863597Z
+2859
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+13150
+
+CGICalendarObject.m
+file
+
+
+
+
+2011-05-18T15:58:43.000000Z
+8bbfdc75254c207ca6cf1b1f5413802f
+2011-05-18T15:37:10.257463Z
+2856
+skonno
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2938
+
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendar.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendar.h.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..f69d8c3cb2cbb83eda820b876aacbe386f23712e
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendar.h.svn-base
@@ -0,0 +1,39 @@
+//
+// CGICalendar.h
+//
+// Created by Satoshi Konno on 11/01/28.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "CGICalendarObject.h"
+#import "NSDate+CGICalendar.h"
+#import "CGICalendarComponent.h"
+#import "CGICalendarProperty.h"
+
+#define CG_ICALENDAR_HEADER_CONTENTLINE @"BEGIN:VCALENDAR"
+#define CG_ICALENDAR_FOOTER_CONTENTLINE @"END:VCALENDAR"
+
+@interface CGICalendar : NSObject {
+
+}
+@property(retain) NSMutableArray *objects;
+
++ (NSString *)UUID;
+
+- (id)init;
+- (id)initWithString:(NSString *)string;
+- (id)initWithPath:(NSString *)path;
+
+- (BOOL)parseWithString:(NSString *)string error:(NSError **)error;
+- (BOOL)parseWithPath:(NSString *)path error:(NSError **)error;
+
+- (void)addObject:(CGICalendarObject *)object;
+- (CGICalendarObject *)objectAtIndex:(NSUInteger)index;
+
+- (NSString *)description;
+
+- (BOOL)writeToFile:(NSString *)path;
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendar.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendar.m.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..a35cd3f23cfc49c8efae5c6744af3b81ed0132c4
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendar.m.svn-base
@@ -0,0 +1,221 @@
+//
+// CGICalendar.m
+//
+// Created by Satoshi Konno on 11/01/28.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "CGICalendar.h"
+#import "CGICalendarContentLine.h"
+
+@interface CGICalendar()
+@property(retain) NSMutableArray *parserStack;
+- (id)peekParserObject;
+- (id)popParserObject;
+- (void)pushParserObject:(id)object;
+- (void)clearParserObjects;
+@end
+
+@implementation CGICalendar
+
+@synthesize objects;
+@synthesize parserStack;
+
+#pragma mark -
+#pragma mark Class Methods
+
++ (NSString *)UUID
+{
+ CFUUIDRef uuid = CFUUIDCreate(nil);
+ NSString *uuidString = (NSString*)CFUUIDCreateString(nil, uuid);
+ CFRelease(uuid);
+ return [uuidString autorelease];
+}
+
+#pragma mark -
+#pragma mark Initialize
+
+- (id)init
+{
+ if ((self = [super init])) {
+ [self setObjects:[NSMutableArray array]];
+ }
+ return self;
+}
+
+- (id)initWithString:(NSString *)aString
+{
+ if ((self = [self init])) {
+ [self parseWithString:aString error:nil];
+ }
+ return self;
+}
+
+- (id)initWithPath:(NSString *)aPath
+{
+ if ((self = [self init])) {
+ [self parseWithPath:aPath error:nil];
+ }
+ return self;
+}
+
+#pragma mark -
+#pragma mark Object
+
+- (void)addObject:(CGICalendarObject *)object
+{
+ [[self objects] addObject:object];
+}
+
+- (CGICalendarObject *)objectAtIndex:(NSUInteger)index
+{
+ return [[self objects] objectAtIndex:index];
+}
+
+#pragma mark -
+#pragma mark Parser
+
+- (NSError *)createErrorAt:(NSUInteger)lineNumber lineString:(NSString *)lineString
+{
+ return [NSError errorWithDomain:@"iCalForObjC" code:-1 userInfo:
+ [NSDictionary dictionaryWithObjectsAndKeys:
+ [NSString stringWithFormat:@"%d", lineString], @"LineNumber",
+ lineString, @"ContentLine",
+ nil]];
+}
+
+- (BOOL)parseWithString:(NSString *)aString error:(NSError **)error
+{
+ [self setObjects:[NSMutableArray array]];
+ [self clearParserObjects];
+
+ if (aString == nil)
+ return NO;
+
+ NSArray *foldingContentLines = [aString componentsSeparatedByString:CG_ICALENDAR_CONTENTLINE_TERM];
+ NSMutableArray *contentLines = [NSMutableArray array];
+ for (NSString *foldingContentLine in foldingContentLines) {
+ if (foldingContentLine == nil)
+ continue;
+ if ([CGICalendarContentLine IsFoldingLineString:foldingContentLine] == NO) {
+ [contentLines addObject:[NSMutableString stringWithString:foldingContentLine]];
+ continue;
+ }
+ NSMutableString *lastLineString = [contentLines lastObject];
+ if (lastLineString == nil)
+ continue;
+ [lastLineString appendString:[foldingContentLine substringWithRange:NSMakeRange(1, ([foldingContentLine length] - 1))]];
+ }
+
+ int contentLineNumber = 0;
+ for (NSString *contentLine in contentLines) {
+ contentLineNumber++;
+
+ CGICalendarContentLine *icalContentLine = [[CGICalendarContentLine alloc] initWithString:contentLine];
+ CGICalendarComponent *icalParentComponent = [self peekParserObject];
+
+ // BEGIN
+ if ([icalContentLine isBegin]) {
+ CGICalendarComponent *icalComponent;
+ if (icalParentComponent == nil) {
+ icalComponent = [[CGICalendarObject alloc] init];
+ [self addObject:(CGICalendarObject *)icalComponent];
+ }
+ else {
+ icalComponent = [[CGICalendarComponent alloc] init];
+ [icalParentComponent addComponent:icalComponent];
+ }
+ [icalComponent setType:[icalContentLine value]];
+ [self pushParserObject:icalComponent];
+ [icalComponent release];
+ [icalContentLine release];
+ continue;
+ }
+
+ // END
+ if ([icalContentLine isEnd]) {
+ [self popParserObject];
+ [icalContentLine release];
+ continue;
+ }
+
+ NSString *propertyName = [icalContentLine name];
+ CGICalendarProperty *icalProperty = [icalParentComponent propertyForName:propertyName];
+ if (icalProperty == nil) {
+ icalProperty = [[[CGICalendarProperty alloc] init] autorelease];
+ [icalProperty setName:propertyName];
+ [icalParentComponent addProperty:icalProperty];
+ }
+ [icalProperty setValue:[icalContentLine value]];
+ for (CGICalendarParameter *icalParameter in [icalContentLine parameters])
+ [icalProperty setParameterValue:[icalParameter value] forName:[icalParameter name]];
+
+ [icalContentLine release];
+ }
+
+ return YES;
+}
+
+- (BOOL)parseWithPath:(NSString *)path error:(NSError **)error
+{
+ NSData *fileData = [NSData dataWithContentsOfFile:path];
+ if (fileData == nil)
+ return NO;
+ return [self parseWithString:[[[NSString alloc] initWithData:fileData encoding:NSUTF8StringEncoding] autorelease] error:error];
+}
+
+#pragma mark -
+#pragma mark Parser Stack Methods
+
+- (id)peekParserObject
+{
+ return [[self parserStack] lastObject];
+}
+
+- (id)popParserObject
+{
+ id lastObject = [[self parserStack] lastObject];
+ [[self parserStack] removeLastObject];
+ return [[lastObject retain] autorelease];
+}
+
+- (void)pushParserObject:(id)object
+{
+ [[self parserStack] addObject:object];
+}
+
+- (void)clearParserObjects
+{
+ [self setParserStack:[NSMutableArray array]];
+}
+
+#pragma mark -
+#pragma mark String
+
+- (NSString *)description
+{
+ NSMutableString *descrString = [NSMutableString string];
+
+ for (CGICalendarObject *icalObj in [self objects])
+ [descrString appendString:[icalObj description]];
+
+ return descrString;
+}
+
+#pragma mark -
+#pragma mark File
+
+- (BOOL)writeToFile:(NSString *)path
+{
+ NSString *desc = [self description];
+ if (desc == nil)
+ return NO;
+
+ NSData *data = [desc dataUsingEncoding:NSUTF8StringEncoding];
+ if (data == nil)
+ return NO;
+
+ return [data writeToFile:path atomically:YES];
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarComponent.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarComponent.h.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..f000bece3d1c7e53018905f5008bd3fe7c031b60
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarComponent.h.svn-base
@@ -0,0 +1,129 @@
+//
+// CGICalendarComponent.h
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "CGICalendarProperty.h"
+
+#define CG_ICALENDAR_COMPONENT_TYPE_EVENT @"VEVENT"
+#define CG_ICALENDAR_COMPONENT_TYPE_TODO @"VTODO"
+#define CG_ICALENDAR_COMPONENT_TYPE_JOURNAL @"VJOURNAL"
+#define CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY @"VFREEBUSY"
+#define CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE @"VTIMEZONE"
+#define CG_ICALENDAR_COMPONENT_TYPE_ALARM @"VALARM"
+
+@interface CGICalendarComponent : NSObject {
+
+}
+@property(retain) NSString *type;
+@property(retain) NSMutableArray *components;
+@property(retain) NSMutableArray *properties;
+
++ (id)componentWithType:(NSString *)type;
++ (id)event;
++ (id)todo;
++ (id)journal;
++ (id)freebusy;
++ (id)timezone;
++ (id)alarm;
+
+- (id)initWithType:(NSString *)type;
+
+- (BOOL)isType:(NSString *)type;
+- (BOOL)isEvent;
+- (BOOL)isTodo;
+- (BOOL)isJournal;
+- (BOOL)isFreebusy;
+- (BOOL)isTimezone;
+- (BOOL)isAlarm;
+
+- (void)addComponent:(CGICalendarComponent *)component;
+- (void)insertComponent:(CGICalendarComponent *)component atIndex:(NSUInteger)index;
+- (CGICalendarComponent *)componentAtIndex:(NSUInteger)index;
+- (NSUInteger)indexOfComponent:(CGICalendarComponent *)component;
+- (void)removeComponent:(CGICalendarComponent *)component;
+- (void)removeComponentAtIndex:(NSUInteger)index;
+
+- (BOOL)hasPropertyForName:(NSString *)name;
+- (void)addProperty:(CGICalendarProperty *)property;
+- (void)removePropertyForName:(NSString *)name;
+
+- (void)setPropertyValue:(NSString *)value forName:(NSString *)name;
+- (void)setPropertyValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setPropertyObject:(id)object forName:(NSString *)name;
+- (void)setPropertyObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name;
+- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setPropertyInteger:(int)value forName:(NSString *)name;
+- (void)setPropertyInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setPropertyFloat:(float)value forName:(NSString *)name;
+- (void)setPropertyFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+
+- (NSArray *)allPropertyKeys;
+- (CGICalendarProperty *)propertyAtIndex:(NSUInteger)index;
+- (CGICalendarProperty *)propertyForName:(NSString *)name;
+
+- (NSString *)propertyValueForName:(NSString *)name;
+- (NSDate *)propertyDateForName:(NSString *)name;
+- (int)propertyIntegerForName:(NSString *)name;
+- (float)propertyFloatForName:(NSString *)name;
+
+- (NSString *)description;
+
+// 4.2.12 Participation Status
+- (void)setParticipationStatus:(int)status;
+- (int)participationStatus;
+
+// 4.8.1.5 Description
+- (void)setNotes:(NSString *)value;
+- (NSString *)notes;
+
+// 4.8.1.9 Priority
+- (void)setPriority:(NSUInteger)value;
+- (NSUInteger)priority;
+
+// 4.8.1.12 Summary
+- (void)setSummary:(NSString *)value;
+- (NSString *)summary;
+
+// 4.8.2.1 Date/Time Completed
+- (void)setCompleted:(NSDate *)value;
+- (NSDate *)completed;
+
+// 4.8.2.2 Date/Time End
+- (void)setDateTimeEnd:(NSDate *)value;
+- (NSDate *)dateTimeEnd;
+
+// 4.8.2.3 Date/Time Due
+- (void)setDue:(NSDate *)value;
+- (NSDate *)due;
+
+// 4.8.2.4 Date/Time Start
+- (void)setDateTimeStart:(NSDate *)value;
+- (NSDate *)dateTimeStart;
+
+// 4.8.4.7 Unique Identifier
+- (void)setUID:(NSString *)value;
+- (NSString *)UID;
+
+// 4.8.7.1 Date/Time Created
+- (void)setCreated:(NSDate *)value;
+- (NSDate *)created;
+
+// 4.8.7.2 Date/Time Stamp
+- (void)setDateTimeStamp:(NSDate *)value;
+- (NSDate *)dateTimeStamp;
+
+// 4.8.7.3 Last Modified
+- (void)setLastModified:(NSDate *)value;
+- (NSDate *)lastModified;
+
+// 4.8.7.4 Sequence Number
+- (void)setSequenceNumber:(NSUInteger)value;
+- (NSUInteger)sequenceNumber;
+- (void)incrementSequenceNumber;
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarComponent.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarComponent.m.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..0bd5ceedccbc4b59b4b6f59d28d3d587b4093122
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarComponent.m.svn-base
@@ -0,0 +1,523 @@
+//
+// CGICalendarComponent.m
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "CGICalendar.h"
+#import "CGICalendarComponent.h"
+#import "CGICalendarContentLine.h"
+#import "NSDate+CGICalendar.h"
+
+#define CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT 0
+
+@implementation CGICalendarComponent
+
+@synthesize type;
+@synthesize components;
+@synthesize properties;
+
+#pragma mark -
+#pragma mark Global methods
+
++ (id)componentWithType:(NSString *)aType
+{
+ return [[[CGICalendarComponent alloc] initWithType:aType] autorelease];
+}
+
++ (id)event
+{
+ CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_EVENT];
+ [icalComp setUID:[CGICalendar UUID]];
+ [icalComp setDateTimeStamp:[NSDate date]];
+ [icalComp setSequenceNumber:CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT];
+ return icalComp;
+}
+
++ (id)todo
+{
+ CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_TODO];
+ [icalComp setUID:[CGICalendar UUID]];
+ [icalComp setDateTimeStamp:[NSDate date]];
+ [icalComp setSequenceNumber:CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT];
+ [icalComp setCreated:[NSDate date]];
+ return icalComp;
+}
+
++ (id)journal
+{
+ CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_JOURNAL];
+ [icalComp setUID:[CGICalendar UUID]];
+ [icalComp setDateTimeStamp:[NSDate date]];
+ [icalComp setSequenceNumber:CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT];
+ return icalComp;
+}
+
++ (id)freebusy
+{
+ CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY];
+ [icalComp setUID:[CGICalendar UUID]];
+ [icalComp setDateTimeStamp:[NSDate date]];
+ return icalComp;
+}
+
++ (id)timezone
+{
+ CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE];
+ return icalComp;
+}
+
++ (id)alarm
+{
+ CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_ALARM];
+ return icalComp;
+}
+
+#pragma mark -
+#pragma mark init
+
+- (id)init
+{
+ if ((self = [super init])) {
+ [self setComponents:[NSMutableArray array]];
+ [self setProperties:[NSMutableArray array]];
+ }
+ return self;
+}
+
+- (id)initWithType:(NSString *)aType
+{
+ if ((self = [self init])) {
+ [self setType:aType];
+ }
+ return self;
+}
+
+#pragma mark -
+#pragma mark Component
+
+- (void)addComponent:(CGICalendarComponent *)component
+{
+ [[self components] addObject:component];
+}
+
+- (void)insertComponent:(CGICalendarComponent *)component atIndex:(NSUInteger)index
+{
+ [[self components] insertObject:component atIndex:index];
+}
+
+- (CGICalendarComponent *)componentAtIndex:(NSUInteger)index
+{
+ return [[self components] objectAtIndex:index];
+}
+
+- (NSUInteger)indexOfComponent:(CGICalendarComponent *)component
+{
+ return [[self components] indexOfObject:component];
+}
+
+- (void)removeComponent:(CGICalendarComponent *)component
+{
+ [[self components] removeObject:component];
+}
+
+- (void)removeComponentAtIndex:(NSUInteger)index
+{
+ [[self components] removeObjectAtIndex:index];
+}
+
+#pragma mark -
+#pragma mark Property
+
+- (BOOL)hasPropertyForName:(NSString *)name
+{
+ for (CGICalendarProperty *icalProp in [self properties]) {
+ if ([icalProp isName:name]) {
+ [[self properties] removeObject:icalProp];
+ return YES;
+ }
+ }
+ return NO;
+}
+
+- (void)addProperty:(CGICalendarProperty *)property
+{
+ [[self properties] addObject:property];
+}
+
+- (void)removePropertyForName:(NSString *)name
+{
+ for (CGICalendarProperty *icalProp in [self properties]) {
+ if ([icalProp isName:name]) {
+ [[self properties] removeObject:icalProp];
+ return;
+ }
+ }
+}
+
+- (void)setPropertyValue:(NSString *)value forName:(NSString *)name
+{
+ [self setPropertyValue:value forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]];
+}
+
+- (void)setPropertyValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+{
+ CGICalendarProperty *icalProp = [self propertyForName:name];
+ if (icalProp == nil) {
+ icalProp = [[[CGICalendarProperty alloc] init] autorelease];
+ [icalProp setName:name];
+ [self addProperty:icalProp];
+ }
+ [icalProp setValue:value];
+
+ if ([parameterValues count] != [parameterNames count])
+ return;
+
+ for (int n=0; n<[parameterNames count]; n++) {
+ NSString *name = [parameterNames objectAtIndex:n];
+ id value = [parameterNames objectAtIndex:n];
+ [icalProp setParameterObject:value forName:name];
+ }
+}
+
+- (void)setPropertyObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setPropertyValue:[object description] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (void)setPropertyObject:(id)object forName:(NSString *)name
+{
+ [self setPropertyValue:[object description] forName:name];
+}
+
+- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name
+{
+ [self setPropertyValue:[object descriptionICalendar] forName:name];
+}
+
+- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setPropertyValue:[object descriptionICalendar] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (void)setPropertyInteger:(int)value forName:(NSString *)name
+{
+ [self setPropertyValue:[[NSNumber numberWithInteger:value] stringValue] forName:name];
+}
+
+- (void)setPropertyInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setPropertyValue:[[NSNumber numberWithInteger:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (void)setPropertyFloat:(float)value forName:(NSString *)name
+{
+ [self setPropertyValue:[[NSNumber numberWithFloat:value] stringValue] forName:name];
+}
+
+- (void)setPropertyFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setPropertyValue:[[NSNumber numberWithFloat:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (id)propertyAtIndex:(NSUInteger)index
+{
+ return [[self properties] objectAtIndex:index];
+}
+
+- (CGICalendarProperty *)propertyForName:(NSString *)name
+{
+ for (CGICalendarProperty *icalProp in [self properties]) {
+ if ([icalProp isName:name])
+ return icalProp;
+ }
+ return nil;
+}
+
+- (NSArray *)allPropertyKeys
+{
+ NSMutableArray *keys = [NSMutableArray array];
+ for (CGICalendarProperty *icalProp in [self properties])
+ [keys addObject:[icalProp name]];
+ return keys;
+}
+
+- (NSString *)propertyValueForName:(NSString *)name
+{
+ for (CGICalendarProperty *icalProp in [self properties]) {
+ if ([icalProp isName:name])
+ return [icalProp value];
+ }
+ return nil;
+}
+
+- (NSDate *)propertyDateForName:(NSString *)name
+{
+ for (CGICalendarProperty *icalProp in [self properties]) {
+ if ([icalProp isName:name])
+ return [icalProp dateValue];
+ }
+ return nil;
+}
+
+- (int)propertyIntegerForName:(NSString *)name;
+{
+ for (CGICalendarProperty *icalProp in [self properties]) {
+ if ([icalProp isName:name])
+ return [icalProp integerValue];
+ }
+ return 0;
+}
+
+- (float)propertyFloatForName:(NSString *)name;
+{
+ for (CGICalendarProperty *icalProp in [self properties]) {
+ if ([icalProp isName:name])
+ return [icalProp floatValue];
+ }
+ return 0;
+}
+
+#pragma mark -
+#pragma mark String
+
+- (BOOL)isType:(NSString *)aType
+{
+ return [aType isEqualToString:[self type]];
+}
+
+- (BOOL)isEvent
+{
+ return [self isType:CG_ICALENDAR_COMPONENT_TYPE_EVENT];
+}
+
+- (BOOL)isTodo
+{
+ return [self isType:CG_ICALENDAR_COMPONENT_TYPE_TODO];
+}
+
+- (BOOL)isJournal
+{
+ return [self isType:CG_ICALENDAR_COMPONENT_TYPE_JOURNAL];
+}
+
+- (BOOL)isFreebusy
+{
+ return [self isType:CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY];
+}
+
+- (BOOL)isTimezone
+{
+ return [self isType:CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE];
+}
+
+- (BOOL)isAlarm
+{
+ return [self isType:CG_ICALENDAR_COMPONENT_TYPE_ALARM];
+}
+
+#pragma mark -
+#pragma mark String
+
+#define CG_ICALENDAR_CONTENTLINE_NAME_BEGIN @"BEGIN"
+#define CG_ICALENDAR_CONTENTLINE_NAME_END @"END"
+
+- (NSString *)description
+{
+ NSMutableString *objectsString = [NSMutableString string];
+
+ [objectsString appendFormat:@"%@:%@%@",CG_ICALENDAR_CONTENTLINE_NAME_BEGIN, [self type], CG_ICALENDAR_CONTENTLINE_TERM];
+
+ for (CGICalendarProperty *icalProp in [self properties])
+ [objectsString appendString:[icalProp description]];
+
+ for (CGICalendarComponent *icalComp in [self components])
+ [objectsString appendString:[icalComp description]];
+
+ [objectsString appendFormat:@"%@:%@%@",CG_ICALENDAR_CONTENTLINE_NAME_END, [self type], CG_ICALENDAR_CONTENTLINE_TERM];
+
+ return objectsString;
+}
+
+#pragma mark -
+#pragma mark 4.2.12 Participation Status
+
+- (void)setParticipationStatus:(int)status
+{
+ CGICalendarProperty *icalProp = [self propertyForName:CG_ICALENDAR_PROERTY_PARTSTAT];
+ if (icalProp == nil)
+ icalProp = [[[CGICalendarProperty alloc] init] autorelease];
+ [icalProp setParticipationStatus:status];
+}
+
+- (int)participationStatus
+{
+ CGICalendarProperty *icalProp = [self propertyForName:CG_ICALENDAR_PROERTY_PARTSTAT];
+ if (icalProp == nil)
+ return CGICalendarParticipationStatusUnkown;
+ return [icalProp participationStatus];
+}
+
+#pragma mark -
+#pragma mark 4.8.1.5 Description
+
+- (void)setNotes:(NSString *)value
+{
+ [self setPropertyValue:value forName:CG_ICALENDAR_PROERTY_DESCRIPTION];
+}
+
+- (NSString *)notes
+{
+ return [self propertyValueForName:CG_ICALENDAR_PROERTY_DESCRIPTION];
+}
+
+#pragma mark -
+#pragma mark 4.8.1.9 Priority
+
+- (void)setPriority:(NSUInteger)value
+{
+ [self setPropertyInteger:value forName:CG_ICALENDAR_PROERTY_PRIORITY];
+}
+
+- (NSUInteger)priority
+{
+ return [self propertyIntegerForName:CG_ICALENDAR_PROERTY_PRIORITY];
+}
+
+#pragma mark -
+#pragma mark 4.8.1.12 Summary
+
+- (void)setSummary:(NSString *)value
+{
+ [self setPropertyValue:value forName:CG_ICALENDAR_PROERTY_SUMMARY];
+}
+
+- (NSString *)summary
+{
+ return [self propertyValueForName:CG_ICALENDAR_PROERTY_SUMMARY];
+}
+
+#pragma mark -
+#pragma mark 4.8.2.1 Date/Time Completed
+
+- (void)setCompleted:(NSDate *)value
+{
+ [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_COMPLETED];
+}
+
+- (NSDate *)completed
+{
+ return [self propertyDateForName:CG_ICALENDAR_PROERTY_COMPLETED];
+}
+
+#pragma mark -
+#pragma mark 4.8.2.2 Date/Time End
+
+- (void)setDateTimeEnd:(NSDate *)value
+{
+ [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DTEND];
+}
+
+- (NSDate *)dateTimeEnd
+{
+ return [self propertyDateForName:CG_ICALENDAR_PROERTY_DTEND];
+}
+
+#pragma mark -
+#pragma mark 4.8.2.3 Date/Time Due
+
+- (void)setDue:(NSDate *)value
+{
+ [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DUE];
+}
+
+- (NSDate *)due
+{
+ return [self propertyDateForName:CG_ICALENDAR_PROERTY_DUE];
+}
+
+#pragma mark -
+#pragma mark 4.8.2.4 Date/Time Start
+
+- (void)setDateTimeStart:(NSDate *)value
+{
+ [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DTSTART];
+}
+
+- (NSDate *)dateTimeStart
+{
+ return [self propertyDateForName:CG_ICALENDAR_PROERTY_DTSTART];
+}
+
+#pragma mark -
+#pragma mark 4.8.4.7 Unique Identifier
+
+- (void)setUID:(NSString *)value
+{
+ [self setPropertyValue:value forName:CG_ICALENDAR_PROERTY_UID];
+}
+
+- (NSString *)UID
+{
+ return [self propertyValueForName:CG_ICALENDAR_PROERTY_UID];
+}
+
+#pragma mark -
+#pragma mark 4.8.7.1 Date/Time Created
+
+- (void)setCreated:(NSDate *)value
+{
+ [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_CREATED];
+}
+
+- (NSDate *)created
+{
+ return [self propertyDateForName:CG_ICALENDAR_PROERTY_CREATED];
+}
+
+#pragma mark -
+#pragma mark 4.8.7.2 Date/Time Stamp
+
+- (void)setDateTimeStamp:(NSDate *)value
+{
+ [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DTSTAMP];
+}
+
+- (NSDate *)dateTimeStamp
+{
+ return [self propertyDateForName:CG_ICALENDAR_PROERTY_DTSTAMP];
+}
+
+#pragma mark -
+#pragma mark 4.8.7.3 Last Modified
+
+- (void)setLastModified:(NSDate *)value;
+{
+ [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_LASTMODIFIED];
+}
+
+- (NSDate *)lastModified;
+{
+ return [self propertyDateForName:CG_ICALENDAR_PROERTY_LASTMODIFIED];
+}
+
+#pragma mark -
+#pragma mark 4.8.7.4 Sequence Number
+
+- (void)setSequenceNumber:(NSUInteger)value
+{
+ [self setPropertyInteger:value forName:CG_ICALENDAR_PROERTY_SEQUENCE];
+}
+
+- (NSUInteger)sequenceNumber
+{
+ return [self propertyIntegerForName:CG_ICALENDAR_PROERTY_SEQUENCE];
+}
+
+- (void)incrementSequenceNumber
+{
+ [self setSequenceNumber:([self sequenceNumber] + 1)];
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarContentLine.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarContentLine.h.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..f87ffac231712d0efc387f1db93ef07e18c09e49
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarContentLine.h.svn-base
@@ -0,0 +1,41 @@
+//
+// CGICalendarContentLine.h
+//
+// Created by Satoshi Konno on 11/01/28.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "CGICalendarProperty.h"
+
+#define CG_ICALENDAR_CONTENTLINE_TERM @"\r\n"
+#define CG_ICALENDAR_CONTENTLINE_FOLDING_SPACE @" "
+#define CG_ICALENDAR_CONTENTLINE_FOLDING_TAB @"\t"
+#define CG_ICALENDAR_CONTENTLINE_DELIM @":"
+#define CG_ICALENDAR_CONTENTLINE_NAMEPARAM_DELIM @";"
+
+#define CG_ICALENDAR_CONTENTLINE_NAME_BEGIN @"BEGIN"
+#define CG_ICALENDAR_CONTENTLINE_NAME_END @"END"
+
+#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VCALENDAR @"VCALENDAR"
+#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VEVENT @"VEVENT"
+#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VJOURNAL @"VJOURNAL"
+#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VFREEBUSY @"VFREEBUSY"
+#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VTIMEZONE @"VTIMEZONE"
+
+@interface CGICalendarContentLine : CGICalendarProperty {
+
+}
++ (BOOL)IsFoldingLineString:(NSString *)aString;
++ (id)contentLineWithString:(NSString *)aString;
+
+- (id)init;
+- (id)initWithString:(NSString *)aString;
+- (void)setString:(NSString *)aString;
+
+- (NSString *)description;
+
+- (BOOL)isBegin;
+- (BOOL)isEnd;
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarContentLine.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarContentLine.m.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..138d2221ab46385fe72f44c7513db0f57deba20a
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarContentLine.m.svn-base
@@ -0,0 +1,184 @@
+//
+// CGICalendarContentLine.m
+//
+// Created by Satoshi Konno on 11/01/28.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "CGICalendarContentLine.h"
+
+/*
+ The following notation defines the lines of content in an iCalendar
+ object:
+
+ contentline = name *(";" param ) ":" value CRLF
+ ; This ABNF is just a general definition for an initial parsing
+ ; of the content line into its property name, parameter list,
+ ; and value string
+
+ ; When parsing a content line, folded lines MUST first
+ ; be unfolded according to the unfolding procedure
+ ; described above. When generating a content line, lines
+ ; longer than 75 octets SHOULD be folded according to
+ ; the folding procedure described above.
+
+ name = x-name / iana-token
+
+ iana-token = 1*(ALPHA / DIGIT / "-")
+ ; iCalendar identifier registered with IANA
+
+ x-name = "X-" [vendorid "-"] 1*(ALPHA / DIGIT / "-")
+ ; Reservered for experimental use. Not intended for use in
+ ; released products.
+
+ vendorid = 3*(ALPHA / DIGIT) ;Vendor identification
+
+ param = param-name "=" param-value
+ *("," param-value)
+ ; Each property defines the specific ABNF for the parameters
+ ; allowed on the property. Refer to specific properties for
+ ; precise parameter ABNF.
+
+ param-name = iana-token / x-token
+
+ param-value = paramtext / quoted-string
+
+ paramtext = *SAFE-CHAR
+
+ value = *VALUE-CHAR
+
+ quoted-string = DQUOTE *QSAFE-CHAR DQUOTE
+
+ NON-US-ASCII = %x80-F8
+ ; Use restricted by charset parameter
+ ; on outer MIME object (UTF-8 preferred)
+
+ QSAFE-CHAR = WSP / %x21 / %x23-7E / NON-US-ASCII
+ ; Any character except CTLs and DQUOTE
+
+ SAFE-CHAR = WSP / %x21 / %x23-2B / %x2D-39 / %x3C-7E
+ / NON-US-ASCII
+ ; Any character except CTLs, DQUOTE, ";", ":", ","
+
+ VALUE-CHAR = WSP / %x21-7E / NON-US-ASCII
+ ; Any textual character
+
+ CR = %x0D
+ ; carriage return
+
+ LF = %x0A
+ ; line feed
+
+ CRLF = CR LF
+ ; Internet standard newline
+
+ CTL = %x00-08 / %x0A-1F / %x7F
+ ; Controls
+
+ ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
+
+ DIGIT = %x30-39
+ ; 0-9
+
+ DQUOTE = %x22
+ ; Quotation Mark
+
+ WSP = SPACE / HTAB
+
+ SPACE = %x20
+
+ HTAB = %x09
+ */
+
+@implementation CGICalendarContentLine
+
++ (BOOL)IsFoldingLineString:(NSString *)aString
+{
+ if ([aString hasPrefix:CG_ICALENDAR_CONTENTLINE_FOLDING_SPACE] || [aString hasPrefix:CG_ICALENDAR_CONTENTLINE_FOLDING_TAB])
+ return YES;
+ return NO;
+}
+
++ (id)contentLineWithString:(NSString *)aString
+{
+ CGICalendarContentLine *icalContentLine = [[CGICalendarContentLine alloc] initWithString:aString];
+ return [icalContentLine autorelease];
+}
+
+- (id)init
+{
+ if ((self = [super init])) {
+ }
+ return self;
+}
+
+- (id)initWithString:(NSString *)aString
+{
+ if ((self = [self init])) {
+ [self setString:aString];
+ }
+ return self;
+}
+
+- (void)setString:(NSString *)aString
+{
+ NSString *nowNewLineString = [aString stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
+ NSArray *values = [nowNewLineString componentsSeparatedByString:CG_ICALENDAR_CONTENTLINE_DELIM];
+ int valuesCnt = [values count];
+ if (valuesCnt < 2)
+ return;
+
+ NSArray *nameParams = [[values objectAtIndex:0] componentsSeparatedByString:CG_ICALENDAR_CONTENTLINE_NAMEPARAM_DELIM];
+ NSMutableArray *params = [NSMutableArray array];
+ int nameParamsCnt = [nameParams count];
+ for (int n=0; n<nameParamsCnt; n++) {
+ if (n == 0) {
+ [self setName:[nameParams objectAtIndex:0]];
+ continue;
+ }
+ CGICalendarParameter *icalParam = [[CGICalendarParameter alloc] initWithString:[nameParams objectAtIndex:n]];
+ [params addObject:icalParam];
+ [icalParam release];
+ }
+ [self setParameters:params];
+
+ NSMutableString *valueString = [NSMutableString string];
+ for (int n=1; n<valuesCnt; n++) {
+ if (1 < n)
+ [valueString appendString:CG_ICALENDAR_CONTENTLINE_DELIM];
+ [valueString appendString:[values objectAtIndex:n]];
+ }
+ [self setValue:valueString];
+}
+
+- (NSString *)description;
+{
+ NSMutableString *contentLine = [NSMutableString string];
+ if ([self hasName])
+ [contentLine appendString:[self name]];
+
+ for (CGICalendarParameter *param in [self parameters]) {
+ [contentLine appendString:CG_ICALENDAR_CONTENTLINE_NAMEPARAM_DELIM];
+ [contentLine appendString:[param string]];
+ }
+
+ [contentLine appendString:CG_ICALENDAR_CONTENTLINE_DELIM];
+ if ([self hasValue])
+ [contentLine appendString:[self value]];
+
+ [contentLine appendString:CG_ICALENDAR_CONTENTLINE_TERM];
+
+ return contentLine;
+}
+
+- (BOOL)isBegin
+{
+ return [self isName:CG_ICALENDAR_CONTENTLINE_NAME_BEGIN];
+}
+
+- (BOOL)isEnd
+{
+ return [self isName:CG_ICALENDAR_CONTENTLINE_NAME_END];
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarObject.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarObject.h.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..7538b51fb1cf694271839acc9f81fedd2cef3648
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarObject.h.svn-base
@@ -0,0 +1,42 @@
+//
+// CGICalendarObject.h
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "CGICalendarComponent.h"
+#import "CGICalendarProperty.h"
+
+#define CG_ICALENDAR_OBJECT_VERSION_DEFAULT @"2.0"
+#define CG_ICALENDAR_OBJECT_PRODID_DEFAULT @"//CyberGarage//iCal4ObjC//EN"
+
+@interface CGICalendarObject : CGICalendarComponent {
+
+}
+
++ (id)object;
++ (id)objectWithProdid:(NSString *)prodid;
++ (id)objectWithProdid:(NSString *)prodid version:(NSString *)version;
+
+- (id)init;
+- (id)initWithProdid:(NSString *)prodid;
+- (id)initWithProdid:(NSString *)prodid version:(NSString *)version;
+
+- (void)setVersion:(NSString *)version;
+- (NSString *)version;
+
+- (void)setProdid:(NSString *)prodid;
+- (NSString *)prodid;
+
+- (NSArray *)componentsWithType:(NSString *)type;
+- (NSArray *)events;
+- (NSArray *)todos;
+- (NSArray *)journals;
+- (NSArray *)freebusies;
+- (NSArray *)timezones;
+
+@end
+
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarObject.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarObject.m.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..1ff0d54e30ed37ec3b51e5ad3ffd7b2f7a09cd81
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarObject.m.svn-base
@@ -0,0 +1,129 @@
+//
+// CGICalendarObject.m
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "CGICalendarObject.h"
+
+#define CG_ICALENDAR_OBJECT_TYPE_DEFAULT @"VCALENDAR"
+#define CG_ICALENDAR_OBJECT_VERSION_PARAM @"VERSION"
+#define CG_ICALENDAR_OBJECT_PRODID_PARAM @"PRODID"
+
+@implementation CGICalendarObject
+
+#pragma mark -
+#pragma mark Global
+
++ (id)object
+{
+ return [[[CGICalendarObject alloc] init] autorelease];
+}
+
++ (id)objectWithProdid:(NSString *)prodid
+{
+ return [[[CGICalendarObject alloc] initWithProdid:prodid] autorelease];
+}
+
++ (id)objectWithProdid:(NSString *)prodid version:(NSString *)version
+{
+ return [[[CGICalendarObject alloc] initWithProdid:prodid version:version] autorelease];
+}
+
+#pragma mark -
+#pragma mark Initialize
+
+- (id)init
+{
+ if ((self = [super init])) {
+ [self setType:CG_ICALENDAR_OBJECT_TYPE_DEFAULT];
+ [self setVersion:CG_ICALENDAR_OBJECT_VERSION_DEFAULT];
+ [self setProdid:CG_ICALENDAR_OBJECT_PRODID_DEFAULT];
+ }
+ return self;
+}
+
+- (id)initWithProdid:(NSString *)prodid version:(NSString *)version;
+{
+ if ((self = [super init])) {
+ [self setType:CG_ICALENDAR_OBJECT_TYPE_DEFAULT];
+ [self setVersion:version];
+ [self setProdid:prodid];
+ }
+ return self;
+}
+
+- (id)initWithProdid:(NSString *)prodid
+{
+ if ((self = [super init])) {
+ [self setType:CG_ICALENDAR_OBJECT_TYPE_DEFAULT];
+ [self setVersion:CG_ICALENDAR_OBJECT_VERSION_DEFAULT];
+ [self setProdid:prodid];
+ }
+ return self;
+}
+
+#pragma mark -
+#pragma mark Property Utility Methods
+
+- (void)setVersion:(NSString *)version
+{
+ [self setPropertyValue:version forName:CG_ICALENDAR_OBJECT_VERSION_PARAM];
+}
+
+- (NSString *)version
+{
+ return [self propertyValueForName:CG_ICALENDAR_OBJECT_VERSION_PARAM];
+}
+
+- (void)setProdid:(NSString *)prodid
+{
+ [self setPropertyValue:prodid forName:CG_ICALENDAR_OBJECT_PRODID_PARAM];
+}
+
+- (NSString *)prodid
+{
+ return [self propertyValueForName:CG_ICALENDAR_OBJECT_PRODID_PARAM];
+}
+
+#pragma mark -
+#pragma mark conponents
+
+- (NSArray *)componentsWithType:(NSString *)type
+{
+ NSMutableArray *typeComponents = [NSMutableArray array];
+ for (CGICalendarComponent *icalComponent in [self components]) {
+ if ([icalComponent isType:type] == NO)
+ continue;
+ [typeComponents addObject:icalComponent];
+ }
+ return typeComponents;
+}
+
+- (NSArray *)events
+{
+ return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_EVENT];
+}
+
+- (NSArray *)todos
+{
+ return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_TODO];
+}
+
+- (NSArray *)journals
+{
+ return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_JOURNAL];
+}
+
+- (NSArray *)freebusies
+{
+ return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY];
+}
+
+- (NSArray *)timezones
+{
+ return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE];
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarParameter.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarParameter.h.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..ee5a54d907a8a0dd7db1f0827f00baca2eb2240f
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarParameter.h.svn-base
@@ -0,0 +1,18 @@
+//
+// CGICalendarParameter.h
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "CGICalendarValue.h"
+
+@interface CGICalendarParameter : CGICalendarValue {
+
+}
+- (id)init;
+- (id)initWithString:(NSString *)aString;
+- (void)setString:(NSString *)aString;
+- (NSString *) string;
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarParameter.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarParameter.m.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..c6044896e5c61b52f479a36b80ce65d2b51d95aa
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarParameter.m.svn-base
@@ -0,0 +1,46 @@
+//
+// CGICalendarParameter.m
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "CGICalendarParameter.h"
+
+#define CG_ICALENDAR_PARAMETER_DELIM @"="
+
+@implementation CGICalendarParameter
+
+- (id)init
+{
+ if ((self = [super init])) {
+ }
+ return self;
+}
+
+- (id)initWithString:(NSString *)aString
+{
+ if ((self = [self init])) {
+ [self setString:aString];
+ }
+ return self;
+}
+
+- (void)setString:(NSString *)aString
+{
+ NSArray *values = [aString componentsSeparatedByString:CG_ICALENDAR_PARAMETER_DELIM];
+ if ([values count] < 2)
+ return;
+ [self setName:[values objectAtIndex:0]];
+ [self setValue:[values objectAtIndex:1]];
+}
+
+- (NSString *) string;
+{
+ return [NSString stringWithFormat:@"%@%@%@",
+ [self name] ? [self name] : @"",
+ CG_ICALENDAR_PARAMETER_DELIM,
+ [self value] ? [self value] : @""];
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarProperty.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarProperty.h.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..a2d4003cbd33a503226b670696938e1e7b520d2d
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarProperty.h.svn-base
@@ -0,0 +1,78 @@
+//
+// CGICalendarProperty.h
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "CGICalendarValue.h"
+#import "CGICalendarParameter.h"
+
+#define CG_ICALENDAR_PROERTY_PARTSTAT @"PARTSTAT"
+
+#define CG_ICALENDAR_PROERTY_COMPLETED @"COMPLETED"
+#define CG_ICALENDAR_PROERTY_DTEND @"DTEND"
+#define CG_ICALENDAR_PROERTY_DUE @"DUE"
+#define CG_ICALENDAR_PROERTY_DTSTART @"DTSTART"
+
+// 4.8.1 Descriptive Component Properties
+
+#define CG_ICALENDAR_PROERTY_DESCRIPTION @"DESCRIPTION"
+#define CG_ICALENDAR_PROERTY_PRIORITY @"PRIORITY"
+#define CG_ICALENDAR_PROERTY_SUMMARY @"SUMMARY"
+
+// 4.8.4 Relationship Component Properties
+#define CG_ICALENDAR_PROERTY_UID @"UID"
+
+// 4.8.7 Change Management Component Properties
+
+#define CG_ICALENDAR_PROERTY_CREATED @"CREATED"
+#define CG_ICALENDAR_PROERTY_DTSTAMP @"DTSTAMP"
+#define CG_ICALENDAR_PROERTY_LASTMODIFIED @"LAST-MODIFIED"
+#define CG_ICALENDAR_PROERTY_SEQUENCE @"SEQUENCE"
+
+enum {
+ CGICalendarParticipationStatusUnkown = 0,
+ CGICalendarParticipationStatusNeedsAction,
+ CGICalendarParticipationStatusAccepted,
+ CGICalendarParticipationStatusDeclined,
+ CGICalendarParticipationStatusTentative,
+ CGICalendarParticipationStatusDelegated,
+ CGICalendarParticipationStatusCompleted,
+ CGICalendarParticipationStatusInProcess,
+};
+
+@interface CGICalendarProperty : CGICalendarValue {
+}
+@property(retain) NSMutableArray *parameters;
+
+- (id)init;
+
+- (BOOL)hasParameterForName:(NSString *)name;
+- (void)addParameter:(CGICalendarParameter *)parameter;
+- (void)removeParameterForName:(NSString *)name;
+
+- (void)setParameterValue:(NSString *)value forName:(NSString *)name;
+- (void)setParameterValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setParameterObject:(id)object forName:(NSString *)name;
+- (void)setParameterObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setParameterDate:(NSDate *)object forName:(NSString *)name;
+- (void)setParameterDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setParameterInteger:(int)value forName:(NSString *)name;
+- (void)setParameterInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setParameterFloat:(float)value forName:(NSString *)name;
+- (void)setParameterFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+
+- (CGICalendarParameter *)parameterAtIndex:(NSUInteger)index;
+- (CGICalendarParameter *)parameterForName:(NSString *)name;
+- (NSArray *)allParameterKeys;
+- (NSString *)parameterValueForName:(NSString *)name;
+- (NSDate *)parameterDateForName:(NSString *)name;
+- (int)parameterIntegerForName:(NSString *)name;
+- (float)parameterFloatForName:(NSString *)name;
+
+- (void)setParticipationStatus:(int)value;
+- (int)participationStatus;
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarProperty.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarProperty.m.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..eadcd1351e7ff9f2b560ed5031dfb9d6c08dcb31
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarProperty.m.svn-base
@@ -0,0 +1,228 @@
+//
+// CGICalendarProperty.m
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "CGICalendarProperty.h"
+#import "CGICalendarContentLine.h"
+#import "NSDate+CGICalendar.h"
+
+@implementation CGICalendarProperty
+
+@synthesize parameters;
+
+- (id)init
+{
+ if ((self = [super init])) {
+ }
+ return self;
+}
+
+#pragma mark -
+#pragma mark Parameter
+
+- (BOOL)hasParameterForName:(NSString *)name
+{
+ for (CGICalendarParameter *icalProp in [self parameters]) {
+ if ([icalProp isName:name]) {
+ [[self parameters] removeObject:icalProp];
+ return YES;
+ }
+ }
+ return NO;
+}
+
+- (void)addParameter:(CGICalendarParameter *)parameter
+{
+ [[self parameters] addObject:parameter];
+}
+
+- (void)removeParameterForName:(NSString *)name
+{
+ for (CGICalendarParameter *icalProp in [self parameters]) {
+ if ([icalProp isName:name]) {
+ [[self parameters] removeObject:icalProp];
+ return;
+ }
+ }
+}
+
+- (void)setParameterValue:(NSString *)value forName:(NSString *)name
+{
+ CGICalendarParameter *icalProp = [self parameterForName:name];
+ if (icalProp == nil) {
+ icalProp = [[[CGICalendarParameter alloc] init] autorelease];
+ [icalProp setName:name];
+ [self addParameter:icalProp];
+ }
+ [icalProp setValue:value];
+}
+
+- (void)setParameterValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+{
+ [self setParameterValue:value forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]];
+}
+
+- (void)setParameterObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setParameterValue:[object description] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (void)setParameterObject:(id)object forName:(NSString *)name
+{
+ [self setParameterValue:[object description] forName:name];
+}
+
+- (void)setParameterDate:(NSDate *)object forName:(NSString *)name
+{
+ [self setParameterValue:[object descriptionICalendar] forName:name];
+}
+
+- (void)setParameterDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setParameterValue:[object descriptionICalendar] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (void)setParameterInteger:(int)value forName:(NSString *)name
+{
+ [self setParameterValue:[[NSNumber numberWithInteger:value] stringValue] forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]];
+}
+
+- (void)setParameterInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setParameterValue:[[NSNumber numberWithInteger:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (void)setParameterFloat:(float)value forName:(NSString *)name
+{
+ [self setParameterValue:[[NSNumber numberWithFloat:value] stringValue] forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]];
+}
+
+- (void)setParameterFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setParameterValue:[[NSNumber numberWithFloat:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (id)parameterAtIndex:(NSUInteger)index
+{
+ return [[self parameters] objectAtIndex:index];
+}
+
+- (CGICalendarParameter *)parameterForName:(NSString *)name
+{
+ for (CGICalendarParameter *icalProp in [self parameters]) {
+ if ([icalProp isName:name])
+ return icalProp;
+ }
+ return nil;
+}
+
+- (NSArray *)allParameterKeys
+{
+ NSMutableArray *keys = [NSMutableArray array];
+ for (CGICalendarParameter *icalProp in [self parameters])
+ [keys addObject:[icalProp name]];
+ return keys;
+}
+
+- (NSString *)parameterValueForName:(NSString *)name
+{
+ for (CGICalendarParameter *icalProp in [self parameters]) {
+ if ([icalProp isName:name])
+ return [icalProp value];
+ }
+ return nil;
+}
+
+- (NSDate *)parameterDateForName:(NSString *)name
+{
+ for (CGICalendarParameter *icalProp in [self parameters]) {
+ if ([icalProp isName:name])
+ return [icalProp dateValue];
+ }
+ return nil;
+}
+
+- (int)parameterIntegerForName:(NSString *)name;
+{
+ for (CGICalendarParameter *icalProp in [self parameters]) {
+ if ([icalProp isName:name])
+ return [icalProp integerValue];
+ }
+ return 0;
+}
+
+- (float)parameterFloatForName:(NSString *)name;
+{
+ for (CGICalendarParameter *icalProp in [self parameters]) {
+ if ([icalProp isName:name])
+ return [icalProp floatValue];
+ }
+ return 0;
+}
+
+#pragma mark -
+#pragma mark String
+
+- (NSString *)description
+{
+ NSMutableString *propertyString = [NSMutableString string];
+
+ [propertyString appendFormat:@"%@", [self name]];
+
+ for (CGICalendarParameter *icalParam in [self parameters])
+ [propertyString appendFormat:@";%@", [icalParam description]];
+
+ [propertyString appendFormat:@"%:%@%@", ((0 < [[self value] length]) ? [self value] : @""), CG_ICALENDAR_CONTENTLINE_TERM];
+
+ return propertyString;
+}
+
+#pragma mark -
+#pragma mark ParticipationStatus
+
+- (NSArray *)participationStatusStrings
+{
+ static NSArray *statusStrings = nil;
+
+ if (statusStrings == nil) {
+ statusStrings = [NSArray arrayWithObjects:
+ @"",
+ @"NEEDS-ACTION",
+ @"ACCEPTED",
+ @"DECLINED",
+ @"TENTATIVE",
+ @"DELEGATED",
+ @"COMPLETED",
+ @"IN-PROCESS",
+ nil];
+ }
+
+ return statusStrings;
+}
+
+- (void)setParticipationStatus:(int)status
+{
+ NSArray *statusStrings = [self participationStatusStrings];
+ if (status < 0 || ([statusStrings count]-1) < status)
+ return;
+ [self setValue:[statusStrings objectAtIndex:status]];
+}
+
+- (int)participationStatus
+{
+ if ([self value] == nil)
+ return CGICalendarParticipationStatusUnkown;
+
+ NSArray *statusStrings = [self participationStatusStrings];
+ for (int n=0; n<[statusStrings count]; n++) {
+ if ([[self value] isEqualToString:[statusStrings objectAtIndex:n]])
+ return n;
+ }
+
+ return CGICalendarParticipationStatusUnkown;
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarValue.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarValue.h.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..d1020fa7080ba4ee08dcac24671f5fc7d43f87f0
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarValue.h.svn-base
@@ -0,0 +1,50 @@
+//
+// CGICalendarValue.h
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+enum {
+ CGICalendarValueTypeUnknown = 0,
+ CGICalendarValueTypeBinary,
+ CGICalendarValueTypeBoolean,
+ CGICalendarValueTypeCalendarUserAddress,
+ CGICalendarValueTypeDate,
+ CGICalendarValueTypeDateTime,
+ CGICalendarValueTypeDuration,
+ CGICalendarValueTypeFloat,
+ CGICalendarValueTypeInteger,
+ CGICalendarValueTypePeriodOfTime,
+ CGICalendarValueTypeRecurrenceRule,
+ CGICalendarValueTypeText,
+ CGICalendarValueTypeTime,
+ CGICalendarValueTypeURI,
+ CGICalendarValueTypeUTCOffset,
+};
+
+@interface CGICalendarValue : NSObject {
+
+}
+@property(assign) int type;
+@property(retain) NSString *name;
+@property(retain) NSString *value;
+
+- (id)init;
+
+- (BOOL)hasName;
+- (BOOL)hasValue;
+
+- (BOOL)isName:(NSString *)aName;
+- (BOOL)isValue:(NSString *)aValue;
+
+- (void)setObject:(id)value;
+- (void)setDate:(NSDate *)value;
+
+- (NSDate *)dateValue;
+- (int)integerValue;
+- (float)floatValue;
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarValue.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarValue.m.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..4364c11e4d5ce3a0b196d47b5102bdc8050cfead
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarValue.m.svn-base
@@ -0,0 +1,77 @@
+//
+// CGICalendarValue.m
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "CGICalendarValue.h"
+#import "NSDate+CGICalendar.h"
+
+@implementation CGICalendarValue
+
+@synthesize type;
+@synthesize value;
+@synthesize name;
+
+- (id)init
+{
+ if ((self = [super init])) {
+ }
+ return self;
+}
+
+- (BOOL)hasName
+{
+ if ([self name] != nil && 0 < [[self name] length])
+ return YES;
+ return NO;
+}
+
+- (BOOL)hasValue
+{
+ if ([self value] != nil && 0 < [[self value] length])
+ return YES;
+ return NO;
+}
+
+- (BOOL)isName:(NSString *)aName
+{
+ if (aName == nil || [aName length] <= 0)
+ return NO;
+ return [aName isEqualToString:[self name]];
+}
+
+- (BOOL)isValue:(NSString *)aValue
+{
+ if (aValue == nil || [aValue length] <= 0)
+ return NO;
+ return [aValue isEqualToString:[self value]];
+}
+
+- (void)setObject:(id)aValue
+{
+ [self setValue:[value description]];
+}
+
+- (void)setDate:(NSDate *)aValue
+{
+ [self setValue:[aValue descriptionICalendar]];
+}
+
+- (NSDate *)dateValue
+{
+ return [NSDate dateWithICalendarString:[self value]];
+}
+
+- (int)integerValue
+{
+ return [[self value] integerValue];
+}
+
+- (float)floatValue
+{
+ return [[self value] floatValue];
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/NSDate+CGICalendar.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/NSDate+CGICalendar.h.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..3e649c81c35ecb34c4bba7a0d79ad9911da74e95
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/NSDate+CGICalendar.h.svn-base
@@ -0,0 +1,16 @@
+//
+// NSDate+CGICalendar.h
+//
+// Created by Satoshi Konno on 5/12/11.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+@interface NSDate(CGICalendar)
++ (id)dateWithICalendarString:(NSString *)aString;
++ (id)dateWithICalendarISO8601:(NSString *)aString;
+- (NSString *)descriptionICalendar;
+- (NSString *)descriptionISO8601;
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/NSDate+CGICalendar.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/NSDate+CGICalendar.m.svn-base
new file mode 100755
index 0000000000000000000000000000000000000000..18a8339431cf4011bd33447a164083d87f4a1ba9
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/NSDate+CGICalendar.m.svn-base
@@ -0,0 +1,49 @@
+//
+// NSDate+CGICalendar.m
+//
+// Created by Satoshi Konno on 5/12/11.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "NSDate+CGICalendar.h"
+
+#define CGNSDATE_ICALENDAR_DATETMEFORMAT @"YYYYMMdd'T'kkmmss'Z'"
+#define CGNSDATE_ISO8601_DATETMEFORMAT @"YYYY-MM-dd kk:mm:ss"
+
+@implementation NSDate(CGICalendar)
+
++ (id)dateWithICalendarString:(NSString *)aString
+{
+ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+ NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
+ [dateFormatter setTimeZone:timeZone];
+ [dateFormatter setDateFormat:CGNSDATE_ICALENDAR_DATETMEFORMAT];
+ return [dateFormatter dateFromString:aString];
+}
+
++ (id)dateWithICalendarISO8601:(NSString *)aString
+{
+ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+ [dateFormatter setTimeStyle:NSDateFormatterFullStyle];
+ [dateFormatter setDateFormat:CGNSDATE_ISO8601_DATETMEFORMAT];
+ return [dateFormatter dateFromString:aString];
+}
+
+- (NSString *)descriptionICalendar
+{
+ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+ NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
+ [dateFormatter setTimeZone:timeZone];
+ [dateFormatter setDateFormat:CGNSDATE_ICALENDAR_DATETMEFORMAT];
+ return [dateFormatter stringFromDate:self];
+}
+
+- (NSString *)descriptionISO8601
+{
+ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+ [dateFormatter setLocale:[NSLocale systemLocale]];
+ [dateFormatter setDateFormat:CGNSDATE_ISO8601_DATETMEFORMAT];
+ return [dateFormatter stringFromDate:self];
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendar.h b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendar.h
new file mode 100755
index 0000000000000000000000000000000000000000..f69d8c3cb2cbb83eda820b876aacbe386f23712e
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendar.h
@@ -0,0 +1,39 @@
+//
+// CGICalendar.h
+//
+// Created by Satoshi Konno on 11/01/28.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "CGICalendarObject.h"
+#import "NSDate+CGICalendar.h"
+#import "CGICalendarComponent.h"
+#import "CGICalendarProperty.h"
+
+#define CG_ICALENDAR_HEADER_CONTENTLINE @"BEGIN:VCALENDAR"
+#define CG_ICALENDAR_FOOTER_CONTENTLINE @"END:VCALENDAR"
+
+@interface CGICalendar : NSObject {
+
+}
+@property(retain) NSMutableArray *objects;
+
++ (NSString *)UUID;
+
+- (id)init;
+- (id)initWithString:(NSString *)string;
+- (id)initWithPath:(NSString *)path;
+
+- (BOOL)parseWithString:(NSString *)string error:(NSError **)error;
+- (BOOL)parseWithPath:(NSString *)path error:(NSError **)error;
+
+- (void)addObject:(CGICalendarObject *)object;
+- (CGICalendarObject *)objectAtIndex:(NSUInteger)index;
+
+- (NSString *)description;
+
+- (BOOL)writeToFile:(NSString *)path;
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendar.m b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendar.m
new file mode 100755
index 0000000000000000000000000000000000000000..9260de5b4eddba5bc3d0f60297330da848dcc324
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendar.m
@@ -0,0 +1,217 @@
+//
+// CGICalendar.m
+//
+// Created by Satoshi Konno on 11/01/28.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "CGICalendar.h"
+#import "CGICalendarContentLine.h"
+
+@interface CGICalendar()
+@property(retain) NSMutableArray *parserStack;
+- (id)peekParserObject;
+- (id)popParserObject;
+- (void)pushParserObject:(id)object;
+- (void)clearParserObjects;
+@end
+
+@implementation CGICalendar
+
+@synthesize objects;
+@synthesize parserStack;
+
+#pragma mark -
+#pragma mark Class Methods
+
++ (NSString *)UUID
+{
+ CFUUIDRef uuid = CFUUIDCreate(nil);
+ NSString *uuidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(nil, uuid));
+ CFRelease(uuid);
+ return uuidString;
+}
+
+#pragma mark -
+#pragma mark Initialize
+
+- (id)init
+{
+ if ((self = [super init])) {
+ [self setObjects:[NSMutableArray array]];
+ }
+ return self;
+}
+
+- (id)initWithString:(NSString *)aString
+{
+ if ((self = [self init])) {
+ [self parseWithString:aString error:nil];
+ }
+ return self;
+}
+
+- (id)initWithPath:(NSString *)aPath
+{
+ if ((self = [self init])) {
+ [self parseWithPath:aPath error:nil];
+ }
+ return self;
+}
+
+#pragma mark -
+#pragma mark Object
+
+- (void)addObject:(CGICalendarObject *)object
+{
+ [[self objects] addObject:object];
+}
+
+- (CGICalendarObject *)objectAtIndex:(NSUInteger)index
+{
+ return [[self objects] objectAtIndex:index];
+}
+
+#pragma mark -
+#pragma mark Parser
+
+- (NSError *)createErrorAt:(NSUInteger)lineNumber lineString:(NSString *)lineString
+{
+ return [NSError errorWithDomain:@"iCalForObjC" code:-1 userInfo:
+ [NSDictionary dictionaryWithObjectsAndKeys:
+ [NSString stringWithFormat:@"%@", lineString], @"LineNumber",
+ lineString, @"ContentLine",
+ nil]];
+}
+
+- (BOOL)parseWithString:(NSString *)aString error:(NSError **)error
+{
+ [self setObjects:[NSMutableArray array]];
+ [self clearParserObjects];
+
+ if (aString == nil)
+ return NO;
+
+ NSArray *foldingContentLines = [aString componentsSeparatedByString:CG_ICALENDAR_CONTENTLINE_TERM];
+ NSMutableArray *contentLines = [NSMutableArray array];
+ for (NSString *foldingContentLine in foldingContentLines) {
+ if (foldingContentLine == nil)
+ continue;
+ if ([CGICalendarContentLine IsFoldingLineString:foldingContentLine] == NO) {
+ [contentLines addObject:[NSMutableString stringWithString:foldingContentLine]];
+ continue;
+ }
+ NSMutableString *lastLineString = [contentLines lastObject];
+ if (lastLineString == nil)
+ continue;
+ [lastLineString appendString:[foldingContentLine substringWithRange:NSMakeRange(1, ([foldingContentLine length] - 1))]];
+ }
+
+ int contentLineNumber = 0;
+ for (NSString *contentLine in contentLines) {
+ contentLineNumber++;
+
+ CGICalendarContentLine *icalContentLine = [[CGICalendarContentLine alloc] initWithString:contentLine];
+ CGICalendarComponent *icalParentComponent = [self peekParserObject];
+
+ // BEGIN
+ if ([icalContentLine isBegin]) {
+ CGICalendarComponent *icalComponent;
+ if (icalParentComponent == nil) {
+ icalComponent = [[CGICalendarObject alloc] init];
+ [self addObject:(CGICalendarObject *)icalComponent];
+ }
+ else {
+ icalComponent = [[CGICalendarComponent alloc] init];
+ [icalParentComponent addComponent:icalComponent];
+ }
+ [icalComponent setType:[icalContentLine value]];
+ [self pushParserObject:icalComponent];
+ continue;
+ }
+
+ // END
+ if ([icalContentLine isEnd]) {
+ [self popParserObject];
+ continue;
+ }
+
+ NSString *propertyName = [icalContentLine name];
+ CGICalendarProperty *icalProperty = [icalParentComponent propertyForName:propertyName];
+ if (icalProperty == nil) {
+ icalProperty = [[CGICalendarProperty alloc] init];
+ [icalProperty setName:propertyName];
+ [icalParentComponent addProperty:icalProperty];
+ }
+ [icalProperty setValue:[icalContentLine value]];
+ for (CGICalendarParameter *icalParameter in [icalContentLine parameters])
+ [icalProperty setParameterValue:[icalParameter value] forName:[icalParameter name]];
+
+ }
+
+ return YES;
+}
+
+- (BOOL)parseWithPath:(NSString *)path error:(NSError **)error
+{
+ NSData *fileData = [NSData dataWithContentsOfFile:path];
+ if (fileData == nil)
+ return NO;
+ return [self parseWithString:[[NSString alloc] initWithData:fileData encoding:NSUTF8StringEncoding] error:error];
+}
+
+#pragma mark -
+#pragma mark Parser Stack Methods
+
+- (id)peekParserObject
+{
+ return [[self parserStack] lastObject];
+}
+
+- (id)popParserObject
+{
+ id lastObject = [[self parserStack] lastObject];
+ [[self parserStack] removeLastObject];
+ return lastObject;
+}
+
+- (void)pushParserObject:(id)object
+{
+ [[self parserStack] addObject:object];
+}
+
+- (void)clearParserObjects
+{
+ [self setParserStack:[NSMutableArray array]];
+}
+
+#pragma mark -
+#pragma mark String
+
+- (NSString *)description
+{
+ NSMutableString *descrString = [NSMutableString string];
+
+ for (CGICalendarObject *icalObj in [self objects])
+ [descrString appendString:[icalObj description]];
+
+ return descrString;
+}
+
+#pragma mark -
+#pragma mark File
+
+- (BOOL)writeToFile:(NSString *)path
+{
+ NSString *desc = [self description];
+ if (desc == nil)
+ return NO;
+
+ NSData *data = [desc dataUsingEncoding:NSUTF8StringEncoding];
+ if (data == nil)
+ return NO;
+
+ return [data writeToFile:path atomically:YES];
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarComponent.h b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarComponent.h
new file mode 100755
index 0000000000000000000000000000000000000000..f000bece3d1c7e53018905f5008bd3fe7c031b60
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarComponent.h
@@ -0,0 +1,129 @@
+//
+// CGICalendarComponent.h
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "CGICalendarProperty.h"
+
+#define CG_ICALENDAR_COMPONENT_TYPE_EVENT @"VEVENT"
+#define CG_ICALENDAR_COMPONENT_TYPE_TODO @"VTODO"
+#define CG_ICALENDAR_COMPONENT_TYPE_JOURNAL @"VJOURNAL"
+#define CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY @"VFREEBUSY"
+#define CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE @"VTIMEZONE"
+#define CG_ICALENDAR_COMPONENT_TYPE_ALARM @"VALARM"
+
+@interface CGICalendarComponent : NSObject {
+
+}
+@property(retain) NSString *type;
+@property(retain) NSMutableArray *components;
+@property(retain) NSMutableArray *properties;
+
++ (id)componentWithType:(NSString *)type;
++ (id)event;
++ (id)todo;
++ (id)journal;
++ (id)freebusy;
++ (id)timezone;
++ (id)alarm;
+
+- (id)initWithType:(NSString *)type;
+
+- (BOOL)isType:(NSString *)type;
+- (BOOL)isEvent;
+- (BOOL)isTodo;
+- (BOOL)isJournal;
+- (BOOL)isFreebusy;
+- (BOOL)isTimezone;
+- (BOOL)isAlarm;
+
+- (void)addComponent:(CGICalendarComponent *)component;
+- (void)insertComponent:(CGICalendarComponent *)component atIndex:(NSUInteger)index;
+- (CGICalendarComponent *)componentAtIndex:(NSUInteger)index;
+- (NSUInteger)indexOfComponent:(CGICalendarComponent *)component;
+- (void)removeComponent:(CGICalendarComponent *)component;
+- (void)removeComponentAtIndex:(NSUInteger)index;
+
+- (BOOL)hasPropertyForName:(NSString *)name;
+- (void)addProperty:(CGICalendarProperty *)property;
+- (void)removePropertyForName:(NSString *)name;
+
+- (void)setPropertyValue:(NSString *)value forName:(NSString *)name;
+- (void)setPropertyValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setPropertyObject:(id)object forName:(NSString *)name;
+- (void)setPropertyObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name;
+- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setPropertyInteger:(int)value forName:(NSString *)name;
+- (void)setPropertyInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setPropertyFloat:(float)value forName:(NSString *)name;
+- (void)setPropertyFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+
+- (NSArray *)allPropertyKeys;
+- (CGICalendarProperty *)propertyAtIndex:(NSUInteger)index;
+- (CGICalendarProperty *)propertyForName:(NSString *)name;
+
+- (NSString *)propertyValueForName:(NSString *)name;
+- (NSDate *)propertyDateForName:(NSString *)name;
+- (int)propertyIntegerForName:(NSString *)name;
+- (float)propertyFloatForName:(NSString *)name;
+
+- (NSString *)description;
+
+// 4.2.12 Participation Status
+- (void)setParticipationStatus:(int)status;
+- (int)participationStatus;
+
+// 4.8.1.5 Description
+- (void)setNotes:(NSString *)value;
+- (NSString *)notes;
+
+// 4.8.1.9 Priority
+- (void)setPriority:(NSUInteger)value;
+- (NSUInteger)priority;
+
+// 4.8.1.12 Summary
+- (void)setSummary:(NSString *)value;
+- (NSString *)summary;
+
+// 4.8.2.1 Date/Time Completed
+- (void)setCompleted:(NSDate *)value;
+- (NSDate *)completed;
+
+// 4.8.2.2 Date/Time End
+- (void)setDateTimeEnd:(NSDate *)value;
+- (NSDate *)dateTimeEnd;
+
+// 4.8.2.3 Date/Time Due
+- (void)setDue:(NSDate *)value;
+- (NSDate *)due;
+
+// 4.8.2.4 Date/Time Start
+- (void)setDateTimeStart:(NSDate *)value;
+- (NSDate *)dateTimeStart;
+
+// 4.8.4.7 Unique Identifier
+- (void)setUID:(NSString *)value;
+- (NSString *)UID;
+
+// 4.8.7.1 Date/Time Created
+- (void)setCreated:(NSDate *)value;
+- (NSDate *)created;
+
+// 4.8.7.2 Date/Time Stamp
+- (void)setDateTimeStamp:(NSDate *)value;
+- (NSDate *)dateTimeStamp;
+
+// 4.8.7.3 Last Modified
+- (void)setLastModified:(NSDate *)value;
+- (NSDate *)lastModified;
+
+// 4.8.7.4 Sequence Number
+- (void)setSequenceNumber:(NSUInteger)value;
+- (NSUInteger)sequenceNumber;
+- (void)incrementSequenceNumber;
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarComponent.m b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarComponent.m
new file mode 100755
index 0000000000000000000000000000000000000000..0f9b01e80b5001ced1993893ba677d3c899d322b
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarComponent.m
@@ -0,0 +1,523 @@
+//
+// CGICalendarComponent.m
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "CGICalendar.h"
+#import "CGICalendarComponent.h"
+#import "CGICalendarContentLine.h"
+#import "NSDate+CGICalendar.h"
+
+#define CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT 0
+
+@implementation CGICalendarComponent
+
+@synthesize type;
+@synthesize components;
+@synthesize properties;
+
+#pragma mark -
+#pragma mark Global methods
+
++ (id)componentWithType:(NSString *)aType
+{
+ return [[CGICalendarComponent alloc] initWithType:aType];
+}
+
++ (id)event
+{
+ CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_EVENT];
+ [icalComp setUID:[CGICalendar UUID]];
+ [icalComp setDateTimeStamp:[NSDate date]];
+ [icalComp setSequenceNumber:CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT];
+ return icalComp;
+}
+
++ (id)todo
+{
+ CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_TODO];
+ [icalComp setUID:[CGICalendar UUID]];
+ [icalComp setDateTimeStamp:[NSDate date]];
+ [icalComp setSequenceNumber:CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT];
+ [icalComp setCreated:[NSDate date]];
+ return icalComp;
+}
+
++ (id)journal
+{
+ CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_JOURNAL];
+ [icalComp setUID:[CGICalendar UUID]];
+ [icalComp setDateTimeStamp:[NSDate date]];
+ [icalComp setSequenceNumber:CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT];
+ return icalComp;
+}
+
++ (id)freebusy
+{
+ CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY];
+ [icalComp setUID:[CGICalendar UUID]];
+ [icalComp setDateTimeStamp:[NSDate date]];
+ return icalComp;
+}
+
++ (id)timezone
+{
+ CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE];
+ return icalComp;
+}
+
++ (id)alarm
+{
+ CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_ALARM];
+ return icalComp;
+}
+
+#pragma mark -
+#pragma mark init
+
+- (id)init
+{
+ if ((self = [super init])) {
+ [self setComponents:[NSMutableArray array]];
+ [self setProperties:[NSMutableArray array]];
+ }
+ return self;
+}
+
+- (id)initWithType:(NSString *)aType
+{
+ if ((self = [self init])) {
+ [self setType:aType];
+ }
+ return self;
+}
+
+#pragma mark -
+#pragma mark Component
+
+- (void)addComponent:(CGICalendarComponent *)component
+{
+ [[self components] addObject:component];
+}
+
+- (void)insertComponent:(CGICalendarComponent *)component atIndex:(NSUInteger)index
+{
+ [[self components] insertObject:component atIndex:index];
+}
+
+- (CGICalendarComponent *)componentAtIndex:(NSUInteger)index
+{
+ return [[self components] objectAtIndex:index];
+}
+
+- (NSUInteger)indexOfComponent:(CGICalendarComponent *)component
+{
+ return [[self components] indexOfObject:component];
+}
+
+- (void)removeComponent:(CGICalendarComponent *)component
+{
+ [[self components] removeObject:component];
+}
+
+- (void)removeComponentAtIndex:(NSUInteger)index
+{
+ [[self components] removeObjectAtIndex:index];
+}
+
+#pragma mark -
+#pragma mark Property
+
+- (BOOL)hasPropertyForName:(NSString *)name
+{
+ for (CGICalendarProperty *icalProp in [self properties]) {
+ if ([icalProp isName:name]) {
+ [[self properties] removeObject:icalProp];
+ return YES;
+ }
+ }
+ return NO;
+}
+
+- (void)addProperty:(CGICalendarProperty *)property
+{
+ [[self properties] addObject:property];
+}
+
+- (void)removePropertyForName:(NSString *)name
+{
+ for (CGICalendarProperty *icalProp in [self properties]) {
+ if ([icalProp isName:name]) {
+ [[self properties] removeObject:icalProp];
+ return;
+ }
+ }
+}
+
+- (void)setPropertyValue:(NSString *)value forName:(NSString *)name
+{
+ [self setPropertyValue:value forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]];
+}
+
+- (void)setPropertyValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+{
+ CGICalendarProperty *icalProp = [self propertyForName:name];
+ if (icalProp == nil) {
+ icalProp = [[CGICalendarProperty alloc] init];
+ [icalProp setName:name];
+ [self addProperty:icalProp];
+ }
+ [icalProp setValue:value];
+
+ if ([parameterValues count] != [parameterNames count])
+ return;
+
+ for (int n=0; n<[parameterNames count]; n++) {
+ NSString *name = [parameterNames objectAtIndex:n];
+ id value = [parameterNames objectAtIndex:n];
+ [icalProp setParameterObject:value forName:name];
+ }
+}
+
+- (void)setPropertyObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setPropertyValue:[object description] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (void)setPropertyObject:(id)object forName:(NSString *)name
+{
+ [self setPropertyValue:[object description] forName:name];
+}
+
+- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name
+{
+ [self setPropertyValue:[object descriptionICalendar] forName:name];
+}
+
+- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setPropertyValue:[object descriptionICalendar] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (void)setPropertyInteger:(int)value forName:(NSString *)name
+{
+ [self setPropertyValue:[[NSNumber numberWithInteger:value] stringValue] forName:name];
+}
+
+- (void)setPropertyInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setPropertyValue:[[NSNumber numberWithInteger:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (void)setPropertyFloat:(float)value forName:(NSString *)name
+{
+ [self setPropertyValue:[[NSNumber numberWithFloat:value] stringValue] forName:name];
+}
+
+- (void)setPropertyFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setPropertyValue:[[NSNumber numberWithFloat:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (id)propertyAtIndex:(NSUInteger)index
+{
+ return [[self properties] objectAtIndex:index];
+}
+
+- (CGICalendarProperty *)propertyForName:(NSString *)name
+{
+ for (CGICalendarProperty *icalProp in [self properties]) {
+ if ([icalProp isName:name])
+ return icalProp;
+ }
+ return nil;
+}
+
+- (NSArray *)allPropertyKeys
+{
+ NSMutableArray *keys = [NSMutableArray array];
+ for (CGICalendarProperty *icalProp in [self properties])
+ [keys addObject:[icalProp name]];
+ return keys;
+}
+
+- (NSString *)propertyValueForName:(NSString *)name
+{
+ for (CGICalendarProperty *icalProp in [self properties]) {
+ if ([icalProp isName:name])
+ return [icalProp value];
+ }
+ return nil;
+}
+
+- (NSDate *)propertyDateForName:(NSString *)name
+{
+ for (CGICalendarProperty *icalProp in [self properties]) {
+ if ([icalProp isName:name])
+ return [icalProp dateValue];
+ }
+ return nil;
+}
+
+- (int)propertyIntegerForName:(NSString *)name;
+{
+ for (CGICalendarProperty *icalProp in [self properties]) {
+ if ([icalProp isName:name])
+ return [icalProp integerValue];
+ }
+ return 0;
+}
+
+- (float)propertyFloatForName:(NSString *)name;
+{
+ for (CGICalendarProperty *icalProp in [self properties]) {
+ if ([icalProp isName:name])
+ return [icalProp floatValue];
+ }
+ return 0;
+}
+
+#pragma mark -
+#pragma mark String
+
+- (BOOL)isType:(NSString *)aType
+{
+ return [aType isEqualToString:[self type]];
+}
+
+- (BOOL)isEvent
+{
+ return [self isType:CG_ICALENDAR_COMPONENT_TYPE_EVENT];
+}
+
+- (BOOL)isTodo
+{
+ return [self isType:CG_ICALENDAR_COMPONENT_TYPE_TODO];
+}
+
+- (BOOL)isJournal
+{
+ return [self isType:CG_ICALENDAR_COMPONENT_TYPE_JOURNAL];
+}
+
+- (BOOL)isFreebusy
+{
+ return [self isType:CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY];
+}
+
+- (BOOL)isTimezone
+{
+ return [self isType:CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE];
+}
+
+- (BOOL)isAlarm
+{
+ return [self isType:CG_ICALENDAR_COMPONENT_TYPE_ALARM];
+}
+
+#pragma mark -
+#pragma mark String
+
+#define CG_ICALENDAR_CONTENTLINE_NAME_BEGIN @"BEGIN"
+#define CG_ICALENDAR_CONTENTLINE_NAME_END @"END"
+
+- (NSString *)description
+{
+ NSMutableString *objectsString = [NSMutableString string];
+
+ [objectsString appendFormat:@"%@:%@%@",CG_ICALENDAR_CONTENTLINE_NAME_BEGIN, [self type], CG_ICALENDAR_CONTENTLINE_TERM];
+
+ for (CGICalendarProperty *icalProp in [self properties])
+ [objectsString appendString:[icalProp description]];
+
+ for (CGICalendarComponent *icalComp in [self components])
+ [objectsString appendString:[icalComp description]];
+
+ [objectsString appendFormat:@"%@:%@%@",CG_ICALENDAR_CONTENTLINE_NAME_END, [self type], CG_ICALENDAR_CONTENTLINE_TERM];
+
+ return objectsString;
+}
+
+#pragma mark -
+#pragma mark 4.2.12 Participation Status
+
+- (void)setParticipationStatus:(int)status
+{
+ CGICalendarProperty *icalProp = [self propertyForName:CG_ICALENDAR_PROERTY_PARTSTAT];
+ if (icalProp == nil)
+ icalProp = [[CGICalendarProperty alloc] init];
+ [icalProp setParticipationStatus:status];
+}
+
+- (int)participationStatus
+{
+ CGICalendarProperty *icalProp = [self propertyForName:CG_ICALENDAR_PROERTY_PARTSTAT];
+ if (icalProp == nil)
+ return CGICalendarParticipationStatusUnkown;
+ return [icalProp participationStatus];
+}
+
+#pragma mark -
+#pragma mark 4.8.1.5 Description
+
+- (void)setNotes:(NSString *)value
+{
+ [self setPropertyValue:value forName:CG_ICALENDAR_PROERTY_DESCRIPTION];
+}
+
+- (NSString *)notes
+{
+ return [self propertyValueForName:CG_ICALENDAR_PROERTY_DESCRIPTION];
+}
+
+#pragma mark -
+#pragma mark 4.8.1.9 Priority
+
+- (void)setPriority:(NSUInteger)value
+{
+ [self setPropertyInteger:(int)value forName:CG_ICALENDAR_PROERTY_PRIORITY];
+}
+
+- (NSUInteger)priority
+{
+ return [self propertyIntegerForName:CG_ICALENDAR_PROERTY_PRIORITY];
+}
+
+#pragma mark -
+#pragma mark 4.8.1.12 Summary
+
+- (void)setSummary:(NSString *)value
+{
+ [self setPropertyValue:value forName:CG_ICALENDAR_PROERTY_SUMMARY];
+}
+
+- (NSString *)summary
+{
+ return [self propertyValueForName:CG_ICALENDAR_PROERTY_SUMMARY];
+}
+
+#pragma mark -
+#pragma mark 4.8.2.1 Date/Time Completed
+
+- (void)setCompleted:(NSDate *)value
+{
+ [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_COMPLETED];
+}
+
+- (NSDate *)completed
+{
+ return [self propertyDateForName:CG_ICALENDAR_PROERTY_COMPLETED];
+}
+
+#pragma mark -
+#pragma mark 4.8.2.2 Date/Time End
+
+- (void)setDateTimeEnd:(NSDate *)value
+{
+ [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DTEND];
+}
+
+- (NSDate *)dateTimeEnd
+{
+ return [self propertyDateForName:CG_ICALENDAR_PROERTY_DTEND];
+}
+
+#pragma mark -
+#pragma mark 4.8.2.3 Date/Time Due
+
+- (void)setDue:(NSDate *)value
+{
+ [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DUE];
+}
+
+- (NSDate *)due
+{
+ return [self propertyDateForName:CG_ICALENDAR_PROERTY_DUE];
+}
+
+#pragma mark -
+#pragma mark 4.8.2.4 Date/Time Start
+
+- (void)setDateTimeStart:(NSDate *)value
+{
+ [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DTSTART];
+}
+
+- (NSDate *)dateTimeStart
+{
+ return [self propertyDateForName:CG_ICALENDAR_PROERTY_DTSTART];
+}
+
+#pragma mark -
+#pragma mark 4.8.4.7 Unique Identifier
+
+- (void)setUID:(NSString *)value
+{
+ [self setPropertyValue:value forName:CG_ICALENDAR_PROERTY_UID];
+}
+
+- (NSString *)UID
+{
+ return [self propertyValueForName:CG_ICALENDAR_PROERTY_UID];
+}
+
+#pragma mark -
+#pragma mark 4.8.7.1 Date/Time Created
+
+- (void)setCreated:(NSDate *)value
+{
+ [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_CREATED];
+}
+
+- (NSDate *)created
+{
+ return [self propertyDateForName:CG_ICALENDAR_PROERTY_CREATED];
+}
+
+#pragma mark -
+#pragma mark 4.8.7.2 Date/Time Stamp
+
+- (void)setDateTimeStamp:(NSDate *)value
+{
+ [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DTSTAMP];
+}
+
+- (NSDate *)dateTimeStamp
+{
+ return [self propertyDateForName:CG_ICALENDAR_PROERTY_DTSTAMP];
+}
+
+#pragma mark -
+#pragma mark 4.8.7.3 Last Modified
+
+- (void)setLastModified:(NSDate *)value;
+{
+ [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_LASTMODIFIED];
+}
+
+- (NSDate *)lastModified;
+{
+ return [self propertyDateForName:CG_ICALENDAR_PROERTY_LASTMODIFIED];
+}
+
+#pragma mark -
+#pragma mark 4.8.7.4 Sequence Number
+
+- (void)setSequenceNumber:(NSUInteger)value
+{
+ [self setPropertyInteger:(int)value forName:CG_ICALENDAR_PROERTY_SEQUENCE];
+}
+
+- (NSUInteger)sequenceNumber
+{
+ return [self propertyIntegerForName:CG_ICALENDAR_PROERTY_SEQUENCE];
+}
+
+- (void)incrementSequenceNumber
+{
+ [self setSequenceNumber:([self sequenceNumber] + 1)];
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarContentLine.h b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarContentLine.h
new file mode 100755
index 0000000000000000000000000000000000000000..f87ffac231712d0efc387f1db93ef07e18c09e49
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarContentLine.h
@@ -0,0 +1,41 @@
+//
+// CGICalendarContentLine.h
+//
+// Created by Satoshi Konno on 11/01/28.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "CGICalendarProperty.h"
+
+#define CG_ICALENDAR_CONTENTLINE_TERM @"\r\n"
+#define CG_ICALENDAR_CONTENTLINE_FOLDING_SPACE @" "
+#define CG_ICALENDAR_CONTENTLINE_FOLDING_TAB @"\t"
+#define CG_ICALENDAR_CONTENTLINE_DELIM @":"
+#define CG_ICALENDAR_CONTENTLINE_NAMEPARAM_DELIM @";"
+
+#define CG_ICALENDAR_CONTENTLINE_NAME_BEGIN @"BEGIN"
+#define CG_ICALENDAR_CONTENTLINE_NAME_END @"END"
+
+#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VCALENDAR @"VCALENDAR"
+#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VEVENT @"VEVENT"
+#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VJOURNAL @"VJOURNAL"
+#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VFREEBUSY @"VFREEBUSY"
+#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VTIMEZONE @"VTIMEZONE"
+
+@interface CGICalendarContentLine : CGICalendarProperty {
+
+}
++ (BOOL)IsFoldingLineString:(NSString *)aString;
++ (id)contentLineWithString:(NSString *)aString;
+
+- (id)init;
+- (id)initWithString:(NSString *)aString;
+- (void)setString:(NSString *)aString;
+
+- (NSString *)description;
+
+- (BOOL)isBegin;
+- (BOOL)isEnd;
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarContentLine.m b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarContentLine.m
new file mode 100755
index 0000000000000000000000000000000000000000..390e9c2adae1edaaf42fafc6ef88f8c9a5595742
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarContentLine.m
@@ -0,0 +1,183 @@
+//
+// CGICalendarContentLine.m
+//
+// Created by Satoshi Konno on 11/01/28.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "CGICalendarContentLine.h"
+
+/*
+ The following notation defines the lines of content in an iCalendar
+ object:
+
+ contentline = name *(";" param ) ":" value CRLF
+ ; This ABNF is just a general definition for an initial parsing
+ ; of the content line into its property name, parameter list,
+ ; and value string
+
+ ; When parsing a content line, folded lines MUST first
+ ; be unfolded according to the unfolding procedure
+ ; described above. When generating a content line, lines
+ ; longer than 75 octets SHOULD be folded according to
+ ; the folding procedure described above.
+
+ name = x-name / iana-token
+
+ iana-token = 1*(ALPHA / DIGIT / "-")
+ ; iCalendar identifier registered with IANA
+
+ x-name = "X-" [vendorid "-"] 1*(ALPHA / DIGIT / "-")
+ ; Reservered for experimental use. Not intended for use in
+ ; released products.
+
+ vendorid = 3*(ALPHA / DIGIT) ;Vendor identification
+
+ param = param-name "=" param-value
+ *("," param-value)
+ ; Each property defines the specific ABNF for the parameters
+ ; allowed on the property. Refer to specific properties for
+ ; precise parameter ABNF.
+
+ param-name = iana-token / x-token
+
+ param-value = paramtext / quoted-string
+
+ paramtext = *SAFE-CHAR
+
+ value = *VALUE-CHAR
+
+ quoted-string = DQUOTE *QSAFE-CHAR DQUOTE
+
+ NON-US-ASCII = %x80-F8
+ ; Use restricted by charset parameter
+ ; on outer MIME object (UTF-8 preferred)
+
+ QSAFE-CHAR = WSP / %x21 / %x23-7E / NON-US-ASCII
+ ; Any character except CTLs and DQUOTE
+
+ SAFE-CHAR = WSP / %x21 / %x23-2B / %x2D-39 / %x3C-7E
+ / NON-US-ASCII
+ ; Any character except CTLs, DQUOTE, ";", ":", ","
+
+ VALUE-CHAR = WSP / %x21-7E / NON-US-ASCII
+ ; Any textual character
+
+ CR = %x0D
+ ; carriage return
+
+ LF = %x0A
+ ; line feed
+
+ CRLF = CR LF
+ ; Internet standard newline
+
+ CTL = %x00-08 / %x0A-1F / %x7F
+ ; Controls
+
+ ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
+
+ DIGIT = %x30-39
+ ; 0-9
+
+ DQUOTE = %x22
+ ; Quotation Mark
+
+ WSP = SPACE / HTAB
+
+ SPACE = %x20
+
+ HTAB = %x09
+ */
+
+@implementation CGICalendarContentLine
+
++ (BOOL)IsFoldingLineString:(NSString *)aString
+{
+ if ([aString hasPrefix:CG_ICALENDAR_CONTENTLINE_FOLDING_SPACE] || [aString hasPrefix:CG_ICALENDAR_CONTENTLINE_FOLDING_TAB])
+ return YES;
+ return NO;
+}
+
++ (id)contentLineWithString:(NSString *)aString
+{
+ CGICalendarContentLine *icalContentLine = [[CGICalendarContentLine alloc] initWithString:aString];
+ return icalContentLine;
+}
+
+- (id)init
+{
+ if ((self = [super init])) {
+ }
+ return self;
+}
+
+- (id)initWithString:(NSString *)aString
+{
+ if ((self = [self init])) {
+ [self setString:aString];
+ }
+ return self;
+}
+
+- (void)setString:(NSString *)aString
+{
+ NSString *nowNewLineString = [aString stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
+ NSArray *values = [nowNewLineString componentsSeparatedByString:CG_ICALENDAR_CONTENTLINE_DELIM];
+ int valuesCnt = (int)[values count];
+ if (valuesCnt < 2)
+ return;
+
+ NSArray *nameParams = [[values objectAtIndex:0] componentsSeparatedByString:CG_ICALENDAR_CONTENTLINE_NAMEPARAM_DELIM];
+ NSMutableArray *params = [NSMutableArray array];
+ int nameParamsCnt = (int)[nameParams count];
+ for (int n=0; n<nameParamsCnt; n++) {
+ if (n == 0) {
+ [self setName:[nameParams objectAtIndex:0]];
+ continue;
+ }
+ CGICalendarParameter *icalParam = [[CGICalendarParameter alloc] initWithString:[nameParams objectAtIndex:n]];
+ [params addObject:icalParam];
+ }
+ [self setParameters:params];
+
+ NSMutableString *valueString = [NSMutableString string];
+ for (int n=1; n<valuesCnt; n++) {
+ if (1 < n)
+ [valueString appendString:CG_ICALENDAR_CONTENTLINE_DELIM];
+ [valueString appendString:[values objectAtIndex:n]];
+ }
+ [self setValue:valueString];
+}
+
+- (NSString *)description;
+{
+ NSMutableString *contentLine = [NSMutableString string];
+ if ([self hasName])
+ [contentLine appendString:[self name]];
+
+ for (CGICalendarParameter *param in [self parameters]) {
+ [contentLine appendString:CG_ICALENDAR_CONTENTLINE_NAMEPARAM_DELIM];
+ [contentLine appendString:[param string]];
+ }
+
+ [contentLine appendString:CG_ICALENDAR_CONTENTLINE_DELIM];
+ if ([self hasValue])
+ [contentLine appendString:[self value]];
+
+ [contentLine appendString:CG_ICALENDAR_CONTENTLINE_TERM];
+
+ return contentLine;
+}
+
+- (BOOL)isBegin
+{
+ return [self isName:CG_ICALENDAR_CONTENTLINE_NAME_BEGIN];
+}
+
+- (BOOL)isEnd
+{
+ return [self isName:CG_ICALENDAR_CONTENTLINE_NAME_END];
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarObject.h b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarObject.h
new file mode 100755
index 0000000000000000000000000000000000000000..7538b51fb1cf694271839acc9f81fedd2cef3648
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarObject.h
@@ -0,0 +1,42 @@
+//
+// CGICalendarObject.h
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "CGICalendarComponent.h"
+#import "CGICalendarProperty.h"
+
+#define CG_ICALENDAR_OBJECT_VERSION_DEFAULT @"2.0"
+#define CG_ICALENDAR_OBJECT_PRODID_DEFAULT @"//CyberGarage//iCal4ObjC//EN"
+
+@interface CGICalendarObject : CGICalendarComponent {
+
+}
+
++ (id)object;
++ (id)objectWithProdid:(NSString *)prodid;
++ (id)objectWithProdid:(NSString *)prodid version:(NSString *)version;
+
+- (id)init;
+- (id)initWithProdid:(NSString *)prodid;
+- (id)initWithProdid:(NSString *)prodid version:(NSString *)version;
+
+- (void)setVersion:(NSString *)version;
+- (NSString *)version;
+
+- (void)setProdid:(NSString *)prodid;
+- (NSString *)prodid;
+
+- (NSArray *)componentsWithType:(NSString *)type;
+- (NSArray *)events;
+- (NSArray *)todos;
+- (NSArray *)journals;
+- (NSArray *)freebusies;
+- (NSArray *)timezones;
+
+@end
+
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarObject.m b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarObject.m
new file mode 100755
index 0000000000000000000000000000000000000000..7a388f19babb32ca8796ee35c9f5865dfbf87084
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarObject.m
@@ -0,0 +1,129 @@
+//
+// CGICalendarObject.m
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "CGICalendarObject.h"
+
+#define CG_ICALENDAR_OBJECT_TYPE_DEFAULT @"VCALENDAR"
+#define CG_ICALENDAR_OBJECT_VERSION_PARAM @"VERSION"
+#define CG_ICALENDAR_OBJECT_PRODID_PARAM @"PRODID"
+
+@implementation CGICalendarObject
+
+#pragma mark -
+#pragma mark Global
+
++ (id)object
+{
+ return [[CGICalendarObject alloc] init];
+}
+
++ (id)objectWithProdid:(NSString *)prodid
+{
+ return [[CGICalendarObject alloc] initWithProdid:prodid];
+}
+
++ (id)objectWithProdid:(NSString *)prodid version:(NSString *)version
+{
+ return [[CGICalendarObject alloc] initWithProdid:prodid version:version];
+}
+
+#pragma mark -
+#pragma mark Initialize
+
+- (id)init
+{
+ if ((self = [super init])) {
+ [self setType:CG_ICALENDAR_OBJECT_TYPE_DEFAULT];
+ [self setVersion:CG_ICALENDAR_OBJECT_VERSION_DEFAULT];
+ [self setProdid:CG_ICALENDAR_OBJECT_PRODID_DEFAULT];
+ }
+ return self;
+}
+
+- (id)initWithProdid:(NSString *)prodid version:(NSString *)version;
+{
+ if ((self = [super init])) {
+ [self setType:CG_ICALENDAR_OBJECT_TYPE_DEFAULT];
+ [self setVersion:version];
+ [self setProdid:prodid];
+ }
+ return self;
+}
+
+- (id)initWithProdid:(NSString *)prodid
+{
+ if ((self = [super init])) {
+ [self setType:CG_ICALENDAR_OBJECT_TYPE_DEFAULT];
+ [self setVersion:CG_ICALENDAR_OBJECT_VERSION_DEFAULT];
+ [self setProdid:prodid];
+ }
+ return self;
+}
+
+#pragma mark -
+#pragma mark Property Utility Methods
+
+- (void)setVersion:(NSString *)version
+{
+ [self setPropertyValue:version forName:CG_ICALENDAR_OBJECT_VERSION_PARAM];
+}
+
+- (NSString *)version
+{
+ return [self propertyValueForName:CG_ICALENDAR_OBJECT_VERSION_PARAM];
+}
+
+- (void)setProdid:(NSString *)prodid
+{
+ [self setPropertyValue:prodid forName:CG_ICALENDAR_OBJECT_PRODID_PARAM];
+}
+
+- (NSString *)prodid
+{
+ return [self propertyValueForName:CG_ICALENDAR_OBJECT_PRODID_PARAM];
+}
+
+#pragma mark -
+#pragma mark conponents
+
+- (NSArray *)componentsWithType:(NSString *)type
+{
+ NSMutableArray *typeComponents = [NSMutableArray array];
+ for (CGICalendarComponent *icalComponent in [self components]) {
+ if ([icalComponent isType:type] == NO)
+ continue;
+ [typeComponents addObject:icalComponent];
+ }
+ return typeComponents;
+}
+
+- (NSArray *)events
+{
+ return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_EVENT];
+}
+
+- (NSArray *)todos
+{
+ return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_TODO];
+}
+
+- (NSArray *)journals
+{
+ return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_JOURNAL];
+}
+
+- (NSArray *)freebusies
+{
+ return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY];
+}
+
+- (NSArray *)timezones
+{
+ return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE];
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarParameter.h b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarParameter.h
new file mode 100755
index 0000000000000000000000000000000000000000..ee5a54d907a8a0dd7db1f0827f00baca2eb2240f
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarParameter.h
@@ -0,0 +1,18 @@
+//
+// CGICalendarParameter.h
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "CGICalendarValue.h"
+
+@interface CGICalendarParameter : CGICalendarValue {
+
+}
+- (id)init;
+- (id)initWithString:(NSString *)aString;
+- (void)setString:(NSString *)aString;
+- (NSString *) string;
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarParameter.m b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarParameter.m
new file mode 100755
index 0000000000000000000000000000000000000000..c6044896e5c61b52f479a36b80ce65d2b51d95aa
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarParameter.m
@@ -0,0 +1,46 @@
+//
+// CGICalendarParameter.m
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "CGICalendarParameter.h"
+
+#define CG_ICALENDAR_PARAMETER_DELIM @"="
+
+@implementation CGICalendarParameter
+
+- (id)init
+{
+ if ((self = [super init])) {
+ }
+ return self;
+}
+
+- (id)initWithString:(NSString *)aString
+{
+ if ((self = [self init])) {
+ [self setString:aString];
+ }
+ return self;
+}
+
+- (void)setString:(NSString *)aString
+{
+ NSArray *values = [aString componentsSeparatedByString:CG_ICALENDAR_PARAMETER_DELIM];
+ if ([values count] < 2)
+ return;
+ [self setName:[values objectAtIndex:0]];
+ [self setValue:[values objectAtIndex:1]];
+}
+
+- (NSString *) string;
+{
+ return [NSString stringWithFormat:@"%@%@%@",
+ [self name] ? [self name] : @"",
+ CG_ICALENDAR_PARAMETER_DELIM,
+ [self value] ? [self value] : @""];
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarProperty.h b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarProperty.h
new file mode 100755
index 0000000000000000000000000000000000000000..a2d4003cbd33a503226b670696938e1e7b520d2d
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarProperty.h
@@ -0,0 +1,78 @@
+//
+// CGICalendarProperty.h
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "CGICalendarValue.h"
+#import "CGICalendarParameter.h"
+
+#define CG_ICALENDAR_PROERTY_PARTSTAT @"PARTSTAT"
+
+#define CG_ICALENDAR_PROERTY_COMPLETED @"COMPLETED"
+#define CG_ICALENDAR_PROERTY_DTEND @"DTEND"
+#define CG_ICALENDAR_PROERTY_DUE @"DUE"
+#define CG_ICALENDAR_PROERTY_DTSTART @"DTSTART"
+
+// 4.8.1 Descriptive Component Properties
+
+#define CG_ICALENDAR_PROERTY_DESCRIPTION @"DESCRIPTION"
+#define CG_ICALENDAR_PROERTY_PRIORITY @"PRIORITY"
+#define CG_ICALENDAR_PROERTY_SUMMARY @"SUMMARY"
+
+// 4.8.4 Relationship Component Properties
+#define CG_ICALENDAR_PROERTY_UID @"UID"
+
+// 4.8.7 Change Management Component Properties
+
+#define CG_ICALENDAR_PROERTY_CREATED @"CREATED"
+#define CG_ICALENDAR_PROERTY_DTSTAMP @"DTSTAMP"
+#define CG_ICALENDAR_PROERTY_LASTMODIFIED @"LAST-MODIFIED"
+#define CG_ICALENDAR_PROERTY_SEQUENCE @"SEQUENCE"
+
+enum {
+ CGICalendarParticipationStatusUnkown = 0,
+ CGICalendarParticipationStatusNeedsAction,
+ CGICalendarParticipationStatusAccepted,
+ CGICalendarParticipationStatusDeclined,
+ CGICalendarParticipationStatusTentative,
+ CGICalendarParticipationStatusDelegated,
+ CGICalendarParticipationStatusCompleted,
+ CGICalendarParticipationStatusInProcess,
+};
+
+@interface CGICalendarProperty : CGICalendarValue {
+}
+@property(retain) NSMutableArray *parameters;
+
+- (id)init;
+
+- (BOOL)hasParameterForName:(NSString *)name;
+- (void)addParameter:(CGICalendarParameter *)parameter;
+- (void)removeParameterForName:(NSString *)name;
+
+- (void)setParameterValue:(NSString *)value forName:(NSString *)name;
+- (void)setParameterValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setParameterObject:(id)object forName:(NSString *)name;
+- (void)setParameterObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setParameterDate:(NSDate *)object forName:(NSString *)name;
+- (void)setParameterDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setParameterInteger:(int)value forName:(NSString *)name;
+- (void)setParameterInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+- (void)setParameterFloat:(float)value forName:(NSString *)name;
+- (void)setParameterFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+
+- (CGICalendarParameter *)parameterAtIndex:(NSUInteger)index;
+- (CGICalendarParameter *)parameterForName:(NSString *)name;
+- (NSArray *)allParameterKeys;
+- (NSString *)parameterValueForName:(NSString *)name;
+- (NSDate *)parameterDateForName:(NSString *)name;
+- (int)parameterIntegerForName:(NSString *)name;
+- (float)parameterFloatForName:(NSString *)name;
+
+- (void)setParticipationStatus:(int)value;
+- (int)participationStatus;
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarProperty.m b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarProperty.m
new file mode 100755
index 0000000000000000000000000000000000000000..86b38df45f0943db885c67f5294882a9fa95f2bc
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarProperty.m
@@ -0,0 +1,228 @@
+//
+// CGICalendarProperty.m
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "CGICalendarProperty.h"
+#import "CGICalendarContentLine.h"
+#import "NSDate+CGICalendar.h"
+
+@implementation CGICalendarProperty
+
+@synthesize parameters;
+
+- (id)init
+{
+ if ((self = [super init])) {
+ }
+ return self;
+}
+
+#pragma mark -
+#pragma mark Parameter
+
+- (BOOL)hasParameterForName:(NSString *)name
+{
+ for (CGICalendarParameter *icalProp in [self parameters]) {
+ if ([icalProp isName:name]) {
+ [[self parameters] removeObject:icalProp];
+ return YES;
+ }
+ }
+ return NO;
+}
+
+- (void)addParameter:(CGICalendarParameter *)parameter
+{
+ [[self parameters] addObject:parameter];
+}
+
+- (void)removeParameterForName:(NSString *)name
+{
+ for (CGICalendarParameter *icalProp in [self parameters]) {
+ if ([icalProp isName:name]) {
+ [[self parameters] removeObject:icalProp];
+ return;
+ }
+ }
+}
+
+- (void)setParameterValue:(NSString *)value forName:(NSString *)name
+{
+ CGICalendarParameter *icalProp = [self parameterForName:name];
+ if (icalProp == nil) {
+ icalProp = [[CGICalendarParameter alloc] init];
+ [icalProp setName:name];
+ [self addParameter:icalProp];
+ }
+ [icalProp setValue:value];
+}
+
+- (void)setParameterValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames;
+{
+ [self setParameterValue:value forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]];
+}
+
+- (void)setParameterObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setParameterValue:[object description] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (void)setParameterObject:(id)object forName:(NSString *)name
+{
+ [self setParameterValue:[object description] forName:name];
+}
+
+- (void)setParameterDate:(NSDate *)object forName:(NSString *)name
+{
+ [self setParameterValue:[object descriptionICalendar] forName:name];
+}
+
+- (void)setParameterDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setParameterValue:[object descriptionICalendar] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (void)setParameterInteger:(int)value forName:(NSString *)name
+{
+ [self setParameterValue:[[NSNumber numberWithInteger:value] stringValue] forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]];
+}
+
+- (void)setParameterInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setParameterValue:[[NSNumber numberWithInteger:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (void)setParameterFloat:(float)value forName:(NSString *)name
+{
+ [self setParameterValue:[[NSNumber numberWithFloat:value] stringValue] forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]];
+}
+
+- (void)setParameterFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames
+{
+ [self setParameterValue:[[NSNumber numberWithFloat:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames];
+}
+
+- (id)parameterAtIndex:(NSUInteger)index
+{
+ return [[self parameters] objectAtIndex:index];
+}
+
+- (CGICalendarParameter *)parameterForName:(NSString *)name
+{
+ for (CGICalendarParameter *icalProp in [self parameters]) {
+ if ([icalProp isName:name])
+ return icalProp;
+ }
+ return nil;
+}
+
+- (NSArray *)allParameterKeys
+{
+ NSMutableArray *keys = [NSMutableArray array];
+ for (CGICalendarParameter *icalProp in [self parameters])
+ [keys addObject:[icalProp name]];
+ return keys;
+}
+
+- (NSString *)parameterValueForName:(NSString *)name
+{
+ for (CGICalendarParameter *icalProp in [self parameters]) {
+ if ([icalProp isName:name])
+ return [icalProp value];
+ }
+ return nil;
+}
+
+- (NSDate *)parameterDateForName:(NSString *)name
+{
+ for (CGICalendarParameter *icalProp in [self parameters]) {
+ if ([icalProp isName:name])
+ return [icalProp dateValue];
+ }
+ return nil;
+}
+
+- (int)parameterIntegerForName:(NSString *)name;
+{
+ for (CGICalendarParameter *icalProp in [self parameters]) {
+ if ([icalProp isName:name])
+ return [icalProp integerValue];
+ }
+ return 0;
+}
+
+- (float)parameterFloatForName:(NSString *)name;
+{
+ for (CGICalendarParameter *icalProp in [self parameters]) {
+ if ([icalProp isName:name])
+ return [icalProp floatValue];
+ }
+ return 0;
+}
+
+#pragma mark -
+#pragma mark String
+
+- (NSString *)description
+{
+ NSMutableString *propertyString = [NSMutableString string];
+
+ [propertyString appendFormat:@"%@", [self name]];
+
+ for (CGICalendarParameter *icalParam in [self parameters])
+ [propertyString appendFormat:@";%@", [icalParam description]];
+
+ [propertyString appendFormat:@"%:%@%@", ((0 < [[self value] length]) ? [self value] : @""), CG_ICALENDAR_CONTENTLINE_TERM];
+
+ return propertyString;
+}
+
+#pragma mark -
+#pragma mark ParticipationStatus
+
+- (NSArray *)participationStatusStrings
+{
+ static NSArray *statusStrings = nil;
+
+ if (statusStrings == nil) {
+ statusStrings = [NSArray arrayWithObjects:
+ @"",
+ @"NEEDS-ACTION",
+ @"ACCEPTED",
+ @"DECLINED",
+ @"TENTATIVE",
+ @"DELEGATED",
+ @"COMPLETED",
+ @"IN-PROCESS",
+ nil];
+ }
+
+ return statusStrings;
+}
+
+- (void)setParticipationStatus:(int)status
+{
+ NSArray *statusStrings = [self participationStatusStrings];
+ if (status < 0 || ([statusStrings count]-1) < status)
+ return;
+ [self setValue:[statusStrings objectAtIndex:status]];
+}
+
+- (int)participationStatus
+{
+ if ([self value] == nil)
+ return CGICalendarParticipationStatusUnkown;
+
+ NSArray *statusStrings = [self participationStatusStrings];
+ for (int n=0; n<[statusStrings count]; n++) {
+ if ([[self value] isEqualToString:[statusStrings objectAtIndex:n]])
+ return n;
+ }
+
+ return CGICalendarParticipationStatusUnkown;
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarValue.h b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarValue.h
new file mode 100755
index 0000000000000000000000000000000000000000..d1020fa7080ba4ee08dcac24671f5fc7d43f87f0
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarValue.h
@@ -0,0 +1,50 @@
+//
+// CGICalendarValue.h
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+enum {
+ CGICalendarValueTypeUnknown = 0,
+ CGICalendarValueTypeBinary,
+ CGICalendarValueTypeBoolean,
+ CGICalendarValueTypeCalendarUserAddress,
+ CGICalendarValueTypeDate,
+ CGICalendarValueTypeDateTime,
+ CGICalendarValueTypeDuration,
+ CGICalendarValueTypeFloat,
+ CGICalendarValueTypeInteger,
+ CGICalendarValueTypePeriodOfTime,
+ CGICalendarValueTypeRecurrenceRule,
+ CGICalendarValueTypeText,
+ CGICalendarValueTypeTime,
+ CGICalendarValueTypeURI,
+ CGICalendarValueTypeUTCOffset,
+};
+
+@interface CGICalendarValue : NSObject {
+
+}
+@property(assign) int type;
+@property(retain) NSString *name;
+@property(retain) NSString *value;
+
+- (id)init;
+
+- (BOOL)hasName;
+- (BOOL)hasValue;
+
+- (BOOL)isName:(NSString *)aName;
+- (BOOL)isValue:(NSString *)aValue;
+
+- (void)setObject:(id)value;
+- (void)setDate:(NSDate *)value;
+
+- (NSDate *)dateValue;
+- (int)integerValue;
+- (float)floatValue;
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarValue.m b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarValue.m
new file mode 100755
index 0000000000000000000000000000000000000000..4364c11e4d5ce3a0b196d47b5102bdc8050cfead
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarValue.m
@@ -0,0 +1,77 @@
+//
+// CGICalendarValue.m
+//
+// Created by Satoshi Konno on 11/01/27.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "CGICalendarValue.h"
+#import "NSDate+CGICalendar.h"
+
+@implementation CGICalendarValue
+
+@synthesize type;
+@synthesize value;
+@synthesize name;
+
+- (id)init
+{
+ if ((self = [super init])) {
+ }
+ return self;
+}
+
+- (BOOL)hasName
+{
+ if ([self name] != nil && 0 < [[self name] length])
+ return YES;
+ return NO;
+}
+
+- (BOOL)hasValue
+{
+ if ([self value] != nil && 0 < [[self value] length])
+ return YES;
+ return NO;
+}
+
+- (BOOL)isName:(NSString *)aName
+{
+ if (aName == nil || [aName length] <= 0)
+ return NO;
+ return [aName isEqualToString:[self name]];
+}
+
+- (BOOL)isValue:(NSString *)aValue
+{
+ if (aValue == nil || [aValue length] <= 0)
+ return NO;
+ return [aValue isEqualToString:[self value]];
+}
+
+- (void)setObject:(id)aValue
+{
+ [self setValue:[value description]];
+}
+
+- (void)setDate:(NSDate *)aValue
+{
+ [self setValue:[aValue descriptionICalendar]];
+}
+
+- (NSDate *)dateValue
+{
+ return [NSDate dateWithICalendarString:[self value]];
+}
+
+- (int)integerValue
+{
+ return [[self value] integerValue];
+}
+
+- (float)floatValue
+{
+ return [[self value] floatValue];
+}
+
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/NSDate+CGICalendar.h b/WPI Calendar Event Creator/iCalObjCSDK/NSDate+CGICalendar.h
new file mode 100755
index 0000000000000000000000000000000000000000..3e649c81c35ecb34c4bba7a0d79ad9911da74e95
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/NSDate+CGICalendar.h
@@ -0,0 +1,16 @@
+//
+// NSDate+CGICalendar.h
+//
+// Created by Satoshi Konno on 5/12/11.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+@interface NSDate(CGICalendar)
++ (id)dateWithICalendarString:(NSString *)aString;
++ (id)dateWithICalendarISO8601:(NSString *)aString;
+- (NSString *)descriptionICalendar;
+- (NSString *)descriptionISO8601;
+@end
diff --git a/WPI Calendar Event Creator/iCalObjCSDK/NSDate+CGICalendar.m b/WPI Calendar Event Creator/iCalObjCSDK/NSDate+CGICalendar.m
new file mode 100755
index 0000000000000000000000000000000000000000..18a8339431cf4011bd33447a164083d87f4a1ba9
--- /dev/null
+++ b/WPI Calendar Event Creator/iCalObjCSDK/NSDate+CGICalendar.m
@@ -0,0 +1,49 @@
+//
+// NSDate+CGICalendar.m
+//
+// Created by Satoshi Konno on 5/12/11.
+// Copyright 2011 Satoshi Konno. All rights reserved.
+//
+
+#import "NSDate+CGICalendar.h"
+
+#define CGNSDATE_ICALENDAR_DATETMEFORMAT @"YYYYMMdd'T'kkmmss'Z'"
+#define CGNSDATE_ISO8601_DATETMEFORMAT @"YYYY-MM-dd kk:mm:ss"
+
+@implementation NSDate(CGICalendar)
+
++ (id)dateWithICalendarString:(NSString *)aString
+{
+ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+ NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
+ [dateFormatter setTimeZone:timeZone];
+ [dateFormatter setDateFormat:CGNSDATE_ICALENDAR_DATETMEFORMAT];
+ return [dateFormatter dateFromString:aString];
+}
+
++ (id)dateWithICalendarISO8601:(NSString *)aString
+{
+ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+ [dateFormatter setTimeStyle:NSDateFormatterFullStyle];
+ [dateFormatter setDateFormat:CGNSDATE_ISO8601_DATETMEFORMAT];
+ return [dateFormatter dateFromString:aString];
+}
+
+- (NSString *)descriptionICalendar
+{
+ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+ NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
+ [dateFormatter setTimeZone:timeZone];
+ [dateFormatter setDateFormat:CGNSDATE_ICALENDAR_DATETMEFORMAT];
+ return [dateFormatter stringFromDate:self];
+}
+
+- (NSString *)descriptionISO8601
+{
+ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+ [dateFormatter setLocale:[NSLocale systemLocale]];
+ [dateFormatter setDateFormat:CGNSDATE_ISO8601_DATETMEFORMAT];
+ return [dateFormatter stringFromDate:self];
+}
+
+@end
diff --git a/WPI Calendar Event Creator/rsz_wpicalendareventcreatorappicon.png b/WPI Calendar Event Creator/rsz_wpicalendareventcreatorappicon.png
new file mode 100644
index 0000000000000000000000000000000000000000..888958d0407726e394a770211cf87d547e1aad2d
Binary files /dev/null and b/WPI Calendar Event Creator/rsz_wpicalendareventcreatorappicon.png differ