Exemple #1
0
        public VariableRef GetStateVarRef(string stateID)
        {
            string calcID      = this.CalcConfig.ID;
            string fullStateID = calcID + Config.State.ID_Separator + stateID;

            return(VariableRef.Make(moduleID, fullStateID, "Value"));
        }
Exemple #2
0
        private static async Task OnReceivedVarWriteRequest(MqttVarReceive mqtt, Connection clientFAST, MqttApplicationMessageReceivedEventArgs arg)
        {
            await arg.AcknowledgeAsync(CancellationToken.None);

            var    msg   = arg.ApplicationMessage;
            string objID = GetObjIdFromTopicName(msg.Topic);

            Console.WriteLine($"On got write req for {objID}");

            byte[] payloadBytes = msg.Payload;
            if (payloadBytes != null && payloadBytes.Length > 0)
            {
                string    payload = Encoding.UTF8.GetString(payloadBytes);
                DataValue value   = DataValue.FromJSON(payload);

                var variable = VariableRef.Make(mqtt.ModuleID, objID, "Value");
                VTQ vtq      = VTQ.Make(value, Timestamp.Now, Quality.Good);
                try {
                    await clientFAST.WriteVariable(variable, vtq);
                }
                catch (Exception exp) {
                    Exception e = exp.GetBaseException() ?? exp;
                    Console.Error.WriteLine($"Failed to write variable {variable}: {e.Message}");
                }
            }
        }
        public void CompileVariableRef(VariableRef variableRef)
        {
            XmlElement tmpElement = document.CreateElement("VariableRef");

            tmpElement.SetAttribute("Name", variableRef.Name);
            currentElement.AppendChild(tmpElement);
        }
Exemple #4
0
        public VariableRef GetOutputVarRef(string outputID)
        {
            string calcID       = this.CalcConfig.ID;
            string fullOutputID = calcID + Config.Output.ID_Separator + outputID;

            return(VariableRef.Make(moduleID, fullOutputID, "Value"));
        }
        public void MergeDefaults(string defaultJson, IDictionary <string, NestedScope> existing)
        {
            var data      = JsonConvert.DeserializeObject <NestedData>(defaultJson);
            var variables = LoadData(data, Constants.PackageManagerIdentity).ToList();

            // Complete the hierarchy and then merge the variables into the hierarchy
            var scopes = NestedScope.BuildHeirarchy(variables.Select(v => v.PackageId), ErrorCache, existing);

            foreach (var variable in variables)
            {
                var varRef = new VariableRef {
                    PackageId = variable.PackageId, VariableName = variable.Name
                };
                if (scopes[variable.PackageId].TryFindVariable(varRef, out var existingVariable))
                {
                    existingVariable.Default = variable.Default;
                    if (existingVariable.Type != variable.Type)
                    {
                        existingVariable.Type  = variable.Type;
                        existingVariable.Value = null;
                    }
                }
                else
                {
                    scopes[variable.PackageId].Store(variable);
                }
            }
        }
Exemple #6
0
        private async Task LoadData()
        {
            var         result = new List <AggregatedEvent>();
            VariableRef varRef = GetVar();
            Timestamp   t      = Timestamp.Max;

            while (true)
            {
                VTTQ[] data = await connection.HistorianReadRaw(varRef, Timestamp.Empty, t, 1000, BoundingMethod.TakeLastN);

                var events = data.Select(VTTQ2AggregatedEvent)
                             .Where(ev => ev.IsWarningOrAlarm() && ev.State != EventState.Reset)
                             .ToList();

                if (events.Count == 0)
                {
                    break;
                }

                events.AddRange(result);
                result = events;

                t = data[0].T.AddMillis(-1);
            }

            aggregatedWarningsAndAlarms = result;

            if (aggregatedWarningsAndAlarms.Count > 0)
            {
                latestUsedTimestamp = aggregatedWarningsAndAlarms.Last().TimeFirst;
            }
        }
        public VariableInfo LoadConstantSetting(Constant constant, string settingName)
        {
            // Lookup a previously stored version of this variable
            var variableRef = new VariableRef
            {
                PackageId    = PackageId,
                VariableName = $"constant.{settingName}"
            };

            if (!Scope.TryFindVariable(variableRef, out var variable))
            {
                // This is the first time a constant has been used here
                // so create a new variable for it
                variable = new Variable {
                    Name = variableRef.VariableName
                };
            }

            variable.Value       = variable.Default = constant.Value.ToString();
            variable.Units       = constant.Units.GetStringValue();
            variable.Type        = constant.SupportedType.GetStringValue();
            variable.IsGenerated = true;

            return(VariableInfo.Extract(variable, PackageId, ErrorCache));
        }
