public static Graph SaveGraphForFloor(MapsEntities entities, SaveGraphRequest request) { Floors targetFloor = entities.Floors.Find(request.FloorId); if (targetFloor == null) throw new ServiceException(ResponseError.FloorIdDoesNotExist); Graphs graph = entities.Graphs.FirstOrDefault(x => x.MapId == targetFloor.MapId); if (graph == null) { entities.Graphs.Add(new Graphs { MapId = targetFloor.MapId, CreationTime = DateTime.Now }); } // Zu entfernende Knoten und Kanten löschen if (request.DeletedGraph.Nodes != null) { foreach (Nodes node in request.DeletedGraph.Nodes.Select(dNode => entities.Nodes.FirstOrDefault(x => x.Id == dNode.Id)) .Where(node => node != null)) { entities.Nodes.Remove(node); } } if (request.DeletedGraph.Edges != null) { foreach ( Edges edge in request.DeletedGraph.Edges.Select( dEdge => entities.Edges.FirstOrDefault( x => x.NodeStartId == dEdge.StartNodeId && x.NodeEndId == dEdge.EndNodeId)) .Where(edge => edge != null)) { entities.Edges.Remove(edge); } } var nodeIdMap = new Dictionary<int, int>(); // Nodes in den Floor hinzufügen if (request.NewGraph.Nodes != null) { foreach (Node node in request.NewGraph.Nodes) { var newNode = new Nodes { FloorId = request.FloorId, X = node.X, Y = node.Y, CreationTime = DateTime.Now }; entities.Nodes.Add(newNode); entities.SaveChanges(); nodeIdMap.Add(node.Id, newNode.Id); } } // Edges im Graph hinzufügen if (request.NewGraph.Edges != null) { foreach (Edge edge in request.NewGraph.Edges) { int nodeIdMapStartNodeId; if (nodeIdMap.ContainsKey(edge.StartNodeId)) nodeIdMapStartNodeId = nodeIdMap[edge.StartNodeId]; else { Nodes startNodeId = entities.Nodes.FirstOrDefault(x => x.Id == edge.StartNodeId); nodeIdMapStartNodeId = startNodeId == null ? 0 : startNodeId.Id; } int nodeIdMapEndNodeId; if (nodeIdMap.ContainsKey(edge.EndNodeId)) nodeIdMapEndNodeId = nodeIdMap[edge.EndNodeId]; else { Nodes endNodeId = entities.Nodes.FirstOrDefault(x => x.Id == edge.EndNodeId); nodeIdMapEndNodeId = endNodeId == null ? 0 : endNodeId.Id; } if (graph != null) graph.Edges.Add(new Edges { NodeStartId = nodeIdMapStartNodeId, NodeEndId = nodeIdMapEndNodeId, CreationTime = DateTime.Now }); } } entities.SaveChanges(); StudMapCache.RemoveMap(targetFloor.MapId); return GetGraphForFloor(entities, request.FloorId); }
public ObjectResponse<Graph> SaveGraphForFloor(SaveGraphRequest request) { var result = new ObjectResponse<Graph>(); ExecuteMaps(entities => { result.Object = GraphService.SaveGraphForFloor(entities, request); }, result); return result; }
public JsonResult SaveGraphForMap(int floorId, Graph newGraph, Graph deletedGraph) { var mapsCtrl = new MapsController(); var request = new SaveGraphRequest { FloorId = floorId, NewGraph = newGraph, DeletedGraph = deletedGraph }; ObjectResponse<Graph> floor = mapsCtrl.SaveGraphForFloor(request); return Json(floor, JsonRequestBehavior.AllowGet); }