Exemplo n.º 1
0
        public async Task ImportText(IOspSession session, string jsonText, ScopeIds scopeId, CancellationToken?cancellationToken = null)
        {
            Logger.Info("Reading CK model....");
            var model = CkSerializer.Deserialize(jsonText);

            await ExecuteImport(session, model, scopeId, cancellationToken);
        }
Exemplo n.º 2
0
        public async Task Import(IOspSession session, string filePath, ScopeIds scopeId, CancellationToken?cancellationToken = null)
        {
            Logger.Info("Reading CK model....");
            CkModelRoot model;

            using (StreamReader streamReader = new StreamReader(filePath))
            {
                model = CkSerializer.Deserialize(streamReader);
            }

            Logger.Info("Executing import of CK model....");

            await ExecuteImport(session, model, scopeId, cancellationToken);

            Logger.Info("Import of CK model completed.");
        }
Exemplo n.º 3
0
        private async Task <bool> DeleteOldVersion(IOspSession session, ScopeIds scopeId, CancellationToken?cancellationToken)
        {
            foreach (var ckAttribute in await _databaseContext.CkAttributes
                     .FindManyAsync(session, x => x.ScopeId == scopeId))
            {
                await _databaseContext.CkAttributes.DeleteOneAsync(session, ckAttribute.AttributeId);
            }

            if (CheckCancellation(cancellationToken))
            {
                return(true);
            }

            foreach (var ckEntity in await _databaseContext.CkEntities
                     .FindManyAsync(session, x => x.ScopeId == scopeId))
            {
                await _databaseContext.CkEntities.DeleteOneAsync(session, ckEntity.CkId);
            }

            if (CheckCancellation(cancellationToken))
            {
                return(true);
            }

            foreach (var ckEntityAssociation in await _databaseContext.CkEntityAssociations
                     .FindManyAsync(session, x => x.ScopeId == scopeId))
            {
                await _databaseContext.CkEntityAssociations.DeleteOneAsync(session, ckEntityAssociation.AssociationId);
            }

            if (CheckCancellation(cancellationToken))
            {
                return(true);
            }

            foreach (var ckEntityInheritance in await _databaseContext.CkEntityInheritances
                     .FindManyAsync(session, x => x.ScopeId == scopeId))
            {
                await _databaseContext.CkEntityInheritances.DeleteOneAsync(session, ckEntityInheritance.InheritanceId);
            }

            if (CheckCancellation(cancellationToken))
            {
                return(true);
            }
            return(false);
        }
Exemplo n.º 4
0
 private void ProcessCkAttributes(CkModelRoot model, ScopeIds scopeId)
 {
     foreach (var modelCkAttribute in model.CkAttributes)
     {
         var ckAttribute = new CkAttribute
         {
             AttributeId        = modelCkAttribute.AttributeId,
             ScopeId            = scopeId,
             AttributeValueType = (AttributeValueTypes)modelCkAttribute.ValueType,
             SelectionValues    = modelCkAttribute.SelectionValues?.Select(sv => new CkSelectionValue
             {
                 Key = sv.Key, Name = sv.Name
             }).ToList(),
             DefaultValue  = modelCkAttribute.DefaultValue,
             DefaultValues = modelCkAttribute.DefaultValues
         };
         _transientCkModel.CkAttributes.Add(ckAttribute);
     }
 }