Exemple #8
0
        public VariableRefRef GetVariableRefRef(string name, bool recursively, bool throwException)
        {
            VariableRef varRef = null;
            Overlay     overlay;
            BasicBlock  block;

            if (recursively)
            {
                var overlayBlock = this.LocateVariableBlock(name, throwException);
                if (overlayBlock == null)
                {
                    Debug.Assert(!throwException);
                    return(null);
                }

                overlay = overlayBlock.Overlay;
                block   = overlayBlock.Block;
                varRef  = block.GetVariableDict(overlay)[name];
            }
            else
            {
                block = this.Block;
                for (overlay = this.Overlay; overlay != null; overlay = overlay.ParentOverlay)
                {
                    if (block.GetVariableDict(overlay).ContainsKey(name))
                    {
                        varRef = block.GetVariableDict(overlay)[name];
                        break;
                    }
                }

                if (varRef == null)
                {
                    if (throwException)
                    {
                        throw new Exception($"Unexpected variable \"{name}\".");
                    }
                    else
                    {
                        return(null);
                    }
                }
            }

            // important: copy the variableRef to this overlay
            if (overlay != this.Overlay)
            {
                Debug.Assert(!(block.GetVariableDict(this.Overlay).ContainsKey(name)));

                // make a shallow copy of this variableRef
                var newRef = varRef.Clone() as VariableRef;
                block.GetVariableDict(this.Overlay).Add(name, newRef);
                overlay = this.Overlay;
                //block = block;
                varRef = newRef;
            }

            return(new VariableRefRef(varRef));
        }
 public VariableInfo LookupReferencedVariable(VariableRef variableRef)
 {
     if (!Scope.TryFindVariable(variableRef, out var variable))
     {
         ErrorCache.AddError($"Could not find variable: '{variableRef.ToFullName()}'");
         return(null);
     }
     return(VariableInfo.Extract(variable, variableRef.PackageId, ErrorCache));
 }
        public virtual void Store(Variable variable)
        {
            var varRef = new VariableRef {
                PackageId = variable.PackageId, VariableName = variable.Name
            };

            byFullName[varRef.ToFullName()] = variable;
            byLocalName[variable.Name]      = variable;
        }
Exemple #11
0
        /// <summary>
        /// Generates a delegate that wraps a scripted function and that could be invoked from the user code.
        /// </summary>
        /// <param name="function">The name of the function to be wrapped</param>
        /// <param name="delegateType">The type of delegate to return</param>
        /// <returns>A <see cref="Delegate"/> of the <paramref name="delegateType"/> type</returns>
        /// <remarks>For the returned delegate to run properly, the ScriptEngine from which it has been created must be kept alive</remarks>
        public Delegate GetDelegate(string function, Type delegateType)
        {
            var varRef = new VariableRef(function);

            RuntimeServices.Interpreter = interpreter;
            varRef.AcceptCompiler(interpreter);

            return(interpreter.ReturnedValue.AsFunction.ToDelegate(delegateType));
        }
        private VariableInfo(Variable variable, VariableRef varRef)
        {
            if (variable.Name != varRef.VariableName)
            {
                throw new ArgumentException("Name of variable and reference don't match.");
            }

            Variable = variable;
            Ref      = varRef;
        }
        private async Task ExpectCount(VariableRef v, long c)
        {
            if (con == null)
            {
                throw new Exception("con == null");
            }
            long count = await con.HistorianCount(v, Timestamp.Empty, Timestamp.Max);

            assert(count == c, $"count == {c}");
        }
Exemple #14
0
        public void LookupReferencedAgeSettingUnsuccessfully()
        {
            var varRef = new VariableRef {
                PackageId = TestPackageId, VariableName = "var.name"
            };
            var variableInfo = loader.LookupReferencedVariable(varRef);

            variableInfo.Should().BeNull();
            errorCache.ShouldContain($"Could not find variable: '{varRef.ToFullName()}'");
        }
