Exemplo n.º 1
0
        private Dictionary <ENodeType, StreamStruct> CreateStreams(EDeflateCompression CompressMode)
        {
            if (IsFileWrite)
            {
                return(CreateFileStreams(CompressMode));
            }

            WebRequests.Clear();
            Dictionary <ENodeType, StreamStruct> Streams = new Dictionary <ENodeType, StreamStruct>();

            EProcessedFileType HierarchyFileType = EProcessedFileType.HIERARCHY_RAF;
            EProcessedFileType GeometryFileType  = EProcessedFileType.GEOMETRY_RAF;
            EProcessedFileType MetadateFileType  = EProcessedFileType.METADATA_RAF;

            if (CompressMode == EDeflateCompression.Compress)
            {
                HierarchyFileType = EProcessedFileType.HIERARCHY_CF;
                GeometryFileType  = EProcessedFileType.GEOMETRY_CF;
                MetadateFileType  = EProcessedFileType.METADATA_CF;
            }

            HttpWebRequest HierarchyRequest = CreateWebRequest(UploadUrls[HierarchyFileType]);

            lock (WebRequests)
            {
                WebRequests.Add(HierarchyRequest);
            }
            Stream       WriteHierarchyStream  = HierarchyRequest.GetRequestStream();
            StreamStruct HierarchyStreamStruct = new StreamStruct(WriteHierarchyStream, CompressMode);


            HttpWebRequest GeometryRequest = CreateWebRequest(UploadUrls[GeometryFileType]);

            lock (WebRequests)
            {
                WebRequests.Add(GeometryRequest);
            }
            Stream       WriteGeometryStream  = GeometryRequest.GetRequestStream();
            StreamStruct GeometryStreamStruct = new StreamStruct(WriteGeometryStream, CompressMode);


            HttpWebRequest MetadataRequest = CreateWebRequest(UploadUrls[MetadateFileType]);

            lock (WebRequests)
            {
                WebRequests.Add(MetadataRequest);
            }
            Stream       WriteMetadataStream  = MetadataRequest.GetRequestStream();
            StreamStruct MetadataStreamStruct = new StreamStruct(WriteMetadataStream, CompressMode);


            Streams.Add(ENodeType.Hierarchy, HierarchyStreamStruct);
            Streams.Add(ENodeType.Geometry, GeometryStreamStruct);
            Streams.Add(ENodeType.Metadata, MetadataStreamStruct);
            return(Streams);
        }
Exemplo n.º 2
0
        private Dictionary <ENodeType, StreamStruct> CreateFileStreams(EDeflateCompression CompressMode)
        {
            WriteStreams.Clear();

            Dictionary <ENodeType, StreamStruct> Streams = new Dictionary <ENodeType, StreamStruct>();

            EProcessedFileType HierarchyFileType = EProcessedFileType.HIERARCHY_RAF;
            EProcessedFileType GeometryFileType  = EProcessedFileType.GEOMETRY_RAF;
            EProcessedFileType MetadateFileType  = EProcessedFileType.METADATA_RAF;

            string Ext = "x3dp_";

            if (CompressMode == EDeflateCompression.Compress)
            {
                Ext = "x3dc_";
                GeometryFileType  = EProcessedFileType.GEOMETRY_CF;
                HierarchyFileType = EProcessedFileType.HIERARCHY_CF;
                MetadateFileType  = EProcessedFileType.METADATA_CF;
            }

            Stream WriteHierarchyStream = new FileStream($"{UploadUrls[HierarchyFileType]}-{CurrentFileSet}.{Ext}h", FileMode.Create);

            lock (WriteStreams)
            {
                WriteStreams.Add(WriteHierarchyStream);
            }

            StreamStruct HierarchyStreamStruct = new StreamStruct(WriteHierarchyStream, CompressMode);
            Stream       WriteGeometryStream   = new FileStream($"{UploadUrls[GeometryFileType]}-{CurrentFileSet}.{Ext}g", FileMode.Create);

            lock (WriteStreams)
            {
                WriteStreams.Add(WriteGeometryStream);
            }

            StreamStruct GeometryStreamStruct = new StreamStruct(WriteGeometryStream, CompressMode);
            Stream       WriteMetadataStream  = new FileStream($"{UploadUrls[MetadateFileType]}-{CurrentFileSet}.{Ext}m", FileMode.Create);

            lock (WriteStreams)
            {
                WriteStreams.Add(WriteMetadataStream);
            }

            StreamStruct MetadataStreamStruct = new StreamStruct(WriteMetadataStream, CompressMode);

            Streams.Add(ENodeType.Hierarchy, HierarchyStreamStruct);
            Streams.Add(ENodeType.Geometry, GeometryStreamStruct);
            Streams.Add(ENodeType.Metadata, MetadataStreamStruct);

            return(Streams);
        }
