コード例 #1
0
        public byte[] fetchData(ContextManager cm, CallerController <CallerData> cc)
        {
            if (data != null)
            {
                return(data);
            }

            if (id == null)
            {
                return(null);
            }

            if (cm == null)
            {
                return(null);
            }

            var dt = cm.get(ContextUtils.CTX_UTILS, cc).callFunction(UtilsContextConstants.F_GET_DATA, cc, id);

            var receivedData =
                StringUtils.ASCII_CHARSET.GetBytes(dt.rec().getString(UtilsContextConstants.FOF_GET_DATA_DATA));

            setData(receivedData);

            return(receivedData);
        }
コード例 #2
0
        public static void inlineData(DataTable table, ContextManager cm, CallerController <CallerData> cc)
        {
            foreach (var ff in table.getFormat())
            {
                if (ff.getType() == FieldFormat.DATA_FIELD)
                {
                    foreach (var rec in table)
                    {
                        var data = rec.getData(ff.getName());
                        data.fetchData(cm, cc);
                        data.setId(null);
                    }
                }

                if (ff.getType() != FieldFormat.DATATABLE_FIELD)
                {
                    continue;
                }
                foreach (var rec in table)
                {
                    var dt = rec.getDataTable(ff.getName());
                    inlineData(dt, cm, cc);
                }
            }
        }
コード例 #3
0
        public static List <EventDefinition> getEvents(Context context, String eventsMask,
                                                       CallerController <CallerData> caller)
        {
            var events = new List <EventDefinition>();

            if (eventsMask.Equals(ContextUtils.ENTITY_GROUP_MASK))
            {
                foreach (var ed in context.getEventDefinitions(caller))
                {
                    if (ed.getGroup() != null && !ContextUtils.GROUP_SYSTEM.Equals(ed.getGroup()))
                    {
                        events.Add(ed);
                    }
                }
            }
            else
            {
                var ed = context.getEventDefinition(eventsMask);
                if (ed != null)
                {
                    events.Add(ed);
                }
            }

            return(events);
        }
コード例 #4
0
        protected override DataTable callFunctionImpl(FunctionDefinition def, CallerController <CallerData> caller,
                                                      RequestController <RequestData> request, DataTable parameters)
        {
            if (def.getName().Equals(F_LOCAL_REINITIALIZE))
            {
                reinitialize();
                return(new DataTable(def.getOutputFormat(), true));
            }

            return(callRemoteFunction(def.getName(), def.getOutputFormat(), parameters));
        }
コード例 #5
0
        protected override TableFormat decodeFormat(String source, CallerController <CallerData> caller)
        {
            if (source == null)
            {
                return(null);
            }

            var idSourceBuilder = new StringBuilder();

            int i;

            for (i = 0; i < source.Length; i++)
            {
                var c = source[i];
                if (Char.IsDigit(c))
                {
                    idSourceBuilder.Append(c);
                }
                else
                {
                    break;
                }
            }

            source = source.Substring(i);

            var idSource = idSourceBuilder.ToString();

            var formatIdNullable = idSource.Length > 0 ? int.Parse(idSource) : (int?)null;

            var format = source.Length > 0 ? new TableFormat(source, new ClassicEncodingSettings(false)) : null;

            if (formatIdNullable == null)
            {
                return(format);
            }

            var formatId = (int)formatIdNullable;

            if (format == null)
            {
                TableFormat cached = controller.getFormatCache().get(formatId);

                if (cached == null)
                {
                    throw new ArgumentException("Unknown format ID: " + formatId);
                }

                return(cached);
            }

            controller.getFormatCache().put(formatId, format);
            return(format);
        }
コード例 #6
0
 public override List <Context> getChildren(CallerController <CallerData> caller)
 {
     try
     {
         init();
     }
     catch (ContextException ex)
     {
         Log.CONTEXT_CHILDREN.warn("Error initializing children of remote context", ex);
     }
     return(base.getChildren(caller));
 }
コード例 #7
0
 protected override DataTable getVariableImpl(VariableDefinition def, CallerController <CallerData> caller,
                                              RequestController <RequestData> request)
 {
     try
     {
         IncomingAggreGateCommand ans = sendGetVariable(def.getName());
         return(decodeRemoteDataTable(def.getFormat(), ans.getEncodedDataTableFromReply()));
     }
     catch (Exception ex)
     {
         Log.CONTEXT_VARIABLES.debug("Error getting variable '" + def.getName() + "' from context '" + this.getPath() + "'", ex);
         throw new ContextException(ex.Message, ex);
     }
 }
コード例 #8
0
 protected override Boolean setVariableImpl(VariableDefinition def, CallerController <CallerData> caller,
                                            RequestController <RequestData> request, DataTable value)
 {
     try
     {
         controller.sendCommandAndCheckReplyCode(ClientCommandUtils.setVariableOperation(this.getPath(), def.getName(), value.encode(controller.createClassicEncodingSettings(true))));
         return(true);
     }
     catch (Exception ex)
     {
         Log.CONTEXT_VARIABLES.debug("Error setting veriable '" + def.getName() + "' of context '" + this.getPath() + "'", ex);
         throw new ContextException(ex.Message, ex);
     }
 }
