private IReadOnlyList <DatabaseItemDesc> MakeItemDescList(DBTypeSetting typeSetting,
                                                                  DBDataSetting dataSetting)
        {
            var result = new List <DatabaseItemDesc>();

            var itemSettingList = typeSetting.ItemSettingList;
            var valueList       = dataSetting.SettingValuesList[0];

            if (itemSettingList.Count != valueList.Count)
            {
                throw new InvalidOperationException(
                          "項目設定数と項目数が異なります。");
            }

            for (var i = 0; i < itemSettingList.Count; i++)
            {
                var desc = new DatabaseItemDesc
                {
                    ItemName           = itemSettingList[i].ItemName,
                    SpecialSettingDesc = itemSettingList[i].SpecialSettingDesc,
                    ItemType           = valueList[i].Type,
                };
                result.Add(desc);
            }

            return(result);
        }
Beispiel #2
0
        public static void DataSettingTypeGetterTest(DBDataSettingType type)
        {
            var typeSetting         = new DBTypeSetting();
            var dataSetting         = new DBDataSetting(type, DBKind.User, 0);
            var instance            = new DatabaseTypeDesc(typeSetting, dataSetting);
            var changedPropertyList = new List <string>();

            instance.PropertyChanged += (sender, args) => { changedPropertyList.Add(args.PropertyName); };

            DBDataSettingType result = null;
            var errorOccured         = false;

            try
            {
                result = instance.DataSettingType;
            }
            catch (Exception ex)
            {
                logger.Exception(ex);
                errorOccured = true;
            }

            // エラーが発生しないこと
            Assert.IsFalse(errorOccured);

            // 取得した結果が意図した値であること
            Assert.AreEqual(result, type);

            // プロパティ変更通知が発火していないこと
            Assert.AreEqual(changedPropertyList.Count, 0);
        }
Beispiel #3
0
        /// <summary>
        /// タイプ名
        /// </summary>
        /// <param name="readStatus">読み込み経過状態</param>
        /// <param name="setting">結果格納インスタンス</param>
        private void ReadTypeName(BinaryReadStatus readStatus, DBTypeSetting setting)
        {
            var typeName = readStatus.ReadString();

            setting.TypeName = typeName.String;

            readStatus.AddOffset(typeName.ByteLength);
        }
Beispiel #4
0
        /// <summary>
        /// メモ
        /// </summary>
        /// <param name="readStatus">読み込み経過状態</param>
        /// <param name="setting">結果格納インスタンス</param>
        private void ReadMemo(BinaryReadStatus readStatus, DBTypeSetting setting)
        {
            var memo = readStatus.ReadString();

            setting.Memo = memo.String;

            readStatus.AddOffset(memo.ByteLength);
        }
        /// <summary>
        /// タイプ名
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="setting">結果格納インスタンス</param>
        private void ReadTypeName(FileReadStatus status, DBTypeSetting setting)
        {
            var typeName = status.ReadString();

            setting.TypeName = typeName.String;

            status.AddOffset(typeName.ByteLength);

            Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader),
                                                   "タイプ名", setting.TypeName));
        }
        /// <summary>
        /// メモ
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="setting">結果格納インスタンス</param>
        private void ReadMemo(FileReadStatus status, DBTypeSetting setting)
        {
            var memo = status.ReadString();

            setting.Memo = memo.String;

            status.AddOffset(memo.ByteLength);

            Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader),
                                                   "メモ", memo.String));
        }
        /// <summary>
        /// タイプ設定
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="typeSetting">読み込み結果インスタンス</param>
        private void ReadTypeSetting(FileReadStatus status, out DBTypeSetting typeSetting)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(DBTypeFileReader),
                                                       "タイプ設定"));

            var reader = new DBTypeSettingReader(status, 1, true);

            var settings = reader.Read();

            typeSetting = settings[0];

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(DBTypeFileReader),
                                                     "タイプ設定"));
        }
Beispiel #8
0
        public static void SerializeTest()
        {
            var target = new DBTypeSetting
            {
                TypeName = "TypeName"
            };
            var changedPropertyList = new List <string>();

            target.PropertyChanged += (sender, args) => { changedPropertyList.Add(args.PropertyName); };

            var clone = DeepCloner.DeepClone(target);

            Assert.IsTrue(clone.Equals(target));

            // プロパティ変更通知が発火していないこと
            Assert.AreEqual(changedPropertyList.Count, 0);
        }
