예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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;
                }
            }
        }