Пример #1
0
        public static Map CreateMap(MapsEntities entities, string mapName)
        {
            var newMap = new Maps
                {
                    Name = mapName,
                    CreationTime = DateTime.Now
                };
            Maps insertedMap = entities.Maps.Add(newMap);
            entities.SaveChanges();

            StudMapCache.Global.UpdateMaps(entities);

            return Conversions.ToMap(insertedMap);
        }
Пример #2
0
        public static Floor CreateFloor(MapsEntities entities, int mapId, string name, string imageUrl)
        {
            if (!MapService.MapExists(mapId))
                throw new ServiceException(ResponseError.MapIdDoesNotExist);

            var newFloor = new Floors
                {
                    MapId = mapId,
                    Name = name,
                    ImageUrl = imageUrl,
                    CreationTime = DateTime.Now
                };
            Floors insertedFloor = entities.Floors.Add(newFloor);
            entities.SaveChanges();

            StudMapCache.RemoveMap(mapId);

            return Conversions.ToFloor(insertedFloor, ServerAdminBasePath);
        }
Пример #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);
        }
Пример #4
0
        public static void SaveFingerprintForNode(MapsEntities entities, int nodeId, Fingerprint fingerprint)
        {
            if (fingerprint == null)
                throw new ServiceException(ResponseError.FingeprintIsNotDefined);

            if (fingerprint.AccessPointScans == null || !fingerprint.AccessPointScans.Any())
                return;

            Nodes node = entities.Nodes.Find(nodeId);
            if (node == null)
                throw new ServiceException(ResponseError.NodeIdDoesNotExist);

            // Fingerprint in DB einfügen
            Fingerprints fingerprints = entities.Fingerprints.Add(new Fingerprints
                {
                    NodeId = node.Id
                });
            entities.SaveChanges();

            foreach (AccessPointScan apScan in fingerprint.AccessPointScans)
            {
                // Fehlenden AccessPoint ggf. anlegen
                AccessPoints ap = entities.AccessPoints.FirstOrDefault(x => x.MAC == apScan.AccessPoint.MAC);
                if (ap == null)
                {
                    ap = entities.AccessPoints.Add(new AccessPoints
                        {
                            MAC = apScan.AccessPoint.MAC
                        });
                    entities.SaveChanges();
                }

                // Einzelmessung speichern
                entities.AccessPointScans.Add(new AccessPointScans
                    {
                        AccessPointId = ap.Id,
                        RecievedSignalStrength = apScan.ReceivedSignalStrength,
                        FingerprintId = fingerprints.Id
                    });
            }
            entities.SaveChanges();

            StudMapCache.RemoveFingerprint(node.Floors.MapId);
        }
Пример #5
0
        private static PoIs CreateOrUpdatePoI(MapsEntities entities, PoI inputPoI,
            Data.Entities.NodeInformation nodeInformation)
        {
            if (inputPoI.Type.Id == 0)
                return null;

            PoiTypes poiType = entities.PoiTypes.FirstOrDefault(x => x.Id == inputPoI.Type.Id);
            if (poiType == null)
                throw new ServiceException(ResponseError.PoiTypeIdDoesNotExist);

            inputPoI.Type.Name = poiType.Name;

            PoIs poi;
            // Falls zu dem Knoten noch kein PoI angelegt wurde, einen neuen erstellen
            if (nodeInformation == null || nodeInformation.PoIs == null)
            {
                poi = entities.PoIs.Add(new PoIs
                    {
                        TypeId = inputPoI.Type.Id,
                        Description = inputPoI.Description
                    });
            }
            // Ansonsten vorhandenen PoI aktualisieren
            else
            {
                poi = entities.PoIs.FirstOrDefault(x => x.Id == nodeInformation.PoiId);
                // TODO: Die PoI-ID kommt aus der DB und kann eig. nicht ungültig sein
                if (poi == null)
                    throw new ServiceException(ResponseError.PoiDoesNotExist);

                poi.TypeId = inputPoI.Type.Id;
                poi.Description = inputPoI.Description;
            }
            entities.SaveChanges();

            return poi;
        }
Пример #6
0
 private static void CreateOrUpdateNodeInfo(MapsEntities entities, NodeInformation inputInfo,
     Data.Entities.NodeInformation nodeInformation, PoIs poi)
 {
     int? poiId = poi != null ? (int?)poi.Id : null;
     // Wenn es keine NodeInfo gibt, eine Neue anlegen
     if (nodeInformation == null)
     {
         entities.NodeInformation.Add(new Data.Entities.NodeInformation
             {
                 DisplayName = inputInfo.DisplayName,
                 RoomName = inputInfo.RoomName,
                 QRCode = inputInfo.QRCode,
                 NFCTag = inputInfo.NFCTag,
                 PoiId = poiId,
                 NodeId = inputInfo.Node.Id,
                 CreationTime = DateTime.Now
             });
     }
     // Ansonsten die bestehende NodeInfo aktualisieren
     else
     {
         nodeInformation.DisplayName = inputInfo.DisplayName;
         nodeInformation.RoomName = inputInfo.RoomName;
         nodeInformation.NFCTag = inputInfo.NFCTag;
         nodeInformation.QRCode = inputInfo.QRCode;
         nodeInformation.PoiId = poiId;
     }
     entities.SaveChanges();
 }
Пример #7
0
        public static void SaveQRCodeForNode(MapsEntities entities, int nodeId, string qrCode)
        {
            Data.Entities.NodeInformation nodeInformation =
                entities.NodeInformation.FirstOrDefault(x => x.Nodes.Id == nodeId);

            if (nodeInformation == null)
                throw new ServiceException(ResponseError.NodeIdDoesNotExist);
            if (String.IsNullOrWhiteSpace(qrCode))
                throw new ServiceException(ResponseError.QRCodeIsNullOrEmpty);

            nodeInformation.QRCode = qrCode;
            entities.SaveChanges();
        }
Пример #8
0
        public static void SaveNFCForNode(MapsEntities entities, int nodeId, string nfcTag)
        {
            Data.Entities.NodeInformation nodeInformation =
                entities.NodeInformation.FirstOrDefault(x => x.Nodes.Id == nodeId);

            if (nodeInformation == null)
                throw new ServiceException(ResponseError.NodeIdDoesNotExist);
            if (entities.NodeInformation.Any(x => x.NFCTag == nfcTag))
                throw new ServiceException(ResponseError.NFCTagAllreadyAssigned);
            if (String.IsNullOrWhiteSpace(nfcTag))
                throw new ServiceException(ResponseError.NFCTagIsNullOrEmpty);

            nodeInformation.NFCTag = nfcTag;
            entities.SaveChanges();
        }
Пример #9
0
        public static Floor UploadFloorImage(MapsEntities entities, int floorId, string filename)
        {
            Floors floor = entities.Floors.FirstOrDefault(x => x.Id == floorId);
            if (floor == null)
                throw new ServiceException(ResponseError.FloorIdDoesNotExist);

            floor.ImageUrl = filename;
            entities.SaveChanges();

            return Conversions.ToFloor(floor, ServerAdminBasePath);
        }