//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ private void _AddUser(ActiveBoard b, Change change) { ActiveUser user = new ActiveUser(); /*deserializam obiectul primit*/ var jss = new JavaScriptSerializer(); ChangeDataUser cd = jss.Deserialize <ChangeDataUser>(change.ChangeString); this.AddUser(b.BoardEntity.Id, cd.Name); }
//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ public void PushChange(int boardId, Change change, IPrincipal user) { /*punem la ceialti utilizatori modificarea produsa*/ if (!this._activeBoards.ContainsKey(boardId)) { throw new Exception("Board id not found in ActiveBoards"); } ActiveBoard board = null; try { board = this.GetBoard(boardId); } catch (KeyNotFoundException ex) { return; } if (!board.UsersTable.ContainsKey(user.Identity.Name)) { throw new Exception("Username not found in board's userlist"); } switch (change.Operation) { case "add": if (change.Obj == "layer") { this._AddLayer(board, change); } else if (change.Obj == "widget") { this._AddWidget(board, change); } else if (change.Obj == "user") { this._AddUser(board, change); } break; case "remove": /*il stergem din entities si din dictionar*/ if (change.Obj == "layer") { ActiveLayer layer = board.Layers[change.Id]; /*scoatem widgets entities pt acest layer si le stergem din _em*/ foreach (ActiveWidget w in layer.WidgetsStack) { this._em.DeleteObject(w.WidgetEntity); } /*stergem si acest layer din board din _em*/ this._em.DeleteObject(layer.LayerEntity); /*stergem layerul din activelayers pt acest board*/ lock (board.Layers) { board.Layers.Remove(change.Id); } lock (board.LayerStack) { board.LayerStack.Remove(layer); } } else if (change.Obj == "widget") { /*get the layer id*/ var jss = new JavaScriptSerializer(); ChangeDataWidget cd = jss.Deserialize <ChangeDataWidget>(change.ChangeString); /*delete from entities*/ Widget entity = board.Layers[cd.LayerId].GetWidget(cd.Id).WidgetEntity; this._em.Widgets.DeleteObject(entity); /*delete the widget from the layer of that board*/ board.Layers[cd.LayerId].RemoveWidget(cd.Id); } else if (change.Obj == "user") { /*get the layer id*/ var jss = new JavaScriptSerializer(); ChangeDataUser cd = jss.Deserialize <ChangeDataUser>(change.ChangeString); ActiveUser auser = board.UsersTable[cd.Name]; /*delete from entities*/ this._em.DeleteObject(auser.Entity); /*delete the widget from the layer of that board*/ lock (board.Users) { board.Users.Remove(auser); } lock (board.UsersTable) { board.UsersTable.Remove(auser.Username); } } break; case "change": if (change.Obj == "layer") { this._ChangeLayer(board, change); } else if (change.Obj == "widget") { this._ChangeWidget(board, change); } /*pentru user nu avem ce modifica*/ break; } foreach (KeyValuePair <string, ActiveUser> uPair in board.UsersTable) { if (uPair.Value.Username != user.Identity.Name) { uPair.Value.Changes.Add(change); } } }