Exemple #15
0
        private TreeNode MapObjectInfo2TreeNode(ObjectInfo obj, List <ObjectInfo> siblings, Dictionary <ObjectRef, List <ObjectInfo> > map)
        {
            List <TreeNode> children = null;

            if (map.ContainsKey(obj.ID))
            {
                var ch = map[obj.ID];
                children = ch.Select(n => MapObjectInfo2TreeNode(n, ch, map)).ToList();
            }
            else
            {
                children = new List <TreeNode>();
            }

            var listVariables = new List <VariableVal>();

            foreach (Variable v in obj.Variables)
            {
                var key = VariableRef.Make(obj.ID, v.Name);
                VTQ vtq;
                if (mapVariables.TryGetValue(key, out vtq))
                {
                    listVariables.Add(new VariableVal()
                    {
                        Name = v.Name,
                        V    = vtq.V,
                        T    = vtq.T,
                        Q    = vtq.Q
                    });
                }
            }

            int count = 1;
            int idx   = 0;

            if (obj.Parent.HasValue)
            {
                var p = obj.Parent.Value;
                idx = p.Index;
                string mem = p.Name;
                count = siblings.Count(sib => sib.Parent.Value.Name == mem);
            }

            return(new TreeNode()
            {
                ID = obj.ID.ToString(),
                ParentID = obj.Parent.HasValue ? obj.Parent.Value.Object.ToString() : "",
                First = idx == 0,
                Last = idx + 1 == count,
                Name = obj.Name,
                Type = obj.ClassName,
                Children = children,
                Variables = listVariables
            });
        }
Exemple #16
0
        public override async Task<ReqResult> OnUiRequestAsync(string command, DataValue parameters) {

            switch (command) {
                case "Read":
                    Console.Out.WriteLine("Parameters: " + parameters.ToString());
                    VTQ vtq = await Connection.ReadVariable(VariableRef.Make("IO", "A", "Value"));
                    return ReqResult.OK(vtq);

                default:
                    return ReqResult.Bad("Unknown command: " + command);
            }
        }
Exemple #17
0
 private static VariableRef MakeVarRefFromAddress(string address, string moduleID)
 {
     try {
         string[]? arr = StdJson.ObjectFromString <string[]>(address);
         if (arr != null && arr.Length == 2 && arr[0].Length > 0 && arr[1].Length > 0)
         {
             return(VariableRef.Make(moduleID, arr[0], arr[1]));
         }
     }
     catch (Exception) {}
     return(VariableRef.Make(moduleID, address, "Value"));
 }
Exemple #18
0
        public override async Task <VTQ[]> ReadDataItems(string group, IList <ReadRequest> items, Duration?timeout)
        {
            if (!await TryConnect() || connection == null)
            {
                return(GetBadVTQs(items));
            }

            var readHelper = new ReadManager <VariableRef, VariableValue>(items, readRequest => mapId2Info[readRequest.ID].VarRef);
            List <VariableRef> dataItemsToRead = readHelper.GetRefsList();

            try {
                List <VariableValue> readResponse = await connection.ReadVariablesSyncIgnoreMissing(dataItemsToRead);

                if (readResponse.Count == dataItemsToRead.Count)
                {
                    readHelper.SetAllResults(readResponse, (vv, request) => vv.Value);
                    return(readHelper.values);
                }
                else
                {
                    var badDataItems = new List <DataItem>();
                    for (int i = 0; i < dataItemsToRead.Count; ++i)
                    {
                        VariableRef v = dataItemsToRead[i];
                        try {
                            VariableValue value = readResponse.First(rr => rr.Variable == v);
                            readHelper.SetSingleResult(i, value.Value);
                        }
                        catch (Exception) { // not found
                            ReadRequest req = readHelper.GetReadRequest(i);
                            readHelper.SetSingleResult(i, VTQ.Make(req.LastValue.V, Timestamp.Now, Quality.Bad));
                            DataItem dataItem = mapId2Info[req.ID].Item;
                            badDataItems.Add(dataItem);
                        }
                    }

                    string[] dataItemNamesWithAddresss = badDataItems.Select(di => di.Name + ": " + di.Address).ToArray();
                    string   details = string.Join("; ", dataItemNamesWithAddresss);
                    string   msg     = badDataItems.Count == 1 ? $"Invalid address for data item '{badDataItems[0].Name}': {badDataItems[0].Address}" : $"Invalid address for {badDataItems.Count} data items";
                    LogError("Invalid_Addr", msg, badDataItems.Select(di => di.ID).ToArray(), details);

                    return(readHelper.values);
                }
            }
            catch (Exception exp) {
                Exception e = exp.GetBaseException() ?? exp;
                LogWarn("ReadExcept", $"Read exception: {e.Message}", details: e.ToString());
                Task ignored = CloseConnection();
                return(GetBadVTQs(items));
            }
        }
