示例#1
0
 private void Init()
 {
     if (_initialized)
     {
         return;
     }
     lock (Locker)
     {
         if (_initialized)
         {
             return;
         }
         _acDomain.MessageDispatcher.DispatchMessage(new MemorySetInitingEvent(this));
         _viewDicByFunction.Clear();
         _viewDicById.Clear();
         var views = _acDomain.RetrieveRequiredService <IOriginalHostStateReader>().GetAllUiViews();
         foreach (var view in views)
         {
             var viewState = UiViewState.Create(_acDomain, view);
             _viewDicById.Add(view.Id, viewState);
             FunctionState function;
             if (!_acDomain.FunctionSet.TryGetFunction(view.Id, out function))
             {
                 throw new NotExistException("意外的功能标识" + view.Id);
             }
             if (!_viewDicByFunction.ContainsKey(function))
             {
                 _viewDicByFunction.Add(function, viewState);
             }
         }
         _initialized = true;
         _acDomain.MessageDispatcher.DispatchMessage(new MemorySetInitializedEvent(this));
     }
 }
示例#2
0
            private void Handle(IAcSession acSession, IUiViewUpdateIo input, bool isCommand)
            {
                var         acDomain       = _set._acDomain;
                var         viewRepository = acDomain.RetrieveRequiredService <IRepository <UiView> >();
                UiViewState bkState;

                if (!acDomain.UiViewSet.TryGetUiView(input.Id, out bkState))
                {
                    throw new NotExistException();
                }
                UiView entity;
                var    stateChanged = false;

                lock (Locker)
                {
                    UiViewState state;
                    if (!acDomain.UiViewSet.TryGetUiView(input.Id, out state))
                    {
                        throw new NotExistException();
                    }
                    entity = viewRepository.GetByKey(input.Id);
                    if (entity == null)
                    {
                        throw new NotExistException();
                    }

                    entity.Update(input);

                    var newState = UiViewState.Create(acDomain, entity);
                    stateChanged = newState != bkState;
                    if (stateChanged)
                    {
                        Update(newState);
                    }
                    if (isCommand)
                    {
                        try
                        {
                            viewRepository.Update(entity);
                            viewRepository.Context.Commit();
                        }
                        catch
                        {
                            if (stateChanged)
                            {
                                Update(bkState);
                            }
                            viewRepository.Context.Rollback();
                            throw;
                        }
                    }
                }
                if (isCommand && stateChanged)
                {
                    acDomain.MessageDispatcher.DispatchMessage(new UiViewUpdatedEvent(acSession, entity, input, isPrivate: true));
                }
            }
示例#3
0
            private void Handle(IAcSession acSession, IUiViewCreateIo input, bool isCommand)
            {
                var acDomain          = _set._acDomain;
                var viewDicByFunction = _set._viewDicByFunction;
                var viewDicById       = _set._viewDicById;
                var viewRepository    = acDomain.RetrieveRequiredService <IRepository <UiView> >();

                if (!input.Id.HasValue)
                {
                    throw new ValidationException("标识是必须的");
                }
                UiView entity;

                lock (Locker)
                {
                    FunctionState function;
                    if (!acDomain.FunctionSet.TryGetFunction(input.Id.Value, out function))
                    {
                        throw new ValidationException("意外的功能标识,界面视图首先是个功能。请先添加界面视图对应的功能记录。");
                    }
                    UiViewState view;
                    if (acDomain.UiViewSet.TryGetUiView(input.Id.Value, out view))
                    {
                        throw new ValidationException("给定标识的界面视图已经存在");
                    }

                    entity = UiView.Create(input);

                    var state = UiViewState.Create(acDomain, entity);
                    if (!viewDicById.ContainsKey(state.Id))
                    {
                        viewDicById.Add(state.Id, state);
                    }
                    if (!viewDicByFunction.ContainsKey(function))
                    {
                        viewDicByFunction.Add(function, state);
                    }
                    if (isCommand)
                    {
                        try
                        {
                            viewRepository.Add(entity);
                            viewRepository.Context.Commit();
                        }
                        catch
                        {
                            if (viewDicById.ContainsKey(entity.Id))
                            {
                                viewDicById.Remove(entity.Id);
                            }
                            if (viewDicByFunction.ContainsKey(function))
                            {
                                viewDicByFunction.Remove(function);
                            }
                            viewRepository.Context.Rollback();
                            throw;
                        }
                    }
                }
                if (isCommand)
                {
                    acDomain.MessageDispatcher.DispatchMessage(new UiViewAddedEvent(acSession, entity, input, isPrivate: true));
                }
            }