Ejemplo n.º 1
0
        /// <summary>
        ///     The sub step relative to the mouse position
        /// </summary>
        /// <returns></returns>
        private SubStep SubStepRelatedToMousePosition()
        {
            SubStep retVal = null;

            ModelEvent evt = GetEventUnderMouse();

            if (evt != null && evt.Instance != null)
            {
                retVal = EnclosingFinder <SubStep> .find(evt.Instance as IEnclosed, true);

                if (retVal == null)
                {
                    Step step = evt.Instance as Step;
                    if (step != null && step.SubSteps.Count > 0)
                    {
                        retVal = (SubStep)step.SubSteps[step.SubSteps.Count - 1];
                    }
                }
            }

            if (retVal == null && Steps != null && Steps.Count > 0)
            {
                Step step = (Step)Steps[Steps.Count - 1];
                if (step.SubSteps.Count > 0)
                {
                    retVal = (SubStep)step.SubSteps[step.SubSteps.Count - 1];
                }
            }

            return(retVal);
        }
Ejemplo n.º 2
0
            /// <summary>
            ///     Executes the action
            /// </summary>
            /// <param name="e"></param>
            protected override void OnClick(EventArgs e)
            {
                Step newStep = (Step)acceptor.getFactory().createStep();

                newStep.Enclosing = TimeLineControl.TestCase;

                SubStep subStep = (SubStep)acceptor.getFactory().createSubStep();

                subStep.Name = "Substep 1";
                newStep.appendSubSteps(subStep);

                TestCase testCase = GetTestCase();

                if (Step != null)
                {
                    newStep.Name = "NewStep";
                    int index = TimeLineControl.Steps.IndexOf(Step);
                    testCase.Steps.Insert(index + 1, newStep);
                    newStep.setFather(testCase);
                }
                else
                {
                    newStep.Name = "Step " + (TimeLineControl.Steps.Count + 1);
                    testCase.Steps.Add(newStep);
                    newStep.setFather(testCase);
                }

                base.OnClick(e);
            }
Ejemplo n.º 3
0
 /// <summary>
 /// Adds a step after this one
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 public void AddSubStepHandler(object sender, EventArgs args)
 {
     DataDictionary.Tests.SubStep subStep = (DataDictionary.Tests.SubStep)DataDictionary.Generated.acceptor.getFactory().createSubStep();
     subStep.Name      = "Sub-step" + (Nodes.Count + 1);
     subStep.Enclosing = Item;
     createSubStep(subStep);
 }
Ejemplo n.º 4
0
        /// <summary>
        ///     Adds a step after this one
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        public void AddSubStepHandler(object sender, EventArgs args)
        {
            SubStep subStep = (SubStep)acceptor.getFactory().createSubStep();

            subStep.Name      = "Sub-step" + Nodes.Count;
            subStep.Enclosing = Item;
            Item.appendSubSteps(subStep);
        }
Ejemplo n.º 5
0
        /// <summary>
        ///     Creates an expectation in a sub step
        /// </summary>
        /// <param name="enclosing"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        protected Expectation CreateExpectation(SubStep enclosing, string name)
        {
            Expectation retVal = (Expectation)Factory.createExpectation();

            enclosing.appendExpectations(retVal);
            retVal.ExpressionText = name;

            return(retVal);
        }