Exemple #19
0
        public static List <VariableRef> MakeTestData(int n)
        {
            List <VariableRef> res = new List <VariableRef>(n);

            List <VariableRef> varRefs = MakeVarRefs();

            for (int i = 0; i < n; ++i)
            {
                VariableRef varRef = varRefs[i % varRefs.Count];
                res.Add(varRef);
            }

            return(res);
        }
Exemple #20
0
        private async Task TestHistoryRaw(VariableRef v, Timestamp tStart, Timestamp tEnd, int maxValues, params VTQ[] expectedData)
        {
            Action <VTTQ[]> test = (vttqs) => {
                assert(vttqs.Length == expectedData.Length, $"vttqs.Length == {expectedData.Length}");
                for (int i = 0; i < vttqs.Length; ++i)
                {
                    assert(vttqs[i].T == expectedData[i].T, $"vttqs[{i}].T == {expectedData[i].T}");
                    assert(vttqs[i].Q == expectedData[i].Q, $"vttqs[{i}].Q == {expectedData[i].Q}");
                    assert(vttqs[i].V == expectedData[i].V, $"vttqs[{i}].V == {expectedData[i].V}");
                }
            };

            test(await con.HistorianReadRaw(v, tStart, tEnd, maxValues, BoundingMethod.TakeFirstN));
            test(await con.HistorianReadRaw(v, tStart, tEnd, maxValues, BoundingMethod.TakeLastN));
        }
Exemple #21
0
        public void LookupReferencedAgeSettingSuccessfully()
        {
            var varRef = new VariableRef {
                PackageId = TestPackageId, VariableName = "var.name"
            };
            var existing = MakeSampleVariable(TestPackageId, varRef.VariableName);

            loader.Scope.Store(existing);

            var variableInfo = loader.LookupReferencedVariable(varRef);

            variableInfo.Variable.Should().BeSameAs(existing);
            variableInfo.Ref.PackageId.Should().Be(TestPackageId);
            errorCache.ShouldHaveNoErrors();
        }
        public VariableInfo LookupGlobalDefaultSetting(string settingName)
        {
            var globalRef = new VariableRef
            {
                PackageId    = Constants.PackageManagerIdentity,
                VariableName = settingName
            };

            if (!Scope.TryFindVariable(globalRef, out var variable))
            {
                ErrorCache.AddError($"Could not find global default variable: '{globalRef.ToFullName()}'");
                return(null);
            }
            return(VariableInfo.Extract(variable, globalRef.PackageId, ErrorCache));
        }
Exemple #23
0
        //public void UpdateInputValues(VariableValue[] variables) {
        //    foreach (Config.Input input in Config.Inputs) {
        //        if (input.Variable.HasValue) {
        //            VariableRef va = input.Variable.Value;
        //            int idx = variables.FindIndex(v => v.Variable == va);
        //            if (idx > -1) {
        //                mapInputValues[input.ID] = variables[idx];
        //            }
        //        }
        //    }
        //}

        public void UpdateInputValues(List <VariableRef> variables, VTQs values)
        {
            foreach (Config.Input input in CalcConfig.Inputs)
            {
                if (input.Variable.HasValue)
                {
                    VariableRef va  = input.Variable.Value;
                    int         idx = variables.FindIndex(v => v == va);
                    if (idx > -1)
                    {
                        mapInputValues[input.ID] = VariableValue.Make(va, values[idx]);
                    }
                }
            }
        }
