Exemplo n.º 1
0
        public void ValidateMapToCreate()
        {
            var boundaryString    = "POLYGON((172.6 -43.5,172.6 -43.5003,172.603 -43.5003,172.603 -43.5,172.6 -43.5))";
            var csContent         = "MDBUTVNDIFYxMC03MCAgICAgICAwICAgMDkvMDEvMjAyMCAxNToxOTExMzExMQ0KMTBUTVVudGl0bGVkIEpvYiAgICAxMjIyMTINCjc4VE0xMQ0KRDVUTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KRDhUTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQo2NFRNMzM2LjIwNjU1NTM3MTAwMDAtMTE1LjAyNjI2NzgxODAwMC4wMDAwMDAwMDAwMDAwMDExMTkuNzQ4NDM3ODk2OTAyMTkzLjk3OTQ3Njc1OTAwMC4wMDAwMDAwMDAwMDAwMDEuMDAwMDg2NzIzMDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KNjVUTTYzNzgxMzcuMDAwMDAxMDAyOTguMjU3MjIyOTMyODkwDQo0OVRNMzYzNzgxMzcuMDAwMDAwMDAyOTguMjU3MjIzNTYzMDAwMC4wMDAwMDAwMDAwMDAwMDAuMDAwMDAwMDAwMDAwMDAwLjAwMDAwMDAwMDAwMDAwMC4wMDAwMDAwMDAwMDAwMDAuMDAwMDAwMDAwMDAwMDAwLjAwMDAwMDAwMDAwMDAwMC4wMDAwMDAwMDAwMDAwMA0KNTBUTTExOTguNzk3MzM5MDkwNzAyNDkxLjQ4Mjg5MTU0MTgwMC4wMDI2NjA5MDkzMjE4MDAuMDAwMTM3MTYwMjc0MzAwLjAwMTkwNzk5NzAwMDAwMS4wMDAwMTMwMTMwMDAwMA0KQzhUTTRTQ1M5MDAgTG9jYWxpemF0aW9uICAgICAgICAgICAgIFNDUzkwMCBSZWNvcmQgICAgICAgICAgICAgICAgICAgRGF0dW0gZnJvbSBEYXRhIENvbGxlY3RvciAgICAgICANCg==";
            var csContentBase64   = "TURCVVRWTkRJRll4TUMwM01DQWdJQ0FnSUNBd0lDQWdNRGt2TURFdk1qQXlNQ0F4TlRveE9URXhNekV4TVEwS01UQlVUVlZ1ZEdsMGJHVmtJRXB2WWlBZ0lDQXhNakl5TVRJTkNqYzRWRTB4TVEwS1JEVlVUU0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBMEtSRGhVVFNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdEUW8yTkZSTk16TTJMakl3TmpVMU5UTTNNVEF3TURBdE1URTFMakF5TmpJMk56Z3hPREF3TUM0d01EQXdNREF3TURBd01EQXdNREV4TVRrdU56UTRORE0zT0RrMk9UQXlNVGt6TGprM09UUTNOamMxT1RBd01DNHdNREF3TURBd01EQXdNREF3TURFdU1EQXdNRGcyTnpJek1EQXdNREFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBMEtOalZVVFRZek56Z3hNemN1TURBd01EQXhNREF5T1RndU1qVTNNakl5T1RNeU9Ea3dEUW8wT1ZSTk16WXpOemd4TXpjdU1EQXdNREF3TURBeU9UZ3VNalUzTWpJek5UWXpNREF3TUM0d01EQXdNREF3TURBd01EQXdNREF1TURBd01EQXdNREF3TURBd01EQXdMakF3TURBd01EQXdNREF3TURBd01DNHdNREF3TURBd01EQXdNREF3TURBdU1EQXdNREF3TURBd01EQXdNREF3TGpBd01EQXdNREF3TURBd01EQXdNQzR3TURBd01EQXdNREF3TURBd01BMEtOVEJVVFRFeE9UZ3VOemszTXpNNU1Ea3dOekF5TkRreExqUTRNamc1TVRVME1UZ3dNQzR3TURJMk5qQTVNRGt6TWpFNE1EQXVNREF3TVRNM01UWXdNamMwTXpBd0xqQXdNVGt3TnprNU56QXdNREF3TVM0d01EQXdNVE13TVRNd01EQXdNQTBLUXpoVVRUUlRRMU01TURBZ1RHOWpZV3hwZW1GMGFXOXVJQ0FnSUNBZ0lDQWdJQ0FnSUZORFV6a3dNQ0JTWldOdmNtUWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdSR0YwZFcwZ1puSnZiU0JFWVhSaElFTnZiR3hsWTNSdmNpQWdJQ0FnSUNBTkNnPT0=";
            var projectValidation = new ProjectValidation
            {
                CustomerUid                 = new Guid("372854b8-64f8-4fd0-885f-d663503ffbca"),
                ProjectType                 = CwsProjectType.AcceptsTagFiles,
                ProjectName                 = "Beside Dimensions JeanieTest1",
                ProjectBoundaryWKT          = boundaryString,
                UpdateType                  = ProjectUpdateType.Created,
                CoordinateSystemFileName    = "myOne.dc",
                CoordinateSystemFileContent = System.Text.Encoding.ASCII.GetBytes(csContent)
            };

            var createProjectRequestModel = AutoMapperUtility.Automapper.Map <CreateProjectRequestModel>(projectValidation);

            Assert.Equal(TRNHelper.MakeTRN(projectValidation.CustomerUid, TRNHelper.TRN_ACCOUNT), createProjectRequestModel.TRN);
            Assert.Equal(projectValidation.CustomerUid.ToString(), createProjectRequestModel.AccountId);
            Assert.Equal(projectValidation.ProjectName, createProjectRequestModel.ProjectName);
            Assert.Equal(projectValidation.ProjectType, createProjectRequestModel.ProjectType);
            Assert.Null(createProjectRequestModel.Timezone);
            Assert.Equal(GeometryConversion.MapProjectBoundary(projectValidation.ProjectBoundaryWKT).type, createProjectRequestModel.Boundary.type);
            Assert.Equal(GeometryConversion.MapProjectBoundary(projectValidation.ProjectBoundaryWKT).coordinates.Count, createProjectRequestModel.Boundary.coordinates.Count);
            Assert.Equal(GeometryConversion.MapProjectBoundary(projectValidation.ProjectBoundaryWKT).coordinates.ToArray(), createProjectRequestModel.Boundary.coordinates.ToArray());
            Assert.Equal(projectValidation.CoordinateSystemFileName, createProjectRequestModel.CalibrationFileName);
            Assert.Equal(csContentBase64, createProjectRequestModel.CalibrationFileBase64Content);
            Assert.Equal(csContent, System.Text.Encoding.ASCII.GetString(Convert.FromBase64String(createProjectRequestModel.CalibrationFileBase64Content)));
        }
