Пример #1
0
        private void Handle(CasePlanInstanceCreatedEvent evt)
        {
            Roles       = evt.Roles.ToList();
            AggregateId = evt.AggregateId;
            Children.Add(evt.Stage);
            if (evt.Files != null && evt.Files.Any())
            {
                foreach (var file in evt.Files)
                {
                    Children.Add(file);
                }
            }

            CreateDateTime = evt.CreateDateTime;
            UpdateDateTime = evt.CreateDateTime;
            Version        = evt.Version;
            CaseFileId     = evt.CaseFileId;
            CasePlanId     = evt.CasePlanId;
            Name           = evt.CasePlanName;
            NameIdentifier = evt.NameIdentifier;
            if (evt.Parameters != null)
            {
                foreach (var kvp in evt.Parameters)
                {
                    ExecutionContext.SetStrVariable(kvp.Key, kvp.Value);
                }
            }
        }
Пример #2
0
        public static CasePlanInstanceAggregate New(string id, CasePlanAggregate caseplan, string nameIdentifier, Dictionary <string, string> parameters)
        {
            var result = new CasePlanInstanceAggregate();
            var roles  = caseplan.Roles.Select(_ => new CasePlanInstanceRole
            {
                EltId = _.EltId,
                Name  = _.Name
            }).ToList();
            var files = caseplan.Files.Select(_ =>
            {
                var result = new CaseEltInstance
                {
                    EltId = _.EltId,
                    Id    = CaseEltInstance.BuildId(id, _.EltId),
                    Name  = _.Name
                };
                result.UpdateDefinitionType(_.DefinitionType);
                return(result);
            }).ToList();
            var stage = CMMNParser.ExtractStage(caseplan.XmlContent, id);
            var evt   = new CasePlanInstanceCreatedEvent(Guid.NewGuid().ToString(), id, 0, nameIdentifier, roles, stage, DateTime.UtcNow, caseplan.CaseFileId, caseplan.AggregateId, caseplan.Name, parameters, files);

            result.Handle(evt);
            result.DomainEvents.Add(evt);
            return(result);
        }
Пример #3
0
        private void Handle(CasePlanInstanceCreatedEvent evt)
        {
            Roles = evt.Roles.ToList();
            var unknownRoles = evt.Permissions.Where(_ => !Roles.Any(__ => __.Id == _.Id));

            if (unknownRoles.Any())
            {
                throw new AggregateValidationException(new List <KeyValuePair <string, string> >
                {
                    new KeyValuePair <string, string>("validation", $"unknown roles '{string.Join(",", unknownRoles.Select(_ => _.Id))}'")
                });
            }

            if (!string.IsNullOrWhiteSpace(evt.CaseOwner))
            {
                if (Roles.FirstOrDefault(_ => _.Id == evt.CaseOwner) == null)
                {
                    throw new AggregateValidationException(new List <KeyValuePair <string, string> >
                    {
                        new KeyValuePair <string, string>("validation", $"unknown case owner role '{evt.CaseOwner}'")
                    });
                }
            }

            foreach (var permission in evt.Permissions)
            {
                var role = Roles.First(_ => _.Id == permission.Id);
                role.Claims = permission.Claims;
            }

            AggregateId = evt.AggregateId;
            if (!string.IsNullOrWhiteSpace(evt.JsonContent))
            {
                Children.Add(StageElementInstance.FromJson(evt.JsonContent));
            }

            if (evt.Files != null && evt.Files.Any())
            {
                foreach (var file in evt.Files)
                {
                    Children.Add(file.Clone() as CaseFileItemInstance);
                }
            }

            CreateDateTime = evt.CreateDateTime;
            UpdateDateTime = evt.CreateDateTime;
            Version        = evt.Version;
            CasePlanId     = evt.CasePlanId;
            CaseOwner      = evt.CaseOwner;
            if (evt.Parameters != null)
            {
                foreach (var kvp in evt.Parameters)
                {
                    ExecutionContext.SetStrVariable(kvp.Key, kvp.Value);
                }
            }
        }
Пример #4
0
        public static CasePlanInstanceAggregate New(string id, StageElementInstance stage, ICollection <CaseFileItemInstance> caseFiles)
        {
            var result = new CasePlanInstanceAggregate();
            var evt    = new CasePlanInstanceCreatedEvent(Guid.NewGuid().ToString(), id, 0, null, new List <CasePlanInstanceRole>(), new List <CasePlanInstanceRole>(), stage.ToJson(), DateTime.UtcNow, null, string.Empty, new Dictionary <string, string>(), caseFiles);

            result.Handle(evt);
            result.DomainEvents.Add(evt);
            return(result);
        }
Пример #5
0
        public static CasePlanInstanceAggregate New(string id, CasePlanAggregate caseplan, ICollection <CasePlanInstanceRole> permissions, Dictionary <string, string> parameters)
        {
            var result = new CasePlanInstanceAggregate();
            var roles  = caseplan.Roles.Select(_ => new CasePlanInstanceRole
            {
                Id   = _.Id,
                Name = _.Name
            }).ToList();
            var files = caseplan.Files.Select(_ => new CaseFileItemInstance
            {
                DefinitionType = _.DefinitionType,
                EltId          = _.Id,
                Id             = CaseFileItemInstance.BuildId(id, _.Id),
                Name           = _.Name
            }).ToList();
            var stage = CMMNParser.ExtractStage(caseplan.XmlContent, id);
            var json  = stage.ToJson();
            var evt   = new CasePlanInstanceCreatedEvent(Guid.NewGuid().ToString(), id, 0, caseplan.CaseOwner, roles, permissions, json, DateTime.UtcNow, caseplan.AggregateId, caseplan.Name, parameters, files);

            result.Handle(evt);
            result.DomainEvents.Add(evt);
            return(result);
        }