//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ private void _ChangeWidget(ActiveBoard b, Change change) { /*verificam ce s-a schimbat */ var jss = new JavaScriptSerializer(); ChangeDataWidget cd = null; try { cd = jss.Deserialize<ChangeDataWidget>(change.ChangeString); } catch { return; } /*cautam activelayer-ul parinte*/ if (!b.Layers.ContainsKey(cd.LayerId)) throw new Exception("Parent layer id for changed widget not found"); ActiveLayer l = b.Layers[cd.LayerId]; ActiveWidget w = null; /*cautam activewidget-ul corespunzator*/ if (!l.Widgets.ContainsKey(cd.Id)) throw new Exception("Changed widget id not found"); try { w = l.Widgets[cd.Id]; } catch (KeyNotFoundException){ return; } /*modificam campurile*/ w.Name = (w.WidgetEntity.Name = cd.Name); w.Type = (w.WidgetEntity.Type = cd.Type); w.Data = (w.WidgetEntity.Data = cd.Data); /* daca e schimbat orderul, trebuie refacut stack-ul */ if (cd.Order != w.WidgetEntity.Order) { w.WidgetEntity.Order = cd.Order; /*il stergem din pozitia existenta*/ l.WidgetsStack.Remove(w); /*il reinseram*/ if (l.WidgetsStack.Count <= cd.Order) l.WidgetsStack.Add(w); else l.WidgetsStack.Insert(cd.Order, w); } }
public ActionResult Push(Change change) { try { BoardManager.Instance.PushChange(change.BoardId, change, this.User); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } return Json(change); }
//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ private void _ChangeLayer(ActiveBoard b, Change change) { /*verificam ce s-a schimbat */ var jss = new JavaScriptSerializer(); ChangeDataLayer cd = jss.Deserialize<ChangeDataLayer>(change.ChangeString); /*cautam activelayer-ul corespunzator*/ if (!b.Layers.ContainsKey(cd.Id)) throw new Exception("Changed layer id not found"); ActiveLayer l = b.Layers[cd.Id]; /*modificam campurile*/ l.Name = cd.Name; l.LayerEntity.Name = cd.Name; /* daca e schimbat orderul, trebuie refacut stack-ul */ if (cd.Order != l.LayerEntity.Order) { l.LayerEntity.Order = cd.Order; /*il stergem din pozitia existenta*/ b.LayerStack.Remove(l); /*il reinseram*/ b.LayerStack.Insert(cd.Order, l); } }
//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ private void _AddWidget(ActiveBoard b, Change change) { ActiveWidget newActiveWidget = new ActiveWidget(); var jss = new JavaScriptSerializer(); ChangeDataWidget cd = jss.Deserialize<ChangeDataWidget>(change.ChangeString); newActiveWidget.WidgetId = cd.Id; newActiveWidget.Name = cd.Name; newActiveWidget.Type = cd.Type; newActiveWidget.Data = cd.Data; /*creem si o entitate in bd*/ Widget newWidget = new Widget(); newActiveWidget.WidgetEntity = newWidget; newWidget.WidgetId = cd.Id; newWidget.Order = cd.Order; newWidget.LayerId = cd.LayerId; newWidget.Name = cd.Name; newWidget.Data = cd.Data; /*inseram in listele de widgeturi din layer*/ try { lock (b.Layers[cd.LayerId].Widgets) { b.Layers[cd.LayerId].Widgets.Add(cd.Id, newActiveWidget); } lock (b.Layers[cd.LayerId].WidgetsStack) { b.Layers[cd.LayerId].WidgetsStack.Insert(cd.Order, newActiveWidget); } } catch (KeyNotFoundException ex) { Console.WriteLine(ex.ToString()); } this._em.AddToWidgets(newWidget); }
//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ 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); }
//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ private void _AddLayer(ActiveBoard b, Change change) { ActiveLayer newActiveLayer = new ActiveLayer(); var jss = new JavaScriptSerializer(); ChangeDataLayer cd = jss.Deserialize<ChangeDataLayer>(change.ChangeString); newActiveLayer.Id = cd.Id; newActiveLayer.Name = cd.Name; /*creem si o entitate in bd*/ Layer newLayer = new Layer(); newActiveLayer.LayerEntity = newLayer; newLayer.LayerId = cd.Id; newLayer.Order = cd.Order; newLayer.BoardId = b.BoardEntity.Id; newLayer.Name = cd.Name; /*inseram in stackul de layere din board*/ lock (b.Layers) { b.Layers.Add(cd.Id, newActiveLayer); } lock (b.LayerStack) { b.LayerStack.Insert(cd.Order, newActiveLayer); } this._em.AddToLayers(newLayer); }
//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ 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); } } }