Exemplo n.º 1
0
        /// <summary> Call GetConvertAsync which internally use Http Get to get data form Symbology Conversion service</summary>
        /// <param name="symbologyData">EDPSymbologyClient object</param>
        /// <param name="appConfig"> appConfig object to verify option tot print Json request message </param>
        /// <param name="convertRequest"> ConvertRequest object contains request values</param>
        /// <param name="cts"> CancellationTokenSource object </param>
        public static Symbology SymbologyConvertGet(EDPSymbologyClient symbologyClient,
                                                    ConvertRequest convertRequest,
                                                    Config appConfig,
                                                    CancellationTokenSource cts)
        {
            if (appConfig.Verbose)
            {
                PrintConvertRequest(convertRequest);
            }

            var symbolResult = symbologyClient.GetConvertAsync(string.Join(',', convertRequest.Universe),
                                                               convertRequest.To, Format.NoMessages, cts.Token)
                               .GetAwaiter().GetResult();

            return(symbolResult);
        }
Exemplo n.º 2
0
        /// <summary> Call PostConvertAsync which internally use Http Post to get data form Symbology Conversion service</summary>
        /// <param name="symbologyData">EDPSymbologyClient object</param>
        /// <param name="appConfig"> appConfig object to verify option tot print Json request message </param>
        /// <param name="convertRequest"> ConvertRequest object contains request values</param>
        /// <param name="cts"> CancellationTokenSource object </param>
        public static Symbology SymbologyConvertPost(EDPSymbologyClient symbologyClient,
                                                     ConvertRequest convertRequest,
                                                     Config appConfig,
                                                     CancellationTokenSource cts)
        {
            if (appConfig.Verbose)
            {
                PrintConvertRequest(convertRequest);
            }

            var symbologyResponse =
                symbologyClient.PostConvertAsync(convertRequest, Format.NoMessages, cts.Token).GetAwaiter().GetResult() ??
                throw new ArgumentNullException(
                          ParamName);

            return(symbologyResponse);
        }
