public AppraisalRule(Name eventName, ConditionSet conditions = null)
 {
     m_id = Guid.NewGuid();
     EventName = eventName;
     Conditions = conditions ?? new ConditionSet();
     Desirability = Praiseworthiness = 0;
 }
Beispiel #2
0
        public void Test_DP_Math_NoMatch(string contraints, string methodCall)
        {
            var me = (Name)"Ana";
            var kb = new KB(me);


            var resultVariable = methodCall.Split('=')[1];


            var conditions = contraints.Split(',');

            IEnumerable <SubstitutionSet> resultingConstraints;

            var condSet = new ConditionSet();

            var cond = Condition.Parse(conditions[0]);

            // Apply conditions to RPC
            foreach (var c in conditions)
            {
                cond    = Condition.Parse(c);
                condSet = condSet.Add(cond);
            }

            resultingConstraints = condSet.Unify(kb, Name.SELF_SYMBOL, null);

            condSet = new ConditionSet();
            cond    = Condition.Parse(methodCall);
            condSet = condSet.Add(cond);


            var res = condSet.Unify(kb, Name.SELF_SYMBOL, resultingConstraints);

            Assert.IsEmpty(res);
        }
        //[TestCase(new[] { "Race([y])!=Race([x])", "Strength([x])>=Strength([y])", "[x]!=[y]" }, true, null)]
        //[TestCase(new[] { "Race([y])!=Race([x])", "Strength([x])>=Strength([y])", "[x]!=[y]", "#[x]=3" }, true, null)]
        //[TestCase(new[] { "Race([y])!=Race([x])", "Strength([x])>=Strength([y])", "[x]!=[y]", "Count([x])=3", "Count([y])=5" }, true, null)]
        //[TestCase(new[] { "Count(Like([x]))=0" }, true, null)]
        public void Test_ConditionSet(string[] conditions, bool result, string[] constraints)
        {
            var set   = constraints != null?new[] { new SubstitutionSet(constraints.Select(c => new Substitution(c))) }:null;
            var conds = new ConditionSet(conditions.Select(Condition.Parse));

            Assert.AreEqual(result, conds.Unify(_kb, Name.SELF_SYMBOL, set).Any());
        }
Beispiel #4
0
        protected BaseActionDefinition(Name actionTemplate, Name target, IEnumerable <Condition> activationConditions)
        {
            var terms = actionTemplate.GetTerms().ToArray();
            var name  = terms[0];

            if (!name.IsPrimitive)
            {
                throw new ArgumentException("Invalid Action Template format", nameof(actionTemplate));
            }
            for (int i = 1; i < terms.Length; i++)
            {
                if (terms[i].IsComposed)
                {
                    throw new ArgumentException("Invalid Action Template format", nameof(actionTemplate));
                }
            }

            if (target.IsComposed)
            {
                throw new ArgumentException("Action Definition Target must be a symbol definition", nameof(target));
            }

            Id = Guid.NewGuid();
            m_actionTemplate     = actionTemplate;
            Target               = target;
            ActivationConditions = new ConditionSet(activationConditions);
        }
        static void GetDoneVersionDebugSpecs(ConditionSet cs, MutableConditionFlagSet l, DBlockNode m, ResolutionContext ctxt)
        {
            if (m.StaticStatements == null || m.StaticStatements.Count == 0)
                return;

            foreach(var ss in m.StaticStatements)
            {
                if(ss is VersionSpecification)
                {
                    var vs = (VersionSpecification)ss;

                    if(!_checkForMatchinSpecConditions(m,cs,ss,ctxt))
                        continue;

                    if(vs.SpecifiedId==null)
             						l.AddVersionCondition(vs.SpecifiedNumber);
                    else
                        l.AddVersionCondition(vs.SpecifiedId);
                }
                else if(ss is DebugSpecification)
                {
                    var ds = (DebugSpecification)ss;

                    if(!_checkForMatchinSpecConditions(m,cs,ss, ctxt))
                        continue;

                    if (ds.SpecifiedId == null)
                        l.AddDebugCondition(ds.SpecifiedDebugLevel);
                    else
                        l.AddDebugCondition(ds.SpecifiedId);
                }
            }
        }
