/// <summary> /// カスタムのListViewItem を作成 /// </summary> /// <param name="name"></param> /// <param name="dispname"></param> /// <param name="IsChecked"></param> /// <param name="locType"></param> /// <param name="IsValid"></param> /// <returns></returns> private LocatorItem createLocatorItem(string name, string dispname, bool IsChecked, LocatorItem.LocatorTypes locType, bool IsValid) { LocatorItem locator = new LocatorItem(); locator.Name = name; locator.Text = locator.Name; locator.DisplayName = dispname; locator.SubItems.Add(locator.DisplayName); locator.Checked = IsChecked; locator.LocatorType = locType; locator.SubItems.Add(locType.ToString()); locator.IsValid = IsValid; if (locator.IsValid) { locator.SubItems.Add("有効"); } else { locator.SubItems.Add("無効"); } return(locator); }
/// <summary> /// 指定の DefaultLocators.xml ファイルから有効な /// 'locator_ref' と 'portal_locators' の要素を カスタムListViewItem のコレクションに抽出 /// </summary> /// <param name="doc"></param> /// <returns></returns> private System.Collections.Generic.List <LocatorItem> getValidLocatorsList(XmlDocument doc) { List <LocatorItem> locators = new List <LocatorItem>(); try { //<locator_ref> // <name>MGRS</name> // <display_name>MGRS(Military Grid Reference System)</display_name> // <workspace_properties> // <path> // </path> // </workspace_properties> //</locator_ref> XmlNodeList locatorNodes = doc.SelectNodes("//locator_ref"); foreach (XmlNode locatorNode in locatorNodes) { string name = locatorNode.SelectSingleNode("//locator_ref/name").InnerText; string dispname = locatorNode.SelectSingleNode("//locator_ref/display_name").InnerText; LocatorItem locator = createLocatorItem(name, dispname, true, LocatorItem.LocatorTypes.SERVER, true); locators.Add(locator); } // <portal_locators> // <display_name locator_name="World" display_name="World Geocode Service (ArcGIS Online)" /> // </portal_locators> XmlNodeList portalNodes = doc.SelectNodes("//portal_locators"); foreach (XmlNode portalNode in portalNodes) { string name = portalNode.SelectSingleNode("//portal_locators/display_name/@locator_name").Value; string dispname = portalNode.SelectSingleNode("//portal_locators/display_name/@display_name").Value; LocatorItem locator = createLocatorItem(name, dispname, true, LocatorItem.LocatorTypes.PORTAL, true); locators.Add(locator); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); } return(locators); }
/// <summary> /// 指定の DefaultLocators.xml ファイルからコメントアウトされた /// 'locator_ref' と 'portal_locators' の要素を カスタムListViewItem のコレクションに抽出 /// </summary> /// <param name="doc"></param> /// <returns></returns> private System.Collections.Generic.List <LocatorItem> getCommentedLocatorsList(XmlDocument doc) { List <LocatorItem> locators = new List <LocatorItem>(); try { XmlNodeList locatorNodes = doc.SelectNodes("//comment()[contains(.,'<locator_ref>')]"); foreach (XmlNode locatorNode in locatorNodes) { XmlDocumentFragment docFrag = doc.CreateDocumentFragment(); docFrag.InnerXml = locatorNode.InnerText; string name = docFrag.SelectSingleNode("//locator_ref/name").InnerText; string dispname = docFrag.SelectSingleNode("//locator_ref/display_name").InnerText; docFrag = null; LocatorItem locator = createLocatorItem(name, dispname, false, LocatorItem.LocatorTypes.SERVER, false); locators.Add(locator); } XmlNodeList portalNodes = doc.SelectNodes("//comment()[contains(.,'<portal_locators>')]"); foreach (XmlNode portalNode in portalNodes) { XmlDocumentFragment docFrag = doc.CreateDocumentFragment(); docFrag.InnerXml = portalNode.InnerText; string name = docFrag.SelectSingleNode("//portal_locators/display_name/@locator_name").Value; string dispname = docFrag.SelectSingleNode("//portal_locators/display_name/@display_name").Value; docFrag = null; LocatorItem locator = createLocatorItem(name, dispname, false, LocatorItem.LocatorTypes.PORTAL, false); locators.Add(locator); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); } return(locators); }
/// <summary> /// ListView の状態で XMLのコメントアウトと、非コメントアウトを切り替え /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSettingLocatorsXml_Click(object sender, EventArgs e) { //// 既存の xmlノード をコメントアウトしたノードと置換 //// World Geocode Service (ArcGIS Online) をコメントアウトへ変更 //// 呼び出し方A: ////bool result = changeToComment(xmldoc, "portal_locators"); ////// コメントアウトから元に戻す ////if (!result) ////{ //// result = changeToElement(xmldoc, "portal_locators"); ////} //// MGRS(Military Grid Reference System) をコメントアウトへ変更 //// 呼び出し方B: //bool result2 = changeToComment(xmldoc, "locator_ref/name[.='MGRS']", true); //if (!result2) //{ // result2 = changeToElement(xmldoc, "locator_ref", true, "MGRS"); //} if (locatorfile == string.Empty) { MessageBox.Show(this, string.Format("{0} が指定されていません。", LOCATOR_FILE)); return; } string locatorJaFile = locatorfile; if (!System.IO.File.Exists(locatorJaFile)) { MessageBox.Show(this, string.Format("{0} が存在しません。", locatorJaFile)); return; } XmlDocument xmldoc = null; StringBuilder stb = null; // 設定を実行 try { xmldoc = new XmlDocument(); stb = new StringBuilder(); xmldoc.Load(locatorfile); foreach (var item in listView1.Items) { LocatorItem locitem = (LocatorItem)item; if ((!locitem.Checked) && (locitem.IsValid)) { System.Diagnostics.Debug.WriteLine(String.Format("ChangeToComment - name:{0} dispname:{1} locatortype:{2}", locitem.Name, locitem.SubItems[0].Text, locitem.LocatorType)); // ここでコメントアウトを呼び出し // Call changeToComment if (locitem.LocatorType is LocatorItem.LocatorTypes.SERVER) { string nodename = string.Format("locator_ref/name[.='{0}']", locitem.Name); changeToComment(xmldoc, nodename, true); } else if (locitem.LocatorType is LocatorItem.LocatorTypes.PORTAL) { changeToComment(xmldoc, "portal_locators"); } // コメントアウトしたので無効なリストへ移動 locitem.IsValid = false; locitem.SubItems[3].Text = "無効"; // MessageBox用にメッセージを作成 string msg = string.Format("無効化 : {0} | {1}", locitem.Name, locitem.DisplayName); if (stb.Length == 0) { stb.Append(string.Format("{0} に対する設定変更:", LOCATOR_FILE)); stb.AppendLine(); stb.AppendLine(); } stb.Append(msg); stb.AppendLine(); } // 無効なロケータで、選択状態でチェックオンされているものをXMLELEMENTに変更 if ((locitem.Checked) && (!locitem.IsValid)) { System.Diagnostics.Debug.WriteLine(String.Format("ChangeToElement - name:{0} dispname:{1} locatortype:{2}", locitem.Name, locitem.SubItems[0].Text, locitem.LocatorType)); // ここでコメントアウトを呼び出し // Call changeToElement if (locitem.LocatorType is LocatorItem.LocatorTypes.SERVER) { changeToElement(xmldoc, "locator_ref", true, locitem.Name); } else if (locitem.LocatorType is LocatorItem.LocatorTypes.PORTAL) { changeToElement(xmldoc, "portal_locators"); } locitem.IsValid = true; locitem.SubItems[3].Text = "有効"; // MessageBox用にメッセージを作成 string msg = string.Format("有効化 : {0} | {1}", locitem.Name, locitem.DisplayName); if (stb.Length == 0) { stb.Append(string.Format("{0} に対する設定変更:", LOCATOR_FILE)); stb.AppendLine(); stb.AppendLine(); } stb.Append(msg); stb.AppendLine(); } } xmldoc.Save(locatorfile); //MessageBox.Show(this, string.Format("{0} を設定しました", System.IO.Path.GetFileName(locatorfile))); if (stb.Length > 0) { MessageBox.Show(this, stb.ToString()); } else { MessageBox.Show(this, "設定変更したものはありません"); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); MessageBox.Show(this, ex.Message); } finally { if (xmldoc != null) { xmldoc = null; } if (stb != null) { stb = null; } } }