Beispiel #9
0
        public static void DataNameListTest(bool isSetNull, bool isError)
        {
            var instance            = new DBTypeSetting();
            var changedPropertyList = new List <string>();

            instance.PropertyChanged += (sender, args) => { changedPropertyList.Add(args.PropertyName); };

            var dataNameList = isSetNull ? null : new DataNameList();

            var errorOccured = false;

            try
            {
                instance.DataNameList = dataNameList;
            }
            catch (Exception ex)
            {
                logger.Exception(ex);
                errorOccured = true;
            }

            // エラーフラグが一致すること
            Assert.AreEqual(errorOccured, isError);

            if (!errorOccured)
            {
                var setValue = instance.DataNameList;

                Assert.NotNull(setValue);
                Assert.NotNull(dataNameList);

                // セットした値と取得した値が一致すること
                Assert.IsTrue(setValue.Equals(dataNameList));
            }

            // 意図したとおりプロパティ変更通知が発火していること
            if (errorOccured)
            {
                Assert.AreEqual(changedPropertyList.Count, 0);
            }
            else
            {
                Assert.AreEqual(changedPropertyList.Count, 1);
                Assert.IsTrue(changedPropertyList[0].Equals(nameof(DBTypeSetting.DataNameList)));
            }
        }
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
        //     ReadMethod
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

        /// <summary>
        /// DBタイプ設定一つ
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="isReadDataNameList">データ名リスト読み込みフラグ</param>
        /// <param name="result">結果格納インスタンス</param>
        /// <exception cref="InvalidOperationException">バイナリデータがファイル仕様と異なる場合</exception>
        private void ReadOneDBTypeSetting(FileReadStatus status,
                                          bool isReadDataNameList, ICollection <DBTypeSetting> result)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(DBTypeSettingReader), "DBタイプ設定"));

            var setting = new DBTypeSetting();

            // DBタイプ名
            ReadTypeName(status, setting);

            // 項目名
            var itemNames = ReadItemName(status);

            if (isReadDataNameList)
            {
                // データ名
                ReadDataName(status, setting);
            }

            // メモ
            ReadMemo(status, setting);

            // 特殊指定
            var specialSettingTypes = ReadItemSpecialSettingType(status);

            // 項目メモ
            var itemMemos = ReadItemMemo(status);

            // 特殊指定文字列パラメータ
            var valueDescriptionLists = ReadSpecialStringValue(status);

            // 特殊指定数値パラメータ
            var valueCaseNumberLists = ReadSpecialNumberValue(status);

            // 初期値
            var initValues = ReadItemInitValue(status);

            // 特殊指定セット
            SetItemSetting(setting, specialSettingTypes, itemNames, itemMemos, valueDescriptionLists,
                           valueCaseNumberLists, initValues);

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(DBTypeSettingReader), "DBタイプ設定"));

            result.Add(setting);
        }
Beispiel #11
0
        /// <summary>
        /// データ名
        /// </summary>
        /// <param name="readStatus">読み込み経過状態</param>
        /// <param name="setting">結果格納インスタンス</param>
        private void ReadDataName(BinaryReadStatus readStatus, DBTypeSetting setting)
        {
            var length = readStatus.ReadInt();

            readStatus.IncreaseIntOffset();

            var dataNameList = new List <DataName>();

            for (var i = 0; i < length; i++)
            {
                var name = readStatus.ReadString();
                readStatus.AddOffset(name.ByteLength);

                dataNameList.Add(name.ToString());
            }

            setting.DataNameList = new DataNameList(dataNameList);
        }
