public IResponse <NoValue> CreateXML(string fileAsString, long userProfileId) { //refacor DataType after delete from DB var result = new Response <NoValue>(); var xml = XDocument.Parse(fileAsString); var files = xml.Root.Elements().ToList(); try { var enumConvertSuccess = Enum.TryParse(files[0].Value, true, out AdapterTypeItemEnum adapterType); if (!enumConvertSuccess) { result.Status = StatusEnum.Error; result.Message = "Adapter type can be: MSSQL, MySQL or Oracle."; return(result); } #region connectivity var enterpriseAdapterModel = new EnterpriseAdapterModel { EnterpriseAdapter = adapterType, ServerIP = files[1].Value, Port = Int32.Parse(files[2].Value), Username = files[4].Value, Password = files[5].Value, DatabaseName = files[3].Value, Direction = (DirectionEnum)Enum.Parse(typeof(DirectionEnum), files[6].Value, true) }; var tableElements = new List <XElement>(); if (enterpriseAdapterModel.Direction == DirectionEnum.Source) { tableElements = files[7].Elements().ToList(); enterpriseAdapterModel.ParentTable = tableElements[0].Value; } var connection = TestConnection(enterpriseAdapterModel); if (connection.Status != StatusEnum.Success) { result.Status = StatusEnum.Error; result.Message = connection.Message; return(result); } #endregion var newAdapter = new Adapter { Name = files[0].Value + " Adapter", UserProfileId = userProfileId, StatusId = (int)Statuses.Active, AdapterTypeItemId = (int)adapterType, DirectionId = (int)enterpriseAdapterModel.Direction }; _entity.Adapter.Add(newAdapter); EnterpriseAdapter enterpriseAdapter = new EnterpriseAdapter { ServerIP = enterpriseAdapterModel.ServerIP, Port = enterpriseAdapterModel.Port.GetValueOrDefault(), Username = enterpriseAdapterModel.Username, Password = enterpriseAdapterModel.Password, DatabaseName = enterpriseAdapterModel.DatabaseName, AdapterId = newAdapter.Id }; _entity.EnterpriseAdapter.Add(enterpriseAdapter); if (enterpriseAdapterModel.Direction == DirectionEnum.Source) { EnterpriseAdapterTable adapterTable = new EnterpriseAdapterTable { TableName = tableElements[0].Value, EnterpriseAdapterId = enterpriseAdapter.Id }; _entity.EnterpriseAdapterTable.Add(adapterTable); var columns = tableElements[1].Elements().ToList(); foreach (var column in columns) { var adapterPropertyId = adapterTable.Id; var isForeignKey = Convert.ToBoolean(column.Attribute("FK").Value); var isPrimaryKey = Convert.ToBoolean(column.Attribute("PK").Value); Common.Enums.PropertyName property = new Common.Enums.PropertyName(); var propertyName = column.Attribute("property").Value; if (!isForeignKey) { var foreignKeyElementsExist = column.HasElements; if (foreignKeyElementsExist) { result.Status = StatusEnum.Error; result.Message = "There was an error in defining the foreign key field. Check the XML Example file."; return(result); } EnterpriseAdapterTableColumn adapterTableColumn = new EnterpriseAdapterTableColumn { EnterpriseAdapterTableId = adapterPropertyId, ColumnName = column.Value, IsForeignKey = isForeignKey, IsPrimaryKey = isPrimaryKey, DataTypeId = 1 }; switch (propertyName.ToLower()) { case "transactionid": case "transactionaccount": case "transactionamount": case "transactiontype": property = (Common.Enums.PropertyName)Enum.Parse(typeof(Common.Enums.PropertyName), propertyName, true); adapterTableColumn.PropertyNameId = (int)property; break; } _entity.EnterpriseAdapterTableColumn.Add(adapterTableColumn); } else { var columnsChild = column.Elements().ToList(); if (columnsChild.Count < 4) { result.Status = StatusEnum.Error; result.Message = "You have to provide aditional data if the foreign key attribute is set to \"true\". Check the XML Example file."; return(result); } EnterpriseAdapterTableColumn adapterTableColumnParent = new EnterpriseAdapterTableColumn { EnterpriseAdapterTableId = adapterPropertyId, ColumnName = columnsChild[0].Value, IsForeignKey = isForeignKey, IsPrimaryKey = isPrimaryKey, DataTypeId = 1, RelatedTableName = columnsChild[1].Value }; for (var i = 2; i < columnsChild.Count; i++) { EnterpriseAdapterTableColumn adapterTableColumnChild = new EnterpriseAdapterTableColumn { EnterpriseAdapterTableId = adapterTable.Id, ColumnName = columnsChild[i].Value, IsForeignKey = false, IsPrimaryKey = false, DataTypeId = 1, ParentId = adapterTableColumnParent.Id, EnterpriseAdapterTableColumn2 = adapterTableColumnParent }; Common.Enums.PropertyName propertyChild = new Common.Enums.PropertyName(); var propertyNameFK = columnsChild[i].Attribute("property").Value; switch (propertyNameFK.ToLower()) { case "transactionaccount": case "transactionamount": case "transactiontype": propertyChild = (Common.Enums.PropertyName)Enum.Parse(typeof(Common.Enums.PropertyName), propertyNameFK, true); adapterTableColumnChild.PropertyNameId = (int)propertyChild; break; } if (columnsChild[i].Name == "primaryKey") { adapterTableColumnChild.IsPrimaryKey = true; } adapterTableColumnParent.EnterpriseAdapterTableColumn1.Add(adapterTableColumnChild); } _entity.EnterpriseAdapterTableColumn.Add(adapterTableColumnParent); } } } else if (enterpriseAdapterModel.Direction == DirectionEnum.Destination) { _entity.EnterpriseAdapterProperty.Add(new EnterpriseAdapterProperty { PropertyId = (long)PropertyEnum.TableNamePrefix, EnterpriseAdapterId = newAdapter.Id, Value = files[7].Value }); } _entity.SaveChanges(); result.Status = StatusEnum.Success; result.Message = "Connection test succeeded. Enterprise adapter added successfully."; } catch (Exception ex) { result.Status = StatusEnum.Error; result.Message = ex.Message; _logger.Information($"EnterpriseAdapterService.CreateXML(fileAsString: {fileAsString}, userProfileId: {userProfileId})"); _logger.Error(ex.Message); } return(result); }
public IResponse <NoValue> Create(EnterpriseAdapterModel model, long userProfileID) { var result = new Response <NoValue>(); try { #region connectivity var connection = TestConnection(model); if (connection.Status != StatusEnum.Success) { result.Status = StatusEnum.Error; result.Message = connection.Message; return(result); } #endregion var enterpriseAdapter = new EnterpriseAdapter(); var newAdapter = new Adapter { Name = model.Name, AdapterTypeItemId = (int)model.EnterpriseAdapter, UserProfileId = userProfileID, StatusId = (int)Statuses.Active, DirectionId = (int)model.Direction }; _entity.Adapter.Add(newAdapter); enterpriseAdapter.ServerIP = model.ServerIP; enterpriseAdapter.Port = (int)model.Port; enterpriseAdapter.Username = model.Username; enterpriseAdapter.Password = model.Password; enterpriseAdapter.DatabaseName = model.DatabaseName; enterpriseAdapter.AdapterId = newAdapter.Id; _entity.EnterpriseAdapter.Add(enterpriseAdapter); switch (model.Direction) { case DirectionEnum.Destination: foreach (var prop in model.Properties.First().DestinationProperties ?? new List <PropertyModel>()) { var enterpriseAdapterProperty = new EnterpriseAdapterProperty { EnterpriseAdapter = enterpriseAdapter, PropertyId = prop.Id, Value = prop.Value ?? String.Empty }; _entity.EnterpriseAdapterProperty.Add(enterpriseAdapterProperty); } break; case DirectionEnum.Source: if ((int)model.EnterpriseAdapter < 4) { var adapterTable = new EnterpriseAdapterTable { TableName = model.ParentTable, EnterpriseAdapterId = enterpriseAdapter.Id }; _entity.EnterpriseAdapterTable.Add(adapterTable); var y = _entity.EnterpriseAdapterTableColumn.Select(x => x.Id).ToList().LastOrDefault(); if (model.Columns != null) { for (int i = 0; i < model.Columns.Count; i++) { var child = new EnterpriseAdapterTableColumn { Id = (int)model.Columns[i].Id, ParentId = model.Columns[i].ParentId, IsForeignKey = model.Columns[i].IsForeignKey, IsPrimaryKey = model.Columns[i].IsPrimaryKey, PropertyNameId = (int?)model.Columns[i].PropertyNameId, RelatedTableName = model.Columns[i].RelatedTableName, DataTypeId = 1, ColumnName = model.Columns[i].ColumnName, EnterpriseAdapterTableId = adapterTable.Id }; if (model.Columns[i].PropertyNameId == 0) { child.PropertyNameId = null; } if (model.Columns[i].ParentId == 0) { child.ParentId = null; } else { child.ParentId = model.Columns[i].ParentId; } _entity.EnterpriseAdapterTableColumn.Add(child); } } } foreach (var prop in model.Properties.First().SourceProperties ?? new List <PropertyModel>()) { var enterpriseAdapterProperty = new EnterpriseAdapterProperty { EnterpriseAdapter = enterpriseAdapter, PropertyId = prop.Id, Value = prop.Value ?? String.Empty }; _entity.EnterpriseAdapterProperty.Add(enterpriseAdapterProperty); } break; default: break; } _entity.SaveChanges(); result.Status = StatusEnum.Success; result.Message = "Connection test succeeded. Enterprise adapter added successfully."; } catch (Exception ex) { result.Status = StatusEnum.Error; result.Message = Message.SomethingWentWrong; _logger.Information($"EnterpriseAdapterService.Create(model: {model}, userProfileID: {userProfileID})"); _logger.Error(ex.Message); } return(result); }