Example #1
0
        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);
        }
Example #2
0
        public ObjectResponse<Graph> SaveGraphForFloor(SaveGraphRequest request)
        {
            var result = new ObjectResponse<Graph>();

            ExecuteMaps(entities => { result.Object = GraphService.SaveGraphForFloor(entities, request); }, result);

            return result;
        }
Example #3
0
 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);
 }