123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using ESRI.ArcGIS.Geodatabase;
- using ForeStar.Core.Context;
- using ForeStar.Core.Context.Support;
- using ForeStar.DataUI;
- using ForeStar.Core.Stereotype;
- namespace ForeStar.GIS.ArcGIS.Util
- {
-
-
-
- [Component(IsSingleton = "false", Name = "IUpdateDomain")]
- public class UpdateDomain : IUpdateDomain
- {
-
-
-
-
-
- public bool SynchorDomainFormStructure(ForeStar.Data.General.ITable pTable)
- {
- if (pTable == null) return false;
- if (pTable.MetadataTable == null) return false;
- ForeStar.GIS.SpatialDatabase.IFeatureClass pFsFeatureClass = pTable as ForeStar.GIS.SpatialDatabase.IFeatureClass;
- IWorkspace pEsriWorkspace = pFsFeatureClass.Workspace.InnerObject as IWorkspace;
- ForeStar.Data.Metadata.MetadataField pMetadataField = null;
- ESRI.ArcGIS.Geodatabase.IWorkspaceDomains2 pWorkspaceDomains = pEsriWorkspace as ESRI.ArcGIS.Geodatabase.IWorkspaceDomains2;
- ESRI.ArcGIS.Geodatabase.IFeatureClass pEsriFeatureClass = pFsFeatureClass.InnerObject as ESRI.ArcGIS.Geodatabase.IFeatureClass;
- IClassSchemaEdit pClassSchemaEdit = (IClassSchemaEdit)pEsriFeatureClass;
- foreach (ForeStar.Data.General.Field pField in pTable.Fields)
- {
- pMetadataField = pTable.MetadataTable.GetField(pField.FieldName);
- if (pMetadataField.IsCode)
- {
- string strCodeWhere = GetCodeWhere(pMetadataField.CodeTableWhere);
-
- DeleteDomain(pEsriWorkspace, strCodeWhere);
-
- Dictionary<string, string> pDicDomain = pMetadataField.Domain;
- ICodedValueDomain pCodeValueDomain = new CodedValueDomainClass();
- foreach (KeyValuePair<string, string> pTemp in pDicDomain)
- {
- IDomain pDomain = pWorkspaceDomains.get_DomainByName(strCodeWhere);
- pCodeValueDomain.AddCode(pTemp.Key, pTemp.Value);
- }
- IDomain pNewDomain = pCodeValueDomain as IDomain;
- pNewDomain.Name = strCodeWhere;
- pNewDomain.FieldType = esriFieldType.esriFieldTypeString;
- pNewDomain.SplitPolicy = esriSplitPolicyType.esriSPTDuplicate;
- pNewDomain.MergePolicy = esriMergePolicyType.esriMPTDefaultValue;
- pWorkspaceDomains.AddDomain(pNewDomain);
- pClassSchemaEdit.AlterDomain(pField.FieldName, pNewDomain);
- }
- }
- return true;
- }
-
-
-
-
- private void DeleteDomain(IWorkspace pWorkspace, string strDomainName)
- {
- IWorkspaceDomains pWorkspaceDomains = pWorkspace as IWorkspaceDomains;
- if (pWorkspaceDomains.get_DomainByName(strDomainName) != null)
- {
- if (pWorkspaceDomains.get_CanDeleteDomain(strDomainName))
- {
- pWorkspaceDomains.DeleteDomain(strDomainName);
- }
- }
- }
-
-
-
-
-
- private string GetCodeWhere(string strCodeTableWhere)
- {
- string strResult = null;
- if (strCodeTableWhere.Contains('\''))
- {
- int istartIndex = strCodeTableWhere.IndexOf('\'');
- int iFinishIndex = -1;
- for (int i = istartIndex + 1; i < strCodeTableWhere.Length; i++)
- {
- if (strCodeTableWhere.Substring(i, 1) == "'")
- {
- iFinishIndex = i;
- break;
- }
- }
- if (iFinishIndex < istartIndex)
- {
- strResult = strCodeTableWhere.Substring(istartIndex + 1);
- }
- else
- {
- strResult = strCodeTableWhere.Substring(istartIndex + 1, iFinishIndex - istartIndex - 1);
- }
- }
- return strResult;
- }
- }
- }
|