public MetadataOracleNetTypeDefinition(ServForOracleCache cache, Type type, MetadataOracleTypeDefinition baseMetadataDefinition, UdtPropertyNetPropertyMap[] presetProperties, bool fuzzyNameMatch)
        {
            if (baseMetadataDefinition == null)
            {
                throw new ArgumentNullException(nameof(baseMetadataDefinition));
            }

            Cache = cache;

            UDTInfo    = baseMetadataDefinition.UDTInfo;
            Properties = ProcessPresetNetTypePropertiesMap(type, baseMetadataDefinition, presetProperties, fuzzyNameMatch);
        }
Beispiel #2
0
        private MetadataOracleTypeDefinition CreateAndSaveMetadata(OracleUdtInfo udtInfo, List <MetadataOracleTypePropertyDefinition> properties)
        {
            var typedef = new MetadataOracleTypeDefinition
            {
                Properties = properties,
                UDTInfo    = udtInfo
            };

            Logger?.LogInformation("Saving the metadata for the type {udtName}", udtInfo.FullObjectName);
            Cache.SaveTypeDefinition(typedef);

            return(typedef);
        }
        private IEnumerable <MetadataOraclePropertyNetTypeDefinition> ProcessPresetNetTypePropertiesMap(Type type, MetadataOracleTypeDefinition baseMetadataDefinition, UdtPropertyNetPropertyMap[] presetProperties, bool fuzzyNameMatch)
        {
            presetProperties = presetProperties ?? new UdtPropertyNetPropertyMap[] { };
            var list          = new List <MetadataOraclePropertyNetTypeDefinition>();
            var netProperties = type.GetProperties();
            var netAttibutes  = GetUDTPropertyNames(netProperties);

            foreach (var prop in baseMetadataDefinition.Properties)
            {
                var netProperty = netProperties.FirstOrDefault(c => string.Equals(c.Name, prop.Name, StringComparison.InvariantCultureIgnoreCase));
                if (netProperty == null && fuzzyNameMatch)
                {
                    //TODO Do more advance fuzzy matching, right now it only replaces the underscore
                    netProperty = netProperties.FirstOrDefault(c => string.Equals(c.Name, Regex.Replace(prop.Name, string.Empty), StringComparison.InvariantCultureIgnoreCase));
                }

                var presetNetPropertyName = presetProperties.FirstOrDefault(c => string.Equals(c.UDTPropertyName, prop.Name, StringComparison.InvariantCultureIgnoreCase))?.NetPropertyName;
                var attributePropertyName = netAttibutes.FirstOrDefault(c => string.Equals(c.UDTPropertyName, prop.Name, StringComparison.InvariantCultureIgnoreCase))?.NetPropertyName;

                if (!string.IsNullOrWhiteSpace(attributePropertyName))
                {
                    netProperty = netProperties.FirstOrDefault(c => string.Equals(c.Name, attributePropertyName, StringComparison.InvariantCultureIgnoreCase));
                }
                else if (!string.IsNullOrWhiteSpace(presetNetPropertyName))
                {
                    netProperty = netProperties.FirstOrDefault(c => string.Equals(c.Name, presetNetPropertyName, StringComparison.InvariantCultureIgnoreCase));
                }
                else
                {
                    //TODO throw or log warning
                }

                var propertyTypeDefinition = new MetadataOraclePropertyNetTypeDefinition(prop);

                if (netProperty != null)
                {
                    propertyTypeDefinition.NETProperty = netProperty;
                    if (prop is MetadataOracleTypeSubTypeDefinition propertyObject)
                    {
                        propertyTypeDefinition.PropertyMetadata = GetPropertyMetadata(netProperty.PropertyType, propertyObject, fuzzyNameMatch);
                    }
                }

                list.Add(propertyTypeDefinition);
            }

            return(list);
        }