public static void Initialize() { if (isInitialized) { return; } if (config == null) { config = new MapperConfiguration(x => { #region Itemized Collection Mappings x.CreateMap <Original.Titles, IReadOnlyCollection <Cleaned.BillStatusTitle> >() .ConvertUsing <ItemizedTypeConverter <Original.Titles, Cleaned.BillStatusTitle, Original.Item> >(); x.CreateMap <Original.Sponsors, IReadOnlyCollection <Cleaned.BillStatusSponsor> >() .ConvertUsing <ItemizedTypeConverter <Original.Sponsors, Cleaned.BillStatusSponsor, Original.Item> >(); x.CreateMap <Original.Sponsors, IReadOnlyCollection <Cleaned.BillAmendmentSponsor> >() .ConvertUsing <ItemizedTypeConverter <Original.Sponsors, Cleaned.BillAmendmentSponsor, Original.Item> >(); x.CreateMap <Original.RelatedBills, IReadOnlyCollection <Cleaned.BillStatusRelatedBill> >() .ConvertUsing <ItemizedTypeConverter <Original.RelatedBills, Cleaned.BillStatusRelatedBill, Original.Item> >(); x.CreateMap <Original.Notes, IReadOnlyCollection <Cleaned.BillStatusNote> >() .ConvertUsing <ItemizedTypeConverter <Original.Notes, Cleaned.BillStatusNote, Original.Item> >(); x.CreateMap <Original.Laws, IReadOnlyCollection <Cleaned.BillStatusLaw> >() .ConvertUsing <ItemizedTypeConverter <Original.Laws, Cleaned.BillStatusLaw, Original.Item> >(); x.CreateMap <Original.Cosponsors, IReadOnlyCollection <Cleaned.BillStatusCosponsor> >() .ConvertUsing <ItemizedTypeConverter <Original.Cosponsors, Cleaned.BillStatusCosponsor, Original.Item> >(); x.CreateMap <Original.BillCommittees, IReadOnlyCollection <Cleaned.BillStatusCommittee> >() .ConvertUsing <ItemizedTypeConverter <Original.BillCommittees, Cleaned.BillStatusCommittee, Original.Item> >(); x.CreateMap <Original.CboCostEstimates, IReadOnlyCollection <Cleaned.BillStatusCBOCostEstimate> >() .ConvertUsing <ItemizedTypeConverter <Original.CboCostEstimates, Cleaned.BillStatusCBOCostEstimate, Original.Item> >(); x.CreateMap <Original.CalendarNumbers, IReadOnlyCollection <Cleaned.BillStatusCalendarNumber> >() .ConvertUsing <ItemizedTypeConverter <Original.CalendarNumbers, Cleaned.BillStatusCalendarNumber, Original.Item> >(); x.CreateMap <Original.Actions, IReadOnlyCollection <Cleaned.BillStatusAction> >() .ConvertUsing <ItemizedTypeConverter <Original.Actions, Cleaned.BillStatusAction, Original.Item> >(); x.CreateMap <Original.Actions, IReadOnlyCollection <Cleaned.BillAmendmentAction> >() .ConvertUsing <BillAmendmentActionsTypeConverter>(); x.CreateMap <Original.Links, IReadOnlyCollection <Cleaned.Link> >() .ConvertUsing <ItemizedTypeConverter <Original.Links, Cleaned.Link, Original.Link> >(); x.CreateMap <Original.Amendments, IReadOnlyCollection <Cleaned.BillStatusAmendment> >() .ConvertUsing <ItemizedTypeConverter <Original.Amendments, Cleaned.BillStatusAmendment, Original.Amendment> >(); x.CreateMap <Original.LegislativeSubjects, IReadOnlyCollection <Cleaned.LegislativeSubject> >() .ConvertUsing <ItemizedTypeConverter <Original.LegislativeSubjects, Cleaned.LegislativeSubject, Original.Item> >(); x.CreateMap <Original.Activities, IReadOnlyCollection <Cleaned.CommitteeActivity> >() .ConvertUsing <ItemizedTypeConverter <Original.Activities, Cleaned.CommitteeActivity, Original.Item> >(); x.CreateMap <Original.Activities, IReadOnlyCollection <Cleaned.SubcommitteeActivity> >() .ConvertUsing <ItemizedTypeConverter <Original.Activities, Cleaned.SubcommitteeActivity, Original.Item> >(); x.CreateMap <Original.Subcommittees, IReadOnlyCollection <Cleaned.Subcommittee> >() .ConvertUsing <ItemizedTypeConverter <Original.Subcommittees, Cleaned.Subcommittee, Original.Item> >(); x.CreateMap <Original.BillCommittees, IReadOnlyCollection <Cleaned.BillStatusCommittee> >() .ConvertUsing <ItemizedTypeConverter <Original.BillCommittees, Cleaned.BillStatusCommittee, Original.Item> >(); x.CreateMap <Original.BillSummaries, IReadOnlyCollection <Cleaned.BillStatusSummary> >() .ConvertUsing <ItemizedTypeConverter <Original.BillSummaries, Cleaned.BillStatusSummary, Original.Item> >(); x.CreateMap <Original.Notes, IReadOnlyCollection <Cleaned.BillStatusNote> >() .ConvertUsing <ItemizedTypeConverter <Original.Notes, Cleaned.BillStatusNote, Original.Item> >(); x.CreateMap <Original.CommitteeReports, IReadOnlyCollection <Cleaned.BillStatusCommitteeReport> >() .ConvertUsing <ItemizedTypeConverter <Original.CommitteeReports, Cleaned.BillStatusCommitteeReport, Original.CommitteeReport> >(); x.CreateMap <Original.Committees, IReadOnlyCollection <Cleaned.BillStatusCommittee> >() .ConvertUsing(src => { return(mapper.Map <Original.BillCommittees, IReadOnlyCollection <Cleaned.BillStatusCommittee> >(src.BillCommittees)); }); x.CreateMap <Original.Summaries, IReadOnlyCollection <Cleaned.BillStatusSummary> >() .ConvertUsing(src => { return(mapper.Map <Original.BillSummaries, IReadOnlyCollection <Cleaned.BillStatusSummary> >(src.BillSummaries)); }); x.CreateMap <Original.RecordedVotes, IReadOnlyCollection <Cleaned.BillStatusRecordedVote> >() .ConvertUsing <ItemizedTypeConverter <Original.RecordedVotes, Cleaned.BillStatusRecordedVote, Original.RecordedVote> >(); x.CreateMap <Original.RelationshipDetails, IReadOnlyCollection <Cleaned.RelationshipDetail> >() .ConvertUsing <ItemizedTypeConverter <Original.RelationshipDetails, Cleaned.RelationshipDetail, Original.Item> >(); #endregion Itemized Collection Mappings #region Item Mappings x.CreateMap <Original.Item, Cleaned.Subcommittee>(); x.CreateMap <Original.Item, Cleaned.LegislativeSubject>(); x.CreateMap <Original.Item, Cleaned.BillStatusCalendarNumber>(); x.CreateMap <Original.Item, Cleaned.BillAmendmentSponsor>(); x.CreateMap <Original.Item, Cleaned.BillStatusNote>(); x.CreateMap <Original.Item, Cleaned.BillStatusSummary>() .ForMember(dest => dest.ActionDate, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.ActionDate))) .ForMember(dest => dest.UpdateDate, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.UpdateDate))) .ForMember(dest => dest.LastSummaryUpdateDate, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.LastSummaryUpdateDate))) .ForMember(dest => dest.ActionDescription, opts => opts.MapFrom(src => src.ActionDesc)) .ForMember(dest => dest.Text, opts => opts.MapFrom(src => ParseHelpers.ParseAndStripHTML(src.Text))); x.CreateMap <Original.Item, Cleaned.BillStatusCosponsor>() .ForMember(dest => dest.IsOriginalCosponsor, opts => opts.MapFrom(src => ParseHelpers.ParseNullableBoolean(src.IsOriginalCosponsor))) .ForMember(dest => dest.SponsorshipDate, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.SponsorshipDate))) .ForMember(dest => dest.SponsorshipWithdrawnDate, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.SponsorshipWithdrawnDate))) .ForMember(dest => dest.District, opts => opts.MapFrom(src => ParseHelpers.ParseNullableInt(src.District))); x.CreateMap <Original.Item, Cleaned.BillAmendmentAction>() .ForMember(dest => dest.ActionDate, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.ActionDate, src.ActionTime))); x.CreateMap <Original.Item, Cleaned.BillStatusAction>() .ForMember(dest => dest.ActionDate, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.ActionDate, src.ActionTime))); x.CreateMap <Original.Item, Cleaned.SubcommitteeActivity>() .ForMember(dest => dest.Date, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.Date))); x.CreateMap <Original.Item, Cleaned.CommitteeActivity>() .ForMember(dest => dest.Date, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.Date))); x.CreateMap <Original.Item, Cleaned.BillStatusRelatedBill>() .ForMember(dest => dest.RelationshipDetails, opts => opts.MapFrom(src => src.RelationshipDetails)); x.CreateMap <Original.Item, Cleaned.RelationshipDetail>(); x.CreateMap <Original.Item, Cleaned.BillStatusLaw>(); x.CreateMap <Original.Item, Cleaned.BillStatusSponsor>() .ForMember(dest => dest.District, opts => opts.MapFrom(src => ParseHelpers.ParseNullableInt(src.District))); x.CreateMap <Original.Item, Cleaned.BillStatusTitle>(); x.CreateMap <Original.Item, Cleaned.BillStatusCommittee>(); x.CreateMap <Original.Item, Cleaned.BillStatusCBOCostEstimate>() .ForMember(dest => dest.PublishedDate, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.PubDate))) .ForMember(dest => dest.URL, opts => opts.MapFrom(src => new Uri(src.Url))); x.CreateMap <Original.RecordedVote, Cleaned.BillStatusRecordedVote>() .ForMember(dest => dest.Date, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.Date))) .ForMember(dest => dest.URL, opts => opts.MapFrom(src => new Uri(src.Url))); #endregion Item Mappings x.CreateMap <Original.Link, Cleaned.Link>() .ForMember(dest => dest.URL, opts => opts.MapFrom(src => new Uri(src.Url))); x.CreateMap <Original.Amendment, Cleaned.BillStatusAmendment>() .ForMember(dest => dest.Actions, opts => opts.MapFrom(src => src.Actions != null ? src.Actions.InnerActions : null)) .ForMember(dest => dest.Congress, opts => opts.MapFrom(src => ParseHelpers.GetFirstStringOrEmpty(src.Congress))) .ForMember(dest => dest.CreateDate, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.CreateDate))) .ForMember(dest => dest.ProposedDate, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.ProposedDate))) .ForMember(dest => dest.SubmittedDate, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.SubmittedDate))) .ForMember(dest => dest.UpdateDate, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.UpdateDate))) .ForMember(dest => dest.Number, opts => opts.MapFrom(src => ParseHelpers.GetFirstStringOrEmpty(src.Number))) .ForMember(dest => dest.Purpose, opts => opts.MapFrom(src => ParseHelpers.GetFirstStringOrEmpty(src.Purpose))) .ForMember(dest => dest.Description, opts => opts.MapFrom(src => ParseHelpers.GetFirstStringOrEmpty(src.Description))) .ForMember(dest => dest.Type, opts => opts.MapFrom(src => ParseHelpers.GetFirstStringOrEmpty(src.Type))); x.CreateMap <Original.AmendedBill, Cleaned.AmendedBill>(); x.CreateMap <Original.AmendedAmendment, Cleaned.AmendedAmendment>(); x.CreateMap <Original.Committee, Cleaned.BillActionCommittee>(); x.CreateMap <Original.SourceSystem, Cleaned.SourceSystem>(); x.CreateMap <Original.CommitteeReport, Cleaned.BillStatusCommitteeReport>(); x.CreateMap <Original.Identifiers, Cleaned.Identifiers>(); x.CreateMap <Original.PolicyArea, Cleaned.PolicyArea>(); x.CreateMap <Original.Cosponsors, Cleaned.BillAmendmentCosponsor>(); x.CreateMap <Original.LatestAction, Cleaned.LatestAction>() .ForMember(dest => dest.ActionDate, opts => opts.MapFrom(src => ParseHelpers.ParseNullableDateTime(src.ActionDate, src.ActionTime))); x.CreateMap <Original.Bill, Cleaned.BillStatus>().ConvertUsing <BillStatusTypeConverter>(); x.CreateMap <Original.Subjects, Cleaned.BillStatusSubject>() .ForMember(dest => dest.LegislativeSubjects, opts => opts.MapFrom(src => src.BillSubjects != null && src.BillSubjects.LegislativeSubjects != null && src.BillSubjects.LegislativeSubjects.Items != null ? mapper.Map <Original.LegislativeSubjects, IReadOnlyCollection <Cleaned.LegislativeSubject> > (src.BillSubjects.LegislativeSubjects) : null)) .ForMember(dest => dest.PolicyArea, opts => opts.MapFrom(src => src.BillSubjects != null ? src.BillSubjects.PolicyArea : null)); }); } if (mapper == null) { mapper = config.CreateMapper(); } isInitialized = true; #if DEBUG //config.AssertConfigurationIsValid(); #endif }