Esempio n. 1
0
        public static IField2d <float> GetWaterinessMap(WaterTableField wtf, IField2d <float> rainfall, float waterPortability = 5f, float waterinessAttenuation = 20f)
        {
            // Generate "water flow" map using the rainfall map and the water table map, characterizing
            // how much water is in an area based on upstream.  Note that, in the simplistic case of
            // identical universal rainfall, this is just a scalar on depth; this whole shindig is
            // intended to support variable rainfall, as characterized by the rainfall map.
            Field2d <float> waterFlow = new Field2d <float>(rainfall);
            float           maxValue  = float.MinValue;

            foreach (TreeNode <Point2d> waterway in wtf.Waterways)
            {
                List <TreeNode <Point2d> > flattenedReversedRiverTree = new List <TreeNode <Point2d> >(waterway);
                flattenedReversedRiverTree.Reverse();

                foreach (var node in flattenedReversedRiverTree)
                {
                    if (node.parent != null)
                    {
                        Point2d cur = node.value;
                        Point2d par = node.parent.value;

                        waterFlow[par.y, par.x] += waterFlow[cur.y, cur.x];
                    }

                    maxValue = Math.Max(maxValue, waterFlow[node.value.y, node.value.x]);
                }
            }
            IField2d <float> waterinessUnblurred = new FunctionField <float>(waterFlow.Width, waterFlow.Height,
                                                                             (x, y) => 1f / (1f + (float)Math.Pow(Math.E, -waterinessAttenuation * waterFlow[y, x] / maxValue)));

            return(new BlurredField(waterinessUnblurred, waterPortability));
        }
Esempio n. 2
0
        private static string BuildFunctionField(FunctionField field)
        {
            var builder = new StringBuilder();

            if (field is CustomFunction)
            {
                var c = (CustomFunction)field;
                builder.Append(c.FunctionName.ToUpper())
                .Append($"({BuildSqlValueList(c.Parameters)}) ");
                return(builder.ToString());
            }

            if (field is AverageField)
            {
                builder.Append("AVG");
            }
            if (field is CountField)
            {
                builder.Append("COUNT");
            }
            if (field is LeftField)
            {
                builder.Append("LEFT");
            }
            if (field is RightField)
            {
                builder.Append("RIGHT");
            }
            if (field is MaxField)
            {
                builder.Append("MAX");
            }
            if (field is MinField)
            {
                builder.Append("MIN");
            }
            if (field is SumField)
            {
                builder.Append("SUM");
            }

            builder.Append("(")
            .Append(field.Type == FunctionType.All ? string.Empty : "DISTINCT ")
            .Append(HBDCommon.GetSqlName(field.Name))
            .Append(") ")
            .Append(BuildAlias(field));

            return(builder.ToString());
        }
Esempio n. 3
0
        /// <summary>
        /// //选择字段时,显示它们的具体信息
        /// </summary>
        /// <param name="dgv"></param>
        /// <param name="e"></param>
        private void SetDgvSource(ref DataGridView dgv, DataGridViewCellEventArgs e)
        {
            dgvDetail.DataSource       = null;
            dgvTableContent.DataSource = null;
            if (e.RowIndex < 0 || e.ColumnIndex < 0)
            {
                return;
            }
            String name         = dgv.Rows[e.RowIndex].Cells[FuncFieldText.NAME].Value.ToString();
            String dataType     = dgv.Rows[e.RowIndex].Cells[FuncFieldText.DATATYPE].Value.ToString();
            String dataTypeName = dgv.Rows[e.RowIndex].Cells[FuncFieldText.DATATYPENAME].Value.ToString();
            String defaultValue = dgv.Rows[e.RowIndex].Cells[FuncFieldText.DEFAULTVALUE].Value.ToString();

            selectedField = new FunctionField(name, dataType, dataTypeName, defaultValue);
            if (String.IsNullOrEmpty(selectedField.Name))
            {
                MessageBox.Show("点击选择参数");
                return;
            }
            if (dataType == SAPDataType.STRUCTURE.ToString() || dataType == SAPDataType.TABLE.ToString())
            {
                if (!function.FunctionMeta.StructureDetail.Keys.Contains(dataTypeName))
                {
                    return;
                }
                else
                {
                    DataTable dt = function.FunctionMeta.StructureDetail[dataTypeName];
                    dgvDetail.DataSource = dt;
                    dgvDetail.AutoResizeColumns();
                    if (function.TableValueList.Keys.Contains(selectedField.Name))
                    {
                        DataTable dtResult = function.TableValueList[selectedField.Name];
                        if (dtResult != null)
                        {
                            dgvTableContent.DataSource = dtResult;
                            dgvTableContent.AutoResizeColumns();
                        }
                    }
                }
            }
        }