Exemplo n.º 2
0
        public void PolygonWKTNewBoundaryNotClosed()
        {
            var boundary = GeometryWKT.Substring(0, GeometryWKT.LastIndexOf(',')) + "))";
            var wkt      = GeometryConversion.GetPolygonWKT(boundary);

            Assert.Equal(GeometryWKT, wkt);
        }
Exemplo n.º 3
0
        public async Task <int> StoreEvent(IGeofenceEvent evt)
        {
            if (evt == null)
            {
                Log.LogWarning("Unsupported geofence event type");
                return(0);
            }

            // since this is a masterDataService (not landfill specific but will be used for compaction and potentially other apps),
            //  lets just store all geofence types
            var geofenceType = GetGeofenceType(evt);

            var geofence  = new Geofence();
            var eventType = "Unknown";

            Log.LogDebug($"Event type is {evt.GetType()}");
            if (evt is CreateGeofenceEvent)
            {
                var geofenceEvent = (CreateGeofenceEvent)evt;
                geofence.GeofenceUID     = geofenceEvent.GeofenceUID.ToString();
                geofence.Name            = geofenceEvent.GeofenceName;
                geofence.GeofenceType    = geofenceType;
                geofence.GeometryWKT     = GeometryConversion.GetPolygonWKT(geofenceEvent.GeometryWKT);
                geofence.FillColor       = geofenceEvent.FillColor;
                geofence.IsTransparent   = geofenceEvent.IsTransparent;
                geofence.IsDeleted       = false;
                geofence.Description     = geofenceEvent.Description;
                geofence.CustomerUID     = geofenceEvent.CustomerUID.ToString();
                geofence.UserUID         = geofenceEvent.UserUID.ToString();
                geofence.LastActionedUTC = geofenceEvent.ActionUTC;
                geofence.AreaSqMeters    = geofenceEvent.AreaSqMeters;
                eventType = "CreateGeofenceEvent";
            }
            else if (evt is UpdateGeofenceEvent)
            {
                var geofenceEvent = (UpdateGeofenceEvent)evt;
                geofence.GeofenceUID  = geofenceEvent.GeofenceUID.ToString();
                geofence.Name         = geofenceEvent.GeofenceName;
                geofence.GeofenceType = geofenceType;
                geofence.GeometryWKT  = GeometryConversion.GetPolygonWKT(geofenceEvent.GeometryWKT);

                geofence.FillColor       = geofenceEvent.FillColor;
                geofence.IsTransparent   = geofenceEvent.IsTransparent;
                geofence.Description     = geofenceEvent.Description;
                geofence.UserUID         = geofenceEvent.UserUID.ToString();
                geofence.AreaSqMeters    = geofenceEvent.AreaSqMeters;
                geofence.LastActionedUTC = geofenceEvent.ActionUTC;
                eventType = "UpdateGeofenceEvent";
            }
            else if (evt is DeleteGeofenceEvent)
            {
                var geofenceEvent = (DeleteGeofenceEvent)evt;
                geofence.GeofenceUID     = geofenceEvent.GeofenceUID.ToString();
                geofence.LastActionedUTC = geofenceEvent.ActionUTC;
                eventType = "DeleteGeofenceEvent";
            }

            return(await UpsertGeofenceDetail(geofence, eventType));
        }
