示例#1
0
        private ModelRequirement toModel(DataRow dr)
        {
            ModelRequirement model = new ModelRequirement();

            foreach (PropertyInfo propertyInfo in typeof(ModelRequirement).GetProperties())
            {
                if (dr[propertyInfo.Name].ToString() == "")
                {
                    continue;
                }
                model.GetType().GetProperty(propertyInfo.Name).SetValue(model, dr[propertyInfo.Name], null);
            }

            return(model);
        }
示例#2
0
		protected bool				MeetsRequirements(ModelRequirements requirements, out ModelRequirement failedrequirement)
		{
			if(requirements != null)
			{
				//Loop over all requirements
				foreach(ModelRequirement requirement in requirements)
				{
					//Ignore disabled requirements
					if(requirement.Weight == 0 || requirement.Disabled)
						continue;
				
					//By default were just looking at this specific variable instance
					//However if 'Global' is enabled, consider this variable on any models of this type
					List<Object> currentValues = new List<Object>();
					if(requirement.Global)
					{
						//Note: We do this check everytime, since models could have been added dynamically
						if(requirement.Variable != null)
						{
						    foreach(Model model in this.Models.FindType(requirement.Variable.Model.GetType()))
						    {
							    ModelVariables variables = model.Variables.Find(requirement.Variable.Name);
							    foreach (ModelVariable variable in variables)
							    {
								    currentValues.Add(variable.CachedValue);
							    }
						    }
						}
						else
						{
						    currentValues.Add(true);
						}
					}
					else
					{
					    if(requirement.Variable == null)
					        throw new ModelException(this, "Variable is null?");
					    currentValues.Add(requirement.Variable.CachedValue);
					}
						
					//See if this requirement is met
					bool matched = false;
					foreach (Object value in currentValues)
					{
						if(requirement.Evaluate(value))
						{
							matched = true;
							break;
						}
					}

					//Stop on first mis-match, (ie: at least one requirement didn't match)
					if(!matched)
					{
						//First failed requirement
						//Note: This has to be order based, since production checks conditions in-order
						//and will fail (and throw) according to the first one not meet
						failedrequirement = requirement;
						return false;
					}
				}
			}
			
			failedrequirement = null;
			return true;
		}