/// <summary> /// Inject Metadata From the DataEntryField into a Field DTO. /// </summary> private void InjectMetadata(DTO.Field dto, DataEntryField meta) { var cascades = new Cascades(); foreach (var cascade in meta.Cascades) { cascades.Add(new Cascade() { CustomTransformRule = cascade.CustomTransformRule, Parent = cascade.Parent, ParentSection = cascade.ParentSection, SourceProperty = cascade.SourceProperty, TargetProperty = cascade.TargetProperty, Type = cascade.Type, }); } dto.Cascades = cascades; dto.Category = meta.Category; dto.ControlType = meta.ControlType; dto.DefaultMask = meta.DefaultMask; dto.FieldType = meta.FieldType; dto.MaxLength = meta.MaxLength; dto.Name = meta.Name; dto.Path = meta.Path; dto.MasterIndexSearchable = meta.MasterIndexSearchable; }
private static Cascades GetCascades(MemberInfo cascadeAttributes) { var cascades = new Cascades() { }; foreach (var cascade in cascadeAttributes.GetCustomAttributes <CascadeAttribute>()) { cascades.Add(new Domain.Metadata.DataEntry.Cascade() { CustomTransformRule = cascade.CustomTransformRule, Parent = cascade.Parent, ParentSection = cascade.ParentSection, SourceProperty = cascade.SourceProperty, TargetProperty = cascade.TargetProperty, Type = cascade.Type }); } return(cascades); }
/// <summary> /// Load Extended Field Metadata found in the MetaFolder into the metadata store. /// </summary> public void LoadInto(List <DataEntryContract> metadataStore) { // Currently Processany xml files in the Implementations folder. (TODO: Versioning later) var files = Directory.EnumerateFiles(MetaFolder, "*.xml"); foreach (var file in files) { // Deserialize the Xml. var contract = Serializer <Contract> .Deserialize(File.ReadAllText(file)); var contractMeta = metadataStore.FirstOrDefault(x => x.ModuleType == contract.ModuleType); if (contractMeta == null) { throw new Exception("No contract for module [" + contract.ModuleType + "] could be found."); } // Process the Sections foreach (var currentSection in contract.Sections) { // Find the Section var sectionMeta = contractMeta.GetSection(currentSection.Name); if (sectionMeta == null) { throw new Exception("No section named [" + currentSection.Name + "] could be found."); } // Process fields. foreach (var field in GetImplementationFields(currentSection)) { // Find an existing extended field or create a new extended field. var fieldMeta = sectionMeta.GetExtendedOrCustomFieldByName(field.Name) ?? sectionMeta.CreateExtendedField(field.Name, field.Name.ToPascalCase(), field.ControlType); // This should only occur when a client has created a custom field // using a name we have choosen for a field as well. if (fieldMeta.FieldType == FieldType.Custom) { var fieldName = fieldMeta.Name; var sectionName = currentSection.Name; var moduleType = contract.ModuleType; // Gather some useful info // It would be better if DataEntryField and Field shared a common contract... var previousType = fieldMeta.FieldType; var previousControlType = fieldMeta.ControlType; var previousLabel = fieldMeta.Label; var previousDescription = fieldMeta.Description; var previousColumnSpan = fieldMeta.ColumnSpan; var previousMaxLength = fieldMeta.MaxLength; var previousMasterIndexSearchable = fieldMeta.MasterIndexSearchable; var previousDefaultMask = fieldMeta.DefaultMask; var previousDefaultValue = fieldMeta.DefaultValue; var previousCategory = fieldMeta.Category; var previousName = fieldName; var previousPath = fieldMeta.Path; var previousOrderBy = fieldMeta.OrderBy; var previousAgencyId = fieldMeta.AgencyId; var newType = field.FieldType; var newControlType = field.ControlType; var newLabel = field.Label; var newDescription = field.Description; var newColumnSpan = field.ColumnSpan; var newMaxLength = field.MaxLength; var newMasterIndexSearchable = field.MasterIndexSearchable; var newDefaultMask = field.DefaultMask; var newDefaultValue = field.DefaultValue; var newCategory = field.Category; var newName = field.Name; var newPath = field.Path; var newOrderBy = field.OrderBy; _log.Error(""); _log.Error("WARNING: Duplicate Field Detected!"); _log.Error("Agency: " + previousAgencyId); _log.Error("Module: " + moduleType); _log.Error("Section: " + sectionName); _log.Error("Field: " + fieldName); _log.Error(""); _log.Error("Details"); const string columnFormat = "{0,-25}{1,-20}{2,-20}"; _log.Error(columnFormat, "Owner:", "[Agency]", "[TriTech]"); _log.Error(columnFormat, "Name:", previousName, newName); _log.Error(columnFormat, "Label:", previousLabel, newLabel); _log.Error(columnFormat, "Type:", previousType, newType); _log.Error(columnFormat, "ControlType:", previousControlType, newControlType); _log.Error(columnFormat, "Description:", previousDescription, newDescription); _log.Error(columnFormat, "ColumnSpan:", previousColumnSpan, newColumnSpan); _log.Error(columnFormat, "MaxLength:", previousMaxLength, newMaxLength); _log.Error(columnFormat, "MasterIndexSearchable:", previousMasterIndexSearchable, newMasterIndexSearchable); _log.Error(columnFormat, "DefaultMask:", previousDefaultMask, newDefaultMask); _log.Error(columnFormat, "DefaultValue:", previousDefaultValue, newDefaultValue); _log.Error(columnFormat, "Category:", previousCategory, newCategory); _log.Error(columnFormat, "Path:", previousPath, newPath); _log.Error(columnFormat, "OrderBy:", previousOrderBy, newOrderBy); _log.Error(""); _log.Error("A Custom field conflicts with this Update. " + "Please provide the system administrator with the above information as custom migration scripts may be required."); // Force the Field to become an ancillary field fieldMeta.ChangeFieldType(FieldType.Extended); // Remove the Agency Ownership of the field. fieldMeta.RemoveAgencyOwnership(); } //process the deserialized cascades var cascades = new Cascades(); if (field.Cascades != null) { foreach (var cascade in field.Cascades) { cascades.Add(new Domain.Metadata.DataEntry.Cascade() { Type = cascade.Type, Parent = cascade.Parent, ParentSection = cascade.ParentSection, SourceProperty = cascade.SourceProperty, TargetProperty = cascade.TargetProperty, CustomTransformRule = cascade.CustomTransformRule }); } } // Set the Metadata fieldMeta.Cascades = cascades; fieldMeta.Label = field.Label; fieldMeta.Description = field.Description; fieldMeta.ColumnSpan = field.ColumnSpan; fieldMeta.MaxLength = field.MaxLength; fieldMeta.MasterIndexSearchable = field.MasterIndexSearchable; fieldMeta.DefaultMask = field.DefaultMask; fieldMeta.Category = field.Category; } } } }