Exemple #24
0
        private static List <VariableRef> MakeVarRefs()
        {
            return(new List <VariableRef>()
            {
                VariableRef.Make("IO", "ObjectName1", "Value"),
                VariableRef.Make("IO", "ObjectName2", "Value"),
                VariableRef.Make("IO", "ObjectName3", "Value"),
                //VariableRef.Make("IO", "INCTRL_WSBDN_FP_BB1_DENI_NOXC_FallbackSP", "Value"),
                VariableRef.Make("CALC", "Signal_Object_Name1", "Value"),
                VariableRef.Make("CALC", "Signal_Object_Name2", "Value"),
                VariableRef.Make("CALC", "Signal_Object_Name3", "Value"),
                //VariableRef.Make("CALC", "Signal_INCTRL_WSBDN_FP_BB1_DENI_NOXC_ymin_Min_PumpCapacity", "Value"),

                VariableRef.Make("IO2", "ObjectName1", "Value1"),
                VariableRef.Make("IO3", "ObjectName1", "Value2"),
                //VariableRef.Make("IO4", "ObjectName1", "Value3"),
                //VariableRef.Make("IO5", "ObjectName1", "Value4"),
                //VariableRef.Make("IO6", "ObjectName1", "Value5"),
                //VariableRef.Make("IO7", "ObjectName1", "Value6"),
                //VariableRef.Make("IO8", "ObjectName1", "Value7"),
                //VariableRef.Make("IO9", "ObjectName1", "Value8"),
                // VariableRef.Make("IO2", "ObjectName1","Value9"),
                //VariableRef.Make("IO3", "ObjectName1", "Value10"),
                //VariableRef.Make("IO4", "ObjectName1", "Value11"),
                //VariableRef.Make("IO5", "ObjectName1", "Value12"),
                //VariableRef.Make("IO6", "ObjectName1", "Value13"),
                //VariableRef.Make("IO7", "ObjectName1", "Value14"),
                //VariableRef.Make("IO8", "ObjectName1", "Value15"),
                //VariableRef.Make("IO9", "ObjectName1", "Value16"),
                //VariableRef.Make("IO9", "ObjectName1", "Value17"),
                //VariableRef.Make("IO9", "ObjectName1", "Value18"),
                //VariableRef.Make("IO9", "ObjectName1", "Value19"),
                //VariableRef.Make("IO9", "ObjectName1", "Value20"),
                //VariableRef.Make("IO9", "ObjectName1", "Value21"),
                //VariableRef.Make("IO9", "ObjectName1", "Value22"),
                //VariableRef.Make("IO9", "ObjectName1", "Value23"),
                //VariableRef.Make("IO9", "ObjectName1", "Value24"),
                //VariableRef.Make("IO9", "ObjectName1", "Value25"),
                //VariableRef.Make("IO9", "ObjectName1", "Value26"),
                //VariableRef.Make("IO9", "ObjectName1", "Value27"),
                //VariableRef.Make("IO9", "ObjectName1", "Value28"),
                //VariableRef.Make("IO9", "ObjectName1", "Value29"),
                //VariableRef.Make("IO9", "ObjectName1", "Value30"),
                //VariableRef.Make("IO9", "ObjectName1", "Value31"),
                //VariableRef.Make("IO9", "ObjectName1", "Value32"),
                //VariableRef.Make("IO9", "ObjectName1", "Value33"),
            });
        }
Exemple #25
0
        public static List <VariableValue> MakeTestData(int n)
        {
            List <VTQ>           vtqs = Test_VTQ.MakeTestData(n);
            List <VariableValue> res  = new List <VariableValue>(vtqs.Count);

            List <VariableRef> varRefs = MakeVarRefs();

            for (int i = 0; i < vtqs.Count; ++i)
            {
                VTQ         vtq    = vtqs[i];
                VariableRef varRef = varRefs[i % varRefs.Count];
                res.Add(VariableValue.Make(varRef, vtq));
            }

            return(res);
        }
Exemple #26
0
 public void SetInitialOutputValues(Dictionary <VariableRef, VTQ> mapVarValues)
 {
     lastOutputValues.Clear();
     foreach (Config.Output output in CalcConfig.Outputs)
     {
         VariableRef v = GetOutputVarRef(output.ID);
         if (mapVarValues.ContainsKey(v))
         {
             VTQ value = mapVarValues[v];
             lastOutputValues.Add(new OutputValue()
             {
                 OutputID = output.ID,
                 Value    = value
             });
         }
     }
 }
Exemple #27
0
 public void SetInitialStateValues(Dictionary <VariableRef, VTQ> mapVarValues)
 {
     lastStateValues.Clear();
     foreach (Config.State state in CalcConfig.States)
     {
         VariableRef v = GetStateVarRef(state.ID);
         if (mapVarValues.ContainsKey(v))
         {
             VTQ value = mapVarValues[v];
             lastStateValues.Add(new StateValue()
             {
                 StateID = state.ID,
                 Value   = value.V
             });
         }
     }
 }
