/*--------------------------------------------------------------------------------------------*/ public override void ConsumePath(ITravPath pPath, Type pIgnoredToType) { ITravPathItem item = ConsumeFirstPathItem(pPath, ToType); string alias = ParamAt <string>(item, 0); ITravStepParam p = Params[0]; string conflictAlias; if (!pPath.HasAlias(alias)) { throw item.NewStepFault(FabFault.Code.IncorrectParamValue, p.Name + " '" + alias + "' could not be found.", 0); } if (pPath.DoesBackTouchAs(alias)) { throw item.NewStepFault(FabFault.Code.InvalidStep, "Back('" + alias + "') cannot occur directly after the As(" + alias + ").", 0); } if (!pPath.AllowBackToAlias(alias, out conflictAlias)) { throw item.NewStepFault(FabFault.Code.InvalidStep, "Cannot traverse back to " + "the As(" + alias + ") step; it exists within the As(" + conflictAlias + ") and " + "Back(" + conflictAlias + ") traversal path.", 0); } pPath.AddBackToAlias(alias); pPath.AddScript(".back(" + pPath.AddParam(alias) + ")"); }
/*--------------------------------------------------------------------------------------------*/ public override void ConsumePath(ITravPath pPath, Type pToType) { ITravPathItem item = ConsumeFirstPathItem(pPath, pToType); string alias = ParamAt <string>(item, 0); ITravStepParam p = Params[0]; if (pPath.HasAlias(alias)) { throw item.NewStepFault(FabFault.Code.IncorrectParamValue, p.Name + " '" + alias + "' is already in use.", 0); } pPath.AddAlias(alias); pPath.AddScript(".as(" + pPath.AddParam(alias) + ")"); }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ protected T ParamAt <T>(ITravPathItem pItem, int pIndex) { ITravStepParam p = Params[pIndex]; T val = pItem.GetParamAt <T>(pIndex); string valStr = val + ""; if (valStr.Length == 0) { throw pItem.NewStepFault(FabFault.Code.IncorrectParamValue, p.Name + " is empty.", pIndex); } if (p.Min != null && long.Parse(valStr) < p.Min) { throw pItem.NewStepFault(FabFault.Code.IncorrectParamValue, p.Name + " cannot be less than " + p.Min, pIndex); } if (p.Max != null && long.Parse(valStr) > p.Max) { throw pItem.NewStepFault(FabFault.Code.IncorrectParamValue, p.Name + " cannot be greater than " + p.Max, pIndex); } if (p.LenMax != null && valStr.Length > p.LenMax) { throw pItem.NewStepFault(FabFault.Code.IncorrectParamValue, p.Name + " cannot exceed " + p.LenMax + " characters.", pIndex); } if (p.ValidRegex != null && !Regex.IsMatch(valStr, p.ValidRegex)) { throw pItem.NewStepFault(FabFault.Code.IncorrectParamValue, "Invalid " + p.Name + " format.", pIndex); } if (p.AcceptedStrings != null && !p.AcceptedStrings.Contains(valStr)) { throw pItem.NewStepFault(FabFault.Code.IncorrectParamValue, "Invalid " + p.Name + " value. Accepted values: " + string.Join(", ", p.AcceptedStrings) + ".", pIndex); } return(val); }