コード例 #9
0
        public void validate(Context context, ContextManager contextManager, CallerController <CallerData> caller)
        {
            if (this.isInvalid())
            {
                throw new ValidationException(invalidationMessage);
            }

            foreach (var tv in this.getFormat().getTableValidators())
            {
                tv.validate(this);
            }

            foreach (DataRecord rec in this)
            {
                foreach (RecordValidator rv in getFormat().getRecordValidators())
                {
                    rv.validate(this, rec);
                }
                foreach (FieldFormat ff in getFormat())
                {
                    List <FieldValidator> fvs = ff.getValidators();
                    foreach (FieldValidator fv in fvs)
                    {
                        try
                        {
                            fv.validate(context, contextManager, caller, rec.getValue(ff.getName()));
                        }
                        catch (ValidationException ex)
                        {
                            throw new ValidationException("Error validating value of field '" + ff.ToString() + "': " + ex.Message, ex);
                        }
                    }
                }
            }
            foreach (FieldFormat ff in getFormat())
            {
                if (ff.getType() == FieldFormat.DATATABLE_FIELD)
                {
                    foreach (DataRecord rec in this)
                    {
                        DataTable nested = rec.getDataTable(ff.getName());
                        if (nested != null)
                        {
                            nested.validate(context, contextManager, caller);
                        }
                    }
                }
            }
        }
コード例 #10
0
 public override Context getChild(String name, CallerController <CallerData> callerController)
 {
     if (base.getChild(name, callerController) == null)
     {
         try
         {
             init();
         }
         catch (ContextException ex)
         {
             Log.CONTEXT_CHILDREN.warn("Error initializing children of remote context", ex);
         }
     }
     return(base.getChild(name, callerController));
 }
コード例 #11
0
ファイル: ContextUtils.cs プロジェクト: AlexBurmatov/AggAgent
        public static List <Context> expandContextMaskToContexts(String mask, ContextManager contextManager,
                                                                 CallerController <CallerData> caller)
        {
            var res = new List <Context>();

            var paths = expandContextMaskToPaths(mask, contextManager, caller);

            foreach (var path in paths)
            {
                var con = contextManager.get(path, caller);
                if (con != null)
                {
                    res.Add(con);
                }
            }

            return(res);
        }
コード例 #12
0
ファイル: ContextUtils.cs プロジェクト: AlexBurmatov/AggAgent
        public static List <String> expandContextMaskToPaths(String mask,
                                                             ContextManager contextManager,
                                                             CallerController <CallerData> caller)
        {
            var result = new List <String>();

            var parts = StringUtils.split(mask, CONTEXT_NAME_SEPARATOR[0]);

            for (var i = 0; i < parts.Count; i++)
            {
                if (!parts[i].Equals(CONTEXT_GROUP_MASK))
                {
                    continue;
                }
                var head = new StringBuilder();

                for (var j = 0; j < i; j++)
                {
                    if (j > 0)
                    {
                        head.Append(CONTEXT_NAME_SEPARATOR);
                    }
                    head.Append(parts[j]);
                }

                var tail = new StringBuilder();

                for (var j = i + 1; j < parts.Count; j++)
                {
                    tail.Append(CONTEXT_NAME_SEPARATOR);
                    tail.Append(parts[j]);
                }

                result.AddRange(expandContextMaskPart(head.ToString(), tail.ToString(), contextManager, caller));
                return(result);
            }

            if (contextManager.get(mask, caller) != null)
            {
                result.Add(mask);
            }

            return(result);
        }
コード例 #13
0
ファイル: ContextUtils.cs プロジェクト: AlexBurmatov/AggAgent
        private static List <String> expandContextMaskPart(String head, String tail,
                                                           ContextManager contextManager,
                                                           CallerController <CallerData> caller)
        {
            var result = new List <String>();

            var con = contextManager.get(head, caller);

            if (con == null)
            {
                return(result);
            }

            foreach (var child in con.getChildren(caller))
            {
                result.AddRange(
                    expandContextMaskToPaths(head + CONTEXT_NAME_SEPARATOR + child.getName() + tail,
                                             contextManager, caller));
            }

            return(result);
        }
コード例 #14
0
 public DataTable get(Context con, VariableDefinition def, CallerController <CallerData> caller,
                      RequestController <RequestData> request)
 {
     return(getter.Invoke(con, def, caller, request));
 }
コード例 #15
0
 public Boolean has(CallerController <CallerData> caller, Permissions requiredPermissions, Context accessedContext)
 {
     return(true);
 }