Exemple #28
0
        public override async Task <VTQ[]> ReadVariables(Origin origin, VariableRef[] variables, Duration?timeout)
        {
            VTQ[] result = new VTQ[variables.Length];

            var adapter2Items = new Dictionary <AdapterState, List <ReadRequest> >();

            for (int i = 0; i < variables.Length; ++i)
            {
                VariableRef vr = variables[i];
                string      id = vr.Object.LocalObjectID;
                if (dataItemsState.ContainsKey(id) && vr.Name == VariableName)
                {
                    ItemState    itemState = dataItemsState[id];
                    AdapterState adapter   = itemState.Adapter;

                    if (!adapter2Items.ContainsKey(adapter))
                    {
                        adapter2Items[adapter] = new List <ReadRequest>();
                    }

                    VTQ value = itemState.LastReadValue;
                    adapter2Items[adapter].Add(new ReadRequest(id, value));
                }
                else
                {
                    result[i] = new VTQ(Timestamp.Empty, Quality.Bad, DataValue.Empty);
                }
            }

            var allReadTasks = new List <Task <VTQ[]> >(adapter2Items.Count);

            foreach (var adapterItems in adapter2Items)
            {
                AdapterState       adapter  = adapterItems.Key;
                List <ReadRequest> requests = adapterItems.Value;

                Task <VTQ[]> task = AdapterReadTask(adapter, requests, timeout);
                allReadTasks.Add(task);
            }

            VTQ[][] resArr = await Task.WhenAll(allReadTasks);

            VTQ[] res = resArr.SelectMany(x => x).ToArray();
            return(res);
        }
Exemple #29
0
        public override async Task <WriteDataItemsResult> WriteDataItems(string group, IList <DataItemValue> values, Duration?timeout)
        {
            if (!await TryConnect() || connection == null)
            {
                var failed = values.Select(div => new FailedDataItemWrite(div.ID, "No connection to server")).ToArray();
                return(WriteDataItemsResult.Failure(failed));
            }

            var writeMan = new WriteManager <VariableValue, VariableError>(values, request => {
                if (mapId2Info.ContainsKey(request.ID))
                {
                    ItemInfo info = mapId2Info[request.ID];
                    return(VariableValue.Make(info.VarRef, request.Value));
                }
                else
                {
                    throw new Exception("No Address defined");
                }
            });

            try {
                var         dataItemsToWrite = writeMan.GetRefsList();
                WriteResult res = await connection.WriteVariablesSyncIgnoreMissing(dataItemsToWrite, timeout);

                if (!res.IsOK())
                {
                    writeMan.AddWriteErrors(res.FailedVariables, failedVar => {
                        VariableRef v = failedVar.Variable;
                        int idx       = dataItemsToWrite.FindIndexOrThrow(vv => vv.Variable == v);
                        string id     = writeMan.GetWriteRequest(idx).ID;
                        return(new FailedDataItemWrite(id, failedVar.Error));
                    });
                }
            }
            catch (Exception exp) {
                Task      ignored = CloseConnection();
                Exception e       = exp.GetBaseException() ?? exp;
                string    msg     = $"Write exception: {e.Message}";
                LogWarn("WriteExcept", msg, details: e.ToString());
                var failed = values.Select(div => new FailedDataItemWrite(div.ID, msg)).ToArray();
                return(WriteDataItemsResult.Failure(failed));
            }

            return(writeMan.GetWriteResult());
        }
Exemple #30
0
        /// <summary>
        /// Generates a method to make it easier to trigger this event.
        /// </summary>
        /// <returns>A <see cref="ClassMethod"/></returns>
        /// <remarks>The so generated method is always private</remarks>
        public ClassMethod CreateTriggerEventMethod()
        {
            var arguments = new Expression[Parameters.Length];

            for (int i = 0; i < arguments.Length; ++i)
            {
                arguments[i] = new VariableRef(Parameters[i].Name);
            }

            var triggerEventFunc = new Function(Parameters,
                                                new Block(new ForEachLoop(ForEachLoop.DEFAULT_KEY_NAME,
                                                                          "handler",
                                                                          PropertyRef.This(HandlerSetName),
                                                                          new FunctionCall("handler", arguments)),
                                                          new Return()));

            return(new ClassMethod(TriggerEventName, Scope.Private, Modifier, triggerEventFunc));
        }