コード例 #1
0
        private void ImportEvents(
            IWriteSession session,
            IProjectContext projectContext,
            IList <JsonEvent> events,
            INamespace @namespace)
        {
            var existingEvents = projectContext.Project.GetAllEvents().ToList();

            CheckForDuplicates("events", events.Select(e => e.Name).ToList());

            foreach (var evt in events)
            {
                var eventName  = !string.IsNullOrWhiteSpace(evt.Name) ? evt.Name : null;
                var @event     = _eventService.CreateEvent(session, projectContext, @namespace, eventName);
                var eventGroup = projectContext.Project.EventGroups.Items.FirstOrDefault(i => i.Name == evt.EventGroup)
                                 ?? projectContext.Project.EventGroups.Items.FirstOrDefault();

                if ([email protected](eventGroup))
                {
                    _eventService.SetEventGroup(session, @event, eventGroup);
                }

                if (@namespace.Events.Items.GroupBy(e => e.EventId).Any(id => id.Count() > 1))
                {
                    _eventService.SetEventId(session, @event, existingEvents.FindFreeEventId());
                }

                if (evt.Parameters != null)
                {
                    CheckForDuplicates("event parameters", evt.Parameters.Select(p => p.Name).ToList());

                    foreach (var param in evt.Parameters)
                    {
                        var paramType = projectContext.TypeManager.FindType(param.Type);
                        if (paramType == null)
                        {
                            _importProblems.Add($"Invalid parameter type '{param.Type}' for a parameter with name " +
                                                $"'{param.Name}' in event '{evt.Name}'");
                            continue;
                        }

                        var parameter = _eventService.AddParameter(session, projectContext, @event, paramType);
                        if (!string.IsNullOrWhiteSpace(param.Name))
                        {
                            SetParameterName(session, @event, parameter, param.Name);
                        }
                    }
                }

                existingEvents.Add(@event);
            }
        }