Beispiel #12
0
        private void ReadOneDBTypeSetting(BinaryReadStatus readStatus,
                                          bool isReadDataNameList, ICollection <DBTypeSetting> result)
        {
            var setting = new DBTypeSetting();

            // DBタイプ名
            ReadTypeName(readStatus, setting);

            // 項目名
            var itemNames = ReadItemName(readStatus);

            if (isReadDataNameList)
            {
                // データ名
                ReadDataName(readStatus, setting);
            }

            // メモ
            ReadMemo(readStatus, setting);

            // 特殊指定
            var specialSettingTypes = ReadItemSpecialSettingType(readStatus);

            // 項目メモ
            var itemMemos = ReadItemMemo(readStatus);

            // 特殊指定文字列パラメータ
            var valueDescriptionLists = ReadSpecialStringValue(readStatus);

            // 特殊指定数値パラメータ
            var valueCaseNumberLists = ReadSpecialNumberValue(readStatus);

            // 初期値
            var initValues = ReadItemInitValue(readStatus);

            // 特殊指定セット
            SetItemSetting(setting, specialSettingTypes, itemNames, itemMemos, valueDescriptionLists,
                           valueCaseNumberLists, initValues);

            result.Add(setting);
        }
Beispiel #13
0
        public static void TypeIdGetterTest(DBDataSettingType type, bool isError)
        {
            var answer = (TypeId)4;

            var typeSetting         = new DBTypeSetting();
            var dataSetting         = new DBDataSetting(type, DBKind.User, answer);
            var instance            = new DatabaseTypeDesc(typeSetting, dataSetting);
            var changedPropertyList = new List <string>();

            instance.PropertyChanged += (sender, args) => { changedPropertyList.Add(args.PropertyName); };

            TypeId result       = 0;
            var    errorOccured = false;

            try
            {
                result = instance.TypeId;
            }
            catch (Exception ex)
            {
                logger.Exception(ex);
                errorOccured = true;
            }

            // エラーフラグが一致すること
            Assert.AreEqual(errorOccured, isError);

            if (errorOccured)
            {
                return;
            }

            // 取得した結果が意図した値であること
            Assert.AreEqual(result, answer);

            // プロパティ変更通知が発火していないこと
            Assert.AreEqual(changedPropertyList.Count, 0);
        }
Beispiel #14
0
        private static DBTypeSetting CreateTypeSetting(int dataLength, int itemLength)
        {
            var typeSetting = new DBTypeSetting
            {
                TypeName = MakeTypeName(),
                Memo     = MakeMemo(),
            };

            typeSetting.DataNameList.AdjustLength(dataLength);
            for (var i = 0; i < typeSetting.DataNameList.Count; i++)
            {
                typeSetting.DataNameList[i] = MakeDataName(i);
            }

            typeSetting.ItemSettingList.AdjustLength(itemLength);
            for (var i = 0; i < typeSetting.ItemSettingList.Count; i++)
            {
                typeSetting.ItemSettingList[i].ItemName = MakeItemName(i);
                typeSetting.ItemSettingList[i].ItemType = MakeItemType();
            }

            return(typeSetting);
        }
        /// <summary>
        /// データ名
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="setting">結果格納インスタンス</param>
        private void ReadDataName(FileReadStatus status, DBTypeSetting setting)
        {
            var length = status.ReadInt();

            status.IncreaseIntOffset();

            Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader),
                                                   "データ数", length));

            var dataNameList = new List <DataName>();

            for (var i = 0; i < length; i++)
            {
                var name = status.ReadString();
                status.AddOffset(name.ByteLength);

                Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader),
                                                       $"  データ名{i,4}", name.String));

                dataNameList.Add(name.ToString());
            }

            setting.DataNameList = new DataNameList(dataNameList);
        }
