コード例 #1
0
        private void ImportRouteNodes(Wgs84GraphBuilder graphBuilder)
        {
            // Import node objects to database
            var nodesJsonText = File.ReadAllText(_routeNodeFilename);

            var nodesJson = JsonConvert.DeserializeObject(nodesJsonText) as JObject;

            var features = nodesJson["features"];

            bool firstNode = true;

            foreach (var feature in features)
            {
                var properties = feature["properties"] as JObject;

                var geometry = feature["geometry"];

                var geometryType        = geometry["type"].ToString();
                var geometryCoordinates = geometry["coordinates"].ToString().Replace("\r\n", "").Replace(" ", "");

                var nodeId      = Guid.Parse(_nodeIdPrefix + properties["Id"].ToString().PadLeft(6, '0'));
                var nodeType    = properties["NodeType"].ToString();
                var nodeName    = properties["NodeName"].ToString();
                var assetStatus = properties["Status"].ToString();

                if (properties["BuildTestData"].ToString() != "")
                {
                    var buildCodes = properties["BuildTestData"].ToString().Split(';');
                    _nodeBuildCodes.Add(nodeId, buildCodes);
                }


                // Add node to graph
                var x = ((JArray)geometry["coordinates"])[0];
                var y = ((JArray)geometry["coordinates"])[1];


                // Derive node and function kind
                RouteNodeKindEnum?    nodeKind         = null;
                RouteNodeFunctionEnum?nodeFunctionKind = null;

                if (nodeType == "CO")
                {
                    nodeKind         = RouteNodeKindEnum.CentralOfficeSmall;
                    nodeFunctionKind = RouteNodeFunctionEnum.SecondaryNode;
                }
                else if (nodeType == "HH")
                {
                    nodeKind         = RouteNodeKindEnum.HandHole;
                    nodeFunctionKind = RouteNodeFunctionEnum.AccessibleConduitClosure;
                }
                else if (nodeType == "CC")
                {
                    nodeKind         = RouteNodeKindEnum.ConduitClosure;
                    nodeFunctionKind = RouteNodeFunctionEnum.NonAccessibleConduitClosure;
                }
                else if (nodeType == "CE")
                {
                    nodeKind         = RouteNodeKindEnum.ConduitEnd;
                    nodeFunctionKind = RouteNodeFunctionEnum.NonAccessibleConduitClosure;
                }
                else if (nodeType == "SJ")
                {
                    nodeKind         = RouteNodeKindEnum.ConduitSimpleJunction;
                    nodeFunctionKind = RouteNodeFunctionEnum.NonAccessibleConduitClosure;
                }
                else if (nodeType == "FP")
                {
                    nodeKind         = RouteNodeKindEnum.CabinetBig;
                    nodeFunctionKind = RouteNodeFunctionEnum.FlexPoint;
                }
                else if (nodeType == "SP")
                {
                    nodeKind         = RouteNodeKindEnum.CabinetSmall;
                    nodeFunctionKind = RouteNodeFunctionEnum.SplicePoint;
                }
                else if (nodeType == "A")
                {
                    nodeKind         = RouteNodeKindEnum.BuildingAccessPoint;
                    nodeFunctionKind = RouteNodeFunctionEnum.SplicePoint;
                }
                else if (nodeType == "MDU")
                {
                    nodeKind         = RouteNodeKindEnum.MultiDwellingUnit;
                    nodeFunctionKind = RouteNodeFunctionEnum.CustomerPremisesPoint;
                }
                else if (nodeType == "SDU")
                {
                    nodeKind         = RouteNodeKindEnum.SingleDwellingUnit;
                    nodeFunctionKind = RouteNodeFunctionEnum.CustomerPremisesPoint;
                }

                // On the first node, we set the start marker into applicaion info, and insert data into all the other propeties as well to test if every information is captured into the generated events
                if (firstNode)
                {
                    RouteNodeRecord routeNode = new RouteNodeRecord()
                    {
                        Id              = nodeId,
                        WorkTaskMrid    = _startMarker,
                        ApplicationName = _applicationName,
                        ApplicationInfo = _applicationName,
                        DeleteMe        = false,
                        MarkAsDeleted   = false,
                        Username        = _userName,
                        Geometry        = GeographicToProjectedCoordinateConverter.ConvertPoint(GeoJsonConversionHelper.ConvertFromPointGeoJson(geometryCoordinates)),
                        RouteNodeInfo   = new RouteNodeInfo(nodeKind, nodeFunctionKind),
                        LifecycleInfo   = new LifecycleInfo(DeploymentStateEnum.InService, DateTime.Now, DateTime.Now),
                        MappingInfo     = new MappingInfo(MappingMethodEnum.LandSurveying, "10 cm", "20 cm", DateTime.Now, "Surveyed with GPS"),
                        NamingInfo      = new NamingInfo(nodeName, "Route node"),
                        SafetyInfo      = new SafetyInfo("no danger", "might contain rats"),
                        IsAutoCreated   = false
                    };

                    graphBuilder.AddNodeToGraph(routeNode, (double)x, (double)y);
                    _routeNetworkDatestore.InsertRouteNode(routeNode);
                }
                else
                {
                    RouteNodeRecord routeNode = new RouteNodeRecord()
                    {
                        Id = nodeId,
                        ApplicationName = _applicationName,
                        ApplicationInfo = _applicationName,
                        DeleteMe        = false,
                        MarkAsDeleted   = false,
                        Username        = _userName,
                        Geometry        = GeographicToProjectedCoordinateConverter.ConvertPoint(GeoJsonConversionHelper.ConvertFromPointGeoJson(geometryCoordinates)),
                        RouteNodeInfo   = new RouteNodeInfo(nodeKind, nodeFunctionKind),
                        NamingInfo      = new NamingInfo(nodeName, "Route node"),
                        IsAutoCreated   = false
                    };

                    graphBuilder.AddNodeToGraph(routeNode, (double)x, (double)y);
                    _routeNetworkDatestore.InsertRouteNode(routeNode);
                }


                firstNode = false;
            }
        }
