public PropertySet( IPropertySet other, IListener listener, IPolicies policies, ICompilerMessageBuilder messageProvider, int interfaceIndex) { if(ReferenceEquals(other, null)) throw new ArgumentNullException(nameof(other)); if (ReferenceEquals(listener, null)) throw new ArgumentNullException(nameof(listener)); if (ReferenceEquals(policies, null)) throw new ArgumentNullException(nameof(policies)); if (ReferenceEquals(messageProvider, null)) throw new ArgumentNullException(nameof(messageProvider)); this.InterfaceName = other.InterfaceName ?? policies.GenerateSurrogateInterfaceName(interfaceIndex); if (ReferenceEquals(other.InterfaceName, null)) listener.Error(messageProvider.MissingInterfaceName(this.InterfaceName, interfaceIndex)); if (false == policies.IsValidInterfaceName(this.InterfaceName)) listener.Error(messageProvider.InvalidInterfaceName(this.InterfaceName, interfaceIndex)); if (ReferenceEquals(other.Properties, null)) { listener.Error(messageProvider.EmptyPropertiesList(this.InterfaceName, interfaceIndex)); return; } int propertyIndex = 0; foreach (var property in other.Properties.OfType<IBasicProperty>()) { this.Properties.Add( new BasicProperty(property, listener, policies, messageProvider, propertyIndex++)); } propertyIndex = 0; foreach (var property in other.Properties.OfType<IBlobProperty>()) { this.Properties.Add( new BlobProperty(property, listener, policies, messageProvider, propertyIndex++)); } propertyIndex = 0; foreach (var property in other.Properties.OfType<ITableValueProperty>()) { this.Properties.Add( new TableValueProperty(property, listener, policies, messageProvider, propertyIndex++)); } this.m_ixPropertyByName = this.Properties.ToDictionary( p => p.PropertyName, StringComparer.OrdinalIgnoreCase); }
public TableValueProperty( ITableValueProperty other, IListener listener, IPolicies policies, ICompilerMessageBuilder messageProvider, int propertyIndex) : base(other, listener, policies, messageProvider, propertyIndex) { this.DataRowInterfaceName = other.DataRowInterfaceName ?? typeof(object).FullName; if (ReferenceEquals(other.DataRowInterfaceName, null)) listener.Error(messageProvider.MissingDataRowInterfaceName(propertyIndex)); else if(false == policies.IsValidInterfaceName(this.DataRowInterfaceName)) listener.Error(messageProvider.InvalidDataRowInterfaceName(this.DataRowInterfaceName, propertyIndex)); }
public BasicProperty( IBasicProperty other, IListener listener, IPolicies policies, ICompilerMessageBuilder messageProvider, int propertyIndex) : base(other, listener, policies, messageProvider, propertyIndex) { messageProvider = messageProvider ?? new CompilerMessageBuilder(); this.PropertyTypeName = other.PropertyTypeName ?? typeof(object).FullName; if(false == policies.IsValidBasicPropertyTypeName(other.PropertyTypeName)) listener.Error(messageProvider.InvalidBasicPropertyTypeName(this.PropertyName, other.PropertyTypeName)); }
public SqlSchemaMappingCompilerInputAdapter( ISqlSchemaMappingCompilerInput other, ICompilerMessageBuilder compilerMessageBuilder, IListener listener) { if(ReferenceEquals(other, null)) throw new ArgumentNullException(nameof(other)); if (ReferenceEquals(compilerMessageBuilder, null)) throw new ArgumentNullException(nameof(compilerMessageBuilder)); var interfaceNames = new HashSet<string>(); var databaseObjectNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase); var policies = new Policies(); {// Data row contracts var contracts = other.DataRowInterfaces.ToDenseCollection(); for (int interfaceIndex = 0; interfaceIndex < contracts.Count; ++interfaceIndex) { var contract = contracts[interfaceIndex]; var item = new PropertySet(contract, listener, policies, compilerMessageBuilder, interfaceIndex); this.DataRowInterfaces.Add(item); if (!interfaceNames.Add(item.InterfaceName)) listener.Error(compilerMessageBuilder.DuplicateInterfaceNameInDataRowInterfaces(item.InterfaceName)); this.m_ixInterfaceByInterfaceName[item.InterfaceName] = item; this.m_ixDataRowInterfaceByInterfaceName[item.InterfaceName] = item; } } {// Operation request contracts var contracts = other.OperationRequestInterfaces.ToDenseCollection(); for (int interfaceIndex = 0; interfaceIndex < contracts.Count; ++interfaceIndex) { var contract = contracts[interfaceIndex]; var item = new PropertySet(contract, listener, policies, compilerMessageBuilder, interfaceIndex); this.OperationRequestInterfaces.Add(item); if (!interfaceNames.Add(item.InterfaceName)) listener.Error(compilerMessageBuilder.DuplicateInterfaceNameInOperationRequestInterfaces(item.InterfaceName)); this.m_ixInterfaceByInterfaceName[item.InterfaceName] = item; this.m_ixOperationRequestInterfaceByInterfaceName[item.InterfaceName] = item; foreach (var tableValueProperty in item.Properties.OfType<TableValueProperty>()) { if (!this.m_ixDataRowInterfaceByInterfaceName.ContainsKey(tableValueProperty.DataRowInterfaceName)) { listener.Error( compilerMessageBuilder.TableValueInterfaceNotDefined( item.InterfaceName, tableValueProperty.DataRowInterfaceName, tableValueProperty.PropertyName)); } } } } {// Operation response contracts var contracts = other.OperationResponseInterfaces.ToDenseCollection(); for (int interfaceIndex = 0; interfaceIndex < contracts.Count; ++interfaceIndex) { var contract = contracts[interfaceIndex]; var item = new PropertySet(contract, listener, policies, compilerMessageBuilder, interfaceIndex); this.OperationResponseInterfaces.Add(item); if (!interfaceNames.Add(item.InterfaceName)) listener.Error(compilerMessageBuilder.DuplicateInterfaceNameInOperationResponseInterfaces(item.InterfaceName)); this.m_ixInterfaceByInterfaceName[item.InterfaceName] = item; this.m_ixOperationResponseInterfaceByInterfaceName[item.InterfaceName] = item; } } foreach (var userSelector in other.TableTypeSelectors) { var selector =new SqlTableTypeSelector(userSelector, listener, policies, compilerMessageBuilder); TableTypeSelectors.Add(selector); if (false == databaseObjectNames.Add(selector.FullName)) { listener.Error(compilerMessageBuilder.DuplicateDatabaseObjectSelector(selector.FullName)); continue; } foreach (var dataRowMapping in selector.DataRowMappings) { if (!this.m_ixDataRowInterfaceByInterfaceName.ContainsKey(dataRowMapping.InterfaceName)) { listener.Error(compilerMessageBuilder.TableValueInterfaceReferedByTableTypeMappingNotDefined(selector.FullName, dataRowMapping.InterfaceName)); continue; } var contract = this.m_ixDataRowInterfaceByInterfaceName[dataRowMapping.InterfaceName]; dataRowMapping.Interface = contract; var propertyNames = new HashSet<string>(contract.Properties.Select(m=> m.PropertyName), StringComparer.OrdinalIgnoreCase); foreach (var mapping in dataRowMapping.Mappings) { if (false == propertyNames.Contains(mapping.PropertyName)) { listener.Error(compilerMessageBuilder.InterfacePropertyNotFound(mapping.PropertyName)); } } } } }