private RouteNode CreateRouteNode(dynamic routeNode) { var mappedRouteNode = new RouteNode { ApplicationInfo = routeNode.application_info.ToString(), ApplicationName = routeNode.application_name.ToString(), Coord = (JObject)routeNode.coord is null ? null : Convert.FromBase64String(routeNode.coord.wkb.ToString()), MarkAsDeleted = (bool)routeNode.marked_to_be_deleted, DeleteMe = (bool)routeNode.delete_me, Mrid = new Guid(routeNode.mrid.ToString()), Username = routeNode.user_name.ToString(), WorkTaskMrid = routeNode.work_task_mrid.ToString() == string.Empty ? System.Guid.Empty : new Guid(routeNode.work_task_mrid.ToString()), LifeCycleInfo = new LifecycleInfo( _infoMapper.MapDeploymentState((string)routeNode.lifecycle_deployment_state), (DateTime?)routeNode.lifecycle_installation_date, (DateTime?)routeNode.lifecycle_removal_date ), MappingInfo = new MappingInfo( _infoMapper.MapMappingMethod((string)routeNode.mapping_method), (string)routeNode.mapping_vertical_accuracy, (string)routeNode.mapping_horizontal_accuracy, (DateTime?)routeNode.mapping_survey_date, (string)routeNode.mapping_source_info ), NamingInfo = new NamingInfo( (string)routeNode.naming_name, (string)routeNode.naming_description ), RouteNodeInfo = new RouteNodeInfo( _infoMapper.MapRouteNodeKind((string)routeNode.routenode_kind), _infoMapper.MapRouteNodeFunction((string)routeNode.routenode_function) ), SafetyInfo = new SafetyInfo( (string)routeNode.safety_classification, (string)routeNode.safety_remark ) }; // Make fully empty objects into nulls. mappedRouteNode.LifeCycleInfo = AreAnyPropertiesNotNull <LifecycleInfo>(mappedRouteNode.LifeCycleInfo) ? mappedRouteNode.LifeCycleInfo : null; mappedRouteNode.MappingInfo = AreAnyPropertiesNotNull <MappingInfo>(mappedRouteNode.MappingInfo) ? mappedRouteNode.MappingInfo : null; mappedRouteNode.NamingInfo = AreAnyPropertiesNotNull <NamingInfo>(mappedRouteNode.NamingInfo) ? mappedRouteNode.NamingInfo : null; mappedRouteNode.RouteNodeInfo = AreAnyPropertiesNotNull <RouteNodeInfo>(mappedRouteNode.RouteNodeInfo) ? mappedRouteNode.RouteNodeInfo : null; mappedRouteNode.SafetyInfo = AreAnyPropertiesNotNull <SafetyInfo>(mappedRouteNode.SafetyInfo) ? mappedRouteNode.SafetyInfo : null; return(mappedRouteNode); }
private void CreateSegment(string fromName, string toName) { RouteNodeInfo fromNode = _nodesByName[fromName]; RouteNodeInfo toNode = _nodesByName[toName]; var fixture = new Fixture(); // Add segment between the two nodes var addSegmentCmd = fixture.Build <AddSegmentCommand>() .With(x => x.FromNodeId, fromNode.Id) .With(x => x.ToNodeId, toNode.Id) .With(x => x.Geometry, new Geometry("LineString", "[" + fromNode.Geometry.GeoJsonCoordinates + "," + toNode.Geometry.GeoJsonCoordinates + "]")) .With(x => x.SegmentKind, RouteSegmentKindEnum.Underground) .Create(); _bus.Send(addSegmentCmd); _segmentsByName[fromName + "_" + toName] = _queryService.GetRouteSegmentInfo(addSegmentCmd.Id); }
public void AddRouteNodeInfo(RouteNodeInfo routeNodeInfo) { _routeNodeInfos.Add(routeNodeInfo.Id, routeNodeInfo); }
public static void CutConduit(ConduitInfo conduitInfo, WalkOfInterestInfo walkOfInterest, RouteNodeInfo nodeWhereToCut) { ConduitSegmentInfo newSegment = null; List <ISegment> newSegmentList = new List <ISegment>(); int newSequenceNumber = 1; var fromNodeId = conduitInfo.Segments[0].FromRouteNodeId; foreach (var existingSegment in conduitInfo.Segments) { List <Guid> segmentWalk = walkOfInterest.SubWalk(existingSegment.FromRouteNodeId, existingSegment.ToRouteNodeId); newSegmentList.Add(existingSegment); existingSegment.SequenceNumber = newSequenceNumber; existingSegment.FromRouteNodeId = fromNodeId; // If the segment is cut by point of interest, divide it if (segmentWalk.Contains(nodeWhereToCut.Id)) { // Create the segment newSequenceNumber++; if (conduitInfo.Kind != ConduitKindEnum.MultiConduit) { newSegment = new SingleConduitSegmentInfo(); } else { newSegment = new MultiConduitSegmentInfo(); } newSegment.Id = Guid.NewGuid(); newSegment.ConduitId = ((ConduitSegmentInfo)existingSegment).ConduitId; newSegment.SequenceNumber = newSequenceNumber; newSegment.FromRouteNodeId = nodeWhereToCut.Id; newSegment.ToRouteNodeId = existingSegment.ToRouteNodeId; // we need copy to side info newSegment.ToNodeId = existingSegment.ToNodeId; // we need copy to side info newSegment.ToNode = existingSegment.ToNode; // we need copy to side info // Update the existing segment existingSegment.ToRouteNodeId = nodeWhereToCut.Id; existingSegment.ToNodeId = Guid.Empty; // cannot possible have to junction anymore if it had so (transfered to new segment) existingSegment.ToNode = null; // cannot possible have to junction anymore if it had so (transfered to new segment) // Set from node on next segment to from node on inserted segment fromNodeId = newSegment.ToRouteNodeId; newSegmentList.Add(newSegment); } else { // set from node to this one to node fromNodeId = existingSegment.ToRouteNodeId; } newSequenceNumber++; } conduitInfo.Segments = newSegmentList; // Needed to wake up Marten conduitInfo.Name = conduitInfo.Name; }