Exemplo n.º 3
0
        /// <summary>
        ///     Application running with the following steps
        ///     1. Display arguments list and validate command line argument values
        ///     2. Get Refresh Token from EDP Server
        ///     3. Send Http Request GET/POST to EDP Symbology Convert endpoint to get the data
        ///     4. Validate response and print to console and write to csv if needed.
        /// </summary>
        private static void Main(string[] args)
        {
            // 1. Display arguments list and validate command line argument values
            var appConfig = new Config();

            if (!ShowsConfigCommand(args, ref appConfig))
            {
                return;
            }
            Console.WriteLine("Start EDP(Elektron Data Platform) Symbology Convert Example application");
            var convertRequest = ValidateAndCreateConvertRequest(appConfig);

            DumpAppConfig(appConfig, convertRequest);

            if (convertRequest.Universe.Count == 0)
            {
                Console.WriteLine("Please specify at lease one item in the universe");
                return;
            }


            // 2. Get Refresh Token from EDP Server
            //    If user provide RefreshToken or Access Token, app will skip this step</summary>
            var authToken = DoLoginAndAuthenticate(appConfig);

            if (authToken == null)
            {
                return;
            }

            // 3. Send Http Request GET/POST to EDP Symbology Convert endpoint to get the data
            // 4. Validate response and print to console and write to csv if needed.
            //    SymbologyConvertGet using Http Get to send the request and
            //    SymbologyConvertPost using Http Post to send the request.
            var       requestIsSuccess   = false;
            Symbology symbologyData      = null;
            var       IsCancelledReqeust = false;

            do
            {
                using (var client = new HttpClient(GenerateHttpClientHandler(appConfig)))
                {
                    // Set access token in Http Authorization Header
                    var accessToken = string.IsNullOrEmpty(appConfig.AccessToken)
                        ? authToken.Access_token
                        : appConfig.AccessToken;

                    client.DefaultRequestHeaders.Authorization = authToken is null
                        ? new AuthenticationHeaderValue("Bearer", accessToken)
                        : new AuthenticationHeaderValue(authToken.Token_type, accessToken);

                    //Specify Media Type to application/json
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                    var symbologyClient = new EDPSymbologyClient(client);

                    //If user specify EDP Symbology based url vi app config, it overrides default symbology based url.
                    if (!string.IsNullOrEmpty(appConfig.SymbologyBaseURL))
                    {
                        symbologyClient.BaseUrl = appConfig.SymbologyBaseURL;
                    }

                    Console.WriteLine("Retrieving data from EDP Symbology Conversion service...");
                    var cts = new CancellationTokenSource();
                    Console.TreatControlCAsInput = false;
                    Console.CancelKeyPress      += (s, ev) =>
                    {
                        IsCancelledReqeust = true;
                        cts.Cancel();
                    };
                    try
                    {
                        symbologyData = !appConfig.UseJsonRequestFile
                            ? SymbologyConvertGet(symbologyClient, convertRequest, appConfig, cts)
                            : SymbologyConvertPost(symbologyClient, convertRequest, appConfig, cts);
                    }
                    catch (EDPSymbologyException <Error> exception)
                    {
                        Console.WriteLine(
                            $"Error ID:{exception.Result.Error1.Id} Code:{exception.Result.Error1.Code} {exception.Result.Error1.Status} {exception.Result.Error1.Message}");
                        if (exception.Result.Error1.Code != "401")
                        {
                            // Assume that there is authorize error occurs.
                            requestIsSuccess = true;
                        }
                        else
                        {
                            requestIsSuccess = false;
                            Console.WriteLine(
                                "The AccessToken you use may not valid, Re-Enter EDP Username and Password");
                            //reset AccessToken
                            appConfig.AccessToken = string.Empty;

                            // Re Enter Username and Password.
                            authToken = DoLoginAndAuthenticate(appConfig);
                        }
                    }
                    catch (Exception exception)
                    {
                        Console.WriteLine($"{exception.Message}");
                    }

                    requestIsSuccess = symbologyData != null;
                }
            } while (!IsCancelledReqeust && !requestIsSuccess);

            if (!IsCancelledReqeust)
            {
                PrintSymbologyResponse(symbologyData, appConfig);
            }
            else
            {
                Console.WriteLine("Operation was cancelled. Exit the application");
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// This function read request parameter form appConfig and convert comma separate value to list and set ti back to ConvertRequest object.
        /// It also verify enum value from To parameter if it contains invalid value it automatically remove the value from field list before set it ConvertRequest object.
        /// </summary>
        /// <param name="appConfig"></param>
        /// <returns>ConvertRequest</returns>
        private static ConvertRequest ValidateAndCreateConvertRequest(Config appConfig)
        {
            var convertRequest = new ConvertRequest();

            try
            {
                if (appConfig.UseJsonRequestFile)
                {
                    Console.WriteLine($"Reading and Processing request message from {appConfig.JsonRequestFile} file");
                    //Parse Universe list

                    var jObject = JObject.Parse(File.ReadAllText(appConfig.JsonRequestFile));
                    convertRequest.Universe = jObject["universe"] != null
                        ? jObject["universe"].Select(a => (string)a).ToList()
                        : new List <string>();

                    var toList = jObject["to"] != null
                        ? jObject["to"].Select(a => (string)a).ToList()
                        : new List <string>();
                    //Parse To list and validate the enum value
                    var errorMsg = string.Empty;
                    convertRequest.To = toList.Count > 0
                        ? EDPSymbologyClient.ConvertStringToEnumList(toList, out errorMsg)
                        : new List <FieldEnum>();

                    if (!string.IsNullOrEmpty(errorMsg))
                    {
                        Console.WriteLine(errorMsg);
                    }
                }
                else
                {
                    convertRequest.Universe = appConfig.Universe != null
                        ? appConfig.Universe.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList()
                        : new List <string>();

                    var validateError = string.Empty;
                    var toList        = appConfig.ToEnum != null
                        ? appConfig.ToEnum.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList()
                        : new List <string>();

                    convertRequest.To = toList.Count > 0
                        ? EDPSymbologyClient.ConvertStringToEnumList(toList, out validateError)
                        : new List <FieldEnum>();
                    if (!string.IsNullOrEmpty(validateError))
                    {
                        Console.WriteLine(validateError);
                    }
                }

                if (!string.IsNullOrEmpty(appConfig.UniverseListFilePath))
                {
                    var lines        = File.ReadLines(appConfig.UniverseListFilePath);
                    var universeList = new List <string>();
                    foreach (var line in lines)
                    {
                        if (!string.IsNullOrEmpty(line.Trim()) && universeList.Count < 99)
                        {
                            universeList.Add(line);
                        }
                    }

                    convertRequest.Universe = universeList;
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine($"Unable to convert json data to request message {exception.Message}");
                return(convertRequest);
            }

            return(convertRequest);
        }