public void FunctionCallToPropertyWithTransformation() { // register the property mapping of a source and a destination // type with trasformations (in this case we do add a string to // the name to generate a calendar title of "Birthday: Riddle, Tom") var mapper = new Mapper(); mapper.Register <StdContact, StdCalendarItem>(contact => contact.Id, (calendar, entity) => calendar.Id = (Guid)entity); mapper.Register <StdContact, StdCalendarItem>(contact => contact.GetFullName(), (calendar, entity) => calendar.Title = "Birthday: " + entity); // setup a source and a destination object var source = new StdContact { Name = new PersonName("Tom Riddle") }; var target = new StdCalendarItem(); // perform the mapping mapper.Map(source, target); // test it Assert.AreEqual(source.Id, target.Id); Assert.AreEqual("Birthday: " + source.GetFullName(), target.Title); }
/// <summary> /// converts a StdContact into a vCard (binary content) /// </summary> /// <param name="contact"> /// The contact to be converted. /// </param> /// <returns> /// a binary vCard representation /// </returns> public static byte[] StdContactToVCard(StdContact contact) { Bouncer .ForCheckData(() => contact) .Assert(x => x.Name != null); var vCard = new StringBuilder(); vCard.AppendLine("BEGIN:VCARD"); vCard.AppendLine("VERSION:2.1"); AddAttributeToStringBuilder( vCard, "N", contact.Name.LastName, contact.Name.FirstName, contact.Name.MiddleName, contact.Name.AcademicTitle); AddAttributeToStringBuilder(vCard, "FN", contact.GetFullName()); AddAttributeToStringBuilder(vCard, "SORT-STRING", contact.Name.LastName); AddAttributeToStringBuilder(vCard, "EMAIL;TYPE=INTERNET;TYPE=WORK;TYPE=PREF", contact.BusinessEmailPrimary); AddAttributeToStringBuilder(vCard, "EMAIL;TYPE=INTERNET;TYPE=HOME", contact.PersonalEmailPrimary); AddAttributeToStringBuilder(vCard, "URL;TYPE=HOME", contact.PersonalHomepage); if (contact.DateOfBirth.Year > 1900 && contact.DateOfBirth.Year < 2200) { AddAttributeToStringBuilder( vCard, "BDAY", contact.DateOfBirth.ToString("yyyyMMdd", CultureInfo.CurrentCulture)); } if (contact.BusinessAddressPrimary != null) { AddAttributeToStringBuilder( vCard, "ADR;TYPE=WORK", null, null, contact.BusinessAddressPrimary.StreetName, contact.BusinessAddressPrimary.CityName, contact.BusinessAddressPrimary.StateName, contact.BusinessAddressPrimary.PostalCode, contact.BusinessAddressPrimary.CountryName); AddAttributeToStringBuilder(vCard, "TEL;TYPE=WORK", contact.BusinessAddressPrimary.Phone); } if (contact.PersonalAddressPrimary != null) { AddAttributeToStringBuilder( vCard, "ADR;TYPE=HOME", null, null, contact.PersonalAddressPrimary.StreetName, contact.PersonalAddressPrimary.CityName, contact.PersonalAddressPrimary.StateName, contact.PersonalAddressPrimary.PostalCode, contact.PersonalAddressPrimary.CountryName); AddAttributeToStringBuilder(vCard, "TEL;TYPE=HOME", contact.PersonalAddressPrimary.Phone); } AddAttributeToStringBuilder(vCard, "TEL;TYPE=CELL,HOME", contact.PersonalPhoneMobile); AddAttributeToStringBuilder(vCard, "TEL;TYPE=CELL,WORK", contact.BusinessPhoneMobile); AddAttributeToStringBuilder(vCard, "ORG", contact.BusinessCompanyName); AddAttributeToStringBuilder(vCard, "URL;TYPE=WORK", contact.BusinessHomepage); AddAttributeToStringBuilder(vCard, "URL;TYPE=HOME", contact.PersonalHomepage); AddAttributeToStringBuilder(vCard, "TITLE", contact.BusinessPosition); AddAttributeToStringBuilder(vCard, "NOTE", contact.AdditionalTextData); AddAttributeToStringBuilder(vCard, "X-MATZEN-STDUID", contact.Id); AddAttributeToStringBuilder(vCard, "X-MATZEN-GENERATOR", "generated by Sem.Sync - www.svenerikmatzen.info"); AddAttributeToStringBuilder(vCard, "PRODID", "-//MATZEN//www.svenerikmatzen.info//Sem.Sync//Version 1.0"); AddAttributeToStringBuilder(vCard, "PHOTO;TYPE=JPEG", contact.PictureData); AddAttributeToStringBuilder(vCard, "UID", contact.Id.ToString("N")); vCard.AppendLine("END:VCARD"); return(Encoding.UTF8.GetBytes(vCard.ToString())); }