예제 #1
0
        /// <summary>
        /// Find all CalculationSeries (Equations) that reference this Series.  Use the tablename
        /// of this series as the variable to look for in each equation.
        /// </summary>
        /// <param name="cs"></param>
        /// <returns></returns>
        private List <CalculationSeries> BuildDependencies(CalculationSeries cs)
        {
            var rval = new List <CalculationSeries>();

            var    vars = cs.GetDependentVariables();
            string msg  = cs.Table.TableName + " depends on :";

            TimeSeriesName cName = new TimeSeriesName(cs.Table.TableName);

            foreach (var vn in vars)
            {
                TimeSeriesName tn = new TimeSeriesName(vn, cName.interval);

                if (tn.GetTableName() == cs.Table.TableName)
                {
                    Logger.WriteLine(cs.Expression);
                    Logger.WriteLine("Warning: prevented recursive dependency " + tn.GetTableName());
                    continue;
                }
                var dependents = list.FindAll(x => x.Table.TableName == tn.GetTableName());

                foreach (var d in dependents)
                {
                    msg += d.Table.TableName + ",";
                }

                rval.AddRange(dependents);
            }

            Logger.WriteLine(msg);

            return(rval);
        }
예제 #2
0
            public int AddRow(string siteID, int parentid, string units, string pcode, string expression = "", TimeInterval interval = TimeInterval.Irregular)
            {
                var    provider = "Series";
                string iconName = "";

                if (expression != "")
                {
                    provider = "CalculationSeries";
                    iconName = "sum";
                }
                var tn = new TimeSeriesName(siteID + "_" + pcode, interval);

                string tableName = tn.GetTableName();

                var rows = Select("tablename = '" + tableName + "'");

                if (rows.Length > 0)
                {
                    Console.WriteLine("Warning table:'" + tableName + "' allready exists");
                }

                int rval = NextID();

                AddSeriesCatalogRow(rval, parentid, 0, 1, iconName, siteID + "_" + pcode, siteID, units, interval.ToString(),
                                    pcode, tableName, provider, "", expression, "", 1);
                return(rval);
            }
예제 #3
0
            public static void Set(string name, string value, TimeSeriesName tn, BasicDBServer svr)
            {
                var tableName = tn.GetTableName();
                var sc        = svr.Table("seriescatalog", "select * from seriescatalog where tablename = '" + tableName + "'");

                if (sc.Rows.Count == 1)
                {
                    int id = Convert.ToInt32(sc.Rows[0]["id"]);
                    Set(name, value, id, svr);
                }
                else
                {
                    var msg = "Error: tablename:" + tableName + "not found (or duplicated) in the seriescatalog";
                    Logger.WriteLine(msg);
                    throw new KeyNotFoundException(msg);
                }
            }
예제 #4
0
        public CalculationSeries[] GetDependentCalculations(string siteID, string pcode)
        {
            TimeSeriesDependency td = new TimeSeriesDependency(m_dependencyList);
            TimeSeriesName       tn = new TimeSeriesName(siteID + "_" + pcode, m_interval);
            var list = td.LookupCalculations(tn.GetTableName(), m_interval).ToArray();

            var cList = new List <CalculationSeries>();

            foreach (var item in list)
            {
                if (item is CalculationSeries)
                {
                    cList.Add(item as CalculationSeries);
                }
            }
            return(cList.ToArray());
        }
예제 #5
0
        /// <summary>
        /// Return list of all calculations that may need to be performed
        /// based on this inputSeries
        /// </summary>
        /// <param name="inputSeries"></param>
        /// <returns></returns>
        public SeriesList LookupCalculations(string tableName, TimeInterval interval)
        {
            var rval = new SeriesList();

            if (inputDictionary == null)
            {
                inputDictionary = new Dictionary <string, List <CalculationSeries> >();
                foreach (CalculationSeries cs in list)
                {
                    var vars = cs.GetDependentVariables();
                    foreach (var varName in vars)
                    {
                        TimeSeriesName tn = new TimeSeriesName(varName, interval);
                        if (!tn.Valid)
                        {
                            Console.WriteLine("Error: Skipped Invalid equation .... " + cs.Expression);
                        }
                        else
                        {
                            AddToDictionary(tn.GetTableName(), cs);
                        }
                    }
                }
            }

            Logger.WriteLine("LookupCalculations(" + tableName + ")");
            Logger.WriteLine("inputDictionary.Count = " + inputDictionary.Count);

            TimeSeriesName n   = new TimeSeriesName(tableName, interval);
            var            key = n.GetTableName();

            if (this.inputDictionary.ContainsKey(key))
            {
                rval.AddRange(inputDictionary[key].ToArray());
            }

            return(rval);
        }
예제 #6
0
 private void InitInputDictionary(TimeInterval interval)
 {
     if (inputDictionary == null)
     {
         inputDictionary = new Dictionary <string, List <CalculationSeries> >();
         foreach (CalculationSeries cs in list)
         {
             var vars = cs.GetDependentVariables();
             foreach (var varName in vars)
             {
                 TimeSeriesName tn = new TimeSeriesName(varName, interval);
                 if (!tn.Valid)
                 {
                     Console.WriteLine("Warning: Skipped non-series parameter/variable .... " + varName);
                 }
                 else
                 {
                     AddToDictionary(tn.GetTableName(), cs);
                 }
             }
         }
     }
 }
예제 #7
0
        /// <summary>
        /// Return list of all calculations that may need to be performed
        /// based on this inputSeries
        /// </summary>
        /// <param name="inputSeries"></param>
        /// <returns></returns>
        public List <CalculationSeries> LookupCalculations(string tableName, TimeInterval interval)
        {
            var rval = new List <CalculationSeries>();

            InitInputDictionary(interval);

            TimeSeriesName n = new TimeSeriesName(tableName, interval);

            var key = n.GetTableName();

            if (this.inputDictionary.ContainsKey(key))
            {
                //Logger.WriteLine("inputDictionary.Count = " + inputDictionary.Count);
                //Logger.WriteLine("LookupCalculations(" + tableName + ")");

                var x = inputDictionary[key];


                rval.AddRange(x.ToArray());
            }

            return(rval);
        }