Exemplo n.º 4
0
        public JObject ConvertToDTO(Autodesk.Revit.DB.Wall source)
        {
            Autodesk.Revit.DB.Curve curve = (source.Location as LocationCurve).Curve;
            Autodesk.Revit.DB.Line  line  = curve as Autodesk.Revit.DB.Line;

            if (line == null)
            {
                return(null);
            }

            BoundingBoxXYZ bb = source.get_BoundingBox(null);

            Autodesk.Revit.DB.XYZ origin   = line.Tessellate().First();
            Autodesk.Revit.DB.XYZ endpoint = line.Tessellate().Last(); /// origin + line.Direction * line.Length;

            List <LMAStudio.StreamVR.Common.Models.Face> wallFaces = new List <LMAStudio.StreamVR.Common.Models.Face>();

            Autodesk.Revit.DB.GeometryElement defaultGeometry = source.get_Geometry(new Options());
            if (defaultGeometry != null)
            {
                Solid solidGeometry = defaultGeometry.FirstOrDefault() as Solid;

                if (solidGeometry != null)
                {
                    wallFaces = GeometryConversion.ConvertToDTO(source, solidGeometry);
                }
            }

            LMAStudio.StreamVR.Common.Models.Wall dest = new LMAStudio.StreamVR.Common.Models.Wall
            {
                Id          = source.Id.ToString(),
                Name        = source.Name,
                Depth       = source.Width,
                Orientation = new LMAStudio.StreamVR.Common.Models.XYZ
                {
                    X = source.Orientation.X,
                    Y = source.Orientation.Y,
                    Z = source.Orientation.Z,
                },
                Endpoint0 = new LMAStudio.StreamVR.Common.Models.XYZ
                {
                    X = origin.X,
                    Y = origin.Y,
                    Z = bb.Min.Z,
                },
                Endpoint1 = new LMAStudio.StreamVR.Common.Models.XYZ
                {
                    X = endpoint.X,
                    Y = endpoint.Y,
                    Z = bb.Max.Z,
                },
                Faces = wallFaces
            };

            return(JObject.FromObject(dest));
        }
Exemplo n.º 5
0
        public static async Task <CreateProjectResponseModel> CreateCustomerProject(string customerUid, string name = "woteva",
                                                                                    string boundary = "POLYGON((172.595831670724 -43.5427038560109,172.594630041089 -43.5438859356773,172.59329966542 -43.542486101965, 172.595831670724 -43.5427038560109))")
        {
            var createProjectRequestModel = new CreateProjectRequestModel
            {
                AccountId   = customerUid,
                ProjectName = name,
                Boundary    = GeometryConversion.MapProjectBoundary(boundary)
            };

            var response = await CwsProjectClient.CreateProject(createProjectRequestModel);

            return(response);
        }
Exemplo n.º 6
0
        public void MapCWSFormatToWkt()
        {
            var cwsCoordinates = new List <List <double[]> > {
                new List <double[]> {
                    new[] { 150.3, 1.2 }, new[] { 150.4, 1.2 }, new[] { 150.4, 1.3 }, new[] { 150.4, 1.4 }, new[] { 150.3, 1.2 }
                }
            };
            var ProjectBoundary = new ProjectBoundary()
            {
                type = "Polygon", coordinates = cwsCoordinates
            };
            var expectedWktPolygon = "POLYGON((150.3 1.2,150.4 1.2,150.4 1.3,150.4 1.4,150.3 1.2))";

            var wktBoundary = GeometryConversion.ProjectBoundaryToWKT(ProjectBoundary);

            Assert.Equal(expectedWktPolygon, wktBoundary);
        }
Exemplo n.º 7
0
        public void MapWKTToCWSFormat()
        {
            var cwsCoordinates = new List <List <double[]> > {
                new List <double[]> {
                    new[] { 150.3, 1.2 }, new[] { 150.4, 1.2 }, new[] { 150.4, 1.3 }, new[] { 150.4, 1.4 }, new[] { 150.3, 1.2 }
                }
            };
            var expectedProjectBoundary = new ProjectBoundary()
            {
                type = "Polygon", coordinates = cwsCoordinates
            };
            var wktPolygon = "POLYGON((150.3 1.2,150.4 1.2,150.4 1.3,150.4 1.4,150.3 1.2))";

            var cwsBoundary = GeometryConversion.MapProjectBoundary(wktPolygon);

            Assert.Equal(expectedProjectBoundary.type, cwsBoundary.type);
            Assert.Equal(expectedProjectBoundary.coordinates, cwsBoundary.coordinates);
        }