Beispiel #16
0
        /// <summary>
        /// DataDescのリスト
        /// </summary>
        /// <param name="typeSetting">タイプ設定</param>
        /// <param name="dataSetting">データ設定</param>
        /// <returns></returns>
        private IReadOnlyList <DatabaseDataDesc> MakeDataDescList(DBTypeSetting typeSetting,
                                                                  DBDataSetting dataSetting)
        {
            var result = new List <DatabaseDataDesc>();

            var dataNameList = typeSetting.DataNameList;
            var valuesList   = dataSetting.SettingValuesList;

            if (dataNameList.Count != valuesList.Count)
            {
                throw new InvalidOperationException(
                          $"データ名数とデータ数が異なります。");
            }

            for (var i = 0; i < typeSetting.DataNameList.Count; i++)
            {
                var desc = new DatabaseDataDesc(dataNameList[i],
                                                valuesList[i].ToLengthChangeableItemValueList());

                result.Add(desc);
            }

            return(result);
        }
        /// <summary>
        /// DB項目設定セット
        /// </summary>
        /// <param name="setting">結果格納インスタンス</param>
        /// <param name="specialSettingTypes">特殊指定種別リスト</param>
        /// <param name="itemNames">項目名リスト</param>
        /// <param name="itemMemos">項目メモリスト</param>
        /// <param name="descriptionLists">特殊指定選択肢文字列リスト</param>
        /// <param name="caseNumberLists">特殊指定選択肢数値リスト</param>
        /// <param name="initValues">初期値リスト</param>
        /// <exception cref="ArgumentException">ファイルフォーマットが不正の場合</exception>
        private void SetItemSetting(DBTypeSetting setting,
                                    IReadOnlyList <DBItemSpecialSettingType> specialSettingTypes, IReadOnlyList <ItemName> itemNames,
                                    IReadOnlyList <ItemMemo> itemMemos,
                                    IReadOnlyList <IReadOnlyList <DatabaseValueCaseDescription> > descriptionLists,
                                    IReadOnlyList <List <DatabaseValueCaseNumber> > caseNumberLists, IReadOnlyList <DBValueInt> initValues)
        {
            // 項目名、項目メモ、文字列パラメータ、数値パラメータ、初期値の長さが一致する必要がある
            var itemNamesCount        = itemNames.Count;
            var itemMemosCount        = itemMemos.Count;
            var descriptionListsCount = descriptionLists.Count;
            var caseNumberListsCount  = caseNumberLists.Count;
            var initValuesCount       = initValues.Count;

            if (itemNamesCount != itemMemosCount ||
                itemNamesCount != descriptionListsCount ||
                itemNamesCount != caseNumberListsCount ||
                itemNamesCount != initValuesCount)
            {
                throw new ArgumentException(
                          "項目名、項目メモ、文字列パラメータ、数値パラメータ、初期値の要素数が一致しません。(" +
                          $"項目名数:{itemNamesCount}, 項目メモ数:{itemMemosCount}," +
                          $"文字列パラメータ数:{descriptionListsCount}, 数値パラメータ数:{caseNumberListsCount}" +
                          $"初期値数:{initValuesCount})");
            }

            // 特殊指定数が項目数より少ない場合は不正
            var specialSettingTypesCount = specialSettingTypes.Count;

            if (specialSettingTypesCount < itemNamesCount)
            {
                throw new ArgumentException(
                          $"特殊指定種別の要素数が不正です。(要素数:{specialSettingTypesCount})");
            }

            var itemSettings = new List <DBItemSetting>();

            for (var i = 0; i < itemNamesCount; i++)
            {
                var specialSettingDesc = new DBItemSpecialSettingDesc
                {
                    ItemMemo  = itemMemos[i],
                    InitValue = initValues[i]
                };

                var thisDescriptions = descriptionLists[i];
                var thisCaseNumbers  = caseNumberLists[i];

                var thisItemSettingType = specialSettingTypes[i];

                try
                {
                    var caseList = MakeValueCases(thisItemSettingType, thisCaseNumbers, thisDescriptions);

                    specialSettingDesc.ChangeValueType(thisItemSettingType, caseList);

                    if (thisItemSettingType == DBItemSpecialSettingType.ReferDatabase)
                    {
                        specialSettingDesc.DatabaseReferKind = DBReferType.FromCode(thisCaseNumbers[0]);
                        specialSettingDesc.DatabaseDbTypeId  = new TypeId(thisCaseNumbers[1]);
                        specialSettingDesc.DatabaseUseAdditionalItemsFlag = thisCaseNumbers[2] == 1;
                    }
                }
                catch (Exception ex)
                {
                    throw new ArgumentException(
                              $"項目{i,2}の特殊指定タイプと特殊指定パラメータが一致しません。" +
                              "詳細はInnerExceptionを確認してください。", ex);
                }

                var thisItemName = itemNames[i];

                var itemSetting = new DBItemSetting
                {
                    ItemName           = thisItemName,
                    SpecialSettingDesc = specialSettingDesc
                };

                itemSettings.Add(itemSetting);
            }

            setting.ItemSettingList.AddRange(itemSettings);
        }