Exemplo n.º 3
0
        public static bool GetProcessedFile(
            WebServiceBaseTimeoutable _Request,
            EProcessedFileType _FileType,
            IBDatabaseServiceInterface _DatabaseService,
            IBFileServiceInterface _FileService,
            string _CadFileStorageBucketName,
            string _ModelID,
            int _RevisionIndex,
            out BWebServiceResponse _SuccessResponse,
            out BWebServiceResponse _FailureResponse,
            string _GeometryId = null,
            Action <string> _ErrorMessageAction = null)
        {
            _SuccessResponse = BWebResponse.InternalError("");

            if (!Controller_AtomicDBOperation.Get().GetClearanceForDBOperation(_Request.InnerProcessor, ModelDBEntry.DBSERVICE_MODELS_TABLE(), _ModelID, _ErrorMessageAction))
            {
                _FailureResponse = BWebResponse.InternalError("Atomic operation control has failed.");
                return(false);
            }

            var bResult = GetProcessedFile_Internal(
                _FileType,
                _DatabaseService,
                _FileService,
                _CadFileStorageBucketName,
                _ModelID,
                _RevisionIndex,
                out _SuccessResponse,
                out _FailureResponse,
                _GeometryId,
                _ErrorMessageAction);

            Controller_AtomicDBOperation.Get().SetClearanceForDBOperationForOthers(_Request.InnerProcessor, ModelDBEntry.DBSERVICE_MODELS_TABLE(), _ModelID, _ErrorMessageAction);

            return(bResult);
        }
Exemplo n.º 4
0
        private static bool GetProcessedFile_Internal(
            EProcessedFileType _FileType,
            IBDatabaseServiceInterface _DatabaseService,
            IBFileServiceInterface _FileService,
            string _CadFileStorageBucketName,
            string _ModelID,
            int _RevisionIndex,
            out BWebServiceResponse _SuccessResponse,
            out BWebServiceResponse _FailureResponse,
            string _GeometryId = null,
            Action <string> _ErrorMessageAction = null)
        {
            _SuccessResponse = BWebResponse.InternalError("");

            if (!TryGettingAllInfo(
                    _DatabaseService,
                    _ModelID,
                    _RevisionIndex,
                    out ModelDBEntry _,
                    out Revision RevisionObject,
                    out int _,
                    out _FailureResponse,
                    _ErrorMessageAction))
            {
                return(false);
            }

            if (RevisionObject.FileEntry.FileProcessStage != (int)Constants.EProcessStage.Uploaded_Processed)
            {
                _FailureResponse = BWebResponse.NotFound("Raw file has not been processed yet.");
                return(false);
            }

            string RelativeFileUrl = null;

            switch (_FileType)
            {
            case EProcessedFileType.HIERARCHY_CF:
                RelativeFileUrl = RevisionObject.FileEntry.HierarchyCFRelativeUrl;
                break;

            case EProcessedFileType.HIERARCHY_RAF:
                RelativeFileUrl = RevisionObject.FileEntry.HierarchyRAFRelativeUrl;
                break;

            case EProcessedFileType.METADATA_CF:
                RelativeFileUrl = RevisionObject.FileEntry.MetadataCFRelativeUrl;
                break;

            case EProcessedFileType.METADATA_RAF:
                RelativeFileUrl = RevisionObject.FileEntry.MetadataRAFRelativeUrl;
                break;

            case EProcessedFileType.GEOMETRY_CF:
                RelativeFileUrl = RevisionObject.FileEntry.GeometryCFRelativeUrl;
                break;

            case EProcessedFileType.GEOMETRY_RAF:
                RelativeFileUrl = RevisionObject.FileEntry.GeometryRAFRelativeUrl;
                break;

            case EProcessedFileType.UNREAL_HGM:
                RelativeFileUrl = RevisionObject.FileEntry.UnrealHGMRelativeUrl;
                break;

            case EProcessedFileType.UNREAL_HG:
                RelativeFileUrl = RevisionObject.FileEntry.UnrealHGRelativeUrl;
                break;

            case EProcessedFileType.UNREAL_H:
                RelativeFileUrl = RevisionObject.FileEntry.UnrealHRelativeUrl;
                break;

            case EProcessedFileType.UNREAL_G:
                if (_GeometryId == null)
                {
                    _ErrorMessageAction?.Invoke("GeometryId was not set when tried to retrieve UnrealGeometry file (u_g)");
                    _FailureResponse = BWebResponse.InternalError("GeometryId was not provided.");
                }

                RelativeFileUrl = $"{RevisionObject.FileEntry.UnrealGRelativeUrlBasePath}{_GeometryId}.{Constants.ProcessedFileType_Extension_Map[EProcessedFileType.UNREAL_G]}";
                break;
            }

            if (!_FileService.CreateSignedURLForDownload(
                    out string DownloadUrl,
                    _CadFileStorageBucketName,
                    RelativeFileUrl,
                    FileEntry.EXPIRY_MINUTES,
                    _ErrorMessageAction))
            {
                _FailureResponse = BWebResponse.InternalError("Signed url generation has failed.");
                return(false);
            }

            _SuccessResponse = BWebResponse.StatusOK("File has been located.", new JObject()
            {
                [FileEntry.FILE_DOWNLOAD_URL_PROPERTY] = DownloadUrl,
                [FileEntry.FILE_DOWNLOAD_UPLOAD_EXPIRY_MINUTES_PROPERTY] = FileEntry.EXPIRY_MINUTES
            });

            return(true);
        }