Beispiel #6
0
        // TODO Clean up.
        public IfNode(ITokenReader tokenReader, INodeReader nodeReader, string directiveName = null, Location location = null)
            : base(directiveName, location)
        {
            Conditions = new List<ConditionSet>();

            var condition = ExpressionRewriter.Rewrite(tokenReader);
            var curConditionSet = new ConditionSet(condition);

            Conditions.Add(curConditionSet);

            var childrenNodes = nodeReader.TakeWhile((node) => !IsEndDirective(node, DirectiveName));

            foreach(var node in childrenNodes) {
                bool isConditional;
                var newCondition = GetConditionFromNode(node, out isConditional);

                if(isConditional) {
                    if(newCondition != null && curConditionSet.Condition == null) {
                        throw new BadDataException("Can't have an elseif node after an else node", node.Location);
                    }

                    curConditionSet = new ConditionSet(newCondition);

                    Conditions.Add(curConditionSet);

                    continue;
                }

                curConditionSet.ChildrenNodes.Add(node);
            }
        }
Beispiel #7
0
 public AppraisalRule(Name eventName, ConditionSet conditions = null)
 {
     AM.AssertEventNameValidity(eventName);
     EventName    = eventName;
     Conditions   = conditions ?? new ConditionSet();
     Desirability = Praiseworthiness = 0;
 }
 public void SetData(AttributionRuleDTO dto)
 {
     RuleName   = dto.Description;
     Target     = dto.Target;
     Value      = dto.Value;
     Conditions = new ConditionSet(dto.Conditions);
 }
 public InfluenceRule(InfluenceRuleDTO inf)
 {
     Id    = Guid.NewGuid();
     Rule  = new ConditionSet(inf.Rule);
     Value = inf.Value;
     Mode  = inf.Mode;
 }
Beispiel #10
0
 public AppraisalRule(AppraisalRuleDTO appraisalRuleDTO)
 {
     EventName        = Name.BuildName(appraisalRuleDTO.EventMatchingTemplate);
     Desirability     = appraisalRuleDTO.Desirability;
     Praiseworthiness = appraisalRuleDTO.Praiseworthiness;
     Conditions       = new ConditionSet(appraisalRuleDTO.Conditions.Select(c => Condition.Parse(c.Condition)));
 }
Beispiel #11
0
 /// <summary>
 ///     Clone Constructor
 /// </summary>
 /// <param name="other">the reaction to clone</param>
 public AppraisalRule(AppraisalRule other)
 {
     m_id               = other.m_id;
     EventName          = other.EventName;
     Conditions         = new ConditionSet(other.Conditions);
     AppraisalVariables = other.AppraisalVariables;
 }
Beispiel #12
0
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET:
//ORIGINAL LINE: @Override public java.util.List<org.camunda.bpm.engine.runtime.ProcessInstance> execute(final org.camunda.bpm.engine.impl.interceptor.CommandContext commandContext)
        public virtual IList <ProcessInstance> execute(CommandContext commandContext)
        {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.camunda.bpm.engine.impl.runtime.ConditionHandler conditionHandler = commandContext.getProcessEngineConfiguration().getConditionHandler();
            ConditionHandler conditionHandler = commandContext.ProcessEngineConfiguration.ConditionHandler;
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.camunda.bpm.engine.impl.runtime.ConditionSet conditionSet = new org.camunda.bpm.engine.impl.runtime.ConditionSet(builder);
            ConditionSet conditionSet = new ConditionSet(builder);

            IList <ConditionHandlerResult> results = conditionHandler.evaluateStartCondition(commandContext, conditionSet);

            foreach (ConditionHandlerResult ConditionHandlerResult in results)
            {
                checkAuthorization(commandContext, ConditionHandlerResult);
            }

            IList <ProcessInstance> processInstances = new List <ProcessInstance>();

            foreach (ConditionHandlerResult ConditionHandlerResult in results)
            {
                processInstances.Add(instantiateProcess(commandContext, ConditionHandlerResult));
            }

            return(processInstances);
        }
Beispiel #13
0
 protected BaseActionDefinition(BaseActionDefinition other)
 {
     Id = other.Id;
     m_actionTemplate     = other.m_actionTemplate;
     Target               = other.Target;
     ActivationConditions = new ConditionSet(other.ActivationConditions);
 }
 public void SetData(AttributionRuleDTO dto)
 {
     RuleName = dto.RuleName;
     Target = (Name)dto.Target;
     Value = dto.Value;
     Conditions = new ConditionSet(dto.Conditions);
 }