Exemplo n.º 8
0
        private Common.Models.Face UpdateFace(Document doc, Common.Models.Face face)
        {
            _log("GETTING ELEMENT");

            using (Transaction tx = new Transaction(doc))
            {
                tx.Start("Paint Element");

                ElementId materialId    = new ElementId(Int32.Parse(face.MaterialId));
                ElementId parentId      = new ElementId(Int32.Parse(face.ElementId));
                Element   parentElement = doc.GetElement(parentId);

                GeometryElement          defaultGeometry = parentElement.get_Geometry(new Options());
                Solid                    solidGeometry   = defaultGeometry.FirstOrDefault() as Solid;
                IEnumerable <PlanarFace> faces           = solidGeometry.Faces.Cast <PlanarFace>();

                if (solidGeometry == null)
                {
                    throw new Exception($"Geometry does not exist for {face.ElementId}");
                }

                PlanarFace dbValue = faces.ElementAt(face.FaceIndex);

                if (dbValue == null)
                {
                    throw new Exception($"Could not find face at index {face.FaceIndex}");
                }

                doc.Paint(parentId, dbValue, materialId);

                _log($"MAPPED MATERIAL");

                face = GeometryConversion.ConvertToDTO(parentElement, solidGeometry).ElementAt(face.FaceIndex);

                tx.Commit();
            }

            return(face);
        }
        /// <summary>
        /// Gets the extruded subspace of points of a line on both sides and both ends.
        /// </summary>
        /// <param name="originalLineSegments">List of line points with segments connecting to the next point in the line.</param>
        /// <param name="extrusionAmount">The extrusion amount.</param>
        public static List <ExtrudedPointUV> GetExtrudedSubspaceAllSides(List <LinePointUV> originalLinePoints, float extrusionAmount)
        {
            var originalLineSegments = GeometryConversion.ConvertLinePointsToForwardLineSegments(originalLinePoints);
            var reversedLineSegments = GetReversedSegmentsAndReversedParameters(originalLineSegments, originalLinePoints[originalLinePoints.Count - 1]);

            var extrudedLineCapForwardParameterShift = 0f;
            var extrudedLineCapForward = GetExtrudedLineCap(originalLineSegments, extrusionAmount, extrudedLineCapForwardParameterShift, false);

            const float localParameterShift = 0.1f;

            var lineForwardParameterShift = extrudedLineCapForward[extrudedLineCapForward.Count - 1].Parameter + localParameterShift;
            var extrudedSubspaceForward   = GetExtrudedSubspaceAndUvFromSegmentIntersections(originalLineSegments, originalLinePoints[originalLinePoints.Count - 1], extrusionAmount, lineForwardParameterShift, false);

            var extrudedLineCapBackwardParameterShift = extrudedSubspaceForward[extrudedSubspaceForward.Count - 1].Parameter + localParameterShift;
            var extrudedLineCapBackward = GetExtrudedLineCap(reversedLineSegments, extrusionAmount, extrudedLineCapBackwardParameterShift, true);

            var lineBackwardParameterShift = extrudedLineCapBackward[extrudedLineCapBackward.Count - 1].Parameter + originalLinePoints[0].Parameter + localParameterShift;
            var reversedLastPoint          = originalLinePoints[0];

            reversedLastPoint.Parameter = originalLinePoints[originalLinePoints.Count - 1].Parameter;
            var extrudedSubspaceBackward = GetExtrudedSubspaceAndUvFromSegmentIntersections(reversedLineSegments, reversedLastPoint, extrusionAmount, lineBackwardParameterShift, true);

            var extrudedSubspaceTotal = new List <ExtrudedPointUV>();

            extrudedSubspaceTotal.AddRange(extrudedLineCapForward);
            extrudedSubspaceTotal.AddRange(extrudedSubspaceForward);
            extrudedSubspaceTotal.AddRange(extrudedLineCapBackward);
            extrudedSubspaceTotal.AddRange(extrudedSubspaceBackward);

            if (_repeatAllSidesStartPointAtEnd)
            {
                var endPointWithShiftedParameter = extrudedLineCapForward[0];
                endPointWithShiftedParameter.Parameter = extrudedSubspaceBackward[extrudedSubspaceBackward.Count - 1].Parameter + localParameterShift;
                extrudedSubspaceTotal.Add(endPointWithShiftedParameter);
            }

            return(extrudedSubspaceTotal);
        }
