using ESRI.ArcGIS.ADF; using ESRI.ArcGIS.DataSourcesGDB; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Geodatabase; using KGIS.Plugin.LayerProperty.Interface; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace KGIS.Plugin.LayerProperty.Model { internal class DoStyleGallery : IDoStyleGallery, IDoStyleGalleryStorage { private const string FIELD_ID = "ID"; private const string FIELD_CATEGORY = "CATEGORY"; private const string FIELD_NAME = "NAME"; private const string FIELD_OBJECT = "OBJECT"; private IStyleGalleryStorage m_StyleGalleryStorage; private IStyleGallery m_StyleGallery; private List m_GalleryClassList; private List m_DistStylePathList; private Dictionary m_LoadDistStylePathList; private IDoStyleGalleryPath m_DefaultDistStylePath; private IDoStyleGalleryPath m_TargetDistStyleGalleryPath; public List GalleryClassList { get { if (this.m_GalleryClassList == null) { this.m_GalleryClassList = new List(); } if (this.m_GalleryClassList.Count == 0) { List arg_26_0 = this.get_Classes(); } return this.m_GalleryClassList; } set { this.m_GalleryClassList = value; } } public int DoClassCount { get { return this.get_Classes().Count; } } public bool CanUpdateDoStyle { get { return true; } } public IDoStyleGalleryPath DefaultDoStyleGalleryPath { get { return this.m_DefaultDistStylePath; } } public int DoStyleGalleryPathCount { get { return this.m_DistStylePathList.Count; } } public IDoStyleGalleryPath TargetDoStyleGalleryPath { get { return this.m_TargetDistStyleGalleryPath; } set { this.m_TargetDistStyleGalleryPath = value; } } public int ClassCount { get { return this.m_StyleGallery.ClassCount; } } public string DefaultStylePath { get { if (this.m_StyleGallery == null) { this.m_StyleGallery = new ServerStyleGalleryClass(); this.m_StyleGalleryStorage = (this.m_StyleGallery as IStyleGalleryStorage); } return this.m_StyleGalleryStorage.DefaultStylePath; } } public int FileCount { get { if (this.GalleryStorageIsNull()) { return 0; } return this.m_StyleGalleryStorage.FileCount; } } public string TargetFile { get { if (this.GalleryStorageIsNull()) { return ""; } return this.m_StyleGalleryStorage.TargetFile; } set { if (this.m_StyleGallery == null) { this.m_StyleGallery = new ServerStyleGalleryClass(); this.m_StyleGalleryStorage = (this.m_StyleGallery as IStyleGalleryStorage); } this.m_StyleGalleryStorage.TargetFile = value; } } public DoStyleGallery() { this.m_DistStylePathList = new List(); this.m_LoadDistStylePathList = new Dictionary(); this.m_GalleryClassList = new List(); } public void ImportStyle2DB(string fileName) { try { this.ImportStyle2DB(fileName, ""); } catch (Exception ex) { //RdbUtil.AddException(ex); } } public void ImportStyle2DB(string fileName, string className) { try { if (Path.GetExtension(fileName).ToLower() == ".serverstyle") { this.ImportServerStyle(fileName, className); } else { if (Path.GetExtension(fileName).ToLower() == ".aystyle") { this.ImportMdb(fileName, className); } else { if (Path.GetExtension(fileName).ToLower() == ".style") { this.ImportFromStyle(fileName, className); } } } } catch (Exception ex) { //RdbUtil.AddException(ex); } } public bool RemoveItem(IDoStyleGalleryItem Item) { //if (StyleGalleryOptDB.DeleteStyleGalleryItem(Item)) //{ // Item = null; // return true; //} return false; } public bool RemoveDoItems(IDoStyleGalleryPath path, string className) { try { int classIndex = -1; IDoStyleGalleryClass doStyleGalleryClass = this.get_DoClass(className); if (doStyleGalleryClass != null) { classIndex = doStyleGalleryClass.Index; } bool result = false; if (path == null) { using (List.Enumerator enumerator = this.m_DistStylePathList.GetEnumerator()) { while (enumerator.MoveNext()) { IDoStyleGalleryPath current = enumerator.Current; //StyleGalleryOptDB.DeleteStyleGalleryItems(current, classIndex); } goto IL_5A; } //goto IL_4F; IL_5A: result = true; return result; } //IL_4F: //result = StyleGalleryOptDB.DeleteStyleGalleryItems(path, classIndex); return result; } catch (Exception ex) { //RdbUtil.AddException(ex); } return false; } public bool UpdateItem(IDoStyleGalleryItem Item) { try { //return StyleGalleryOptDB.UpdateGalleryItem(Item); } catch (Exception ex) { //RdbUtil.AddException(ex); } return false; } public List get_Classes() { this.m_GalleryClassList = null;// StyleGalleryOptDB.GetAllGalleryClasses(this); return this.m_GalleryClassList; } public IDoStyleGalleryClass get_DoClass(int index) { return null;// StyleGalleryOptDB.GetGalleryClassByIndex(index, this); } public IDoStyleGalleryClass get_DoClass(string className) { return null;// StyleGalleryOptDB.GetGalleryClassByName(className, this); } public List get_DoCategories(string className) { List list = new List(); try { IDoStyleGalleryClass doStyleGalleryClass = this.get_DoClass(className); if (doStyleGalleryClass == null) { //RdbUtil.AddErrorMessage("未能获得该图库类:" + className); return list; } //list.AddRange(StyleGalleryOptDB.GetCategories(doStyleGalleryClass.Index, this.m_DistStylePathList)); foreach (KeyValuePair current in this.m_LoadDistStylePathList) { if (current.Value == className) { //list.AddRange(StyleGalleryOptDB.GetCategories(doStyleGalleryClass.Index, current.Key)); } } } catch (Exception ex) { //RdbUtil.AddException(ex); } return list; } public bool AddDoItem(IDoStyleGalleryItem Item) { if (this.m_TargetDistStyleGalleryPath == null) { //RdbUtil.AddErrorMessage("未设置目标图库路径,不能添加项"); return false; } return false;// StyleGalleryOptDB.AddStyleGalleryItem(this.m_TargetDistStyleGalleryPath, Item); } public bool AddDoItems(List items) { try { bool result; if (this.m_TargetDistStyleGalleryPath == null) { //RdbUtil.AddErrorMessage("未设置目标图库路径,不能添加项"); result = false; return result; } result = false;// StyleGalleryOptDB.AddStyleGalleryItems(this.m_TargetDistStyleGalleryPath, items); return result; } catch (Exception ex) { //RdbUtil.AddException(ex); } return false; } public bool Update() { throw new Exception("The method or operation is not implemented."); } public bool ReCreateStyleGalleryClass() { return false;// StyleGalleryOptDB.ReCreateStyleGalleryClass(); } public int get_ItemsCount(string className, IDoStyleGalleryPath path, string category) { int num = 0; int classIndex = -1; if (className != "") { classIndex = this.get_DoClass(className).Index; } if (path != null) { num = 0;// StyleGalleryOptDB.GetItemsCount(path.Number, classIndex, category); } else { foreach (IDoStyleGalleryPath current in this.m_DistStylePathList) { num += 0;// StyleGalleryOptDB.GetItemsCount(current.Number, classIndex, category); } foreach (KeyValuePair current2 in this.m_LoadDistStylePathList) { if (current2.Value == className) { num += 0;// StyleGalleryOptDB.GetItemsCount(current2.Key.Number, classIndex, category); } } } return num; } public List get_Items(string className, IDoStyleGalleryPath path, string category) { List list = new List(); try { IDoStyleGalleryClass doStyleGalleryClass = this.get_DoClass(className); if (doStyleGalleryClass == null) { return list; } int arg_1F_0 = doStyleGalleryClass.Index; if (path == null) { //list.AddRange(StyleGalleryOptDB.GetStyleGalleryItems(this.m_DistStylePathList, doStyleGalleryClass, category)); using (Dictionary.Enumerator enumerator = this.m_LoadDistStylePathList.GetEnumerator()) { while (enumerator.MoveNext()) { KeyValuePair current = enumerator.Current; if (current.Value == className) { //list.AddRange(StyleGalleryOptDB.GetStyleGalleryItems(current.Key, doStyleGalleryClass, category)); } } goto IL_97; } } //list.AddRange(StyleGalleryOptDB.GetStyleGalleryItems(path, doStyleGalleryClass, category)); IL_97:; } catch (Exception ex) { //RdbUtil.AddException(ex); } return list; } public void LoadDoStyle(IDoStyleGalleryPath path, string ClassName) { try { this.m_LoadDistStylePathList.Add(path, ClassName); } catch (Exception ex) { //RdbUtil.AddException(ex); } } public void Clear() { try { if (!this.GalleryStorageIsNull()) { this.m_StyleGallery.Clear(); } this.m_DistStylePathList.Clear(); } catch (Exception ex) { //RdbUtil.AddException(ex); } } private void ImportMdb(string fileName, string className) { try { IFeatureWorkspace featureWorkspace = this.OpenMdb(fileName); if (featureWorkspace != null) { List list = new List(); ITable table = null; foreach (IDoStyleGalleryClass current in this.GalleryClassList) { if (!(className != "") || current.Name.Equals(className)) { string name = current.Name.Replace(' ', '_'); try { table = featureWorkspace.OpenTable(name); if (table == null) { continue; } } catch (Exception ex) { //RdbUtil.AddException(ex); continue; } ICursor cursor = table.Search(null, false); for (IRow row = cursor.NextRow(); row != null; row = cursor.NextRow()) { IPropertySet propertySet = new PropertySetClass(); IPersistStream persistStream = propertySet as IPersistStream; IMemoryBlobStream pstm = row.get_Value(3) as IMemoryBlobStream; persistStream.Load(pstm); IStyleGalleryItem styleItem = propertySet.GetProperty("Object") as IStyleGalleryItem; IDoStyleGalleryItem doStyleGalleryItem = this.CreateFromEsriGalleryItem(styleItem); if (doStyleGalleryItem != null) { doStyleGalleryItem.StyleGalleryClass = current; list.Add(doStyleGalleryItem); } } } } this.AddDoItems(list); ComReleaser.ReleaseCOMObject(featureWorkspace); } } catch (Exception ex2) { //RdbUtil.AddException(ex2); } } private void ImportServerStyle(string fileName, string className) { IStyleGallery styleGallery = new ServerStyleGalleryClass(); IStyleGalleryStorage styleGalleryStorage = styleGallery as IStyleGalleryStorage; styleGalleryStorage.AddFile(fileName); List list = new List(); foreach (IDoStyleGalleryClass current in this.GalleryClassList) { if (className != "") { if (!className.Equals(current.Name)) { continue; } } try { IEnumStyleGalleryItem enumStyleGalleryItem = styleGallery.get_Items(current.Name, fileName, ""); if (enumStyleGalleryItem != null) { for (IStyleGalleryItem styleItem = enumStyleGalleryItem.Next(); styleItem != null; styleItem = enumStyleGalleryItem.Next()) { Application.DoEvents(); IDoStyleGalleryItem doStyleGalleryItem = this.CreateFromEsriGalleryItem(styleItem); if (doStyleGalleryItem != null) { doStyleGalleryItem.StyleGalleryClass = current; list.Add(doStyleGalleryItem); } } } } catch { } } this.AddDoItems(list); styleGalleryStorage.RemoveFile(fileName); styleGallery.Clear(); ComReleaser.ReleaseCOMObject(styleGalleryStorage); ComReleaser.ReleaseCOMObject(styleGallery); } private void ImportFromStyle(string fileName, string className) { } private IDoStyleGalleryItem CreateFromEsriGalleryItem(IStyleGalleryItem StyleItem) { try { return new DoStyleGalleryItem { Name = StyleItem.Name, Item = StyleItem, Category = StyleItem.Category, Number = (long)StyleItem.ID }; } catch (Exception ex) { //RdbUtil.AddException(ex); } return null; } private IDoStyleGalleryItem CreateFromCoustomGalleryItem(string name, string category, ISymbol symbol) { try { return this.CreateFromEsriGalleryItem(new ServerStyleGalleryItemClass { Name = name, Category = category, Item = symbol }); } catch (Exception ex) { //RdbUtil.AddException(ex); } return null; } private StyleItemTemp CreateFromEsriGalleryItem(string name, string Category, object StyleItem) { StyleItemTemp result = default(StyleItemTemp); try { result.Name = name; result.Item = StyleItem; result.Category = Category; } catch (Exception ex) { //RdbUtil.AddException(ex); } return result; } private bool GalleryStorageIsNull() { if (this.m_StyleGalleryStorage == null) { //RdbUtil.AddErrorMessage("未添加任何符号文件"); return true; } return false; } private IFeatureWorkspace OpenMdb(string GWStylePath) { try { IPropertySet propertySet = new PropertySetClass(); propertySet.SetProperty("DATABASE", GWStylePath); IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactoryClass(); IWorkspace workspace = workspaceFactory.Open(propertySet, 0); return workspace as IFeatureWorkspace; } catch (Exception ex) { //RdbUtil.AddException(ex); } return null; } public void AddDoStyleGalleryPath(IDoStyleGalleryPath path) { if (!this.m_DistStylePathList.Contains(path)) { this.m_DistStylePathList.Add(path); } } public IDoStyleGalleryPath DoStyleGalleryPath(int index) { return this.m_DistStylePathList[index]; } public void RemoveDoStyleGalleryPath(IDoStyleGalleryPath path) { this.m_DistStylePathList.Remove(path); } public void ClearGalleryPaths() { this.m_DistStylePathList.Clear(); } public void AddItem(IStyleGalleryItem item) { try { this.m_StyleGallery.AddItem(item); } catch (Exception ex) { //RdbUtil.AddException(ex); } } public IStyleGalleryClass get_Class(int index) { try { return this.m_StyleGallery.get_Class(index); } catch (Exception ex) { //RdbUtil.AddException(ex); } return null; } public List get_Categories(string className) { List list = new List(); try { List result; if (this.m_StyleGallery == null) { result = list; return result; } IEnumBSTR enumBSTR = this.m_StyleGallery.get_Categories(className); for (string item = enumBSTR.Next(); item != null; item = enumBSTR.Next()) { list.Add(item); } result = list; return result; } catch (Exception ex) { //RdbUtil.AddException(ex); } return list; } public void ImportStyle(string fileName) { try { this.m_StyleGallery.ImportStyle(fileName); } catch (Exception ex) { //RdbUtil.AddException(ex); } } public List get_Items(string ClassName, string styleSet, string Category) { List list = new List(); try { List result; if (this.m_StyleGallery == null) { result = list; return result; } IEnumStyleGalleryItem enumStyleGalleryItem = this.m_StyleGallery.get_Items(ClassName, styleSet, Category); enumStyleGalleryItem.Reset(); for (IStyleGalleryItem styleItem = enumStyleGalleryItem.Next(); styleItem != null; styleItem = enumStyleGalleryItem.Next()) { IDoStyleGalleryItem doStyleGalleryItem = this.CreateFromEsriGalleryItem(styleItem); if (doStyleGalleryItem != null) { IDoStyleGalleryClass styleGalleryClass = this.get_DoClass(ClassName); doStyleGalleryItem.StyleGalleryClass = styleGalleryClass; list.Add(doStyleGalleryItem); } } result = list; return result; } catch (Exception ex) { //RdbUtil.AddException(ex); } return list; } public void LoadStyle(string fileName, string ClassName) { try { this.m_StyleGallery.LoadStyle(fileName, ClassName); } catch (Exception ex) { //RdbUtil.AddException(ex); } } public void RemoveItem(IStyleGalleryItem Item) { try { this.m_StyleGallery.RemoveItem(Item); } catch (Exception ex) { //RdbUtil.AddException(ex); } } public void UpdateItem(IStyleGalleryItem Item) { try { this.m_StyleGallery.UpdateItem(Item); } catch (Exception ex) { //RdbUtil.AddException(ex); } } public void SaveStyle(string fileName, string styleSet, string ClassName) { throw new Exception("The method or operation is not implemented."); } public void AddFile(string path) { if (this.m_StyleGallery == null) { this.m_StyleGallery = new ServerStyleGalleryClass(); this.m_StyleGalleryStorage = (this.m_StyleGallery as IStyleGalleryStorage); } this.m_StyleGalleryStorage.AddFile(path); } public bool get_CanUpdate(string path) { return !this.GalleryStorageIsNull() && this.m_StyleGalleryStorage.get_CanUpdate(path); } public string File(int index) { if (this.GalleryStorageIsNull()) { return ""; } return this.m_StyleGalleryStorage.get_File(index); } public void RemoveFile(string path) { if (!this.GalleryStorageIsNull()) { this.m_StyleGalleryStorage.RemoveFile(path); } } public void ClearFiles() { try { if (this.m_StyleGalleryStorage == null) return; for (int i = 0; i < this.m_StyleGalleryStorage.FileCount; i++) { this.m_StyleGalleryStorage.RemoveFile(this.m_StyleGalleryStorage.get_File(i)); i--; } } catch (Exception ex) { //RdbUtil.AddException(ex); } } } }