Exemplo n.º 5
0
        public static bool SplitRelativeUrl(
            string _RelativeUrl,
            out string _OwnerModelID,
            out int _OwnerRevisionIndex,
            out bool _bIsProcessed,
            out EProcessedFileType _ProcessedFileType_IfProcessed,
            out string _RawExtension_IfRaw)
        {
            _OwnerModelID                  = null;
            _OwnerRevisionIndex            = -1;
            _ProcessedFileType_IfProcessed = EProcessedFileType.NONE_OR_RAW;
            _RawExtension_IfRaw            = null;

            _bIsProcessed = false;
            foreach (var FolderPrefix in Constants.ProcessedFileType_FolderPrefix_Map)
            {
                if (_RelativeUrl.StartsWith(FolderPrefix.Value))
                {
                    _ProcessedFileType_IfProcessed = FolderPrefix.Key;
                    _bIsProcessed = true;
                    _RelativeUrl  = _RelativeUrl.Substring(FolderPrefix.Value.Length);
                }
            }
            if (_ProcessedFileType_IfProcessed == EProcessedFileType.NONE_OR_RAW)
            {
                if (!_RelativeUrl.StartsWith(RAW_FILE_FOLDER_PREFIX))
                {
                    return(false);
                }
                _RelativeUrl = _RelativeUrl.Substring(RAW_FILE_FOLDER_PREFIX.Length);
            }

            if (_RelativeUrl == null || _RelativeUrl.Length == 0)
            {
                return(false);
            }
            var Splitted = _RelativeUrl.Split('/');

            if (Splitted.Length < 3)
            {
                return(false);
            }

            _OwnerModelID = Splitted[0];
            if (!int.TryParse(Splitted[1], out _OwnerRevisionIndex))
            {
                return(false);
            }

            if (!_bIsProcessed)
            {
                var ExtensionSplit = Splitted[2].Split('.');
                if (ExtensionSplit.Length < 2)
                {
                    return(false);
                }
                _RawExtension_IfRaw = ExtensionSplit[ExtensionSplit.Length - 1];
            }

            return(true);
        }
Exemplo n.º 6
0
        private BWebServiceResponse OnRequest_Internal(HttpListenerContext _Context, Action <string> _ErrorMessageAction)
        {
            if (_Context.Request.HttpMethod != "GET")
            {
                return(BWebResponse.BadRequest($"This service does not accept requests of type : {_Context.Request.HttpMethod}"));
            }

            string FileTypeStr = "";
            string Filename    = "file";

            try
            {
                FileTypeStr = _Context.Request.QueryString.Get("fileType").ToLower().Trim().TrimStart('.');
            }
            catch
            {
                return(BWebResponse.BadRequest($"Expected parameters have not been provided"));
            }

            EProcessedFileType FileTypeEnum = EProcessedFileType.NONE_OR_RAW;

            if (Constants.ProcessedFileType_Enum_Map.ContainsKey(FileTypeStr))
            {
                FileTypeEnum = Constants.ProcessedFileType_Enum_Map[FileTypeStr];
            }
            else
            {
                return(BWebResponse.BadRequest($"Invalid File Type was provided"));
            }

            try
            {
                Filename = _Context.Request.QueryString.Get("fileName");
            }
            catch
            {
                //This is an optional field so do nothing
            }

            if (string.IsNullOrWhiteSpace(Filename))
            {
                Filename = "file";
            }

            string Url       = _Context.Request.RawUrl;
            int    CopyStart = Url.LastIndexOf('/') + 1;
            int    CopyEnd   = Url.IndexOf("?");
            string Podname   = Url.Substring(CopyStart, CopyEnd - CopyStart).TrimEnd('/');

            if (CopyEnd == -1)
            {
                return(BWebResponse.BadRequest($"Expected parameters have not been provided"));
            }

            BatchProcessingCreationService.Instance.GetBucketAndFile(Podname, out string _Bucket, out string _Filename);

            if (!string.IsNullOrWhiteSpace(_Bucket) && !string.IsNullOrWhiteSpace(_Filename))
            {
                string RawStrippedPath     = _Filename.TrimStart("raw/");
                int    FilenameStripLength = RawStrippedPath.LastIndexOf('/');
                RawStrippedPath = RawStrippedPath.Substring(0, FilenameStripLength);

                if (!FileService.CreateSignedURLForUpload(out string SignedUploadUrl, DEFAULT_UPLOAD_BUCKET, $"{Constants.ProcessedFileType_FolderPrefix_Map[FileTypeEnum]}{RawStrippedPath}/{Filename}.{Constants.ProcessedFileType_Extension_Map[FileTypeEnum]}", UPLOAD_CONTENT_TYPE, UPLOAD_URL_VALIDITY_MINUTES, _ErrorMessageAction))
                {
                    return(BWebResponse.InternalError("Failed to create Upload Url"));
                }

                return(BWebResponse.StatusOK("success", new JObject()
                {
                    ["uploadUrl"] = SignedUploadUrl
                }));
            }
            else
            {
                return(BWebResponse.NotFound("Could not find pod details"));
            }
        }