Ejemplo n.º 6
0
        /// <summary>
        ///     Creates a step in a test case
        /// </summary>
        /// <param name="enclosing"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        protected SubStep CreateSubStep(Step enclosing, string name)
        {
            SubStep retVal = (SubStep)Factory.createSubStep();

            enclosing.appendSubSteps(retVal);
            retVal.Name = name;

            return(retVal);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Creates a new sub-step
        /// </summary>
        /// <param name="testCase"></param>
        /// <returns></returns>
        public SubStepTreeNode createSubStep(DataDictionary.Tests.SubStep subStep)
        {
            SubStepTreeNode retVal = new SubStepTreeNode(subStep);

            Item.appendSubSteps(subStep);
            Nodes.Add(retVal);

            return(retVal);
        }
Ejemplo n.º 8
0
 /// <summary>
 ///     Executes the action
 /// </summary>
 /// <param name="e"></param>
 protected override void OnClick(EventArgs e)
 {
     if (SubStep != null)
     {
         Expectation expectation = (Expectation)acceptor.getFactory().createExpectation();
         expectation.Name = "";
         SubStep.appendExpectations(expectation);
     }
     base.OnClick(e);
 }
Ejemplo n.º 9
0
 /// <summary>
 ///     Executes the action
 /// </summary>
 /// <param name="e"></param>
 protected override void OnClick(EventArgs e)
 {
     if (SubStep != null)
     {
         Action action = (Action)acceptor.getFactory().createAction();
         action.Name = "";
         SubStep.appendActions(action);
     }
     base.OnClick(e);
 }
Ejemplo n.º 10
0
        /// <summary>
        ///     Positions a substep in the time line
        /// </summary>
        /// <param name="currentTime"></param>
        /// <param name="subStep"></param>
        /// <returns></returns>
        private void PositionSubStep(double currentTime, SubStep subStep)
        {
            SubStepActivated subStepActivated = new SubStepActivated(subStep, null)
            {
                Time = currentTime
            };

            PositionHandler.RegisterEvent(subStepActivated);
            foreach (Action action in subStep.Actions)
            {
                VariableUpdate variableUpdate = new VariableUpdate(action, action, null);
                PositionHandler.RegisterEvent(variableUpdate);
            }
            foreach (Expectation expectation in subStep.Expectations)
            {
                Expect expect = new Expect(expectation, null);
                PositionHandler.RegisterEvent(expect);
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Splits the selected action to several sub-actions
        /// </summary>
        public virtual void SplitHandler(object sender, EventArgs args)
        {
            DataDictionary.Interpreter.Statement.Statement statement = Item.EFSSystem.Parser.Statement(Item, Item.ExpressionText);
            DataDictionary.Interpreter.Statement.VariableUpdateStatement variableUpdateStatement = statement as DataDictionary.Interpreter.Statement.VariableUpdateStatement;
            if (variableUpdateStatement != null)
            {
                DataDictionary.Interpreter.Expression       expression       = variableUpdateStatement.Expression;
                DataDictionary.Interpreter.StructExpression structExpression = expression as DataDictionary.Interpreter.StructExpression;
                if (structExpression != null)
                {
                    Dictionary <string, DataDictionary.Interpreter.Expression> associations = structExpression.Associations;
                    foreach (KeyValuePair <string, DataDictionary.Interpreter.Expression> value in associations)
                    {
                        DataDictionary.Rules.Action action = (DataDictionary.Rules.Action)DataDictionary.Generated.acceptor.getFactory().createAction();
                        action.Expression = structExpression.Structure.ToString() + "." + value.Key + " <- " + value.Value.ToString();
                        string         aString        = value.Value.ToString();
                        ActionTreeNode actionTreeNode = new ActionTreeNode(action);

                        BaseTreeNode parent = Parent as BaseTreeNode;
                        if ((parent != null) && (parent.Nodes != null))
                        {
                            DataDictionary.Rules.RuleCondition ruleCondition = Item.Enclosing as DataDictionary.Rules.RuleCondition;
                            if (ruleCondition != null)
                            {
                                ruleCondition.appendActions(action);
                            }
                            else
                            {
                                DataDictionary.Tests.SubStep subStep = Item.Enclosing as DataDictionary.Tests.SubStep;
                                if (subStep != null)
                                {
                                    subStep.appendActions(action);
                                }
                            }
                            parent.Nodes.Add(actionTreeNode);
                        }
                    }
                }
            }
            Delete();
            SortSubNodes();
        }
Ejemplo n.º 12
0
        /// <summary>
        ///     Splits the selected action to several sub-actions
        /// </summary>
        public virtual void SplitHandler(object sender, EventArgs args)
        {
            Statement statement = new Parser().Statement(Item, Item.ExpressionText);
            VariableUpdateStatement variableUpdateStatement = statement as VariableUpdateStatement;

            if (variableUpdateStatement != null)
            {
                Expression       expression       = variableUpdateStatement.Expression;
                StructExpression structExpression = expression as StructExpression;
                if (structExpression != null)
                {
                    Dictionary <Designator, Expression> associations = structExpression.Associations;
                    foreach (KeyValuePair <Designator, Expression> value in associations)
                    {
                        Action action = (Action)acceptor.getFactory().createAction();
                        action.ExpressionText = structExpression.Structure + "." + value.Key + " <- " +
                                                value.Value;
                        ActionTreeNode actionTreeNode = new ActionTreeNode(action, true);

                        BaseTreeNode parent = Parent as BaseTreeNode;
                        if (parent != null)
                        {
                            RuleCondition ruleCondition = Item.Enclosing as RuleCondition;
                            if (ruleCondition != null)
                            {
                                ruleCondition.appendActions(action);
                            }
                            else
                            {
                                SubStep subStep = Item.Enclosing as SubStep;
                                if (subStep != null)
                                {
                                    subStep.appendActions(action);
                                }
                            }
                            parent.Nodes.Add(actionTreeNode);
                        }
                    }
                }
            }
            Delete();
        }
Ejemplo n.º 13
0
            /// <summary>
            ///     Executes the action
            /// </summary>
            /// <param name="e"></param>
            protected override void OnClick(EventArgs e)
            {
                SubStep newSubStep = (SubStep)acceptor.getFactory().createSubStep();

                if (Step != null)
                {
                    newSubStep.Enclosing = Step;

                    if (SubStep != null)
                    {
                        newSubStep.Name = "NewSubStep";
                        int index = Step.SubSteps.IndexOf(SubStep);
                        Step.SubSteps.Insert(index + 1, newSubStep);
                    }
                    else
                    {
                        newSubStep.Name = "SubStep " + (Step.SubSteps.Count + 1);
                        Step.SubSteps.Add(newSubStep);
                    }
                }
                else if (TimeLineControl.Translation != null)
                {
                    newSubStep.Enclosing = TimeLineControl.Translation;

                    if (SubStep != null)
                    {
                        newSubStep.Name = "NewSubStep";
                        int index = TimeLineControl.Translation.SubSteps.IndexOf(SubStep);
                        TimeLineControl.Translation.SubSteps.Insert(index + 1, newSubStep);
                    }
                    else
                    {
                        newSubStep.Name = "SubStep " + (TimeLineControl.Translation.SubSteps.Count + 1);
                        TimeLineControl.Translation.SubSteps.Add(newSubStep);
                    }
                }
                base.OnClick(e);
            }
        private void initializeInputForLambda(TestCase aTestCase, Workbook workbook)
        {
            Step aStep = new Step();
            aStep.Name = "Step1 - Initialize input";
            aTestCase.AddModelElement(aStep);

            /*********************************** TRAIN DATA ***********************************/
            SubStep aSubStep = new SubStep();
            aSubStep.Name = "SubStep1 - Train data";
            aSubStep.setSkipEngine(true);
            aStep.AddModelElement(aSubStep);

            /* This is a lambda train => no brake models defined in the train data */
            addAction(aSubStep, String.Format("Kernel.TrainData.TrainData.Value.EBModels <- EMPTY"));
            addAction(aSubStep, String.Format("Kernel.TrainData.TrainData.Value.SBModels <- EMPTY"));
            addAction(aSubStep, String.Format("Kernel.TrainData.TrainData.Value.NormalServiceBrakeModels <- EMPTY"));
            addAction(aSubStep, String.Format("Kernel.TrainData.TrainData.Value.T_brake_emergency <- EMPTY"));
            addAction(aSubStep, String.Format("Kernel.TrainData.TrainData.Value.T_brake_service <- EMPTY"));

            /* Initializing the maximum train speed */
            /* This value must be in the range {0km/h; 200km/h}, otherwise the conversion model will not be applicable */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture, "Kernel.TrainData.TrainData.Value.MaximumSpeed <- {0:0.0}",
                    180.0));

            Worksheet aWorksheet = workbook.Sheets[1] as Worksheet;
            bool isPassengerTrain;
            importCommonTrainDataInformation(aSubStep, aWorksheet, out isPassengerTrain);

            /*********************************** TRACK DATA ***********************************/
            aSubStep = new SubStep();
            aSubStep.Name = "SubStep2 - Track data";
            aSubStep.setSkipEngine(true);
            aStep.AddModelElement(aSubStep);

            /* This is a lambda train => track condition brake inhibition profile is not applicable */
            addAction(aSubStep, String.Format("Kernel.TrackDescription.TrackConditions.General.TCProfile <- []"));

            aWorksheet = workbook.Sheets[2] as Worksheet;
            importCommonTrackDataInformation(aSubStep, aWorksheet);

            /*********************************** NATIONAL VALUES ***********************************/
            aSubStep = new SubStep();
            aSubStep.Name = "SubStep3 - National values";
            aSubStep.setSkipEngine(true);
            aStep.AddModelElement(aSubStep);

            aWorksheet = workbook.Sheets[3] as Worksheet;
            importCommonNationalValuesInformation(aSubStep, aWorksheet);

            /*********************************** FIXED VALUES ***********************************/
            aSubStep = new SubStep();
            aSubStep.Name = "SubStep4 - Fixed values";
            aSubStep.setSkipEngine(true);
            aStep.AddModelElement(aSubStep);

            aWorksheet = workbook.Sheets[4] as Worksheet;
            importCommonFixedValuesInformation(aSubStep, aWorksheet);

            /****************************** BRAKE PARAMETERS (lambda) ******************************/
            aSubStep = new SubStep();
            aSubStep.Name = "SubStep5 - Brake parameters";
            aSubStep.setSkipEngine(true);
            aStep.AddModelElement(aSubStep);

            aWorksheet = workbook.Sheets[5] as Worksheet;

            Range aRange = aWorksheet.UsedRange;
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.TrainData.TrainData.Value.BrakePercentage <- {0:0.0#}",
                    (double)(aRange.Cells[3, 6] as Range).Value2));

            /*************************** INTERGRATED CORRECTION FACTORS ***************************/
            aSubStep = new SubStep();
            aSubStep.Name = "SubStep6 - Integrated correction factors";
            aSubStep.setSkipEngine(true);
            aStep.AddModelElement(aSubStep);

            aWorksheet = workbook.Sheets[8] as Worksheet;

            aRange = aWorksheet.UsedRange;

            /* Initializing Kr_int */
            int index = 0;
            double doubleValue = -1;
            double temp;
            for (int i = 0; i < 9; i++)
            {
                temp = (double)(aRange.Cells[i + 32, 2] as Range).Value2;
                if (doubleValue != temp)
                {
                    double location = (double)(aRange.Cells[i + 32, 1] as Range).Value2;
                    doubleValue = temp;
                    addAction(aSubStep,
                        String.Format(CultureInfo.InvariantCulture,
                            "Kernel.NationalValues.ApplicableNationalValues.Value.IntegratedCorrectionFactorKrInt.Val{0} <- Kernel.NationalValues.KrIntValueStruct\n{{\n    LengthStep => {1:0.0},\n    Value => {2:0.0####}\n}}",
                            index, location, doubleValue));
                    index++;
                }
            }
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.NationalValues.ApplicableNationalValues.Value.IntegratedCorrectionFactorKrInt.Val{0} <- Kernel.NationalValues.KrIntValueStruct\n{{\n    LengthStep => Default.BaseTypes.Length.Infinity,\n    Value => {1:0.0####}\n}}",
                    index, doubleValue));

            /* Case of a passenger train */
            if (isPassengerTrain)
            {
                /* Initializing Kv_int */
                double a = -1;
                double b = -1;
                double tempA, tempB;
                index = 0;
                for (int i = 0; i <= 9; i++)
                {
                    tempA = (double)(aRange.Cells[i + 5, 5] as Range).Value2;
                    tempB = (double)(aRange.Cells[i + 31, 5] as Range).Value2;
                    if (a != tempA || b != tempB)
                    {
                        double speed = (double)(aRange.Cells[i + 5, 4] as Range).Value2;
                        a = tempA;
                        b = tempB;
                        addAction(aSubStep,
                            String.Format(CultureInfo.InvariantCulture,
                                "Kernel.NationalValues.ApplicableNationalValues.Value.IntegratedCorrectionFactorKvInt_PassengerTrain.Val{0} <- Kernel.NationalValues.KvIntValue_PassengerTrainStruct\n{{\n    SpeedStep => {1:0.0},\n    ValueA => {2:0.0#},\n    ValueB => {3:0.0#}\n}}",
                                index, speed, a, b));
                        index++;
                    }
                }
                addAction(aSubStep,
                    String.Format(CultureInfo.InvariantCulture,
                        "Kernel.NationalValues.ApplicableNationalValues.Value.IntegratedCorrectionFactorKvInt_PassengerTrain.Val{0} <- Kernel.NationalValues.KvIntValue_PassengerTrainStruct\n{{\n    SpeedStep => Default.BaseTypes.Speed.Infinity,\n    ValueA => {1:0.0#},\n    ValueB => {2:0.0#}\n}}",
                        index, a, b));
            }
            else /* Case of freight trains */
            {
                /* Initializing Kv_int */
                doubleValue = -1;
                index = 0;
                for (int i = 0; i <= 9; i++)
                {
                    temp = (double)(aRange.Cells[i + 5, 2] as Range).Value2;
                    if (doubleValue != temp)
                    {
                        double speed = (double)(aRange.Cells[i + 5, 1] as Range).Value2;
                        doubleValue = temp;
                        addAction(aSubStep,
                            String.Format(CultureInfo.InvariantCulture,
                                "Kernel.NationalValues.ApplicableNationalValues.Value.IntegratedCorrectionFactorKvInt_FreightTrain.Val{0} <- Kernel.NationalValues.KvIntValue_FreightTrainStruct\n{{\n    SpeedStep => {1:0.0},\n    Value => {2:0.0#}\n}}",
                                index, speed, doubleValue));
                        index++;
                    }
                }
                addAction(aSubStep,
                    String.Format(CultureInfo.InvariantCulture,
                        "Kernel.NationalValues.ApplicableNationalValues.Value.IntegratedCorrectionFactorKvInt_FreightTrain.Val{0} <- Kernel.NationalValues.KvIntValue_FreightTrainStruct\n{{\n    SpeedStep => Default.BaseTypes.Speed.Infinity,\n    Value => {1:0.0#}\n}}",
                        index, doubleValue));
            }

            /* Initializing A_NVP12 */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.NationalValues.ApplicableNationalValues.Value.IntegratedCorrectionFactorKvInt_PassengerTrain.A_NVP12 <- {0:0.0}",
                    (double)(aRange.Cells[44, 4] as Range).Value2));

            /* Initializing A_NVP23 */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.NationalValues.ApplicableNationalValues.Value.IntegratedCorrectionFactorKvInt_PassengerTrain.A_NVP23 <- {0:0.0}",
                    (double)(aRange.Cells[44, 6] as Range).Value2));

            /* Initializing Kt_int */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.NationalValues.ApplicableNationalValues.Value.IntegratedCorrectionFactorForBrakeBuildUpTime <- {0:0.0}",
                    (double)(aRange.Cells[47, 4] as Range).Value2));
        }
