Newer
Older
EMS_REFACTOR / ModelBuilder.cs
nn-203 on 26 Jul 2017 4 KB first commit
using System;
using System.Collections;
using System.IO;
using System.Windows.Forms;
using System.Xml;
using GeoScene.Data;
using GeoScene.Engine;
using GeoScene.Globe;

namespace Cyberpipe
{
    public abstract class ModelBuilder
    {
        protected GSOLayer layer;
        protected GSODataSource ds;
        protected static Hashtable en_cns = new Hashtable();
        static ModelBuilder()
        {
            string filename = Application.StartupPath + "\\FormText.xml";
            if (File.Exists(filename))
            {
                XmlTextReader XmlReader = new XmlTextReader(filename);
                try
                {
                    while (XmlReader.Read())
                    {
                        if (XmlReader.Name == "Field")
                        {
                            string str1 = XmlReader["label"];
                            string str3 = XmlReader["type"];
                            string str2 = XmlReader.ReadElementString();
                            en_cns.Add(str1, str2);
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogError.PublishError(ex);
                    MessageBox.Show(ex.Message);
                }
            }
        }
         
        public bool build(GSOLayer layer, EnumUpdateMode updateMode, EnumBuildMode buildMode,BaseParam param)
        {

            this.layer = layer;
            if (validate(layer)) {

                return doBuild(updateMode, buildMode, param);
            }
            return false;
        }

        public ModelBuilder(GSODataSource ds) {

            this.ds = ds;
        }



        public abstract bool validate(GSOLayer layer);


        public abstract bool doBuild(EnumUpdateMode updateMode, EnumBuildMode buildMode, BaseParam param);


        /// <returns></returns>

        public GSOFeatureDataset CreateDBFeatureDataset(GSOLayer layer, string layerName)
        {
            GSOFeatureDataset featDs = ds.CreateFeatureDataset(layerName);
            if (featDs == null)
            {
                return null;
            }
            
            GSOFeatures features = layer.GetAllFeatures();
            if (features.Length == 0)
            {
                return null;
            }

            for (int i = 0; i < features[0].GetFieldCount(); i++)
            {
                GSOFieldDefn fielddef = features[0].GetFieldDefn(i);
                if (fielddef == null)
                {
                    continue;
                }
                GSOFieldAttr field = new GSOFieldAttr();

                field.Name = en_cns.ContainsKey(fielddef.Name) ? en_cns[fielddef.Name].ToString() : fielddef.Name;
                switch (fielddef.Type)
                {
                    case EnumFieldType.Text:
                        field.Type = EnumFieldType.Text;
                        field.Width = 8000;
                        break;
                    case EnumFieldType.INT32:
                        field.Type = EnumFieldType.INT32;
                        field.Width = 4;
                        break;
                    case EnumFieldType.Double:
                        field.Type = EnumFieldType.Double;
                        field.Width = 8;
                        break;
                    case EnumFieldType.Date:
                        field.Type = EnumFieldType.Date;
                        field.Width = 10;
                        break;
                }
                bool res = featDs.AddField(field);
            }
            featDs.Save();
            return featDs;
        }

        protected void setFeatureValueByShapeFeature(GSOFeature src, GSOFeature dst)
        {

            for (int j = 0; j < dst.GetFieldCount(); j++)
            {
                GSOFieldDefn fielddef = src.GetFieldDefn(j);

                object fieldvalue = src.GetValue(fielddef.Name);// convertFieldValue(fielddef.Name, f.GetValue(fielddef.Name));
                dst.SetValue(fielddef.Name, fieldvalue);
                
                /*
                 * if (fieldvalue == null)
                    continue;
                string fieldName = en_cns.ContainsKey(fielddef.Name) == true ? en_cns[fielddef.Name].ToString() : fielddef.Name;
                dst.SetValue(fieldName, fieldvalue);
                */
            }

        }
    }
}