Beispiel #15
0
        /// <summary>
        /// Deserialization constructor
        /// </summary>
        protected BaseActionDefinition(IObjectGraphNode node, object contextData)
        {
            var actionTemplate = node["Action"].RebuildObject <Name>();
            var terms          = actionTemplate.GetTerms().ToArray();
            var name           = terms[0];

            if (!name.IsPrimitive)
            {
                throw new Exception("Invalid Action Template format");
            }
            for (int i = 1; i < terms.Length; i++)
            {
                if (terms[i].IsComposed)
                {
                    throw new Exception("Invalid Action Template format");
                }
            }

            var target = SerializationServices.GetFieldOrDefault(node, "Target", Name.NIL_SYMBOL);

            if (target.IsComposed)
            {
                throw new ArgumentException("Action Definition Target must be a symbol definition", nameof(target));
            }

            Id = Guid.NewGuid();
            m_actionTemplate     = actionTemplate;
            Target               = target;
            ActivationConditions = node["Conditions"].RebuildObject <ConditionSet>();
        }
Beispiel #16
0
 /// <summary>
 ///     Clone Constructor
 /// </summary>
 /// <param name="other">the reaction to clone</param>
 public AppraisalRule(AppraisalRule other)
 {
     m_id             = other.m_id;
     EventName        = other.EventName;
     Conditions       = new ConditionSet(other.Conditions);
     Desirability     = other.Desirability;
     Praiseworthiness = other.Praiseworthiness;
 }
Beispiel #17
0
 public static void EnumConditions(ConditionSet cs, IBlockNode block, ResolutionContext ctxt, CodeLocation caret)
 {
     if (block != null && block.NodeRoot != null)
     {
         block.NodeRoot.Accept(new ConditionVisitor(cs, ctxt, caret));
     }
     return;
 }
Beispiel #18
0
 public ConditionVisitor(ConditionSet cs, ResolutionContext ctxt, CodeLocation caret)
 {
     this.caret    = caret;
     this.cs       = cs;
     this.ctxt     = ctxt;
     this.l        = new MutableConditionFlagSet();
     cs.LocalFlags = l;
 }
Beispiel #19
0
 protected void SetFromDTO <T>(T dto) where T : ActionRuleDTO
 {
     m_actionTemplate       = (Name)dto.Action;
     Target                 = (Name)dto.Target;
     Priority               = (Name)dto.Priority;
     Layer                  = (Name)dto.Layer;
     m_activationConditions = new ConditionSet(dto.Conditions);
 }
			public ConditionVisitor(ConditionSet cs,ResolutionContext ctxt, CodeLocation caret)
			{
				this.caret = caret;
				this.cs = cs;
				this.ctxt = ctxt;
				this.l = new MutableConditionFlagSet();
				cs.LocalFlags = l;
			}
Beispiel #21
0
        public void Test_DP_LastEventID_ValueMatch(int eventSet, string context, string lastEventMethodCall, string expectedValue)
        {
            var rpc = BuildRPCAsset();

            PopulateEventSet(eventSet);

            foreach (var eve in eventSets[eventSet])
            {
                rpc.Perceive((Name)eve);
                rpc.Tick++;
            }

            // Build the context, parsin the conditions:

            var resultVariable = lastEventMethodCall.Split('=')[1];

            var conditions = context.Split(',');
            var cond       = Condition.Parse("[x] != True");
            var condSet    = new ConditionSet();
            IEnumerable <SubstitutionSet> resultingConstraints = new List <SubstitutionSet>();

            if (conditions[0] != "")
            {
                condSet = new ConditionSet();

                cond = Condition.Parse(conditions[0]);


                // Apply conditions to RPC
                foreach (var res in conditions)
                {
                    cond    = Condition.Parse(res);
                    condSet = condSet.Add(cond);
                }

                resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null);
            }



            condSet = new ConditionSet();
            cond    = Condition.Parse(lastEventMethodCall);
            condSet = condSet.Add(cond);


            var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints);

            var actualResult = "";

            foreach (var sub in result)
            {
                if (sub.Contains((Name)resultVariable))
                {
                    actualResult = sub[(Name)resultVariable].ToString();
                }
            }
            Assert.AreEqual(expectedValue, actualResult);
        }
        public void ConditionEvaluatorSet_Test_Universal_Pass(params string[] beliefs)
        {
            var kb = new KB((Name)"Me");
            foreach (var s in beliefs.Select(b => b.Split(':')))
                kb.Tell((Name)s[0], (Name)s[1]);

            var set = new ConditionSet(LogicalQuantifier.Universal, TEST_CONDITIONS);
            Assert.True(set.Evaluate(kb, Name.SELF_SYMBOL, null));
        }
