1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
|
public class VCard
{
private List<DeliveryAddress> addresses = new List<DeliveryAddress>();
private List<String> emailAddresses = new List<String>();
private List<TelephoneNumber> phoneNumber = new List<TelephoneNumber>();
private DateTime birthDate = DateTime.MinValue;
private string firstName;
private string formattedName;
private string lastName;
private string middleName;
private string namePrefix;
private string nameSuffix;
private string organization;
private string role;
private string title;
/// <summary>
/// Gets or sets the formatted name.
/// </summary>
/// <value>the formatted name.</value>
public string FormattedName
{
get { return formattedName; }
set { formattedName = value; }
}
/// <summary>
/// Gets or sets the last name.
/// </summary>
/// <value>The last name.</value>
public string LastName
{
get { return lastName; }
set { lastName = value; }
}
/// <summary>
/// Gets or sets the first name.
/// </summary>
/// <value>The first name.</value>
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
/// <summary>
/// Gets or sets the middle name.
/// </summary>
/// <value>The middle name.</value>
public string MiddleName
{
get { return middleName; }
set { middleName = value; }
}
/// <summary>
/// Gets or sets the name prefix.
/// </summary>
/// <value>The name prefix.</value>
public string NamePrefix
{
get { return namePrefix; }
set { namePrefix = value; }
}
/// <summary>
/// Gets or sets the name suffix.
/// </summary>
/// <value>The name suffix.</value>
public string NameSuffix
{
get { return nameSuffix; }
set { nameSuffix = value; }
}
/// <summary>
/// Gets or sets the birth date.
/// </summary>
/// <value>The birth date.</value>
public DateTime BirthDate
{
get { return birthDate; }
set { birthDate = value; }
}
/// <summary>
/// Gets or sets the addresses.
/// </summary>
/// <value>The addresses.</value>
public List<DeliveryAddress> Addresses
{
get { return addresses; }
set { addresses = value; }
}
/// <summary>
/// Gets or sets the phone number.
/// </summary>
/// <value>The phone number.</value>
public List<TelephoneNumber> PhoneNumber
{
get { return phoneNumber; }
set { phoneNumber = value; }
}
/// <summary>
/// Gets or sets the email addresses.
/// </summary>
/// <value>The email addresses.</value>
public List<string> EmailAddresses
{
get { return emailAddresses; }
set { emailAddresses = value; }
}
/// <summary>
/// Gets or sets the title.
/// </summary>
/// <value>The title.</value>
public string Title
{
get { return title; }
set { title = value; }
}
/// <summary>
/// Gets or sets the role.
/// </summary>
/// <value>The role.</value>
public string Role
{
get { return role; }
set { role = value; }
}
/// <summary>
/// Gets or sets the organization.
/// </summary>
/// <value>The organization.</value>
public string Organization
{
get { return organization; }
set { organization = value; }
}
/// <summary>
/// Generates the V card.
/// </summary>
/// <param name="filePath">The file path.</param>
/// <param name="mode">The mode.</param>
public void GenerateVCard(string filePath, FileMode mode)
{
FileStream fs = new FileStream(filePath, mode);
GenerateVCard(fs);
}
/// <summary>
/// Generates the V card.
/// </summary>
/// <param name="outputStream">The output stream.</param>
public void GenerateVCard(Stream outputStream)
{
StreamWriter sw = new StreamWriter(outputStream, Encoding.Default);
using (sw)
{
sw.Write(ToString());
}
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append("BEGIN:VCARD" + Environment.NewLine);
if (formattedName != null)
{
sb.Append("FN:" + formattedName + Environment.NewLine);
}
sb.Append("N:" + lastName + ";");
sb.Append(firstName + ";");
sb.Append(middleName + ";");
sb.Append(namePrefix + ";");
sb.Append(nameSuffix + Environment.NewLine);
if (birthDate != DateTime.MinValue)
{
sb.Append("BDAY:" + birthDate.ToString("yyyyMMdd") + Environment.NewLine);
}
foreach (DeliveryAddress da in addresses)
{
sb.Append(da.ToString());
}
foreach (TelephoneNumber phone in phoneNumber)
{
sb.Append(phone.ToString());
}
foreach (string email in emailAddresses)
{
sb.Append("EMAIL; INTERNET:" + email + Environment.NewLine);
}
sb.Append("TITLE:" + title + Environment.NewLine);
sb.Append("ROLE:" + role + Environment.NewLine);
sb.Append("ORG:" + organization + Environment.NewLine);
sb.Append("END:VCARD" + Environment.NewLine);
return sb.ToString();
}
public class DeliveryAddress
{
private string country;
private string extendedAddress;
private string locality;
private string postalCode;
private string postOfficeAddress;
private string region;
private string street;
public AddressType DeliveryAddressType;
/// <summary>
/// Gets or sets the post office address.
/// </summary>
/// <value>The post office address.</value>
public string PostOfficeAddress
{
get { return postOfficeAddress; }
set { postOfficeAddress = value; }
}
/// <summary>
/// Gets or sets the extended address.
/// </summary>
/// <value>The extended address.</value>
public string ExtendedAddress
{
get { return extendedAddress; }
set { extendedAddress = value; }
}
/// <summary>
/// Gets or sets the street.
/// </summary>
/// <value>The street.</value>
public string Street
{
get { return street; }
set { street = value; }
}
/// <summary>
/// Gets or sets the locality.
/// </summary>
/// <value>The locality.</value>
public string Locality
{
get { return locality; }
set { locality = value; }
}
/// <summary>
/// Gets or sets the region.
/// </summary>
/// <value>The region.</value>
public string Region
{
get { return region; }
set { region = value; }
}
/// <summary>
/// Gets or sets the postal code.
/// </summary>
/// <value>The postal code.</value>
public string PostalCode
{
get { return postalCode; }
set { postalCode = value; }
}
/// <summary>
/// Gets or sets the country.
/// </summary>
/// <value>The country.</value>
public string Country
{
get { return country; }
set { country = value; }
}
/// <summary>
/// Gibt einen <see cref="T:System.String"></see> zurück, der den aktuellen <see cref="T:System.Object"></see> darstellt.
/// </summary>
/// <returns>
/// Ein <see cref="T:System.String"></see>, der den aktuellen <see cref="T:System.Object"></see> darstellt.
/// </returns>
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append("ADR;" + Enum.GetName(typeof(AddressType), DeliveryAddressType) + ":");
sb.Append(postOfficeAddress + ";");
sb.Append(extendedAddress + ";");
sb.Append(street + ";");
sb.Append(locality + ";");
sb.Append(region + ";");
sb.Append(postalCode + ";");
sb.Append(country + Environment.NewLine);
return sb.ToString();
}
}
public enum AddressType
{
DOM,
INTL,
POSTAL,
PARCEL,
HOME,
WORK
}
public class TelephoneNumber
{
private string _phoneNumber;
public TelephoneNumberType PhoneNumberType;
/// <summary>
/// Gets or sets the phone number.
/// </summary>
/// <value>The phone number.</value>
public string PhoneNumber
{
get { return _phoneNumber; }
set { _phoneNumber = value; }
}
/// <summary>
/// Gibt einen <see cref="T:System.String"></see> zurück, der den aktuellen <see cref="T:System.Object"></see> darstellt.
/// </summary>
/// <returns>
/// Ein <see cref="T:System.String"></see>, der den aktuellen <see cref="T:System.Object"></see> darstellt.
/// </returns>
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append("TEL;" + Enum.GetName(typeof(TelephoneNumberType), PhoneNumberType) + ":");
sb.Append(_phoneNumber + Environment.NewLine);
return sb.ToString();
}
}
public enum TelephoneNumberType
{
PREF,
WORK,
HOME,
VOICE,
FAX,
MSG,
CELL,
PAGER,
BBS,
MODEM,
CAR
}
}
|