Ejemplo n.º 1
0
 public static Node ToNode(Nodes dbNode)
 {
     return new Node
         {
             Id = dbNode.Id,
             X = dbNode.X,
             Y = dbNode.Y,
             FloorId = dbNode.FloorId,
             HasInformation = dbNode.NodeInformation.Any()
         };
 }
Ejemplo n.º 2
0
 public static NodeInformation ToNodeInformation(Entities.NodeInformation dbInfo, Nodes dbNode, PoIs dbPoI)
 {
     return new NodeInformation
         {
             DisplayName = dbInfo.DisplayName,
             Node = ToNode(dbNode),
             RoomName = dbInfo.RoomName,
             NFCTag = dbInfo.NFCTag,
             QRCode = dbInfo.QRCode,
             PoI = dbPoI == null ? new PoI() : ToPoI(dbInfo.PoIs)
         };
 }
Ejemplo n.º 3
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);
        }