Beispiel #23
0
 protected ActionRule(ActionRule other)
 {
     Id = other.Id;
     m_actionTemplate     = other.m_actionTemplate;
     Target               = other.Target;
     Priority             = other.Priority;
     Layer                = other.Layer;
     ActivationConditions = new ConditionSet(other.ActivationConditions);
 }
Beispiel #24
0
 public SocialExchange(SocialExchangeDTO s)
 {
     Id                 = Guid.NewGuid();
     Name               = s.Name;
     Description        = s.Description;
     Steps              = StringToSteps(s.Steps);
     Target             = s.Target;
     StartingConditions = new ConditionSet(s.StartingConditions);
     InfluenceRules     = s.InfluenceRules.Select(x => new InfluenceRule(x)).ToList();
 }
Beispiel #25
0
        public void Test_DP_Volition_Step_Match(int eventSet, string context, string MethodCall, string variable, string value)
        {
            var rpc = BuildRPCAsset3();
            var cif = BuildCIFAsset();

            cif.RegisterKnowledgeBase(rpc.m_kb);
            rpc.LoadAssociatedAssets();



            PopulateEventSet(eventSet);

            foreach (var eve in eventSets[eventSet])
            {
                rpc.Perceive((Name)eve);
                rpc.Tick++;
            }



            // conditions
            var conditions = context.Split(',');

            IEnumerable <SubstitutionSet> resultingConstraints;

            var condSet = new ConditionSet();

            var cond = Condition.Parse(conditions[0]);


            // Apply conditions to RPC
            foreach (var res in conditions)
            {
                cond    = Condition.Parse(res);
                condSet = condSet.Add(cond);
            }

            resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null);

            condSet = new ConditionSet();
            cond    = Condition.Parse(MethodCall);
            condSet = condSet.Add(cond);


            var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints);

            Assert.IsNotEmpty(result);


            var sub = result.FirstOrDefault().Where(x => x.Variable == (Name)variable);

            var ret = sub.FirstOrDefault().SubValue;

            Assert.AreEqual(ret.Value.ToString(), value);
        }
