示例#1
0
    public static bool SynchronizeColumns(this ChartScript chartScript, IChartBase chart, PostRetrievingContext?ctx)
    {
        bool result = false;

        for (int i = 0; i < chartScript.Columns.Count; i++)
        {
            if (chart.Columns.Count <= i)
            {
                chart.Columns.Add(new ChartColumnEmbedded());
                result = true;
            }

            chart.Columns[i].parentChart  = chart;
            chart.Columns[i].ScriptColumn = chartScript.Columns[i];

            if (!result)
            {
                result = chart.Columns[i].IntegrityCheck() != null;
            }
        }

        if (chart.Columns.Count > chartScript.Columns.Count)
        {
            chart.Columns.RemoveRange(chartScript.Columns.Count, chart.Columns.Count - chartScript.Columns.Count);
            result = true;
        }

        if (chart.Parameters.Modified != ModifiedState.Sealed)
        {
            var chartScriptParameters = chartScript.AllParameters().ToList();

            if (chart.Parameters.Select(a => a.Name).OrderBy().SequenceEqual(chartScriptParameters.Select(a => a.Name).OrderBy()))
            {
                foreach (var cp in chart.Parameters)
                {
                    var sp = chartScriptParameters.FirstEx(a => a.Name == cp.Name);

                    cp.parentChart     = chart;
                    cp.ScriptParameter = sp;

                    //if (cp.PropertyCheck(() => cp.Value).HasText())
                    //    cp.Value = sp.DefaultValue(cp.GetToken());
                }
            }
            else
            {
                var byName = chart.Parameters.ToDictionary(a => a.Name);
                chart.Parameters.Clear();
                foreach (var sp in chartScriptParameters)
                {
                    var cp = byName.TryGetC(sp.Name);

                    if (cp != null)
                    {
                        cp.parentChart     = chart;
                        cp.ScriptParameter = sp;
                        ctx?.ForceModifiedState.Add(cp, ModifiedState.SelfModified);
                        //if (cp.PropertyCheck(() => cp.Value).HasText())
                        //    cp.Value = sp.DefaultValue(cp.GetToken());
                    }
                    else
                    {
                        cp = new ChartParameterEmbedded
                        {
                            Name            = sp.Name,
                            parentChart     = chart,
                            ScriptParameter = sp,
                        };

                        cp.Value = sp.ValueDefinition.DefaultValue(sp.GetToken(chart));
                    }

                    chart.Parameters.Add(cp);
                }
            }
        }

        return(result);
    }
示例#2
0
 private static void RegisterScript(ChartScript chartScript)
 {
     Scripts.Add(chartScript.Symbol, chartScript);
 }