Exemplo n.º 10
0
    public static void ConfigureAutomapper()
    {
      _automapperConfiguration = new MapperConfiguration(
        //define mappings <source type, destination type>
        cfg =>
        {
          cfg.AllowNullCollections = true; // so that byte[] can be null
          cfg.CreateMap<ProjectDatabaseModel, ProjectV6Descriptor>()
            .ForMember(dest => dest.ProjectGeofenceWKT, opt => opt.MapFrom(src => src.Boundary))
            .ForMember(dest => dest.IanaTimeZone, opt => opt.MapFrom(src => src.ProjectTimeZoneIana))
            .ForMember(dest => dest.ShortRaptorProjectId, opt => opt.MapFrom(src => src.ShortRaptorProjectId))
            .ForMember(dest => dest.IsArchived, opt => opt.MapFrom(src => src.IsArchived));
          cfg.CreateMap<ImportedFile, ImportedFileDescriptor>()
            .ForMember(dest => dest.ImportedUtc, opt => opt.MapFrom(src => src.LastActionedUtc))
            .ForMember(dest => dest.LegacyFileId, opt => opt.MapFrom(src => src.ImportedFileId))
            .ForMember(dest => dest.ImportedFileHistory, opt => opt.MapFrom(src => src.ImportedFileHistory.ImportedFileHistoryItems))
            .ForMember(dest => dest.IsActivated, opt => opt.MapFrom(x => true));
          cfg.CreateMap<Productivity3D.Project.Abstractions.Models.DatabaseModels.ImportedFileHistoryItem, MasterData.Project.WebAPI.Common.Models.ImportedFileHistoryItem>()
            .ForMember(dest => dest.FileCreatedUtc, opt => opt.MapFrom(src => src.FileCreatedUtc))
            .ForMember(dest => dest.FileUpdatedUtc, opt => opt.MapFrom(src => src.FileUpdatedUtc));
          cfg.CreateMap<ImportedFile, UpdateImportedFileEvent>()
            .ForMember(dest => dest.ImportedFileUID, opt => opt.MapFrom(src => Guid.Parse(src.ImportedFileUid)))
            .ForMember(dest => dest.ProjectUID, opt => opt.MapFrom(src => Guid.Parse(src.ProjectUid)))
            .ForMember(dest => dest.ActionUTC, opt => opt.MapFrom(src => src.LastActionedUtc));

          // for v5 TBC apis
          cfg.CreateMap<ProjectDatabaseModel, ProjectDataTBCSingleResult>()
            .ForMember(dest => dest.IsArchived, opt => opt.MapFrom(src => src.IsArchived))
            .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name))
            .ForMember(dest => dest.ProjectTimeZone, opt => opt.MapFrom(src => src.ProjectTimeZone))
            .ForMember(dest => dest.ProjectType, opt => opt.MapFrom(x => 0)) // old standard type
            .ForMember(dest => dest.ProjectTypeName, opt => opt.MapFrom(x => "Standard")) // old standard type
            .ForMember(dest => dest.StartDate, opt => opt.MapFrom(x => DateTime.MinValue)) // Obsolete
            .ForMember(dest => dest.EndDate, opt => opt.MapFrom(x => DateTime.MaxValue)) // Obsolete
            .ForMember(dest => dest.ProjectUid, opt => opt.MapFrom(src => src.ProjectUID))
            .ForMember(dest => dest.ProjectGeofenceWKT, opt => opt.MapFrom(src => src.Boundary))
            .ForMember(dest => dest.LegacyProjectId, opt => opt.MapFrom(src => src.ShortRaptorProjectId))
            .ForMember(dest => dest.CustomerUid, opt => opt.MapFrom(src => src.CustomerUID))
            .ForMember(dest => dest.LegacyCustomerId, opt => opt.MapFrom(src => "0")) // Obsolete
            .ForMember(dest => dest.Code, opt => opt.Ignore())
            .ForMember(dest => dest.Message, opt => opt.Ignore());
          
         cfg.CreateMap<TBCPoint, VSS.MasterData.Models.Models.Point>()
            .ForMember(dest => dest.y, opt => opt.MapFrom((src => src.Latitude)))
            .ForMember(dest => dest.x, opt => opt.MapFrom((src => src.Longitude)));
          // ProjectGeofenceAssociations
          cfg.CreateMap<GeofenceWithAssociation, GeofenceV4Descriptor>();

          // cws clients
          cfg.CreateMap<ProjectValidation, CreateProjectRequestModel>()
            .ForMember(dest => dest.TRN, opt => opt.Ignore())
            .ForMember(dest => dest.AccountId, opt => opt.MapFrom(src => src.CustomerUid))
            .ForMember(dest => dest.ProjectName, opt => opt.MapFrom(src => src.ProjectName))
            .ForMember(dest => dest.Timezone, opt => opt.Ignore())
            .ForMember(dest => dest.Boundary, opt => opt.MapFrom(src => GeometryConversion.MapProjectBoundary(src.ProjectBoundaryWKT)))
            .ForMember(dest => dest.ProjectType, opt => opt.MapFrom(src => src.ProjectType))
            .ForMember(dest => dest.CalibrationFileName, opt => opt.MapFrom(src => src.CoordinateSystemFileName))
            .ForMember(dest => dest.CalibrationFileBase64Content, opt => opt.MapFrom(src => Convert.ToBase64String(src.CoordinateSystemFileContent)))
            ;

          cfg.CreateMap<AccountResponseModel, CustomerData>()
            .ForMember(dest => dest.uid, opt => opt.MapFrom(src => src.Id))
            .ForMember(dest => dest.name, opt => opt.MapFrom(src => src.Name))
            .ForMember(dest => dest.type, opt => opt.MapFrom(c => CustomerType.Customer.ToString()))
            ;
          cfg.CreateMap<AccountResponseModel, AccountHierarchyCustomer>()
            .ForMember(dest => dest.CustomerUid, opt => opt.MapFrom(src => src.Id))
            .ForMember(dest => dest.DisplayName, opt => opt.MapFrom(src => src.Name))
            .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name))
            .ForMember(dest => dest.CustomerCode, opt => opt.MapFrom(src => src.Name))
            .ForMember(dest => dest.CustomerType, opt => opt.MapFrom(src => "Customer"))
            .ForMember(dest => dest.Children, opt => opt.Ignore());

          cfg.CreateMap<ProjectResponseModel, ProjectData>()
            .ForMember(dest => dest.ProjectUID, opt => opt.MapFrom(src => src.ProjectId))
            .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.ProjectName))
            .ForMember(dest => dest.CustomerUID, opt => opt.MapFrom(src => src.AccountId))
            .ForMember(dest => dest.ProjectGeofenceWKT, opt => opt.MapFrom(src => GeometryConversion.ProjectBoundaryToWKT(src.Boundary)))
            .ForMember(dest => dest.IanaTimeZone, opt => opt.MapFrom(src => src.Timezone))
            .ForMember(dest => dest.CoordinateSystemFileName, opt => opt.Ignore())
            .ForMember(dest => dest.CoordinateSystemLastActionedUTC, opt => opt.Ignore())
            .ForMember(dest => dest.ProjectTimeZone, opt => opt.Ignore())
            .ForMember(dest => dest.ShortRaptorProjectId, opt => opt.Ignore())
            .ForMember(dest => dest.ProjectType, opt => opt.MapFrom(src => src.ProjectType))
            .ForMember(dest => dest.IsArchived, opt => opt.Ignore())
            ;

          cfg.CreateMap<ProjectValidateDto, ProjectValidation>()
            .ForMember(dest => dest.CustomerUid, opt => opt.MapFrom(src => TRNHelper.ExtractGuid(src.AccountTrn)))
            .ForMember(dest => dest.ProjectUid, opt => opt.MapFrom(src => string.IsNullOrEmpty(src.ProjectTrn) ? null : TRNHelper.ExtractGuid(src.ProjectTrn)))
            .ForMember(dest => dest.ProjectType, opt => opt.MapFrom(src => src.ProjectType))
            .ForMember(dest => dest.UpdateType, opt => opt.MapFrom(src => ResolveUpdateType(src.UpdateType)))
            .ForMember(dest => dest.ProjectName, opt => opt.MapFrom(src => src.ProjectName))
            .ForMember(dest => dest.ProjectBoundaryWKT, opt => opt.MapFrom(src => GeometryConversion.ProjectBoundaryToWKT(src.Boundary)))
            .ForMember(dest => dest.CoordinateSystemFileName, opt => opt.MapFrom(src => src.CoordinateSystemFileName))
            .ForMember(dest => dest.CoordinateSystemFileContent, opt => opt.MapFrom(src => src.CoordinateSystemFileContent))
            ;
        }
      );

      _automapper = _automapperConfiguration.CreateMapper();
    }
