/// <summary>
        ///
        /// </summary>
        /// <param name="objSoftwareVersionsRequest"></param>
        /// <param name="objSoftwareVersionsResponse"></param>
        /// <returns></returns>
        public bool ValidateRequest(GetSoftwareVersionsRequest objSoftwareVersionsRequest, GetSoftwareVersionsResponse objSoftwareVersionsResponse)
        {
            bool ValidationStatus = true;

            if (!objSoftwareVersionsRequest.RequestID.IsValidString() && ValidationStatus)
            {
                objSoftwareVersionsResponse.ResponseStatus  = (int)Constants.ResponseStatus.InvalidParameter;
                objSoftwareVersionsResponse.ResponseMessage = Constants.ResponseStatus.InvalidParameter.ToString();
                ValidationStatus = false;
            }
            if (!objSoftwareVersionsRequest.RequestingSystem.IsValidString() && ValidationStatus)
            {
                objSoftwareVersionsResponse.ResponseStatus  = (int)Constants.ResponseStatus.InvalidParameter;
                objSoftwareVersionsResponse.ResponseMessage = Constants.ResponseStatus.InvalidParameter.ToString();
                ValidationStatus = false;
            }
            if (objCommonValidationBL.DupCheckRequestId(objSoftwareVersionsRequest.RequestID, objSoftwareVersionsRequest.RequestingSystem) && ValidationStatus)
            {
                objSoftwareVersionsResponse.ResponseStatus  = (int)Constants.ResponseStatus.AmbigousRequest;
                objSoftwareVersionsResponse.ResponseMessage = Constants.ResponseMessage[3].ToString();
                ValidationStatus = false;
            }
            if (!objSoftwareVersionsRequest.SKUID.IsValidString())
            {
                objSoftwareVersionsResponse.ResponseStatus  = (int)Constants.ResponseStatus.InvalidParameter;
                objSoftwareVersionsResponse.ResponseMessage = "Invalid SKU Format";
                ValidationStatus = false;
            }



            return(ValidationStatus);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="objSoftwareVersionsRequest"></param>
        /// <returns></returns>
        public GetSoftwareVersionsResponse GetSoftwareVersions(GetSoftwareVersionsRequest objSoftwareVersionsRequest)
        {
            var objSoftwareVersionsResponse = new GetSoftwareVersionsResponse();

            objSoftwareVersionsResponse.RequestID        = objSoftwareVersionsRequest.RequestID;
            objSoftwareVersionsResponse.ResponseID       = objSoftwareVersionsRequest.RequestID;
            objSoftwareVersionsResponse.ResponseDateTime = DateTime.UtcNow;
            objSoftwareVersionsResponse.ResponseStatus   = (int)Constants.ResponseStatus.Success;
            objSoftwareVersionsResponse.ResponseMessage  = Constants.ResponseStatus.Success.ToString();
            objSoftwareVersionsResponse.SKUID            = objSoftwareVersionsRequest.SKUID;



            //Start GetSoftwareVersions

            try
            {
                //ASSIGNING ID'S
                objSoftwareVersionsResponse.RequestID  = objSoftwareVersionsRequest.RequestID;
                objSoftwareVersionsResponse.ResponseID = objSoftwareVersionsRequest.RequestID;

                //INPUT DATA VALIDATION
                if (objSoftwareVersionsBL.ValidateRequest(objSoftwareVersionsRequest, objSoftwareVersionsResponse))
                {
                    //PROCESS DATA & RETURN RESPONSE
                    objSoftwareVersionsBL.ProcessRequest(objSoftwareVersionsRequest, objSoftwareVersionsResponse);
                }
            }
            catch (Exception ex)
            {
                //SET FAILURE STATUS
                objSoftwareVersionsResponse.ResponseStatus  = (int)Constants.ResponseStatus.ServiceUnavailable;
                objSoftwareVersionsResponse.ResponseMessage = Constants.ResponseMessage[1000].ToString();

                //LOG EXCEPTION
                objEventLogger.WriteLog(ex.Message + Environment.NewLine + ex.StackTrace, objSoftwareVersionsRequest.RequestingSystem, DateTime.UtcNow, objSoftwareVersionsRequest.RequestID);
            }
            finally
            {
                objSoftwareVersionsResponse.ResponseDateTime = DateTime.UtcNow;


                //SERIALIZE REQUEST/RESPONSE
                string request  = "GetSoftwareVersionsRequest";
                string response = "GetSoftwareVersionsResponse";

                try
                {
                    request  = Util.SerializeObject(objSoftwareVersionsRequest);
                    response = Util.SerializeObject(objSoftwareVersionsResponse);
                }
                catch (Exception ex)
                {
                    objEventLogger.WriteLog("Request/Response Object Serialization Error: " + ex.Message + Environment.NewLine + ex.StackTrace, objSoftwareVersionsRequest.RequestingSystem, DateTime.UtcNow, objSoftwareVersionsRequest.RequestID);
                }

                if (!request.IsValidString())
                {
                    request = "GetSoftwareVersionsRequest";
                }
                if (!response.IsValidString())
                {
                    response = "GetSoftwareVersionsResponse";
                }


                //LOG REQUEST/RESPONSE
                objTransactionLogger.LogTransaction(objSoftwareVersionsRequest.RequestID, objSoftwareVersionsRequest.RequestDateTime, objSoftwareVersionsRequest.RequestingSystem,
                                                    request, objSoftwareVersionsResponse.ResponseID, objSoftwareVersionsResponse.ResponseDateTime, response,
                                                    objSoftwareVersionsResponse.ResponseStatus, objSoftwareVersionsResponse.ResponseMessage, 0);

                //End Processing GetSoftwareVersions
            }

            //GetSoftwareVersions ends
            return(objSoftwareVersionsResponse);
        }
        public override GetSoftwareVersionsResponse GetSoftwareVersions(GetSoftwareVersionsRequest objSoftwareVersionsRequest)
        {
            SoftwareVersionsProcess objSoftwareVersionsProcess = new SoftwareVersionsProcess();

            return(objSoftwareVersionsProcess.GetSoftwareVersions(objSoftwareVersionsRequest));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="objSoftwareVersionsRequest"></param>
        /// <param name="objSoftwareVersionsResponse"></param>
        /// <returns></returns>
        public bool ProcessRequest(GetSoftwareVersionsRequest objSoftwareVersionsRequest, GetSoftwareVersionsResponse objSoftwareVersionsResponse)
        {
            bool flag = false;

            try
            {
                List <VersionInfoWithImageUrl> versionInfoList;

                // Perform a DB lookup for all versions
                // FIND DETAILS (SOFTWARE & OPTION) FOR GIVEN ID.
                if (objSoftwareVersionsRequest.SKUID.IsValidString())
                {
                    string[] arr = new string[1];
                    arr[0] = objSoftwareVersionsRequest.SKUID;

                    DataSet ds = GetSKUVersionInfo(arr);



                    if (ds != null && ds.Tables != null && ds.Tables.Count > 0)
                    {
                        if (ds.Tables[0].Rows.Count > 0)
                        {
                            versionInfoList = new List <VersionInfoWithImageUrl>();

                            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                            {
                                DataRow dr            = null;
                                string  currentSKUID  = string.Empty;
                                string  previousSKUID = string.Empty;
                                dr = ds.Tables[0].Rows[i];

                                VersionInfoWithImageUrl objVersionInfoWithImageUrl = new VersionInfoWithImageUrl();
                                objVersionInfoWithImageUrl.IsShippedVersion     = (dr["IsShippedVersion"] != DBNull.Value) ? Convert.ToBoolean(dr["IsShippedVersion"]) : false;
                                objVersionInfoWithImageUrl.ReleaseDateSpecified = false;
                                objVersionInfoWithImageUrl.ReleaseDate          = (dr["ReleaseDate"] != DBNull.Value) ? Convert.ToDateTime(dr["ReleaseDate"]) : DateTime.MinValue;
                                if (objVersionInfoWithImageUrl.ReleaseDate != DateTime.MinValue)
                                {
                                    objVersionInfoWithImageUrl.ReleaseDateSpecified = true;
                                }
                                objVersionInfoWithImageUrl.ImageUrl = (dr["ImageUrl"] != DBNull.Value) ? Convert.ToString(dr["ImageUrl"]) : "";

                                objVersionInfoWithImageUrl.Version      = (dr["Version"] != DBNull.Value) ? Convert.ToString(dr["Version"]) : "";
                                objVersionInfoWithImageUrl.VersionSeqNo = (dr["VersionSeqNo"] != DBNull.Value) ? Convert.ToInt32(dr["VersionSeqNo"]) : -1;
                                objVersionInfoWithImageUrl.VersionType  = (dr["VersionType"] != DBNull.Value) ? Convert.ToString(dr["VersionType"]) : "";
                                objVersionInfoWithImageUrl.VersionReleaseClassification = (dr["VersionReleaseClassification"] != DBNull.Value) ? Convert.ToString(dr["VersionReleaseClassification"]) : "";

                                versionInfoList.Add(objVersionInfoWithImageUrl);
                            }


                            if (objSoftwareVersionsRequest.VersionFilter.IsValidString() && objSoftwareVersionsRequest.VersionFilter == "LATEST")
                            {
                                VersionInfoWithImageUrl latestVersion = versionInfoList.OrderByDescending(o => o.VersionSeqNo).FirstOrDefault <VersionInfoWithImageUrl>();
                                if (latestVersion != null)
                                {
                                    versionInfoList.Clear();
                                    versionInfoList.Add(latestVersion);
                                }
                            }
                            else if (objSoftwareVersionsRequest.VersionFilter.IsValidString() && objSoftwareVersionsRequest.VersionFilter != "LATEST" && !objSoftwareVersionsRequest.VersionFilter.Contains("+"))
                            {
                                VersionInfoWithImageUrl specificVersion = versionInfoList.Where(o => o.Version == objSoftwareVersionsRequest.VersionFilter).FirstOrDefault <VersionInfoWithImageUrl>();
                                if (specificVersion != null)
                                {
                                    versionInfoList.Clear();
                                    versionInfoList.Add(specificVersion);
                                }
                            }
                            //NEW CR
                            #region WITH ADDITION VERSION KEY

                            else if (objSoftwareVersionsRequest.VersionFilter.IsValidString() && objSoftwareVersionsRequest.VersionFilter != "LATEST" && objSoftwareVersionsRequest.VersionFilter.Contains("+"))
                            {
                                versionInfoList.Clear();
                                string strSKUVersion = string.Empty;
                                if (objSoftwareVersionsRequest.VersionFilter.Contains('+'))
                                {
                                    int intindex = objSoftwareVersionsRequest.VersionFilter.LastIndexOf('+');
                                    strSKUVersion = objSoftwareVersionsRequest.VersionFilter.Substring(0, intindex);
                                }
                                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                                {
                                    DataRow dr = null;
                                    dr = ds.Tables[0].Rows[i];

                                    VersionInfoWithImageUrl objVersionInfoWithImageUrl = new VersionInfoWithImageUrl();
                                    objVersionInfoWithImageUrl.IsShippedVersion     = (dr["IsShippedVersion"] != DBNull.Value) ? Convert.ToBoolean(dr["IsShippedVersion"]) : false;
                                    objVersionInfoWithImageUrl.ReleaseDateSpecified = false;
                                    objVersionInfoWithImageUrl.ReleaseDate          = (dr["ReleaseDate"] != DBNull.Value) ? Convert.ToDateTime(dr["ReleaseDate"]) : DateTime.MinValue;
                                    if (objVersionInfoWithImageUrl.ReleaseDate != DateTime.MinValue)
                                    {
                                        objVersionInfoWithImageUrl.ReleaseDateSpecified = true;
                                    }
                                    objVersionInfoWithImageUrl.ImageUrl = (dr["ImageUrl"] != DBNull.Value) ? Convert.ToString(dr["ImageUrl"]) : "";

                                    objVersionInfoWithImageUrl.Version      = (dr["Version"] != DBNull.Value) ? Convert.ToString(dr["Version"]) : "";
                                    objVersionInfoWithImageUrl.VersionSeqNo = (dr["VersionSeqNo"] != DBNull.Value) ? Convert.ToInt32(dr["VersionSeqNo"]) : -1;
                                    objVersionInfoWithImageUrl.VersionType  = (dr["VersionType"] != DBNull.Value) ? Convert.ToString(dr["VersionType"]) : "";
                                    objVersionInfoWithImageUrl.VersionReleaseClassification = (dr["VersionReleaseClassification"] != DBNull.Value) ? Convert.ToString(dr["VersionReleaseClassification"]) : "";
                                    int intResult = objVersionInfoWithImageUrl.Version.CompareTo(strSKUVersion);
                                    if (intResult == 0 || intResult == 1)
                                    {
                                        versionInfoList.Add(objVersionInfoWithImageUrl);
                                    }
                                }
                            }
                            #endregion

                            objSoftwareVersionsResponse.AvailableVersion = versionInfoList.ToArray();
                        }
                    }
                }

                if (objSoftwareVersionsResponse.AvailableVersion == null || objSoftwareVersionsResponse.AvailableVersion.Length <= 0)
                {
                    objSoftwareVersionsResponse.ResponseStatus  = (int)Constants.ResponseStatus.UnKnownSKU;
                    objSoftwareVersionsResponse.ResponseMessage = Constants.ResponseMessage[2].ToString();
                }
                flag = true;
            }
            catch (Exception ex)
            {
            }

            return(flag);
        }