コード例 #16
0
        public object checkAndConvertValue(Context context, ContextManager contextManager, CallerController <CallerData> caller, object value, bool validate)
        {
            if (!this.isNullable() && value == null)
            {
                throw new ValidationException("Nulls are not permitted in " + this);
                //throw new ValidationException(MessageFormat.format(Cres.get().getString("dtNullsNotPermitted"), this.toString()));
            }

            value = this.convertValue(value);

            if (value != null && !this.isExtendableSelectionValues() && this.hasSelectionValue(value))
            {
                if (validate)
                {
                    throw new ValidationException(Cres.get().getString("dtValueNotInSelVals") + value + " (" + value.GetType().Name + ")");
                }
                else
                {
                    value = this.getDefaultValue();
                }
            }

            if (validate)
            {
                foreach (var fv in this.validators)
                {
                    value = fv.validate(context, contextManager, caller, value);
                }
            }

            return(value);
        }
コード例 #17
0
 public virtual bool set(Context con, VariableDefinition def, CallerController <CallerData> caller, RequestController <RequestData> request, DataTable value)
 {
     this.setter.Invoke(con, def, caller, request, value);
     return(true);
 }
コード例 #18
0
 public override List <EventDefinition> getEventDefinitions(CallerController <CallerData> caller)
 {
     initEventsLoggingErrors();
     return(base.getEventDefinitions(caller));
 }
コード例 #19
0
 public override List <FunctionDefinition> getFunctionDefinitions(CallerController <CallerData> caller)
 {
     initFunctionsLoggingErrors();
     return(base.getFunctionDefinitions(caller));
 }
コード例 #20
0
        public override object validate(Context context, ContextManager contextManager, CallerController <CallerData> caller, object value)
        {
            Regex reg;

            try
            {
                reg = new Regex(regex);
            }
            catch (ArgumentException ex)
            {
                throw new ValidationException(ex.Message, ex);
            }

            if (value != null && !reg.IsMatch(value.ToString()))
            {
                throw new ValidationException(this.message ?? string.Format(Cres.get().getString("dtValueDoesNotMatchPattern"), value, this.regex));
            }

            return(value);
        }
コード例 #21
0
        public override object validate(Context context, ContextManager contextManager, CallerController <CallerData> caller, object value)
        {
            if (value == null)
            {
                return(value);
            }

            if (value is Data)
            {
                var data = value as Data;

                if (data.getData() != null)
                {
                    IComparable size = data.getData().Length;
                    this.compare(size, null, null);
                }
            }
            else if (value is string)
            {
                this.compare(value.ToString().Length, Cres.get().getString("dtValueTooShort"), Cres.get().getString("dtValueTooLong"));
            }
            else
            {
                if (!(value is IComparable))
                {
                    throw new ValidationException(Cres.get().getString("dtValueNotComparable"));
                }

                var cv = (IComparable)value;

                this.compare(cv, null, null);
            }

            return(value);
        }
コード例 #22
0
            public override object validate(Context context, ContextManager contextManager, CallerController <CallerData> caller, object value)
            {
                DataTable def = (DataTable)this.ownerFormat.getDefaultValue();

                if (def == null || def.getFieldCount() == 0)
                {
                    return(value);
                }

                DataTable dt = (DataTable)value;

                if (dt == null)
                {
                    return(value);
                }

                string msg = dt.getFormat().extendMessage(def.getFormat());

                if (msg != null)
                {
                    DataTable newValue = def.Clone() as DataTable;

                    // TODO: add data replication and validation
                    //DataTableReplication.copy(dt, newValue, true, true, true);
                    //value = newValue;

                    throw new NotImplementedException("DataTable copy is not implemented yet");
                }

                return(value);
            }
コード例 #23
0
 public DataTable execute(Context con, FunctionDefinition def, CallerController <CallerData> caller,
                          RequestController <RequestData> request, DataTable parameters)
 {
     return(executor.Invoke(con, def, caller, request, parameters));
 }
コード例 #24
0
        public static List <EventDefinition> getEventDefinitions(ContextManager cm, String contextMask, String eventsMask, CallerController <CallerData> caller)
        {
            var events   = new List <EventDefinition>();
            var contexts = ContextUtils.expandContextMaskToContexts(contextMask, cm, caller);

            foreach (var context in contexts)
            {
                events.AddRange(getEvents(context, eventsMask, caller));
            }

            return(events);
        }
コード例 #25
0
 public Context get(String contextName, CallerController <CallerData> caller)
 {
     return(getRoot().get(contextName, caller));
 }
コード例 #26
0
 public override List <VariableDefinition> getVariableDefinitions(CallerController <CallerData> caller)
 {
     initVariablesLoggingErrors();
     return(base.getVariableDefinitions(caller));
 }
コード例 #27
0
 protected void setCallerController(CallerController <CallerData> aCallerController)
 {
     callerController = aCallerController;
 }
コード例 #28
0
 public abstract object validate(Context context, ContextManager contextManager, CallerController <CallerData> caller, object value);