コード例 #2
0
        private bool CheckNodeAddedEventProperties(RouteNodeAdded routeNodeAddedEvent, RouteNodeRecord sourceNode)
        {
            var allTestsOk = true;

            if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.Id, routeNodeAddedEvent.NodeId, "NodeId"))
            {
                allTestsOk = false;
            }

            // Check route node info
            if (!TestPropertyValueNoEquals(routeNodeAddedEvent, sourceNode.RouteNodeInfo, routeNodeAddedEvent.RouteNodeInfo, "RouteNodeInfo"))
            {
                allTestsOk = false;
            }
            else if (routeNodeAddedEvent.RouteNodeInfo != null)
            {
                if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.RouteNodeInfo.Function, routeNodeAddedEvent.RouteNodeInfo.Function, "RouteNodeInfo.Function"))
                {
                    allTestsOk = false;
                }

                if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.RouteNodeInfo.Kind, routeNodeAddedEvent.RouteNodeInfo.Kind, "RouteNodeInfo.Kind"))
                {
                    allTestsOk = false;
                }
            }

            // general

            // Check event type
            if (!TestPropertyValue(routeNodeAddedEvent, "RouteNodeAdded", routeNodeAddedEvent.EventType, "EventType"))
            {
                allTestsOk = false;
            }

            // Check command type
            if (!TestPropertyValue(routeNodeAddedEvent, "NewRouteNodeDigitized", routeNodeAddedEvent.CmdType, "CmdType"))
            {
                allTestsOk = false;
            }

            // Check IsLastEventInCmd
            if (!TestPropertyValue(routeNodeAddedEvent, true, routeNodeAddedEvent.IsLastEventInCmd, "IsLastEventInCmd"))
            {
                allTestsOk = false;
            }

            // Check event id uniqueness
            if (!TestIfIdNotAlreadyUsed(routeNodeAddedEvent, routeNodeAddedEvent.EventId, _ids, "EventId"))
            {
                allTestsOk = false;
            }

            // Check cmd id uniqueness
            if (!TestIfIdNotAlreadyUsed(routeNodeAddedEvent, routeNodeAddedEvent.CmdId, _ids, "CmdId"))
            {
                allTestsOk = false;
            }

            if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.ApplicationName, routeNodeAddedEvent.ApplicationName, "ApplicationName"))
            {
                allTestsOk = false;
            }

            if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.ApplicationInfo, routeNodeAddedEvent.ApplicationInfo, "ApplicationInfo"))
            {
                allTestsOk = false;
            }

            if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.Username, routeNodeAddedEvent.UserName, "UserName"))
            {
                allTestsOk = false;
            }

            if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.WorkTaskMrid, routeNodeAddedEvent.WorkTaskMrid, "WorkTaskMrid"))
            {
                allTestsOk = false;
            }


            // Check naming info
            if (!TestPropertyValueNoEquals(routeNodeAddedEvent, sourceNode.NamingInfo, routeNodeAddedEvent.NamingInfo, "NamingInfo"))
            {
                allTestsOk = false;
            }
            else if (routeNodeAddedEvent.NamingInfo != null)
            {
                if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.NamingInfo.Name, routeNodeAddedEvent.NamingInfo.Name, "NamingInfo.Name"))
                {
                    allTestsOk = false;
                }

                if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.NamingInfo.Description, routeNodeAddedEvent.NamingInfo.Description, "NamingInfo.Description"))
                {
                    allTestsOk = false;
                }
            }


            // Check mapping info
            if (!TestPropertyValueNoEquals(routeNodeAddedEvent, sourceNode.MappingInfo, routeNodeAddedEvent.MappingInfo, "MappingInfo"))
            {
                allTestsOk = false;
            }
            else if (routeNodeAddedEvent.MappingInfo != null)
            {
                if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.MappingInfo.Method, routeNodeAddedEvent.MappingInfo.Method, "MappingInfo.Method"))
                {
                    allTestsOk = false;
                }

                if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.MappingInfo.HorizontalAccuracy, routeNodeAddedEvent.MappingInfo.HorizontalAccuracy, "MappingInfo.HorizontalAccuracy"))
                {
                    allTestsOk = false;
                }

                if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.MappingInfo.VerticalAccuracy, routeNodeAddedEvent.MappingInfo.VerticalAccuracy, "MappingInfo.VerticalAccuracy"))
                {
                    allTestsOk = false;
                }

                if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.MappingInfo.SurveyDate, routeNodeAddedEvent.MappingInfo.SurveyDate, "MappingInfo.SurveyDate"))
                {
                    allTestsOk = false;
                }

                if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.MappingInfo.SourceInfo, routeNodeAddedEvent.MappingInfo.SourceInfo, "MappingInfo.SourceInfo"))
                {
                    allTestsOk = false;
                }
            }

            // Check lifecycle info
            if (!TestPropertyValueNoEquals(routeNodeAddedEvent, sourceNode.LifecycleInfo, routeNodeAddedEvent.LifecyleInfo, "LifecycleInfo"))
            {
                allTestsOk = false;
            }
            else if (routeNodeAddedEvent.LifecyleInfo != null)
            {
                if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.LifecycleInfo.DeploymentState, routeNodeAddedEvent.LifecyleInfo.DeploymentState, "LifecycleInfo.DeploymentState"))
                {
                    allTestsOk = false;
                }

                if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.LifecycleInfo.InstallationDate, routeNodeAddedEvent.LifecyleInfo.InstallationDate, "LifecycleInfo.InstallationDate"))
                {
                    allTestsOk = false;
                }

                if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.LifecycleInfo.RemovalDate, routeNodeAddedEvent.LifecyleInfo.RemovalDate, "LifecycleInfo.RemovalDate"))
                {
                    allTestsOk = false;
                }
            }

            // Check safety info
            if (!TestPropertyValueNoEquals(routeNodeAddedEvent, sourceNode.SafetyInfo, routeNodeAddedEvent.SafetyInfo, "SafetyInfo"))
            {
                allTestsOk = false;
            }
            else if (routeNodeAddedEvent.SafetyInfo != null)
            {
                if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.SafetyInfo.Classification, routeNodeAddedEvent.SafetyInfo.Classification, "SafetyInfo.Classification"))
                {
                    allTestsOk = false;
                }

                if (!TestPropertyValue(routeNodeAddedEvent, sourceNode.SafetyInfo.Remark, routeNodeAddedEvent.SafetyInfo.Remark, "SafetyInfo.Remark"))
                {
                    allTestsOk = false;
                }
            }

            return(allTestsOk);
        }