Beispiel #26
0
        /// <summary>
        /// 根据主键更新字段值
        /// </summary>
        /// <param name="updateValues">需要更新的属性名称以及值集合</param>
        /// <param name="keys">主键,多个主键需按主键名排序</param>
        /// <returns>更新是否成功</returns>
        public bool Update(IEnumerable <KeyValuePair <string, object> > updateValues, params object[] keys)
        {
            ThrowExceptionIfNoKeys();
            ThrowExceptionIfWrongKeys(keys);
            ConditionSet condition = new ConditionSet();

            for (int i = 0; i < keys.Length; i++)
            {
                condition.Add(new SimpleCondition(TableDefinition.Keys[i].PropertyName, keys[i]));
            }
            return(Update(updateValues, condition) > 0);
        }
        public bool Add(Name name, ConditionSet conditionSet, T value)
        {
            ConditionMapper <T> conds;

            if (!m_dictionary.TryGetValue(name, out conds))
            {
                conds = new ConditionMapper <T>();
                m_dictionary[name] = conds;
            }

            return(conds.Add(conditionSet, value));
        }
        private static ConditionSet ReadConditions(YamlNode node)
        {
            // Expect a sequence of conditions
            YamlSequenceNode yamlConditions = GetYamlSequence(node);

            if (yamlConditions == null)
            {
                throw new RulesException($"Expected a list of conditions but conditions does not contain a sequence");
            }

            // Default op for combining conditions is 'AND'.
            var conditionSet = new ConditionSet()
            {
                IsAnd      = true,
                Conditions = new List <Condition>()
            };

            foreach (var child in yamlConditions.Children)
            {
                var condition = ReadCondition(child);

                if (condition.Op == Condition.Oper.And || condition.Op == Condition.Oper.Or)
                {
                    // Only allow first condition to be 'and' / 'or' (to avoid confusing rules)
                    if (conditionSet.Conditions.Count > 0)
                    {
                        throw new RulesException("Only the first condition can be 'and' / 'or' (break complex conditions into separate rules)");
                    }

                    conditionSet.IsAnd = (condition.Op == Condition.Oper.And);
                }
                else
                {
                    if (conditionSet.IsAnd && condition.Op == Condition.Oper.Equal)
                    {
                        // Trap 'AND' conditions that can never be true (to detect missing use of 'OR')
                        // e.g. country == UK AND country == US
                        foreach (var prevCondition in conditionSet.Conditions)
                        {
                            if (prevCondition.Id == condition.Id && prevCondition.Op == Condition.Oper.Equal)
                            {
                                throw new RulesException($"Found multiple 'AND ==' conditions for '{condition.Id}' (did you forget to add '- OR')");
                            }
                        }
                    }

                    conditionSet.Conditions.Add(condition);
                }
            }

            return(conditionSet);
        }
        public void ConditionEvaluatorSet_Test_Universal_Fail(params string[] beliefs)
        {
            var kb = new KB((Name)"Me");

            foreach (var s in beliefs.Select(b => b.Split(':')))
            {
                kb.Tell((Name)s[0], PrimitiveValue.Parse(s[1]));
            }

            var set = new ConditionSet(LogicalQuantifier.Universal, TEST_CONDITIONS);

            Assert.False(set.Evaluate(kb, Name.SELF_SYMBOL, null));
        }
 /// <summary>
 ///     Clone Constructor
 /// </summary>
 /// <param name="other">the reaction to clone</param>
 public AppraisalRule(AppraisalRule other)
 {
     m_id = other.m_id;
     EventName = other.EventName;
     Conditions = new ConditionSet(other.Conditions);
     Desirability = other.Desirability;
     Praiseworthiness = other.Praiseworthiness;
     //DesirabilityForOther = other.DesirabilityForOther;
     //Like = other.Like;
     //ReferencedEventName = (Name)other.ReferencedEventName.Clone();
     //if (Other != null)
     //	Other = (Name) other.Other.Clone();
 }
Beispiel #31
0
        public void ConditionEvaluatorSet_Test_Universal_Pass(params string[] beliefs)
        {
            var kb = new KB((Name)"Me");

            foreach (var s in beliefs.Select(b => b.Split(':')))
            {
                kb.Tell((Name)s[0], (Name)s[1]);
            }

            var set = new ConditionSet(LogicalQuantifier.Universal, TEST_CONDITIONS);

            Assert.True(set.Unify(kb, Name.SELF_SYMBOL, null).Any());
        }
Beispiel #32
0
        /// <summary>
        /// 根据主键更新数据
        /// </summary>
        /// <param name="values">需要更新的属性及数值,key为属性名,value为数值</param>
        /// <param name="condition">更新的条件</param>
        /// <returns>更新是否成功</returns>
        public virtual bool UpdateValues(IEnumerable <KeyValuePair <string, object> > values, params object[] keys)
        {
            ThrowExceptionIfNoKeys();
            ThrowExceptionIfWrongKeys(keys);
            ConditionSet condition = new ConditionSet();
            int          i         = 0;

            foreach (ColumnDefinition column in TableDefinition.Keys)
            {
                condition.Add(new SimpleCondition(column.PropertyName, keys[i++]));
            }
            return(UpdateValues(values, condition) > 0);
        }
Beispiel #33
0
        public void Test_DP_Math_Match(string contraints, string methodCall, float result)
        {
            var me = (Name)"Ana";
            var kb = new KB(me);


            var resultVariable = methodCall.Split('=')[1];


            var conditions = contraints.Split(',');

            IEnumerable <SubstitutionSet> resultingConstraints;

            var condSet = new ConditionSet();

            var cond = Condition.Parse(conditions[0]);

            // Apply conditions to RPC
            foreach (var c in conditions)
            {
                cond    = Condition.Parse(c);
                condSet = condSet.Add(cond);
            }

            resultingConstraints = condSet.Unify(kb, Name.SELF_SYMBOL, null);

            condSet = new ConditionSet();
            cond    = Condition.Parse(methodCall);
            condSet = condSet.Add(cond);


            var res = condSet.Unify(kb, Name.SELF_SYMBOL, resultingConstraints);

            Assert.IsNotEmpty(res);

            Name actualResult = Name.BuildName(0);

            foreach (var v in res.FirstOrDefault())
            {
                if (v.Variable == (Name)resultVariable)
                {
                    actualResult = v.SubValue.Value;
                    break;
                }
            }



            Assert.AreEqual(actualResult, Name.BuildName(result));
        }
