示例#1
0
        /// <summary>Gets baseline files urls.</summary>
        /// <param name="requestId">Identifier for the request.</param>
        /// <param name="elementId">Identifier for the element.</param>
        /// <param name="baselineVersion">The baseline version.</param>
        /// <param name="isIncremental">True if this object is incremental.</param>
        /// <param name="notifyGroundApp">True to notify ground application.</param>
        /// <param name="packagesURLs">[Out] The packages ur ls.</param>
        /// <param name="packagesParams">[Out] Options for controlling the packages.</param>
        /// <returns>True if it succeeds, false if it fails.</returns>
        private bool GetBaselineFilesURLs(
            Guid requestId,
            string elementId,
            string baselineVersion,
            bool isIncremental,
            bool notifyGroundApp,
            out List <string> packagesURLs,
            out List <PackageParams> packagesParams)
        {
            bool result = false;

            packagesParams = new List <PackageParams>();
            packagesURLs   = new List <string>();
            BaselineDefinition baselineDefinition = null;
            List <string>      parametersList     = new List <string>()
            {
                elementId,
                baselineVersion
            };

            using (StringWriter stringWriter = new StringWriter())
            {
                _stringListXmlSerializer.Serialize(stringWriter, parametersList);

                if (!string.IsNullOrEmpty(baselineVersion))
                {
                    try
                    {
                        using (IRemoteDataStoreClient remoteDataStore = _remoteDataStoreFactory.GetRemoteDataStoreInstance())
                        {
                            if (remoteDataStore.checkIfBaselineExists(baselineVersion))
                            {
                                baselineDefinition = DataTypeConversion.fromDataContainerToBaselineDefinition(remoteDataStore.getBaselineDefinition(baselineVersion));
                            }

                            if (baselineDefinition == null)
                            {
                                DataPackageService.sendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionFailedMissingDataPackage, stringWriter.ToString());
                                DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_INVALID_BASELINE_VERSION, baselineVersion);
                                result = false;
                            }
                            else if (remoteDataStore.checkIfDataPackageExists(DataPackageType.PISBASE.ToString(), baselineDefinition.PISBaseDataPackageVersion) == false ||
                                     remoteDataStore.checkIfDataPackageExists(DataPackageType.PISMISSION.ToString(), baselineDefinition.PISMissionDataPackageVersion) == false ||
                                     remoteDataStore.checkIfDataPackageExists(DataPackageType.PISINFOTAINMENT.ToString(), baselineDefinition.PISInfotainmentDataPackageVersion) == false ||
                                     remoteDataStore.checkIfDataPackageExists(DataPackageType.LMT.ToString(), baselineDefinition.LMTDataPackageVersion) == false)
                            {
                                if (notifyGroundApp)
                                {
                                    DataPackageService.sendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionFailedMissingDataPackage, stringWriter.ToString());
                                }

                                DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_INVALID_BASELINE_VERSION, baselineVersion);
                                result = false;
                            }
                            else
                            {
                                AvailableElementData elementData;
                                T2GManagerErrorEnum  requestResult = _trainToGroundManager.GetAvailableElementDataByElementNumber(elementId, out elementData);

                                if (requestResult == T2GManagerErrorEnum.eT2GServerOffline)
                                {
                                    DataPackageService.sendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageT2GServerOffline, string.Empty);
                                    DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_T2G_SERVER_OFFLINE);
                                }
                                else if (requestResult == T2GManagerErrorEnum.eElementNotFound)
                                {
                                    DataPackageService.sendNotificationToGroundApp(requestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionUnknowElementId, stringWriter.ToString());
                                    DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_ELEMENT_NOT_FOUND, elementId);
                                }

                                Dictionary <DataPackageType, string> uploadPackagesList = new Dictionary <DataPackageType, string>();
                                BaselineDefinition embeddedBaselineDefinition           = null;

                                if (elementData.PisBaselineData != null &&
                                    !string.IsNullOrEmpty(elementData.PisBaselineData.CurrentVersionOut) &&
                                    elementData.PisBaselineData.CurrentVersionOut != "0.0.0.0")
                                {
                                    if (remoteDataStore.checkIfBaselineExists(elementData.PisBaselineData.CurrentVersionOut))
                                    {
                                        embeddedBaselineDefinition = DataTypeConversion.fromDataContainerToBaselineDefinition(remoteDataStore.getBaselineDefinition(elementData.PisBaselineData.CurrentVersionOut));
                                    }
                                    else
                                    {
                                        string message = string.Format(CultureInfo.CurrentCulture, "Baseline version '{0}' installed on element '{1}' is unknown. Full baseline distribution will be performed.", elementData.PisBaselineData.CurrentVersionOut, elementData.ElementNumber);
                                        DataPackageService.mWriteLog(TraceType.WARNING, System.Reflection.MethodBase.GetCurrentMethod().Name, null, message);
                                    }

                                    if (embeddedBaselineDefinition != null)
                                    {
                                        if (baselineDefinition.PISBaseDataPackageVersion != embeddedBaselineDefinition.PISBaseDataPackageVersion)
                                        {
                                            uploadPackagesList.Add(DataPackageType.PISBASE, baselineDefinition.PISBaseDataPackageVersion);
                                        }

                                        if (baselineDefinition.PISMissionDataPackageVersion != embeddedBaselineDefinition.PISMissionDataPackageVersion)
                                        {
                                            uploadPackagesList.Add(DataPackageType.PISMISSION, baselineDefinition.PISMissionDataPackageVersion);
                                        }

                                        if (baselineDefinition.PISInfotainmentDataPackageVersion != embeddedBaselineDefinition.PISInfotainmentDataPackageVersion)
                                        {
                                            uploadPackagesList.Add(DataPackageType.PISINFOTAINMENT, baselineDefinition.PISInfotainmentDataPackageVersion);
                                        }

                                        if (baselineDefinition.LMTDataPackageVersion != embeddedBaselineDefinition.LMTDataPackageVersion)
                                        {
                                            uploadPackagesList.Add(DataPackageType.LMT, baselineDefinition.LMTDataPackageVersion);
                                        }
                                    }
                                }

                                if (embeddedBaselineDefinition == null)
                                {
                                    uploadPackagesList.Add(DataPackageType.PISBASE, baselineDefinition.PISBaseDataPackageVersion);
                                    uploadPackagesList.Add(DataPackageType.PISMISSION, baselineDefinition.PISMissionDataPackageVersion);
                                    uploadPackagesList.Add(DataPackageType.PISINFOTAINMENT, baselineDefinition.PISInfotainmentDataPackageVersion);
                                    uploadPackagesList.Add(DataPackageType.LMT, baselineDefinition.LMTDataPackageVersion);
                                }

                                if (isIncremental == false || embeddedBaselineDefinition == null)
                                {
                                    foreach (KeyValuePair <DataPackageType, string> lDP in uploadPackagesList)
                                    {
                                        DataPackagesCharacteristics packageCharacteristics = DataTypeConversion.fromDataContainerToDataPackagesCharacteristics(remoteDataStore.getDataPackageCharacteristics(lDP.Key.ToString(), lDP.Value));

                                        packagesURLs.Add(ConfigurationSettings.AppSettings["RemoteDataStoreUrl"] + "/" + packageCharacteristics.DataPackagePath);
                                        packagesParams.Add(new PackageParams(lDP.Key, lDP.Value));
                                    }

                                    result = true;
                                }
                                else
                                {
                                    foreach (KeyValuePair <DataPackageType, string> packageToUpload in uploadPackagesList)
                                    {
                                        string embeddedBaselineVersion = string.Empty;
                                        switch (packageToUpload.Key)
                                        {
                                        case DataPackageType.PISBASE:
                                            embeddedBaselineVersion = embeddedBaselineDefinition.PISBaseDataPackageVersion;
                                            break;

                                        case DataPackageType.PISMISSION:
                                            embeddedBaselineVersion = embeddedBaselineDefinition.PISMissionDataPackageVersion;
                                            break;

                                        case DataPackageType.PISINFOTAINMENT:
                                            embeddedBaselineVersion = embeddedBaselineDefinition.PISInfotainmentDataPackageVersion;
                                            break;

                                        case DataPackageType.LMT:
                                            embeddedBaselineVersion = embeddedBaselineDefinition.LMTDataPackageVersion;
                                            break;

                                        default:
                                            break;
                                        }

                                        bool isEmbPackageOnGround = remoteDataStore.checkIfDataPackageExists(packageToUpload.Key.ToString(), embeddedBaselineVersion);
                                        if (!isEmbPackageOnGround)
                                        {
                                            string message = string.Format(CultureInfo.CurrentCulture, "{0}'s data package version '{1}' associated to baseline '{2}' is unknown. Distribution the element '{3}' will receive a complete update for that data package.", packageToUpload.Key.ToString(), embeddedBaselineVersion, packageToUpload.Value, elementData.ElementNumber);
                                            DataPackageService.mWriteLog(TraceType.WARNING, System.Reflection.MethodBase.GetCurrentMethod().Name, null, message);

                                            DataPackagesCharacteristics packageCharacteristics = DataTypeConversion.fromDataContainerToDataPackagesCharacteristics(remoteDataStore.getDataPackageCharacteristics(packageToUpload.Key.ToString(), packageToUpload.Value));

                                            packagesURLs.Add(ConfigurationSettings.AppSettings["RemoteDataStoreUrl"] + "/" + packageCharacteristics.DataPackagePath);
                                            packagesParams.Add(new PackageParams(packageToUpload.Key, packageToUpload.Value));
                                        }
                                        else
                                        {
                                            // Store the current operational timeout.
                                            TimeSpan oldOperationTimeOut = remoteDataStore.OperationTimeout;
                                            try
                                            {
                                                // Set the operational timeout to 10minutes because the getDiffDataPackageUrl can take a long time (Zip operation)
                                                remoteDataStore.OperationTimeout = TimeSpan.FromMinutes(10);
                                                string differentialPackagePath = remoteDataStore.getDiffDataPackageUrl(requestId, elementId, packageToUpload.Key.ToString(), embeddedBaselineVersion, packageToUpload.Value);
                                                if (null != differentialPackagePath && !string.IsNullOrEmpty(differentialPackagePath))
                                                {
                                                    packagesURLs.Add(ConfigurationSettings.AppSettings["RemoteDataStoreUrl"] + "/" + differentialPackagePath);
                                                    packagesParams.Add(new PackageParams(packageToUpload.Key, packageToUpload.Value));
                                                }
                                            }
                                            finally
                                            {
                                                // restore the operation timeout.
                                                remoteDataStore.OperationTimeout = oldOperationTimeOut;
                                            }
                                        }

                                        result = true;
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, ex, Logs.ERROR_REMOTEDATASTORE_NOT_ACCESSIBLE, baselineVersion);
                        result = false;
                    }
                }
                else
                {
                    result = false;
                }
            }

            return(result);
        }