Exemplo n.º 5
0
        private async Task ExecuteImport(IOspSession session, CkModelRoot model, ScopeIds scopeId, CancellationToken?cancellationToken)
        {
            // Transform to entities
            ProcessCkAttributes(model, scopeId);
            if (CheckCancellation(cancellationToken))
            {
                return;
            }

            ProcessCkEntitiesAndAssociations(model, scopeId);
            if (CheckCancellation(cancellationToken))
            {
                return;
            }

            // ValidateAsync
            await _ckModelValidation.Validate(session, _transientCkModel, scopeId, cancellationToken);

            // Delete the old version
            if (await DeleteOldVersion(session, scopeId, cancellationToken))
            {
                return;
            }
            if (CheckCancellation(cancellationToken))
            {
                return;
            }

            // ValidateAsync the Model
            if (_transientCkModel.CkAttributes.Any())
            {
                ValidateAndThrow(
                    await _databaseContext.CkAttributes.BulkImportAsync(session,
                                                                        _transientCkModel.CkAttributes.ToArray()));
                if (CheckCancellation(cancellationToken))
                {
                    return;
                }
            }

            if (_transientCkModel.CkEntities.Any())
            {
                ValidateAndThrow(
                    await _databaseContext.CkEntities.BulkImportAsync(session, _transientCkModel.CkEntities.ToArray()));
                if (CheckCancellation(cancellationToken))
                {
                    return;
                }
            }

            if (_transientCkModel.CkEntityAssociations.Any())
            {
                ValidateAndThrow(
                    await _databaseContext.CkEntityAssociations.BulkImportAsync(session,
                                                                                _transientCkModel.CkEntityAssociations));
                if (CheckCancellation(cancellationToken))
                {
                    return;
                }
            }

            if (_transientCkModel.CkEntityInheritances.Any())
            {
                ValidateAndThrow(
                    await _databaseContext.CkEntityInheritances.BulkImportAsync(session,
                                                                                _transientCkModel.CkEntityInheritances));
                if (CheckCancellation(cancellationToken))
                {
                    return;
                }
            }

            await CreateCollections(session);

            if (CheckCancellation(cancellationToken))
            {
                return;
            }

            await CreateIndex(session);
        }
Exemplo n.º 6
0
        private void ProcessCkEntitiesAndAssociations(CkModelRoot model, ScopeIds scopeId)
        {
            var associationRoleDefinitions = model.CkAssociationRoles.ToDictionary(k => k.RoleId, v => v);

            foreach (var entity in model.CkEntities)
            {
                List <CkEntityAttribute> ckEntityAttributes = new List <CkEntityAttribute>();
                foreach (var attribute in entity.Attributes)
                {
                    var ckEntityAttribute = new CkEntityAttribute
                    {
                        AttributeId            = attribute.AttributeId,
                        AttributeName          = attribute.AttributeName,
                        AutoCompleteFilter     = attribute.AutoCompleteFilter,
                        AutoCompleteLimit      = attribute.AutoCompleteLimit,
                        IsAutoCompleteEnabled  = attribute.IsAutoCompleteEnabled,
                        AutoIncrementReference = attribute.AutoIncrementReference
                    };

                    ckEntityAttributes.Add(ckEntityAttribute);
                }

                List <CkEntityIndex> textSearchDefinitions = new List <CkEntityIndex>();
                foreach (var entityIndexDto in entity.Indexes)
                {
                    var entityIndex = new CkEntityIndex
                    {
                        IndexType = (IndexTypes)entityIndexDto.IndexType,
                        Language  = entityIndexDto.Language,
                        Fields    = entityIndexDto.Fields
                                    .Select(x => new CkIndexFields {
                            Weight = x.Weight, AttributeNames = x.AttributeNames
                        })
                                    .ToList()
                    };

                    textSearchDefinitions.Add(entityIndex);
                }


                var ckEntity = new CkEntity
                {
                    CkId       = entity.CkId,
                    ScopeId    = scopeId,
                    IsFinal    = entity.IsFinal,
                    IsAbstract = entity.IsAbstract,
                    Attributes = ckEntityAttributes,
                    Indexes    = textSearchDefinitions
                };

                if (!string.IsNullOrWhiteSpace(entity.CkDerivedId))
                {
                    var ckEntityInheritance = new CkEntityInheritance
                    {
                        ScopeId    = scopeId,
                        OriginCkId = entity.CkDerivedId,
                        TargetCkId = entity.CkId,
                    };
                    _transientCkModel.CkEntityInheritances.Add(ckEntityInheritance);
                }

                foreach (var association in entity.Associations)
                {
                    var ckEntityAssociation = new CkEntityAssociation
                    {
                        RoleId               = association.RoleId,
                        ScopeId              = scopeId,
                        InboundMultiplicity  = (Multiplicities)association.InboundMultiplicity,
                        OutboundMultiplicity = (Multiplicities)association.OutboundMultiplicity,
                        OriginCkId           = ckEntity.CkId,
                        TargetCkId           = association.TargetCkId,
                        InboundName          = associationRoleDefinitions[association.RoleId].InboundName,
                        OutboundName         = associationRoleDefinitions[association.RoleId].OutboundName
                    };
                    _transientCkModel.CkEntityAssociations.Add(ckEntityAssociation);
                }

                _transientCkModel.CkEntities.Add(ckEntity);
            }
        }