Beispiel #34
0
 /// <summary>
 ///     Clone Constructor
 /// </summary>
 /// <param name="other">the reaction to clone</param>
 public AppraisalRule(AppraisalRule other)
 {
     m_id      = other.m_id;
     EventName = other.EventName;
     if (other.Conditions == null || other.Conditions.Count == 0)
     {
         Conditions = new ConditionSet();
     }
     else
     {
         Conditions = new ConditionSet(other.Conditions);
     }
     AppraisalVariables = other.AppraisalVariables;
 }
        public static void EnumConditions(ConditionSet cs,IStatement stmt, IBlockNode block, ResolutionContext ctxt, CodeLocation caret)
        {
            var l = new MutableConditionFlagSet();
            cs.LocalFlags = l;

            // If the current scope is a dedicated block.. (so NOT in a method but probably in an initializer or other static statement)
            if(block is DBlockNode)
            {
                // If so, get all (scoping) declaration conditions in the current block
                // and add them to the condition list
                var mblocks = ((DBlockNode)block).GetMetaBlockStack(caret, false, true);

                if(mblocks!=null && mblocks.Length!=0)
                    foreach(var mb in mblocks)
                    {
                        var amd = mb as AttributeMetaDeclaration;
                        if(amd!=null && amd.AttributeOrCondition!=null && amd.AttributeOrCondition.Length!=0)
                            foreach(var attr in amd.AttributeOrCondition)
                                if(attr is DeclarationCondition)
                                    l.Add((DeclarationCondition)attr);
                    }
            }

            // Scan up the current statement when e.g. inside a method body
            while (stmt != null)
            {
                if (stmt is StatementCondition)
                    l.Add(((StatementCondition)stmt).Condition);
                stmt = stmt.Parent;
            }

            // Go up the block hierarchy and add all conditions that belong to the respective nodes
            while (block != null)
            {
                var dn = block as DNode;
                if (dn!=null)
                {
                    if(dn is DBlockNode)
                        GetDoneVersionDebugSpecs(cs, l, dn as DBlockNode, ctxt);
                    if(dn.Attributes!=null)
                        foreach (var attr in dn.Attributes)
                            if (attr is DeclarationCondition)
                                l.Add(((DeclarationCondition)attr));
                }

                block = block.Parent as IBlockNode;
            }
        }
Beispiel #36
0
        public void Test_DP_Volition_NoMatch(int eventSet, string context, string MethodCall)
        {
            var rpc = BuildRPCAsset();
            var cif = BuildCIFAsset();

            cif.RegisterKnowledgeBase(rpc.m_kb);
            rpc.LoadAssociatedAssets();



            PopulateEventSet(eventSet);

            foreach (var eve in eventSets[eventSet])
            {
                rpc.Perceive((Name)eve);
                rpc.Tick++;
            }



            // conditions
            var conditions = context.Split(',');

            IEnumerable <SubstitutionSet> resultingConstraints;

            var condSet = new ConditionSet();

            var cond = Condition.Parse(conditions[0]);


            // Apply conditions to RPC
            foreach (var res in conditions)
            {
                cond    = Condition.Parse(res);
                condSet = condSet.Add(cond);
            }

            resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null);

            condSet = new ConditionSet();
            cond    = Condition.Parse(MethodCall);
            condSet = condSet.Add(cond);


            var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints);

            Assert.IsEmpty(result);
        }
        static void GetDoneVersionDebugSpecs(ConditionSet cs, MutableConditionFlagSet l, DBlockNode m, ResolutionContext ctxt)
        {
            if (m.StaticStatements == null || m.StaticStatements.Count == 0)
            {
                return;
            }

            foreach (var ss in m.StaticStatements)
            {
                if (ss is VersionSpecification)
                {
                    var vs = (VersionSpecification)ss;

                    if (!_checkForMatchinSpecConditions(m, cs, ss, ctxt))
                    {
                        continue;
                    }

                    if (vs.SpecifiedId == null)
                    {
                        l.AddVersionCondition(vs.SpecifiedNumber);
                    }
                    else
                    {
                        l.AddVersionCondition(vs.SpecifiedId);
                    }
                }
                else if (ss is DebugSpecification)
                {
                    var ds = (DebugSpecification)ss;

                    if (!_checkForMatchinSpecConditions(m, cs, ss, ctxt))
                    {
                        continue;
                    }

                    if (ds.SpecifiedId == null)
                    {
                        l.AddDebugCondition(ds.SpecifiedDebugLevel);
                    }
                    else
                    {
                        l.AddDebugCondition(ds.SpecifiedId);
                    }
                }
            }
        }