Exemplo n.º 11
0
        public void PolygonWKTNewBoundaryClosed()
        {
            var wkt = GeometryConversion.GetPolygonWKT(GeometryWKT);

            Assert.Equal(GeometryWKT, wkt);
        }
Exemplo n.º 12
0
        protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item)
        {
            var data = CastRequestObjectTo <ProjectValidation>(item, errorCode: 68);

            //Check customerUid in request matches header since some of the API calls use the data and some the header
            if (!string.Equals(data.CustomerUid.ToString(), customHeaders["X-VisionLink-CustomerUID"], StringComparison.OrdinalIgnoreCase))
            {
                return(new ContractExecutionResult(135, "Mismatched customerUid."));
            }

            var userUid = new Guid(userId);

            if (data.UpdateType == ProjectUpdateType.None)
            {
                log.LogWarning("Unknown CWS update type in project validation");
                return(new ContractExecutionResult(136, "Unknown update type in project validation."));
            }
            else if (data.UpdateType == ProjectUpdateType.Created)
            {
                //Validate required fields are present
                if (!data.ProjectType.HasValue)
                {
                    return(new ContractExecutionResult(130, "Missing project type."));
                }
                if (string.IsNullOrEmpty(data.ProjectName))
                {
                    return(new ContractExecutionResult(11, "Missing Project Name."));
                }
                if (string.IsNullOrEmpty(data.ProjectBoundaryWKT))
                {
                    return(new ContractExecutionResult(8, "Missing Project Boundary."));
                }
                if (string.IsNullOrEmpty(data.CoordinateSystemFileName))
                {
                    return(new ContractExecutionResult(132, "Missing coordinate system file name."));
                }
                if (data.CoordinateSystemFileContent == null || data.CoordinateSystemFileContent.Length == 0)
                {
                    return(new ContractExecutionResult(133, "Missing coordinate system file contents."));
                }

                //Validate project name not duplicate
                // ProjectUID won't be filled yet
                var duplicates = await ValidateProjectName(data.CustomerUid, userUid, data.ProjectName, data.ProjectUid);

                if (duplicates > 0)
                {
                    return(new ContractExecutionResult(109, $"Project Name must be unique. {duplicates} active project duplicates found."));
                }

                //Validate project boundary
                dynamic boundaryResult = ValidateProjectBoundary(data.ProjectBoundaryWKT);
                if (boundaryResult.code != ContractExecutionStatesEnum.ExecutedSuccessfully)
                {
                    return(new ContractExecutionResult(boundaryResult.code, boundaryResult.message));
                }

                //Validate project boundary doesn't overlap existing projects
                log.LogDebug($"Testing if there are overlapping projects for project {data.ProjectName}");
                var overlaps = await ProjectRequestHelper.DoesProjectOverlap(data.CustomerUid,
                                                                             null, userUid, data.ProjectBoundaryWKT,
                                                                             log, serviceExceptionHandler, cwsProjectClient, customHeaders);

                if (overlaps)
                {
                    return(new ContractExecutionResult(43, "Project boundary overlaps another project."));
                }

                //Validate coordinate system file
                dynamic coordSysResult = await ValidateCoordinateSystemFile(data.ProjectUid, data.CoordinateSystemFileName, data.CoordinateSystemFileContent);

                if (coordSysResult.code != ContractExecutionStatesEnum.ExecutedSuccessfully)
                {
                    return(new ContractExecutionResult(coordSysResult.code, coordSysResult.message));
                }
            }
            else if (data.UpdateType == ProjectUpdateType.Updated)
            {
                //Validate projectUID
                if (!data.ProjectUid.HasValue)
                {
                    return(new ContractExecutionResult(5, "Missing ProjectUID."));
                }

                if (data.ProjectType.HasValue)
                {
                    //Changing from non 3d-enabled to 3d-enabled.
                    if (string.IsNullOrEmpty(data.CoordinateSystemFileName))
                    {
                        return(new ContractExecutionResult(132, "Missing coordinate system file name."));
                    }
                    if (data.CoordinateSystemFileContent == null || data.CoordinateSystemFileContent.Length == 0)
                    {
                        return(new ContractExecutionResult(133, "Missing coordinate system file contents."));
                    }
                    // Get the existing project to validate name and boundary
                    var project = await cwsProjectClient.GetMyProject(data.ProjectUid.Value, userUid, customHeaders : customHeaders);

                    if (project == null)
                    {
                        return(new ContractExecutionResult(7, "Project does not exist."));
                    }
                    if (string.IsNullOrEmpty(data.ProjectName))
                    {
                        data.ProjectName = project.ProjectName;
                    }
                    if (string.IsNullOrEmpty(data.ProjectBoundaryWKT))
                    {
                        data.ProjectBoundaryWKT = GeometryConversion.ProjectBoundaryToWKT(project.ProjectSettings.Boundary);
                    }
                }

                //Validate project name if changed
                if (!string.IsNullOrEmpty(data.ProjectName))
                {
                    var duplicates = await ValidateProjectName(data.CustomerUid, userUid, data.ProjectName, data.ProjectUid);

                    if (duplicates > 0)
                    {
                        return(new ContractExecutionResult(109, $"Project Name must be unique. {duplicates} active project duplicates found."));
                    }
                }

                //Validate project boundary if changed
                if (!string.IsNullOrEmpty(data.ProjectBoundaryWKT))
                {
                    dynamic boundaryResult = ValidateProjectBoundary(data.ProjectBoundaryWKT);
                    if (boundaryResult.code != ContractExecutionStatesEnum.ExecutedSuccessfully)
                    {
                        return(new ContractExecutionResult(boundaryResult.code, boundaryResult.message));
                    }
                    var overlaps = await ProjectRequestHelper.DoesProjectOverlap(data.CustomerUid, data.ProjectUid, userUid,
                                                                                 data.ProjectBoundaryWKT, log, serviceExceptionHandler, cwsProjectClient, customHeaders);

                    if (overlaps)
                    {
                        return(new ContractExecutionResult(43, "Project boundary overlaps another project."));
                    }
                }

                //Validate coordinate system file if changed
                if (!string.IsNullOrEmpty(data.CoordinateSystemFileName) || (data.CoordinateSystemFileContent?.Length > 0))
                {
                    if (string.IsNullOrEmpty(data.CoordinateSystemFileName) || data.CoordinateSystemFileContent == null || data.CoordinateSystemFileContent.Length == 0)
                    {
                        return(new ContractExecutionResult(134, "Both coordinate system file name and contents must be provided."));
                    }
                    dynamic coordSysResult = await ValidateCoordinateSystemFile(data.ProjectUid, data.CoordinateSystemFileName, data.CoordinateSystemFileContent);

                    if (coordSysResult.code != ContractExecutionStatesEnum.ExecutedSuccessfully)
                    {
                        return(new ContractExecutionResult(coordSysResult.code, coordSysResult.message));
                    }
                }
            }
            else if (data.UpdateType == ProjectUpdateType.Archived)
            {
                if (!data.ProjectUid.HasValue)
                {
                    return(new ContractExecutionResult(5, "Missing ProjectUID."));
                }
                //no other validation for ProjectUpdateType.Archived
            }
            else if (data.UpdateType == ProjectUpdateType.Deleted)
            {
                if (!data.ProjectUid.HasValue)
                {
                    return(new ContractExecutionResult(5, "Missing ProjectUID."));
                }

                try
                {
                    //If the project, regardless of type, has any tag file data, it cannot be deleted.
                    var result = await productivity3dV2ProxyCompaction.GetProjectStatistics(data.ProjectUid.Value, customHeaders);

                    if (result.extents?.ValidExtents == true && result.extents?.EmptyExtents == false)
                    {
                        log.LogInformation($"ValidateProjectExecutor: Project {data.ProjectUid.Value} has tag file data. NOT ok to delete.");
                        return(new ContractExecutionResult(141, "Cannot delete a project that has 3D production (tag file) data"));
                    }

                    log.LogInformation($"ValidateProjectExecutor: Project {data.ProjectUid.Value} has NO tag file data. Ok to delete.");
                }
                catch (Exception e)
                {
                    if (!e.Message.Contains($"GetStatistics: SiteModel: {data.ProjectUid.Value} not found"))
                    {
                        return(new ContractExecutionResult(57, $"A problem occurred at the validate project deletion endpoint in 3dpm. Exception: {e.Message}"));
                    }

                    log.LogInformation($"ValidateProjectExecutor: Project {data.ProjectUid.Value} not found in TRex. Ok to delete.");
                }
            }

            return(new ContractExecutionResult());
        }
