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); }
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); }