Beispiel #38
0
        public void Test_DP_EventID_NoMatch(int eventSet, string context, string MethodCall)
        {
            var rpc = BuildRPCAsset();

            PopulateEventSet(eventSet);

            foreach (var eve in eventSets[eventSet])
            {
                rpc.Perceive((Name)eve);
            }

            // Build the context, parsin the conditions:

            var conditions = context.Split(',');

            IEnumerable <SubstitutionSet> resultingConstraints;

            var condSet = new ConditionSet();

            var cond = Condition.Parse(conditions[0]);

            // Apply conditions to RPC
            foreach (var res in conditions)
            {
                cond    = Condition.Parse(res);
                condSet = condSet.Add(cond);
            }
            resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null);

            condSet = new ConditionSet();
            cond    = Condition.Parse(MethodCall);
            condSet = condSet.Add(cond);


            var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints);

            /*   // what is the id I'm looking for
             * var wantedSub = cond.ToString().Split('=');
             *
             * foreach (var sub in result)
             * {
             *     if(sub)
             * }*/

            Assert.IsEmpty(result);
        }
		public static void EnumConditions(ConditionSet cs,IBlockNode block, ResolutionContext ctxt, CodeLocation caret)
		{
			if(block != null && block.NodeRoot != null)
				block.NodeRoot.Accept(new ConditionVisitor(cs, ctxt, caret));
			return;
		}
 static bool _checkForMatchinSpecConditions(DBlockNode m,ConditionSet cs,StaticStatement ss, ResolutionContext ctxt)
 {
     return ss.Attributes == null || cs.IsMatching(ss.Attributes,ctxt);
 }
 public ActionTendency(Name actionName, Name target, ConditionSet activationConditions)
     : base(actionName, target, activationConditions)
 {
     m_priority = DEFAULT_ACTION_PRIORITY;
 }
