public WizardParam CreateCopy(string newName)
        {
            WizardParam res = new WizardParam();

            res.LoadFromDataList(RawData);
            res.Name.DecodedValue = newName;
            return(res);
        }
        public override void ExtractUsableData()
        {
            WizardParam param;
            int         dataIndex = 0;

            while (dataIndex < workInnerData.Count)
            {
                param = new WizardParam();
                param.LoadFromDataList(StringUtils.PickObject(workInnerData, dataIndex));
                paramList.Add(param);
            }
        }
        public bool CopyParam(string param, string newParamName)
        {
            WizardParam originalParam = paramList.Where(p => p.Name.DecodedValue == param).FirstOrDefault();

            if (originalParam == null)
            {
                return(false);
            }
            WizardParam newParam = paramList.Where(p => p.Name.DecodedValue == newParamName).FirstOrDefault();

            if (newParam != null)
            {
                return(false);
            }
            newParam = originalParam.CreateCopy(newParamName);
            paramList.Add(newParam);
            return(true);
        }
        public override void LoadFromFolder(string folderPath)
        {
            objectName   = WSConstants.Objects.ParamList;
            objectEnding = WSConstants.Markup.End;

            string paramsFolder        = Path.Combine(folderPath, paramsFolderName);
            string paramsOrderFilePath = Path.Combine(paramsFolder, wizardParamsOrderFileName);

            List <string> fileList = Directory.GetFiles(paramsFolder).ToList();

            List <string> paramsOrder = File.ReadAllLines(paramsOrderFilePath).ToList();

            Dictionary <string, WizardParam> namedParams = new Dictionary <string, WizardParam>();

            // Загрузить параметры из папки
            foreach (var filePath in fileList)
            {
                if (paramsOrderFilePath != filePath)
                {
                    string      newParamName = Path.GetFileNameWithoutExtension(filePath);
                    WizardParam createdParam = new WizardParam();
                    createdParam.LoadFromFolder(filePath);
                    namedParams.Add(newParamName, createdParam);
                }
            }

            // 1. Искать по новому имени затем по старому (для переименованных)
            WizardParam param; string dictName;

            foreach (string paramName in paramsOrder)
            {
                dictName = paramName;
                if (!namedParams.TryGetValue(paramName, out param))
                {
                    // Не лучшая идея одновременно переименовать и сделать копию, возьмется полуслучайно, на свой страх и риск кароч
                    var paramd = namedParams.Where(p => p.Value.Name.DecodedValue == paramName).FirstOrDefault();
                    dictName = paramd.Key;
                    param    = paramd.Value;
                }
                if (param != null)
                {
                    param.Name.DecodedValue = dictName;
                    paramList.Add(param);
                    namedParams.Remove(dictName);
                }
            }

            // 2. Второй заход, ищет по старому имени для того чтобы вставить параметры в порядке хоть немного похожем на первоначальный
            foreach (string paramName in paramsOrder)
            {
                List <string> remParamNames = new List <string>();
                foreach (var paramd in namedParams.Where(p => p.Value.Name.DecodedValue == paramName))
                {
                    param    = paramd.Value;
                    dictName = paramd.Key;
                    param.Name.DecodedValue = dictName;
                    paramList.Add(param);
                    remParamNames.Add(dictName);
                }
                foreach (string dn in remParamNames)
                {
                    namedParams.Remove(dn);
                }
            }

            // 3. Добавить оставшиеся (ну совсем новые) параметры в самый конец
            foreach (var paramd in namedParams)
            {
                param    = paramd.Value;
                dictName = paramd.Key;
                param.Name.DecodedValue = dictName;
                paramList.Add(param);
            }
        }