/// <summary>
        /// スクリプトファイル名を変更する。
        /// </summary>
        /// <param name="parameters">パラメータ。</param>
        private void RenameScriptFileName(KeyValueMap parameters)
        {
            ScriptDefinition definition = parameters["Definition"];

            using (var dialog = new SaveFileDialog())
            {
                dialog.InitialDirectory = Project.ScriptFolderFullPath;
                dialog.FileName = definition.FileName;
                dialog.Filter = ApplicationConstants.ScriptFileFilterString;
                dialog.OverwritePrompt = false;
                dialog.Title = "ファイル名の変更";

                if (dialog.ShowDialog(MainForm) != DialogResult.OK) return;

                var validator = new ScriptDefinitionValidator(Message, Project, definition);
                ProvidedMessage result;
                string newPath = null;

                result = validator.ValidateFileFullPath(dialog.FileName, ref newPath);
                if (result != null)
                {
                    InvokeMessage(result);

                    return;
                }

                if (definition.FileName.ToLower() == newPath.ToLower()) return;

                result = validator.ValidateFileName(newPath);
                if (result != null)
                {
                    InvokeMessage(result);

                    return;
                }

                try
                {
                    File.Move(Project.GetScriptFullPath(definition.FileName), Project.GetScriptFullPath(newPath));
                }
                catch (Exception ex)
                {
                    ProvideMessage("Default.Exception.Error", "スクリプトファイルのリネーム", ex.Message);

                    return;
                }

                definition.FileName = newPath;

                RefreshSelectedNodeProperty();

                if (!SaveProject()) return;

                RefreshObjectDefinition();
            }
        }
        /// <summary>
        /// スクリプトプロパティ変更時処理。
        /// </summary>
        /// <param name="parameters">パラメータ。</param>
        private void ChangeScriptProperty(KeyValueMap parameters)
        {
            ScriptDefinition definition = parameters["Definition"];
            String name = parameters["Name"];
            dynamic value = parameters["Value"];
            dynamic oldValue = parameters["oldValue"];

            var validator = new ScriptDefinitionValidator(Message, Project, definition);
            ProvidedMessage result;
            if (value != null) value = ((string)value).Trim();

            switch (name)
            {
                case "Name":
                    definition.DisplayName = value;

                    break;
                case "SourceFile":
                    result = validator.ValidateFileName(value);
                    if (result != null)
                    {
                        InvokeMessage(result);

                        return;
                    }

                    try
                    {
                        File.Move(Project.GetScriptFullPath(definition.FileName), Project.GetScriptFullPath(value));
                    }
                    catch (Exception ex)
                    {
                        ProvideMessage("Default.Exception.Error", "スクリプトファイルのリネーム", ex.Message);

                        return;
                    }

                    definition.FileName = value;

                    break;
                default:
                    throw new NotImplementedException();
            }

            if (!SaveProject()) return;
            RefreshScriptNode(definition);
        }
        /// <summary>
        /// スクリプト定義を作成する。
        /// </summary>
        /// <param name="parameters">パラメータ。</param>
        private void CreateScriptDefinition(KeyValueMap parameters)
        {
            ScriptDefinition definition = parameters["Definition"];

            using (var dialog = new SaveFileDialog())
            {
                dialog.InitialDirectory = Project.ScriptFolderFullPath;
                dialog.Filter = ApplicationConstants.ScriptFileFilterString;
                dialog.OverwritePrompt = false;

                if (dialog.ShowDialog(MainForm) != DialogResult.OK) return;

                var validator = new ScriptDefinitionValidator(Message, Project, definition);
                ProvidedMessage result;
                string newPath = null;

                result = validator.ValidateFileFullPath(dialog.FileName, ref newPath);
                if (result != null)
                {
                    InvokeMessage(result);

                    return;
                }

                result = validator.ValidateFileName(newPath);
                if (result != null)
                {
                    InvokeMessage(result);

                    return;
                }

                var newDefinition = new ScriptDefinition()
                {
                    FileName = newPath,
                    DisplayName = ApplicationConstants.DefaultScriptName,
                    Guid = Project.NewScriptGuid()
                };

                if (definition == null)
                {
                    Project.ScriptDefinitions.Add(newDefinition);
                    RefreshScriptNode(newDefinition);
                }
                else
                {
                    definition.Children.Add(newDefinition);
                    RefreshScriptNode(definition);
                }

                if (!SaveProject()) return;

                if (!File.Exists(Project.GetScriptFullPath(newDefinition.FileName)))
                {
                    try
                    {
                        using (var fs = File.Create(Project.GetScriptFullPath(newDefinition.FileName))) { }
                    }
                    catch (Exception ex)
                    {
                        ProvideMessage("Default.Exception.Error", "スクリプトファイルの作成", ex.Message);

                        return;
                    }
                }

                RefreshObjectDefinition();

                RegisterScriptEditor(newDefinition);
            }
        }