Esempio n. 4
0
        public static Tables.View LoadView(Type type)
        {
            if (_viewCache == null)
            {
                _viewCache = new Dictionary <Type, Tables.View>();
            }
            if (!_viewCache.ContainsKey(type))
            {
                object[] attrs = type.GetCustomAttributes(typeof(Attributes.View), true).ToArray();
                if (attrs != null)
                {
                    Tables.View view = new Tables.View();
                    foreach (Attributes.View attr in attrs)
                    {
                        var tableLeft = attr.ModelLeft != null?LoadTable(attr.ModelLeft) : null;

                        var tableRight = attr.ModelRight != null?LoadTable(attr.ModelRight) : null;

                        if (tableLeft != null && tableRight != null)
                        {
                            var fieldLeft  = (attr.ModelProperyLeft is string) ? tableLeft.GetFieldByPropertyName((string)attr.ModelProperyLeft) : null;
                            var fieldRight = (attr.ModelProperyRight is string) ? tableRight?.GetFieldByPropertyName((string)attr.ModelProperyRight) ?? null : null;
                            if (fieldLeft != null || fieldRight != null)
                            {
                                var joinType = JoinType.Cross;
                                switch (attr.Connect)
                                {
                                case Attributes.ViewConnect.Check: joinType = JoinType.LeftOuter;  break;

                                case Attributes.ViewConnect.CheckExisting: joinType = JoinType.Inner; break;
                                }

                                Conditions.Condition cond = null;
                                if (fieldLeft != null && fieldRight != null)
                                {
                                    cond = Conditions.Condition.AndField(tableLeft.Name + "." + fieldLeft.Name, tableRight.Name + "." + fieldRight.Name);
                                }
                                else if (fieldLeft != null && fieldRight == null)
                                {
                                    cond = Conditions.Condition.AndValue(tableLeft.Name + "." + fieldLeft.Name, attr.ModelProperyRight);
                                }
                                else if (fieldLeft == null && fieldRight != null)
                                {
                                    cond = Conditions.Condition.AndValue(tableRight.Name + "." + fieldRight.Name, attr.ModelProperyLeft);
                                }
                                if (cond != null)
                                {
                                    view.AddJoin(Join.Create(tableLeft.Name, tableRight.Name, cond, joinType));
                                }
                            }
                        }
                        foreach (var field in type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))
                        {
                            object[] fieldAttrs = field.GetCustomAttributes(typeof(Attributes.ViewField), true);
                            if (fieldAttrs != null && fieldAttrs.Any())
                            {
                                foreach (Attributes.ViewField fieldAttr in fieldAttrs)
                                {
                                    var table = LoadTable(fieldAttr.ModelType);
                                    if (table != null)
                                    {
                                        string name = !string.IsNullOrEmpty(fieldAttr.ModelProperyName) ? fieldAttr.ModelProperyName : field.Name;
                                        if (_fieldsCache.ContainsKey(type) && _fieldsCache[type].Any(x => x.Name == name))
                                        {
                                            view.AddField(table.Name, table.Type, _fieldsCache[type].FirstOrDefault(x => x.Name == name));
                                        }
                                        else
                                        {
                                            var tableField = table.GetFieldByPropertyName(fieldAttr.ModelProperyName);
                                            if (tableField != null)
                                            {
                                                string tableFieldName = null;
                                                if (fieldAttr is Attributes.AggregateField)
                                                {
                                                    tableFieldName = tableField.Name;
                                                    var functionField = FunctionField.CreateFunctionAggregateField(field, (Attributes.AggregateField)fieldAttr, tableField);
                                                    if (functionField != null)
                                                    {
                                                        tableFieldName += functionField.Name;
                                                        tableField      = functionField;
                                                    }
                                                    view.AddField(table.Name, table.Type, tableField, tableField.Name);
                                                }
                                                else
                                                {
                                                    var loadedFields = LoadField(tableField.Property);
                                                    foreach (var loadField in loadedFields)
                                                    {
                                                        loadField.Property = field;
                                                        view.AddField(table.Name, table.Type, loadField);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    if (view.Tables != null)
                    {
                        _fieldsCache.Add(type, view.Tables.SelectMany(x => x.Fields.Values).ToArray());
                        _viewCache.Add(type, view);
                    }
                    else
                    {
                        return(null);
                    }
                }
                else
                {
                    throw new Exceptions.TableAttributeException("No view attributes in type");
                }
            }
            return(_viewCache[type]);
        }
        private static void LoadFromDisk(IEnumerable<Function> list, nHydrateModel model, string rootFolder, Microsoft.VisualStudio.Modeling.Store store)
        {
            var folder = Path.Combine(rootFolder, FOLDER_FC);
            if (!Directory.Exists(folder)) return;

            #region Load other parameter/field information
            var fList = Directory.GetFiles(folder, "*.configuration.xml");
            foreach (var f in fList)
            {
                var document = new XmlDocument();
                try
                {
                    document.Load(f);
                }
                catch (Exception ex)
                {
                    //Do Nothing
                    MessageBox.Show("The file '" + f + "' is not valid and could not be loaded!", "Load Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                var fi = new FileInfo(f);
                var name = fi.Name.Substring(0, fi.Name.Length - ".configuration.xml".Length).ToLower();
                var itemID = XmlHelper.GetAttributeValue(document.DocumentElement, "id", Guid.Empty);
                var item = list.FirstOrDefault(x => x.Id == itemID);
                if (item == null)
                {
                    item = new Function(model.Partition, new PropertyAssignment[] { new PropertyAssignment(ElementFactory.IdPropertyAssignment, XmlHelper.GetAttributeValue(document.DocumentElement, "id", Guid.NewGuid())) });
                    model.Functions.Add(item);
                }

                System.Windows.Forms.Application.DoEvents();

                item.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged);
                item.Name = XmlHelper.GetAttributeValue(document.DocumentElement, "name", item.Name);
                item.PrecedenceOrder = XmlHelper.GetAttributeValue(document.DocumentElement, "precedenceorder", item.PrecedenceOrder);
                item.IsGenerated = XmlHelper.GetAttributeValue(document.DocumentElement, "isgenerated", item.IsGenerated);
                item.CodeFacade = XmlHelper.GetAttributeValue(document.DocumentElement, "codefacade", item.CodeFacade);
                item.Schema = XmlHelper.GetAttributeValue(document.DocumentElement, "schema", item.Schema);
                item.IsTable = XmlHelper.GetAttributeValue(document.DocumentElement, "istable", item.IsTable);
                item.ReturnVariable = XmlHelper.GetAttributeValue(document.DocumentElement, "returnvariable", item.ReturnVariable);
                item.Summary = XmlHelper.GetNodeValue(document.DocumentElement, "summary", item.Summary);
                item.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged);

                //Fields
                var fieldsNodes = document.DocumentElement.SelectSingleNode("//fieldset");
                if (fieldsNodes != null)
                {
                    var nameList = new List<string>();
                    foreach (XmlNode n in fieldsNodes.ChildNodes)
                    {
                        var subItemID = XmlHelper.GetAttributeValue(n, "id", Guid.Empty);
                        var field = item.Fields.FirstOrDefault(x => x.Id == subItemID);
                        if (field == null)
                        {
                            field = new FunctionField(item.Partition, new PropertyAssignment[] { new PropertyAssignment(ElementFactory.IdPropertyAssignment, XmlHelper.GetAttributeValue(n, "id", Guid.NewGuid())) });
                            item.Fields.Add(field);
                        }

                        field.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged);
                        field.Name = XmlHelper.GetAttributeValue(n, "name", field.Name);
                        field.CodeFacade = XmlHelper.GetAttributeValue(n, "codefacade", field.CodeFacade);
                        nameList.Add(field.Name.ToLower());
                        field.Nullable = XmlHelper.GetAttributeValue(n, "nullable", field.Nullable);
                        var dtv = XmlHelper.GetAttributeValue(n, "datatype", field.DataType.ToString());
                        DataTypeConstants dt;
                        if (Enum.TryParse<DataTypeConstants>(dtv, true, out dt))
                            field.DataType = dt;
                        field.Default = XmlHelper.GetAttributeValue(n, "default", field.Default);
                        field.IsGenerated = XmlHelper.GetAttributeValue(n, "isgenerated", field.IsGenerated);
                        field.Length = XmlHelper.GetAttributeValue(n, "length", field.Length);
                        field.Scale = XmlHelper.GetAttributeValue(n, "scale", field.Scale);
                        field.Summary = XmlHelper.GetNodeValue(n, "summary", field.Summary);
                        field.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged);
                    }
                    if (item.Fields.Remove(x => !nameList.Contains(x.Name.ToLower())) > 0)
                        item.nHydrateModel.IsDirty = true;
                }

                //Parameters
                var parametersNodes = document.DocumentElement.SelectSingleNode("//parameterset");
                if (parametersNodes != null)
                {
                    var nameList = new List<string>();
                    foreach (XmlNode n in parametersNodes.ChildNodes)
                    {
                        var subItemID = XmlHelper.GetAttributeValue(n, "id", Guid.Empty);
                        var parameter = item.Parameters.FirstOrDefault(x => x.Id == subItemID);
                        if (parameter == null)
                        {
                            parameter = new FunctionParameter(item.Partition, new PropertyAssignment[] { new PropertyAssignment(ElementFactory.IdPropertyAssignment, XmlHelper.GetAttributeValue(n, "id", Guid.NewGuid())) });
                            item.Parameters.Add(parameter);
                        }

                        parameter.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged);
                        parameter.CodeFacade = XmlHelper.GetAttributeValue(n, "codefacade", parameter.CodeFacade);
                        parameter.Name = XmlHelper.GetAttributeValue(n, "name", parameter.Name);
                        nameList.Add(parameter.Name.ToLower());
                        parameter.Nullable = XmlHelper.GetAttributeValue(n, "nullable", parameter.Nullable);
                        var dtv = XmlHelper.GetAttributeValue(n, "datatype", parameter.DataType.ToString());
                        DataTypeConstants dt;
                        if (Enum.TryParse<DataTypeConstants>(dtv, true, out dt))
                            parameter.DataType = dt;
                        parameter.Default = XmlHelper.GetAttributeValue(n, "default", parameter.Default);
                        parameter.IsGenerated = XmlHelper.GetAttributeValue(n, "isgenerated", parameter.IsGenerated);
                        parameter.Length = XmlHelper.GetAttributeValue(n, "length", parameter.Length);
                        parameter.Scale = XmlHelper.GetAttributeValue(n, "scale", parameter.Scale);
                        parameter.Summary = XmlHelper.GetNodeValue(n, "summary", parameter.Summary);
                        parameter.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged);
                    }
                    if (item.Parameters.Remove(x => !nameList.Contains(x.Name.ToLower())) > 0)
                        item.nHydrateModel.IsDirty = true;
                }

                LoadModules(folder, item);
            }
            #endregion

            #region Load SQL
            fList = Directory.GetFiles(folder, "*.sql");
            foreach (var f in fList)
            {
                var fi = new FileInfo(f);
                if (fi.Name.ToLower().EndsWith(".sql"))
                {
                    var name = fi.Name.Substring(0, fi.Name.Length - 4).ToLower();
                    var item = list.FirstOrDefault(x => x.Name.ToLower() == name);
                    if (item != null)
                    {
                        item.SQL = File.ReadAllText(f);
                        System.Windows.Forms.Application.DoEvents();
                    }
                }
            }
            #endregion
        }