예제 #1
0
        /// <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;
        }
예제 #2
0
        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;
                    }
                }
            }
        }