Ejemplo n.º 15
0
 /// <summary>
 ///     Adds a step after this one
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 public void AddSubStepHandler(object sender, EventArgs args)
 {
     Item.appendSubSteps(SubStep.CreateDefault(Item.SubSteps));
 }
        private void importGammaBrakeParameters(SubStep aSubStep, Worksheet aWorksheet,
            int brakesCombinationColumnNumber, int dataColumnNumber, bool initializeBrakes)
        {
            Range aRange = aWorksheet.UsedRange;

            string ebBrakesCombination = "";
            string sbBrakesCombination = ""; // magnetic shoe brake is not taken in account for SB
            object obj = (aRange.Cells[7, brakesCombinationColumnNumber] as Range).Value2;
            if (obj != null)
            {
                if (initializeBrakes)
                {
                    addAction(aSubStep, String.Format("TIU.SpecialBrakeStatus.EddyCurrentBrakeIsActive <- True"));
                    addAction(aSubStep,
                        String.Format(
                            "Kernel.TrainData.TrainData.Value.EddyCurrentBrakeInterface <- Kernel.TrainData.BrakingParameters.BrakeInterfaceStatus.Both\n"));
                }
                ebBrakesCombination += obj == null ? "" : "EddyCurrent";
                sbBrakesCombination += obj == null ? "" : "EddyCurrent";
            }
            obj = (aRange.Cells[8, brakesCombinationColumnNumber] as Range).Value2;
            if (obj != null)
            {
                if (initializeBrakes)
                {
                    addAction(aSubStep, String.Format("TIU.SpecialBrakeStatus.MagneticShoeBrakeIsActive <- True"));
                    addAction(aSubStep,
                        String.Format(
                            "Kernel.TrainData.TrainData.Value.MagneticShoeBrakeInterface <- Kernel.TrainData.BrakingParameters.BrakeInterfaceStatus.EB\n"));
                }
                ebBrakesCombination += ebBrakesCombination == "" ? "Magnetic" : "_Magnetic";
            }
            obj = (aRange.Cells[6, brakesCombinationColumnNumber] as Range).Value2;
            if (obj != null)
            {
                if (initializeBrakes)
                {
                    addAction(aSubStep, String.Format("TIU.SpecialBrakeStatus.RegenerativeBrakeIsActive <- True"));
                    addAction(aSubStep,
                        String.Format(
                            "Kernel.TrainData.TrainData.Value.RegenerativeBrakeInterface <- Kernel.TrainData.BrakingParameters.BrakeInterfaceStatus.Both\n"));
                }
                ebBrakesCombination += ebBrakesCombination == "" ? "Regenerative" : "_Regenerative";
                sbBrakesCombination += sbBrakesCombination == "" ? "Regenerative" : "_Regenerative";
            }

            ebBrakesCombination = string.IsNullOrEmpty(ebBrakesCombination) ? "No_Special_Brakes" : ebBrakesCombination;
            sbBrakesCombination = string.IsNullOrEmpty(sbBrakesCombination) ? "No_Special_Brakes" : sbBrakesCombination;

            /* Initializing EB deceleration */
            double doubleValue = -1;
            double temp;
            int index = 0;
            for (int i = 0; i < 14; i += 2)
            {
                temp = (double)(aRange.Cells[i + 7, dataColumnNumber + 2] as Range).Value2;
                if (doubleValue != temp)
                {
                    double speed = (double)(aRange.Cells[i + 7, dataColumnNumber] as Range).Value2;
                    doubleValue = temp;
                    addAction(aSubStep,
                        String.Format(CultureInfo.InvariantCulture,
                            "Kernel.TrainData.TrainData.Value.EBModels.ModelSet.{0}.Val{1} <- Kernel.TrainData.BrakingParameters.BrakingModelValue\n{{\n    SpeedStep => {2:0.0###},\n    Acceleration => {3:0.0###}\n}}",
                            ebBrakesCombination, index, speed, doubleValue));
                    index++;
                }
            }
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.TrainData.TrainData.Value.EBModels.ModelSet.{0}.Val{1} <- Kernel.TrainData.BrakingParameters.BrakingModelValue\n{{\n    SpeedStep => Default.BaseTypes.Speed.Infinity,\n    Acceleration => {2:0.0###}\n}}",
                    ebBrakesCombination, index, doubleValue));

            /* Initializing EB confidence level */
            /// TODO: how can I recover the value of the confidence level? (should be at the line 21....)

            /* Initializing Kdry_rst */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.TrainData.TrainData.Value.EBModels.Kdry_rstValuesSet.{0}.{1} <- Kernel.TrainData.BrakingParameters.CorrectFactorValue\n{{\n    CF0 => {2:0.0###},\n    CF1 => {3:0.0###},\n    CF2 => {4:0.0###},\n    CF3 => {5:0.0###},\n    CF4 => {6:0.0###},\n    CF5 => {7:0.0###},\n    CF6 => {8:0.0###}\n}}",
                    ebBrakesCombination,
                    "Cl__99_9999999", // this value should be provided by the previous step
                    (double)(aRange.Cells[23, dataColumnNumber + 2] as Range).Value2,
                    (double)(aRange.Cells[25, dataColumnNumber + 2] as Range).Value2,
                    (double)(aRange.Cells[27, dataColumnNumber + 2] as Range).Value2,
                    (double)(aRange.Cells[29, dataColumnNumber + 2] as Range).Value2,
                    (double)(aRange.Cells[31, dataColumnNumber + 2] as Range).Value2,
                    (double)(aRange.Cells[33, dataColumnNumber + 2] as Range).Value2,
                    (double)(aRange.Cells[35, dataColumnNumber + 2] as Range).Value2));

            /* Initializing Kwet_rst */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.TrainData.TrainData.Value.EBModels.Kwet_rstValuesSet.{0} <- Kernel.TrainData.BrakingParameters.CorrectFactorValue\n{{\n    CF0 => {1:0.0###},\n    CF1 => {2:0.0###},\n    CF2 => {3:0.0###},\n    CF3 => {4:0.0###},\n    CF4 => {5:0.0###},\n    CF5 => {6:0.0###},\n    CF6 => {7:0.0###}\n}}",
                    ebBrakesCombination,
                    (double)(aRange.Cells[38, dataColumnNumber + 2] as Range).Value2,
                    (double)(aRange.Cells[40, dataColumnNumber + 2] as Range).Value2,
                    (double)(aRange.Cells[42, dataColumnNumber + 2] as Range).Value2,
                    (double)(aRange.Cells[44, dataColumnNumber + 2] as Range).Value2,
                    (double)(aRange.Cells[46, dataColumnNumber + 2] as Range).Value2,
                    (double)(aRange.Cells[48, dataColumnNumber + 2] as Range).Value2,
                    (double)(aRange.Cells[50, dataColumnNumber + 2] as Range).Value2));

            /* Initializing T_brake_emergency */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.TrainData.TrainData.Value.T_brake_emergency.{0} <- {1:0.0###}",
                    ebBrakesCombination,
                    (double)(aRange.Cells[52, dataColumnNumber + 3] as Range).Value2));

            /* Initializing SB deceleration */
            doubleValue = -1;
            index = 0;
            for (int i = 0; i < 14; i += 2)
            {
                temp = (double)(aRange.Cells[i + 54, dataColumnNumber + 2] as Range).Value2;
                if (doubleValue != temp)
                {
                    double speed = (double)(aRange.Cells[i + 7, dataColumnNumber] as Range).Value2;
                    doubleValue = temp;
                    addAction(aSubStep,
                        String.Format(CultureInfo.InvariantCulture,
                            "Kernel.TrainData.TrainData.Value.SBModels.ModelSet.{0}.Val{1} <- Kernel.TrainData.BrakingParameters.BrakingModelValue\n{{\n    SpeedStep => {2:0.0###},\n    Acceleration => {3:0.0###}\n}}",
                            sbBrakesCombination, index, speed, doubleValue));
                    index++;
                }
            }
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.TrainData.TrainData.Value.SBModels.ModelSet.{0}.Val{1} <- Kernel.TrainData.BrakingParameters.BrakingModelValue\n{{\n    SpeedStep => Default.BaseTypes.Speed.Infinity,\n    Acceleration => {2:0.0###}\n}}",
                    sbBrakesCombination, index, doubleValue));

            /* Initializing T_brake_service */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.TrainData.TrainData.Value.T_brake_service.{0} <- {1:0.0###}",
                    sbBrakesCombination,
                    (double)(aRange.Cells[68, dataColumnNumber + 3] as Range).Value2));
        }
        private void initializeInputForGamma(TestCase aTestCase, Workbook workbook)
        {
            Step aStep = new Step();
            aStep.Name = "Step1 - Initialize input";
            aTestCase.AddModelElement(aStep);

            /*********************************** TRAIN DATA ***********************************/
            SubStep aSubStep = new SubStep();
            aSubStep.Name = "SubStep1 - Train data";
            aSubStep.setSkipEngine(true);
            aStep.AddModelElement(aSubStep);

            /* This is a gamma train => we have to initialize brake models in the train data */
            addAction(aSubStep,
                String.Format(
                    "Kernel.TrainData.TrainData.Value.EBModels <- Kernel.TrainData.BrakingParameters.EBModelSet\n{{\n    ModelSet => Kernel.TrainData.BrakingParameters.BrakingModelSet{{}},\n    Kdry_rstValuesSet => Kernel.TrainData.BrakingParameters.Kdry_rstValuesSet{{}},\n    Kwet_rstValuesSet => Kernel.TrainData.BrakingParameters.Kwet_rstValuesSet{{}}\n}}"));
            addAction(aSubStep,
                String.Format(
                    "Kernel.TrainData.TrainData.Value.SBModels <- Kernel.TrainData.BrakingParameters.SBModelSet{{}}"));

            /* Initializing the maximum train speed */
            /* I didn't find this value in ERA sheets, but I observed than their P function can exceed 160 km/h => the maximum speed should be greater than 160 km/h */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture, "Kernel.TrainData.TrainData.Value.MaximumSpeed <- {0:0.0}",
                    180.0));

            Worksheet aWorksheet = workbook.Sheets[1] as Worksheet;
            bool isPassengerTrain;
            importCommonTrainDataInformation(aSubStep, aWorksheet, out isPassengerTrain);

            /*********************************** TRACK DATA ***********************************/
            aSubStep = new SubStep();
            aSubStep.Name = "SubStep2 - Track data";
            aSubStep.setSkipEngine(true);
            aStep.AddModelElement(aSubStep);

            aWorksheet = workbook.Sheets[2] as Worksheet;
            importCommonTrackDataInformation(aSubStep, aWorksheet);

            /*********************************** NATIONAL VALUES ***********************************/
            aSubStep = new SubStep();
            aSubStep.Name = "SubStep3 - National values";
            aSubStep.setSkipEngine(true);
            aStep.AddModelElement(aSubStep);

            aWorksheet = workbook.Sheets[3] as Worksheet;
            importCommonNationalValuesInformation(aSubStep, aWorksheet);

            /*********************************** FIXED VALUES ***********************************/
            aSubStep = new SubStep();
            aSubStep.Name = "SubStep4 - Fixed values";
            aSubStep.setSkipEngine(true);
            aStep.AddModelElement(aSubStep);

            aWorksheet = workbook.Sheets[4] as Worksheet;
            importCommonFixedValuesInformation(aSubStep, aWorksheet);

            /****************************** BRAKE PARAMETERS (gamma) ******************************/
            aSubStep = new SubStep();
            aSubStep.Name = "SubStep5 - Brake parameters";
            aSubStep.setSkipEngine(true);
            aStep.AddModelElement(aSubStep);

            aWorksheet = workbook.Sheets[6] as Worksheet;

            importGammaBrakeParameters(aSubStep, aWorksheet, 2, 8, true); // first combination
            importGammaBrakeParameters(aSubStep, aWorksheet, 3, 20, false); // second combination

            /**************************** Initialize time intervals ******************************/
            aSubStep = new SubStep();
            aSubStep.Name = "Initialize time intervals";
            aSubStep.setSkipEngine(true);
            aStep.AddModelElement(aSubStep);

            addAction(aSubStep, "Kernel.SpeedAndDistanceMonitoring.TargetSpeedMonitoring.InitializeTimeIntervals()");

            /**************************** CORRECTION FACTOR KDRY_RST ****************************/
            aSubStep = new SubStep();
            aSubStep.Name = "SubStep6 - Correction factor kdry_rst";
            aSubStep.setSkipEngine(true);
            aStep.AddModelElement(aSubStep);

            aWorksheet = workbook.Sheets[7] as Worksheet;
        }
        private void importCommonTrackDataInformation(SubStep aSubStep, Worksheet aWorksheet)
        {
            Range aRange = aWorksheet.UsedRange;

            /* Initializing the target type */
            /// TODO

            /* Initializing the train position location accuracy */
            double LocationAccuracy = (double)(aRange.Cells[2, 7] as Range).Value2;
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Odometry.Accuracy <- Odometry.OdometerAccuracy{{\n    D_ura => {0:0.0},\n    D_ora => 0.0,\n    V_ura => 0.0,\n    V_ora => 0.0\n}}",
                    LocationAccuracy));

            /* Initializing the MA: target speed, release speed, distance origin/target */
            TargetSpeed = (double)(aRange.Cells[2, 2] as Range).Value2;
            double releaseSpeed = (double)(aRange.Cells[2, 5] as Range).Value2;
            double MAdistance = (double)(aRange.Cells[3, 2] as Range).Value2 + 1000.0;
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.MA.MA <- Kernel.MA.MAStruct\n{{\n    TargetSpeed => {0:0.0},\n    Sections => [],\n    EndSection => Kernel.MA.EndSectionStruct\n    {{\n        EndSectionTimeOut => EMPTY,\n        Length => {1:0.0},\n        DangerPoint => Kernel.MA.DangerPointStruct\n        {{\n            Distance => 0.0,\n            ReleaseSpeed => {2:0.0}\n        }},\n        Overlap => EMPTY\n    }},\n    TargetSpeedTimeOut => 0.0\n}}",
                    TargetSpeed, MAdistance, releaseSpeed));

            /* Initializing the Open Cab A of Desk 1 */
            addAction(aSubStep, String.Format(CultureInfo.InvariantCulture, "DMI.DMI1.Cab <- DMI.CabEnum.CabA"));
            addAction(aSubStep, String.Format(CultureInfo.InvariantCulture, "TIU.CabA.Desk1IsActive <- Boolean.True"));
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture, "TIU.CabA.IsFittedWithSingleDesk <- Boolean.True"));

            /* Initializing the initial speed */
            double MAspeedRestriction = (double)(aRange.Cells[4, 2] as Range).Value2;
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture, "Kernel.MA.SignallingRelatedSpeedRestriction <- Kernel.MA.SignallingRelatedSRStruct{{\n    Value => {0:0.0},\n    End => {1:0.0}\n}}",
                   MAspeedRestriction, MAdistance));

            /* Initializing the reduced adhesion interval */
            /// TODO: need to find how these values are activated and deactivated
            double startLocation = (double)(aRange.Cells[9, 2] as Range).Value2;
            double endLocation = (double)(aRange.Cells[10, 2] as Range).Value2;
            //addAction(aSubStep, String.Format(CultureInfo.InvariantCulture, "INSERT\n    Kernel.TrackDescription.TrackConditions.AdhesionFactor\n    {{\n        Distance => {0:0.0},\n        Length => {1:0.0},\n        Value => Messages.M_ADHESION.Slippery_rail\n    }}\nIN\n    Kernel.TrackDescription.TrackConditions.AdhFactors", startLocation, endLocation - startLocation));

            /* Initializing the gradient profile */
            double gradientValue = (double)(aRange.Cells[14, 3] as Range).Value2;
            double gradientDistance = (double)(aRange.Cells[14, 1] as Range).Value2;
            ;
            for (int i = 15; i <= 33; i++)
            {
                double temp = (double)(aRange.Cells[i, 3] as Range).Value2;
                if (temp != gradientValue || i == 33)
                {
                    addAction(aSubStep,
                        String.Format(CultureInfo.InvariantCulture,
                            "INSERT\n    Kernel.TrackDescription.Gradient.GradientStruct\n    {{\n        Location => {0:0.0},\n        Gradient => {1:0.0}\n    }}\nIN\n    Kernel.TrackDescription.Gradient.Gradients",
                            gradientDistance, gradientValue));
                    gradientDistance = (double)(aRange.Cells[i, 1] as Range).Value2;
                    gradientValue = temp;
                }
            }

            /* Initializing the International Static Speed Profile */
            addAction(aSubStep,
                "Kernel.TrackDescription.StaticSpeedProfile.SSP <- [Kernel.TrackDescription.StaticSpeedProfile.StaticSpeedRestrictionStruct{\n" +
                "    Location => 0.0,\n" +
                "    BasicSpeed => Default.BaseTypes.Speed.MaxSpeed,\n" +
                "    TrainLengthDelay => Messages.Q_FRONT.No_train_length_delay_on_validity_end_point_of_profile_element,\n" +
                "    Categories => []\n" +
                "}]");

            /* Initializing the distance EOA/SvL */
            /// TODO: => should be a part of an MA?
            //doubleValue = (double)(aRange.Cells[1, 5] as Range).Value2;

            /* Initializing the type of the release speed (fixed or calculated on-board) */
            /// TODO: verify requirements

            /* Initializing the relocation balises */
            string readStringValue = (string)(aRange.Cells[15, 4] as Range).Value2;
        }
        private void verifyInputForLambda(TestCase aTestCase, Workbook workbook)
        {
            Step aStep = new Step();
            aStep.Name = "Step1 - Verify input";
            aTestCase.AddModelElement(aStep);

            /*********************************** TRAIN DATA ***********************************/
            SubStep aSubStep = new SubStep();
            aSubStep.Name = "SubStep1 - Train data";
            aStep.AddModelElement(aSubStep);

            addAction(aSubStep, "Kernel.TrainData.BrakingParameters.ConversionModel.Initialize()");
            addAction(aSubStep, "Kernel.SpeedAndDistanceMonitoring.ReleaseSpeedMonitoring.UpdateReleaseSpeed()");
            addExpectation(aSubStep,
                "Kernel.TrainData.BrakingParameters.ConversionModel.ConversionModelIsUsed() == True");

            /********************************* BRAKE PARAMETERS *********************************/
            aSubStep = new SubStep();
            aSubStep.Name = "SubStep2 - Brake parameters";
            aStep.AddModelElement(aSubStep);

            Worksheet aWorksheet = workbook.Sheets[5] as Worksheet;

            Range aRange = aWorksheet.UsedRange;

            addAction(aSubStep, "Kernel.SpeedAndDistanceMonitoring.TargetSpeedMonitoring.InitializeTimeIntervals()");

            /* Verifying kto */
            addExpectation(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.TrainData.BrakingParameters.ConversionModel.kto() == {0:0.0#}",
                    (double)(aRange.Cells[7, 6] as Range).Value2));

            if (TargetSpeed == 0)
            /* In this case, the values of T_brake_emergency_cmt and T_brake_service_cmt do not make sense (3.13.3.4.4.1) */
            {
                /* Verifying T_brake_emergency_cm0 */
                addExpectation(aSubStep,
                    String.Format(CultureInfo.InvariantCulture,
                        "Kernel.TrainData.BrakingParameters.ConversionModel.T_brake_emergency_cm0 == {0:0.0#}",
                        (double)(aRange.Cells[8, 6] as Range).Value2));

                /* Verifying T_brake_service_cm0 */
                addExpectation(aSubStep,
                    String.Format(CultureInfo.InvariantCulture,
                        "Kernel.TrainData.BrakingParameters.ConversionModel.T_brake_service_cm0 == {0:0.0#}",
                        (double)(aRange.Cells[10, 6] as Range).Value2));
            }
            else
            /* In this case, the values of T_brake_emergency_cm0 and T_brake_service_cm0 do not make sense (3.13.3.4.4.1) */
            {
                /* Verifying T_brake_emergency_cmt */
                addExpectation(aSubStep,
                    String.Format(CultureInfo.InvariantCulture,
                        "Kernel.TrainData.BrakingParameters.ConversionModel.T_brake_emergency_cmt == {0:0.0#}",
                        (double)(aRange.Cells[9, 6] as Range).Value2));

                /* Verifying T_brake_service_cmt */
                addExpectation(aSubStep,
                    String.Format(CultureInfo.InvariantCulture,
                        "Kernel.TrainData.BrakingParameters.ConversionModel.T_brake_service_cmt == {0:0.0#}",
                        (double)(aRange.Cells[11, 6] as Range).Value2));
            }

            /* Verifying T_be */
            addExpectation(aSubStep,
                String.Format(CultureInfo.InvariantCulture, "Kernel.TrainData.BrakingParameters.T_be() == {0:0.0#}",
                    (double)(aRange.Cells[12, 6] as Range).Value2));

            /* Verifying T_bs */
            addExpectation(aSubStep,
                String.Format(CultureInfo.InvariantCulture, "Kernel.TrainData.BrakingParameters.T_bs() == {0:0.0#}",
                    (double)(aRange.Cells[13, 6] as Range).Value2));

            /********************* BRAKE PARAMETERS (A_brake_emergency) *********************/
            aSubStep = new SubStep();
            aSubStep.Name = "SubStep3 - Brake parameters (A_brake_emergency)";
            aStep.AddModelElement(aSubStep);

            /* Verifying A_brake_emergency */
            double doubleValue = -1;
            double temp;
            for (int i = 16; i <= 27; i++)
            {
                temp = (double)(aRange.Cells[i, 10] as Range).Value2;
                if (doubleValue != temp)
                {
                    if (doubleValue != -1)
                    {
                        addExpectation(aSubStep,
                            String.Format(CultureInfo.InvariantCulture,
                                "ERA_BrakingCurvesVerification.Compare\n(\n    Val1 => Kernel.TrainData.BrakingParameters.ConversionModel.A_brake_emergency(V => {0:0.0########}),\n    Val2 => {1:0.0########}\n)",
                                (double)(aRange.Cells[i, 9] as Range).Value2 - 0.000000001, doubleValue));
                    }
                    doubleValue = temp;
                    double speedValue = (double)(aRange.Cells[i, 9] as Range).Value2;
                    if (Math.Abs(speedValue - Math.Round(speedValue, 8)) > 0)
                    {
                        speedValue += 0.000000001;
                    }
                    addExpectation(aSubStep,
                        String.Format(CultureInfo.InvariantCulture,
                            "ERA_BrakingCurvesVerification.Compare\n(\n    Val1 => Kernel.TrainData.BrakingParameters.ConversionModel.A_brake_emergency(V => {0:0.0########}),\n    Val2 => {1:0.0########}\n)",
                            speedValue, doubleValue));
                }
            }

            /* Verifying V_lim EBI */
            addExpectation(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "ERA_BrakingCurvesVerification.Compare\n(\n    Val1 => Kernel.TrainData.BrakingParameters.ConversionModel.A_brake_emergency.Val1.SpeedStep,\n    Val2 => {0:0.0########}\n)",
                    (double)(aRange.Cells[17, 9] as Range).Value2));

            /*********************** BRAKE PARAMETERS (A_brake_service) ***********************/
            aSubStep = new SubStep();
            aSubStep.Name = "SubStep4 - Brake parameters (A_brake_service)";
            aStep.AddModelElement(aSubStep);

            /* Verifying A_brake_service */
            doubleValue = -1;
            for (int i = 16; i <= 27; i++)
            {
                temp = (double)(aRange.Cells[i, 14] as Range).Value2;
                if (doubleValue != temp)
                {
                    if (doubleValue != -1)
                    {
                        addExpectation(aSubStep,
                            String.Format(CultureInfo.InvariantCulture,
                                "ERA_BrakingCurvesVerification.Compare\n(\n    Val1 => Kernel.TrainData.BrakingParameters.ConversionModel.A_brake_service(V => {0:0.0########}),\n    Val2 => {1:0.0########}\n)",
                                (double)(aRange.Cells[i, 13] as Range).Value2 - 0.000000001, doubleValue));
                    }
                    doubleValue = temp;
                    double speedValue = (double)(aRange.Cells[i, 13] as Range).Value2;
                    if (Math.Abs(speedValue - Math.Round(speedValue, 8)) > 0)
                    {
                        speedValue += 0.000000001;
                    }
                    addExpectation(aSubStep,
                        String.Format(CultureInfo.InvariantCulture,
                            "ERA_BrakingCurvesVerification.Compare\n(\n    Val1 => Kernel.TrainData.BrakingParameters.ConversionModel.A_brake_service(V => {0:0.0########}),\n    Val2 => {1:0.0########}\n)",
                            speedValue, doubleValue));
                }
            }

            /* Verifying V_lim BS */
            addExpectation(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "ERA_BrakingCurvesVerification.Compare\n(\n    Val1 => Kernel.TrainData.BrakingParameters.ConversionModel.A_brake_service.Val1.SpeedStep,\n    Val2 => {0:0.0########}\n)",
                    (double)(aRange.Cells[17, 13] as Range).Value2));
        }
        private void importCommonFixedValuesInformation(SubStep aSubStep, Worksheet aWorksheet)
        {
            Range aRange = aWorksheet.UsedRange;

            /* Initializing dV_ebi_min */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.CeilingSpeedMonitoring.dV_ebi_min <- {0:0.0#}",
                    (double)(aRange.Cells[1, 2] as Range).Value2));

            /* Initializing dV_ebi_max */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.CeilingSpeedMonitoring.dV_ebi_max <- {0:0.0#}",
                    (double)(aRange.Cells[2, 2] as Range).Value2));

            /* Initializing V_ebi_min */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.CeilingSpeedMonitoring.V_ebi_min <- {0:0.0#}",
                    (double)(aRange.Cells[3, 2] as Range).Value2));

            /* Initializing V_ebi_max */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.CeilingSpeedMonitoring.V_ebi_max <- {0:0.0#}",
                    (double)(aRange.Cells[4, 2] as Range).Value2));

            /* Initializing dV_sbi_min */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.CeilingSpeedMonitoring.dV_sbi_min <- {0:0.0#}",
                    (double)(aRange.Cells[5, 2] as Range).Value2));

            /* Initializing dV_sbi_max */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.CeilingSpeedMonitoring.dV_sbi_max <- {0:0.0#}",
                    (double)(aRange.Cells[6, 2] as Range).Value2));

            /* Initializing V_sbi_min */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.CeilingSpeedMonitoring.V_sbi_min <- {0:0.0#}",
                    (double)(aRange.Cells[7, 2] as Range).Value2));

            /* Initializing V_sbi_max */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.CeilingSpeedMonitoring.V_sbi_max <- {0:0.0#}",
                    (double)(aRange.Cells[8, 2] as Range).Value2));

            /* Initializing dV_warning_min */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.CeilingSpeedMonitoring.dV_warning_min <- {0:0.0#}",
                    (double)(aRange.Cells[9, 2] as Range).Value2));

            /* Initializing dV_warning_max */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.CeilingSpeedMonitoring.dV_warning_max <- {0:0.0#}",
                    (double)(aRange.Cells[10, 2] as Range).Value2));

            /* Initializing V_warning_min */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.CeilingSpeedMonitoring.V_warning_min <- {0:0.0#}",
                    (double)(aRange.Cells[11, 2] as Range).Value2));

            /* Initializing V_warning_max */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.CeilingSpeedMonitoring.V_warning_max <- {0:0.0#}",
                    (double)(aRange.Cells[12, 2] as Range).Value2));

            /* Initializing T_warning */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.TargetSpeedMonitoring.T_warning <- {0:0.0#}",
                    (double)(aRange.Cells[13, 2] as Range).Value2));

            /* Initializing T_driver */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.TargetSpeedMonitoring.T_driver <- {0:0.0#}",
                    (double)(aRange.Cells[14, 2] as Range).Value2));

            /* Initializing T_preindication */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.SpeedAndDistanceMonitoring.PreIndicationLocation.T_preindication <- {0:0.0#}",
                    (double)(aRange.Cells[15, 2] as Range).Value2));

            /* Initializing M_rotating_max */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.TrackDescription.Gradient.M_rotating_max <- {0:0.0#}",
                    (double)(aRange.Cells[16, 2] as Range).Value2));

            /* Initializing M_rotating_min */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.TrackDescription.Gradient.M_rotating_min <- {0:0.0#}",
                    (double)(aRange.Cells[17, 2] as Range).Value2));
        }
        private void importCommonNationalValuesInformation(SubStep aSubStep, Worksheet aWorksheet)
        {
            /* The national values must be valid */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.NationalValues.ApplicableNationalValues.DataState <- Default.DataState.Valid"));

            Range aRange = aWorksheet.UsedRange;

            /* Initializing the usage of service brake in target speed monitoring */
            /// TODO: how to extract this value?!
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.NationalValues.ApplicableNationalValues.Value.UseServiceBrakeInTargetSpeedMonitoring <- Messages.Q_NVSBTSMPERM.Yes"));

            /* Initializing the permission to inhibit the compensation of the speed measurement inaccuracy */
            /// TODO: how to extract this value?!
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.NationalValues.ApplicableNationalValues.Value.PermToInhibitTheCompOfTheSpeedMeasurementInaccuracy <- Messages.Q_NVINHSMICPERM.Yes"));

            /* Initializing the maximum deceleration value under reduced adhesion conditions(1) */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.NationalValues.ApplicableNationalValues.Value.MaxDecelValueUnderReducedAdhesionCond1 <- {0:0.0#}",
                    (double)(aRange.Cells[3, 2] as Range).Value2));

            /* Initializing the maximum deceleration value under reduced adhesion conditions(2) */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.NationalValues.ApplicableNationalValues.Value.MaxDecelValueUnderReducedAdhesionCond2 <- {0:0.0#}",
                    (double)(aRange.Cells[4, 2] as Range).Value2));

            /* Initializing the maximum deceleration value under reduced adhesion conditions(3) */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.NationalValues.ApplicableNationalValues.Value.MaxDecelValueUnderReducedAdhesionCond3 <- {0:0.0#}",
                    (double)(aRange.Cells[5, 2] as Range).Value2));

            /* Initializing the weighting factor for available wheel/rail adhesion */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.NationalValues.ApplicableNationalValues.Value.WeightingFactorForAvailableWheelRailAdhesion <- {0:0.0#}",
                    (double)(aRange.Cells[6, 2] as Range).Value2));

            /* Initializing the confidence level for emergency brake safe deceleration on dry rails */
            double doubleValue = (double)(aRange.Cells[7, 2] as Range).Value2;
            String stringValue = doubleValue.ToString(CultureInfo.InvariantCulture);
            string result = "Messages.M_NVEBCL.Confidence_level___99_";
            for (int i = 0; i < stringValue.Length - 3; i++)
            {
                result += "9";
            }
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.NationalValues.ApplicableNationalValues.Value.ConfLevelForEmergBrakeSafeDecelerationOnDryRails <- {0}",
                    result));
        }
 /// <summary>
 ///     Positions a substep in the time line
 /// </summary>
 /// <param name="currentTime"></param>
 /// <param name="subStep"></param>
 /// <returns></returns>
 private void PositionSubStep(double currentTime, SubStep subStep)
 {
     SubStepActivated subStepActivated = new SubStepActivated(subStep, null) {Time = currentTime};
     PositionHandler.RegisterEvent(subStepActivated);
     foreach (Action action in subStep.Actions)
     {
         VariableUpdate variableUpdate = new VariableUpdate(action, action, null);
         PositionHandler.RegisterEvent(variableUpdate);
     }
     foreach (Expectation expectation in subStep.Expectations)
     {
         Expect expect = new Expect(expectation, null);
         PositionHandler.RegisterEvent(expect);
     }
 }
        private void intializeEFS(TestCase aTestCase, Workbook workbook)
        {
            Step aStep = new Step();
            aStep.Name = "Step1 - Setup";
            aTestCase.AddModelElement(aStep);

            SubStep aSubStep = new SubStep();
            aSubStep.Name = "SubStep1 - Setup";
            aSubStep.setSkipEngine(true);
            aStep.AddModelElement(aSubStep);

            TestAction powerOn = new TestAction();
            powerOn.ExpressionText = "Kernel.PowerOn <- True";
            aSubStep.AddModelElement(powerOn);

            TestAction modeInitialization = new TestAction();
            modeInitialization.ExpressionText = "Kernel.Mode <- Mode.FS";
            aSubStep.AddModelElement(modeInitialization);

            TestAction levelInitialization = new TestAction();
            levelInitialization.ExpressionText =
                "Kernel.Level <- Kernel.LevelData\n{\n    Value => LevelDataStruct { Value => Level.L1 },\n    DataState => DataState.Valid\n}";
            aSubStep.AddModelElement(levelInitialization);

            TestAction odometryInitialization = new TestAction();
            odometryInitialization.ExpressionText = "Odometry.NominalDistance <- 0.0";
            aSubStep.AddModelElement(odometryInitialization);

            TestAction LRBGInitialization = new TestAction();
            LRBGInitialization.ExpressionText = "BTM.LRBG <- BTM.BaliseGroupStruct{\n" +
                                                "    NID => 0,\n" +
                                                "    Orientation => Default.Orientation.Nominal,\n" +
                                                "    Position => BTM.Position{\n" +
                                                "        Position => 0.0,\n" +
                                                "        UnderReadingAmountOdo => 0.0,\n" +
                                                "        OverReadingAmountOdo => 0.0\n" +
                                                "    },\n" +
                                                "    Timestamp => Default.DateAndTime{\n" +
                                                "        Year => 2012,\n" +
                                                "        Month => 12,\n" +
                                                "        Day => 20,\n" +
                                                "        Hour => 20,\n" +
                                                "        Minute => 12,\n" +
                                                "        Second => 20,\n" +
                                                "        TTS => 600\n" +
                                                "    }\n" +
                                                "}";
            aSubStep.AddModelElement(LRBGInitialization);
        }
 private void addAction(SubStep aSubStep, string expression)
 {
     TestAction anAction = new TestAction();
     anAction.ExpressionText = expression;
     aSubStep.AddModelElement(anAction);
 }
        /// <summary>
        ///     Creates an expectation in a sub step
        /// </summary>
        /// <param name="enclosing"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        protected Expectation CreateExpectation(SubStep enclosing, string name)
        {
            Expectation retVal = (Expectation) Factory.createExpectation();
            enclosing.appendExpectations(retVal);
            retVal.ExpressionText = name;

            return retVal;
        }
        private void importCommonTrainDataInformation(SubStep aSubStep, Worksheet aWorksheet, out bool isPassengerTrain)
        {
            Range aRange = aWorksheet.UsedRange;

            /* Initializing the train position */
            string readStringValue = (string)(aRange.Cells[15, 4] as Range).Value2;
            string decodedStringValue = "";
            isPassengerTrain = false;
            if (readStringValue.Equals("Passenger in P"))
            {
                decodedStringValue = "PassengerTrainInP";
                isPassengerTrain = true;
            }
            else if (readStringValue.Equals("Freight in P"))
            {
                decodedStringValue = "FreightTrainInP";
            }
            else if (readStringValue.Equals("Freight in G"))
            {
                decodedStringValue = "FreightTrainInG";
            }
            else
            {
                Log.ErrorFormat("Invalid train position");
            }
            addAction(aSubStep,
                String.Format(
                    "Kernel.TrainData.TrainData.Value.BrakePosition <- Kernel.TrainData.BrakingParameters.BrakePositions.{0}",
                    decodedStringValue));

            /* Initializing the traction model */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture,
                    "Kernel.TrainData.TrainData.Value.TractionModel <- Kernel.TrainData.TractionModel\n{{\n    Coefficient => {0:0.0},\n    Constant    => {1:0.0}\n}}",
                    0, (double)(aRange.Cells[16, 4] as Range).Value2));

            /* Initializing the service brake interface */
            readStringValue = (string)(aRange.Cells[17, 4] as Range).Value2;
            decodedStringValue = "";
            if (readStringValue.Equals("Yes"))
            {
                decodedStringValue = "True";
            }
            else if (readStringValue.Equals("No"))
            {
                decodedStringValue = "False";
            }
            else
            {
                Log.ErrorFormat("Invalid value for service brake interface");
            }
            addAction(aSubStep,
                String.Format("Kernel.TrainData.TrainData.Value.SBCommandIsImplemented <- {0}", decodedStringValue));

            /* Initializing the traction cut off interface */
            readStringValue = (string)(aRange.Cells[18, 4] as Range).Value2;
            decodedStringValue = "";
            if (readStringValue.Equals("Yes"))
            {
                decodedStringValue = "True";
            }
            else if (readStringValue.Equals("No"))
            {
                decodedStringValue = "False";
            }
            else
            {
                Log.ErrorFormat("Invalid value for traction cut off interface");
            }
            addAction(aSubStep,
                String.Format("Kernel.TrainData.TrainData.Value.TractionCutOffInterfaceIsImplemented <- {0}",
                    decodedStringValue));

            /* Initializing special/additional brake independent form wheel/track adhesion */
            /// TODO: where is that value?
            addAction(aSubStep,
                String.Format("Kernel.TrainData.BrakingParameters.ContributionOfSpecialBrakeIsAllowed <- {0}", "True"));

            /* Initializing the speed inaccuracy */
            /// TODO: blocked. Why?

            /* Initializing the position inaccuracy */
            /// TODO
            /* addAction(aSubStep, String.Format(CultureInfo.InvariantCulture, "Kernel.NationalValues.ApplicableNationalValues.Value.DefaultLocationAccuracyOfABaliseGroup <- {0:0}", (double)(aRange.Cells[21, 4] as Range).Value2));*/

            /* Initializing the train length */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture, "Kernel.TrainData.TrainData.Value.TrainLength <- {0:0.0}",
                    (double)(aRange.Cells[22, 4] as Range).Value2));

            /* Initializing the nominal rotating mass */
            readStringValue = (aRange.Cells[23, 4] as Range).Value2.ToString();
            if (readStringValue.Equals("Not known"))
            {
                addAction(aSubStep,
                    String.Format("Kernel.TrainData.TrainData.Value.M_rotating_nom <- Default.Percentage.NA"));
            }
            else
            {
                addAction(aSubStep,
                    String.Format(CultureInfo.InvariantCulture,
                        "Kernel.TrainData.TrainData.Value.M_rotating_nom <- {0:0.0}",
                        (double)(aRange.Cells[23, 4] as Range).Value2));
            }

            /* Initializing the distance antenna - train front */
            addAction(aSubStep,
                String.Format(CultureInfo.InvariantCulture, "BTM.ActiveAntennaPosition <- {0:0.0}",
                    (double)(aRange.Cells[13, 4] as Range).Value2));
        }
 private void addExpectation(SubStep aSubStep, string expression)
 {
     Expectation anExpectation = new Expectation();
     anExpectation.ExpressionText = expression;
     anExpectation.Blocking = true;
     aSubStep.AddModelElement(anExpectation);
 }
        private void verifyInputForGamma(TestCase aTestCase, Workbook workbook)
        {
            Step aStep = new Step();
            aStep.Name = "Step1 - Verify input";
            aTestCase.AddModelElement(aStep);

            /*********************************** TRAIN DATA ***********************************/
            SubStep aSubStep = new SubStep();
            aSubStep.Name = "SubStep1 - Train data";
            aStep.AddModelElement(aSubStep);

            addAction(aSubStep, "Kernel.SpeedAndDistanceMonitoring.ReleaseSpeedMonitoring.UpdateReleaseSpeed()");
            addExpectation(aSubStep,
                "Kernel.TrainData.BrakingParameters.ConversionModel.ConversionModelIsUsed() == False");
        }
        private void fillBrakingParametersExpectations(TestCase aTestCase, int stepNumber, string name,
            string expression, List<double> distanceValues, List<double> speedValues, List<double> values)
        {
            Step aStep = new Step();
            aStep.Name = String.Format("Step{0} - {1}", stepNumber, name);
            aTestCase.AddModelElement(aStep);

            SubStep aSubStep = new SubStep();
            aSubStep.Name = String.Format("SubStep1 - Verify {0} values", name);
            aStep.AddModelElement(aSubStep);

            for (int i = 0; i < values.Count; i++)
            {
                if (values[i] != -1)
                {
                    Expectation expectation = new Expectation();
                    expectation.ExpressionText = String.Format(CultureInfo.InvariantCulture, expression,
                        Math.Round(distanceValues[i], 2), Math.Round(speedValues[i], 2), Math.Round(values[i], 4));
                    aSubStep.AddModelElement(expectation);
                }
            }
        }
