public static bool SynchronizeTo(this IStudentAcademicRecordExtension source, IStudentAcademicRecordExtension target) { bool isModified = false; var sourceSupport = source as IStudentAcademicRecordExtensionSynchronizationSourceSupport; var sourceExtensionSupport = source.StudentAcademicRecord as IExtensionsSynchronizationSourceSupport; if (!sourceExtensionSupport.IsExtensionAvailable("SampleStudentTranscript")) { return(false); } // Back synch non-reference portion of PK (PK properties cannot be changed, therefore they can be omitted in the resource payload, but we need them for proper comparisons for persistence) // Copy non-PK properties if ((sourceSupport == null || sourceSupport.IsNameOfInstitutionSupported) && target.NameOfInstitution != source.NameOfInstitution) { target.NameOfInstitution = source.NameOfInstitution; isModified = true; } if ((sourceSupport == null || sourceSupport.IsSubmissionCertificationDescriptorSupported) && target.SubmissionCertificationDescriptor != source.SubmissionCertificationDescriptor) { target.SubmissionCertificationDescriptor = source.SubmissionCertificationDescriptor; isModified = true; } // Sync lists return(isModified); }
public static void MapTo(this IStudentAcademicRecordExtension source, IStudentAcademicRecordExtension target, Action <IStudentAcademicRecordExtension, IStudentAcademicRecordExtension> onMapped) { var sourceSynchSupport = source as IStudentAcademicRecordExtensionSynchronizationSourceSupport; var targetSynchSupport = target as IStudentAcademicRecordExtensionSynchronizationSourceSupport; // Copy contextual primary key values // Copy non-PK properties if (sourceSynchSupport.IsNameOfInstitutionSupported) { target.NameOfInstitution = source.NameOfInstitution; } else { targetSynchSupport.IsNameOfInstitutionSupported = false; } if (sourceSynchSupport.IsSubmissionCertificationDescriptorSupported) { target.SubmissionCertificationDescriptor = source.SubmissionCertificationDescriptor; } else { targetSynchSupport.IsSubmissionCertificationDescriptorSupported = false; } // Copy Aggregate Reference Data if (GeneratedArtifactStaticDependencies.AuthorizationContextProvider == null || GeneratedArtifactStaticDependencies.AuthorizationContextProvider.GetAction() == RequestActions.ReadActionUri) { target.PostSecondaryOrganizationResourceId = source.PostSecondaryOrganizationResourceId; target.PostSecondaryOrganizationDiscriminator = source.PostSecondaryOrganizationDiscriminator; } // ---------------------------------- // Map One-to-one relationships // ---------------------------------- // Map lists var eTagProvider = new ETagProvider(); // Convert value to ETag, if appropriate var entityWithETag = target as IHasETag; if (entityWithETag != null) { entityWithETag.ETag = eTagProvider.GetETag(source); } // Convert value to LastModifiedDate, if appropriate var dateVersionedEntity = target as IDateVersionedEntity; var etagSource = source as IHasETag; if (dateVersionedEntity != null && etagSource != null) { dateVersionedEntity.LastModifiedDate = eTagProvider.GetDateTime(etagSource.ETag); } }