Beispiel #42
0
        /// <summary>
        /// Creates an FFB effect, stores it at a given slot and starts its playback.
        /// </summary>
        /// <param name="data">
        /// Parameters of the effect to be created.
        /// </param>
        /// <returns>
        /// Returns true if successful, otherwise returns false.
        /// </returns>
        public bool SendFFBEffect(DataClasses.FFBEffectData data)
        {
            //Check if the device is properly initialized
            if (ffbDevice == null)
            {
                MessageBox.Show("Device not initialized.", FFBInspector.Properties.Resources.errCap_devError,
                                MessageBoxButtons.OK, MessageBoxIcon.Stop);
                return false;
            }

            //If there is an effect already stored in this slot, remove it
            StopOneEffect(data.slot);

            int[] axes = new Int32[actuatorsObjectTypes.Count];
            int i = 0;
            foreach (int objt in actuatorsObjectTypes)
            {
                axes[i++] = objt;
            }

            //Set effect direction
            int[] dirs = data.effect.GetDirections();

            //Set the general effect parameters up
            EffectParameters eParams = new EffectParameters();
            eParams.Duration = data.effect.duration;
            eParams.Flags = EffectFlags.Cartesian | EffectFlags.ObjectIds;
            eParams.Gain = data.effect.gain;
            eParams.SetAxes(axes, dirs);
            eParams.StartDelay = data.effect.startDelay;
            eParams.SamplePeriod = 0; //Use the default sample period;
            eParams.TriggerButton = data.effect.trigButton;
            eParams.TriggerRepeatInterval = data.effect.trigRepInterval;

            //Set the type specific effect parameters up
            TypeSpecificParameters typeSpec = null;
            if (data.effect.effectGuid == EffectGuid.ConstantForce)
            {
                DataClasses.ConstantEffectTypeData cfEfd = (DataClasses.ConstantEffectTypeData)data.effect;
                typeSpec = new ConstantForce();
                typeSpec.AsConstantForce().Magnitude = cfEfd.magnitude;
            }
            else if (data.effect.effectGuid == EffectGuid.RampForce)
            {
                DataClasses.RampEffectTypeData rfEfd = (DataClasses.RampEffectTypeData)data.effect;
                typeSpec = new RampForce();
                typeSpec.AsRampForce().Start = rfEfd.start;
                typeSpec.AsRampForce().End = rfEfd.end;
            }
            else if (data.effect.effectGuid == EffectGuid.Sine || data.effect.effectGuid == EffectGuid.Triangle ||
                     data.effect.effectGuid == EffectGuid.Square ||
                     data.effect.effectGuid == EffectGuid.SawtoothUp ||
                     data.effect.effectGuid == EffectGuid.SawtoothDown)
            {
                DataClasses.PeriodicEffectTypeData pfEfd = (DataClasses.PeriodicEffectTypeData)data.effect;
                typeSpec = new PeriodicForce();
                typeSpec.AsPeriodicForce().Magnitude = pfEfd.magnitude;
                typeSpec.AsPeriodicForce().Offset = pfEfd.offset;
                typeSpec.AsPeriodicForce().Period = pfEfd.period;
                typeSpec.AsPeriodicForce().Phase = pfEfd.phase;
            }
            else if (data.effect.effectGuid == EffectGuid.Friction || data.effect.effectGuid == EffectGuid.Inertia ||
                     data.effect.effectGuid == EffectGuid.Damper || data.effect.effectGuid == EffectGuid.Spring)
            {
                DataClasses.ConditionEffectTypeData cdEfd = (DataClasses.ConditionEffectTypeData)data.effect;
                typeSpec = new ConditionSet();
                typeSpec.AsConditionSet().Conditions = new Condition[1];

                typeSpec.AsConditionSet().Conditions[0].DeadBand = cdEfd.deadBand;
                typeSpec.AsConditionSet().Conditions[0].Offset = cdEfd.offset;
                typeSpec.AsConditionSet().Conditions[0].NegativeCoefficient = cdEfd.negCoeff;
                typeSpec.AsConditionSet().Conditions[0].NegativeSaturation = cdEfd.negSat;
                typeSpec.AsConditionSet().Conditions[0].PositiveCoefficient = cdEfd.posCoeff;
                typeSpec.AsConditionSet().Conditions[0].PositiveSaturation = cdEfd.posSat;
            }
            eParams.Parameters = typeSpec;

            //Create an envelope
            if (data.envelope != null)
            {
                Envelope envp = new Envelope();
                envp.AttackLevel = data.envelope.attackLevel;
                envp.AttackTime = data.envelope.attackTime;
                envp.FadeLevel = data.envelope.fadeLevel;
                envp.FadeTime = data.envelope.fadeTime;

                eParams.Envelope = envp;
            }

            //Create an effect and add it to the list
            Effect ef;
            try
            {
                ef = new Effect(ffbDevice, data.effect.effectGuid, eParams);
                ffbEffects[data.slot] = ef;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Cannot create effect.\n" + ex.Message + "\n" + ex.Data,
                                FFBInspector.Properties.Resources.errCap_effError,
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            return StartFFBEffect(ef);
        }
 public void Test_ConditionSet(string[] conditions, bool result, string[] constraints)
 {
     var set = constraints!=null?new[]{new SubstitutionSet(constraints.Select(c => new Substitution(c)))}:null;
     var conds = new ConditionSet(conditions.Select(Condition.Parse));
     Assert.AreEqual(result, conds.Evaluate(_kb, Name.SELF_SYMBOL, set));
 }
 public Conferral(uint conferralSI, Name actionTemplate, Name target, ConditionSet activationConditions)
     : base(actionTemplate, target, activationConditions)
 {
     ConferralSI = conferralSI;
 }