Ejemplo n.º 30
0
        /// <summary>
        ///     Handles a drop event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TimeLineControl_DragDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent("WindowsForms10PersistentObject", false))
            {
                BaseTreeNode sourceNode = e.Data.GetData("WindowsForms10PersistentObject") as BaseTreeNode;
                if (sourceNode != null)
                {
                    VariableTreeNode variableNode = sourceNode as VariableTreeNode;
                    if (variableNode != null)
                    {
                        SubStep subStep = SubStepRelatedToMousePosition();
                        if (subStep != null)
                        {
                            // Create the default value
                            IValue     value        = null;
                            Expression expression   = null;
                            string     defaultValue = variableNode.Item.Default;
                            if (defaultValue != null)
                            {
                                const bool doSemanticalAnalysis = true;
                                const bool silent = true;
                                expression = new Parser().Expression(variableNode.Item, defaultValue,
                                                                     AllMatches.INSTANCE, doSemanticalAnalysis, null, silent);
                            }

                            if (expression != null)
                            {
                                InterpretationContext context = new InterpretationContext {
                                    UseDefaultValue = false
                                };
                                value = expression.GetExpressionValue(context, null);
                            }

                            if (value == null || value is EmptyValue)
                            {
                                Structure structureType = variableNode.Item.Type as Structure;
                                if (structureType != null)
                                {
                                    const bool setDefaultValue = false;
                                    value = new StructureValue(structureType, setDefaultValue);
                                }
                            }

                            // Create the action or the expectation according to the keyboard modifier keys
                            if (value != null)
                            {
                                if ((e.KeyState & Ctrl) != 0)
                                {
                                    Expectation expectation = (Expectation)acceptor.getFactory().createExpectation();
                                    expectation.ExpressionText = variableNode.Item.FullName + " == " + value.FullName;
                                    subStep.appendExpectations(expectation);
                                }
                                else
                                {
                                    Action action = (Action)acceptor.getFactory().createAction();
                                    action.ExpressionText = variableNode.Item.FullName + " <- " + value.FullName;
                                    subStep.appendActions(action);
                                }
                            }
                            else
                            {
                                MessageBox.Show(
                                    Resources
                                    .StaticTimeLineControl_TimeLineControl_DragDrop_Cannot_evaluate_variable_default_value,
                                    Resources.StaticTimeLineControl_TimeLineControl_DragDrop_Cannot_create_event,
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Error);
                            }
                        }
                    }
                }
            }
        }