Exemplo n.º 13
0
        public static ProjectDatabaseModel ConvertCwsToWorksOSProject(ProjectDetailResponseModel project, ILogger log)
        {
            log.LogInformation($"{nameof(ConvertCwsToWorksOSProject)} project {JsonConvert.SerializeObject(project)}");

            var      extractedCalibrationFileOk      = false;
            var      coordinateSystemFileName        = string.Empty;
            DateTime?coordinateSystemLastActionedUtc = null;

            if (project.ProjectSettings?.Config != null && project.ProjectSettings.Config.Any())
            {
                extractedCalibrationFileOk = ExtractCalibrationFileDetails(project.ProjectSettings.Config, out coordinateSystemFileName, out coordinateSystemLastActionedUtc);
            }
            if (project.ProjectSettings?.Boundary == null || project.ProjectSettings?.TimeZone == null)
            {
                log.LogInformation($"{nameof(ConvertCwsToWorksOSProject)} contains no boundary or timezone");
            }
            if (!extractedCalibrationFileOk)
            {
                log.LogInformation($"{nameof(ConvertCwsToWorksOSProject)} contains no calibrationFile.");
            }

            var projectDatabaseModel =
                new ProjectDatabaseModel()
            {
                ProjectUID      = project.ProjectId,
                CustomerUID     = project.AccountId,
                Name            = project.ProjectName,
                ProjectType     = project.ProjectType,
                UserProjectRole = project.UserProjectRole,
                ProjectTimeZone = project.ProjectSettings != null?PreferencesTimeZones.IanaToWindows(project.ProjectSettings.TimeZone) : string.Empty,
                                      ProjectTimeZoneIana = project.ProjectSettings?.TimeZone,
                                      Boundary            = project.ProjectSettings?.Boundary != null?GeometryConversion.ProjectBoundaryToWKT(project.ProjectSettings.Boundary) : string.Empty,
                                                                CoordinateSystemFileName        = coordinateSystemFileName,
                                                                CoordinateSystemLastActionedUTC = coordinateSystemLastActionedUtc,
                                                                IsArchived      = project.Status == ProjectStatus.Archived,
                                                                LastActionedUTC = project.LastUpdate ?? DateTime.UtcNow
            };

            return(projectDatabaseModel);
        }