public virtual IReturnVector executeFunction(Rete engine, IParameter[] params_Renamed)
        {
            bool eval = false;

            if (params_Renamed.Length == 2)
            {
                Object param1 = null;
                if (params_Renamed[0] is BoundParam && params_Renamed[1] is BoundParam)
                {
                    param1 = ((BoundParam)params_Renamed[0]).ObjectRef;
                    try
                    {
                        Type clazz = classnameResolver.resolveClass(((BoundParam)params_Renamed[1]).StringValue);
                        eval = clazz.IsInstanceOfType(param1);
                    }
                    catch (Exception e)
                    {
                        throw new RuntimeException(e);
                    }
                }
            }
            DefaultReturnVector ret = new DefaultReturnVector();
            DefaultReturnValue  rv  = new DefaultReturnValue(Constants.BOOLEAN_OBJECT, eval);

            ret.addReturnValue(rv);
            return(ret);
        }
Esempio n. 2
0
        public virtual IReturnVector executeFunction(Rete engine, IParameter[] params_Renamed)
        {
            Object o         = null;
            String classname = null;

            if (params_Renamed != null && params_Renamed.Length == 1)
            {
                if (params_Renamed[0] is ValueParam)
                {
                    ValueParam n = (ValueParam)params_Renamed[0];
                    classname = n.StringValue;
                }
                else if (params_Renamed[0] is BoundParam)
                {
                    BoundParam bp = (BoundParam)params_Renamed[0];
                    classname = (String)engine.getBinding(bp.VariableName);
                }
                else if (params_Renamed[0] is FunctionParam2)
                {
                    FunctionParam2 n = (FunctionParam2)params_Renamed[0];
                    n.Engine = engine;
                    n.lookUpFunction();
                    IReturnVector rval = (IReturnVector)n.Value;
                    classname = rval.firstReturnValue().StringValue;
                }
                try
                {
                    Type classDefinition = classnameResolver.resolveClass(classname);
                    o = CreateNewInstance(classDefinition);
                    if (o is IFunctionGroup)
                    {
                        engine.declareFunctionGroup((IFunctionGroup)o);
                    }
                }

                catch (UnauthorizedAccessException e)
                {
                    // TODO Auto-generated catch block
                    System.Diagnostics.Trace.WriteLine(e.Message);
                }
                catch (SecurityException e)
                {
                    // TODO Auto-generated catch block
                    System.Diagnostics.Trace.WriteLine(e.Message);
                }
                catch (ArgumentException e)
                {
                    // TODO Auto-generated catch block
                    System.Diagnostics.Trace.WriteLine(e.Message);
                }
                catch (Exception e)
                {
                    // TODO Auto-generated catch block
                    Trace.WriteLine(e.Message);
                }
            }
            DefaultReturnVector ret = new DefaultReturnVector();
            DefaultReturnValue  rv  = new DefaultReturnValue(Constants.OBJECT_TYPE, o);

            ret.addReturnValue(rv);
            return(ret);
        }
Esempio n. 3
0
        public virtual IReturnVector executeFunction(Rete engine, IParameter[] params_Renamed)
        {
            Object o         = null;
            String classname = null;

            Type[]   argsclass = null;
            Object[] args      = null;
            if (params_Renamed != null)
            {
                if (params_Renamed[0] is ValueParam)
                {
                    ValueParam n = (ValueParam)params_Renamed[0];
                    classname = n.StringValue;
                }
                else if (params_Renamed[0] is BoundParam)
                {
                    BoundParam bp = (BoundParam)params_Renamed[0];
                    classname = (String)engine.getBinding(bp.VariableName);
                }
                else if (params_Renamed[0] is FunctionParam2)
                {
                    FunctionParam2 n = (FunctionParam2)params_Renamed[0];
                    n.Engine = engine;
                    n.lookUpFunction();
                    IReturnVector rval = (IReturnVector)n.Value;
                    classname = rval.firstReturnValue().StringValue;
                }
                args = new Object[params_Renamed.Length - 1];
                for (int idx = 1; idx < params_Renamed.Length; idx++)
                {
                    if (params_Renamed[idx] is ValueParam)
                    {
                        ValueParam n = (ValueParam)params_Renamed[idx];
                        args[idx - 1] = n.Value;
                    }
                    else if (params_Renamed[idx] is BoundParam)
                    {
                        BoundParam bp = (BoundParam)params_Renamed[idx];
                        args[idx - 1] = engine.getBinding(bp.VariableName);
                    }
                    else if (params_Renamed[idx] is FunctionParam2)
                    {
                        FunctionParam2 n = (FunctionParam2)params_Renamed[idx];
                        n.Engine = engine;
                        n.lookUpFunction();
                        IReturnVector rval = (IReturnVector)n.Value;
                        args[idx - 1] = rval.firstReturnValue().Value;
                    }
                }
                try
                {
                    Type            classDefinition  = classnameResolver.resolveClass(classname);
                    ConstructorInfo foundConstructor = null;
                    for (int idx = 0; idx < classDefinition.GetConstructors().Length; idx++)
                    {
                        ConstructorInfo constructor      = classDefinition.GetConstructors()[idx];
                        ParameterInfo[] parameterClasses = constructor.GetParameters();
                        if (parameterClasses.Length == args.Length)
                        {
                            bool match = true;
                            for (int i = 0; i < parameterClasses.Length; ++i)
                            {
                                match &= (parameterClasses[i].GetType().IsInstanceOfType(args[i]) || args[i] == null);
                            }
                            if (match)
                            {
                                foundConstructor = constructor;
                                break;
                            }
                        }
                    }
                    if (foundConstructor != null)
                    {
                        o = foundConstructor.Invoke(args);
                    }
                }

                catch (UnauthorizedAccessException e)
                {
                    // TODO Auto-generated catch block
                    System.Diagnostics.Trace.WriteLine(e.Message);
                }
                catch (SecurityException e)
                {
                    // TODO Auto-generated catch block
                    System.Diagnostics.Trace.WriteLine(e.Message);
                }
                catch (ArgumentException e)
                {
                    // TODO Auto-generated catch block
                    System.Diagnostics.Trace.WriteLine(e.Message);
                }
                catch (TargetInvocationException e)
                {
                    // TODO Auto-generated catch block
                    System.Diagnostics.Trace.WriteLine(e.Message);
                }
                catch (Exception e)
                {
                    // TODO Auto-generated catch block
                    System.Diagnostics.Trace.WriteLine(e.Message);
                }
            }
            DefaultReturnVector ret = new DefaultReturnVector();
            DefaultReturnValue  rv  = new DefaultReturnValue(Constants.OBJECT_TYPE, o);

            ret.addReturnValue(rv);
            return(ret);
        }