/// <summary>
        /// データベースアイテムのリストを作成する。
        /// </summary>
        /// <param name="project">プロジェクト情報のインスタンス。</param>
        /// <param name="file">データベースファイル名。</param>
        /// <returns>データベースアイテムのリスト。</returns>
        public static List<ListItem> CreateDatabaseItemList(
            WarlockProject project,
            string file)
        {
            try
            {
                var itemDefinition = project.FindDatabaseDefinition(file);
                if (itemDefinition == null)
                {
                    return new List<ListItem>();
                }
                List<dynamic> items = project.LoadDatabase(itemDefinition);

                var ret = new List<ListItem>();

                foreach (var i in items)
                {
                    DatabaseClassData item = i;
                    if (item == null) continue;

                    ret.Add(new ListItem()
                    {
                        Text = String.Format(
                            String.Format(
                                "{{0:{0}}}:{{1}}",
                                new String('0', (items.Count - 1).ToString().Length)
                            ),
                            item.Variables["id"],
                            item.Variables["name"]
                        ),
                        Value = item.Variables["id"]
                    });
                }

                return ret;
            }
            catch
            {
                return new List<ListItem>();
            }
        }
Esempio n. 2
0
        /// <summary>
        /// データベースで使用中のデータベースの一覧を取得する。
        /// </summary>
        /// <param name="project">プロジェクト情報のインスタンス。</param>
        /// <returns>データベースで使用中のデータベースの一覧。</returns>
        private List<DatabaseDefinition> FindUsingDatabase(WarlockProject project)
        {
            var ret = new List<DatabaseDefinition>();

            var dataClass = project.FindClassDefinition(this.DataClass);
            if (dataClass == null) return ret;

            var checkingStack = new List<ClassDefinition>();
            Action<DatabaseDefinition> recursive = null;
            recursive = (database) =>
            {
                if (!ret.Contains(database)) ret.Add(database);

                var clazz = project.FindClassDefinition(this.DataClass);
                if (clazz == null) return;

                if (checkingStack.Contains(clazz)) return;
                checkingStack.Add(clazz);

                foreach (var accessor in clazz.Accessors)
                {
                    if (!accessor.IsBasicValueType)
                    {
                        var accessorData = project.FindDatabaseDefinition(accessor.ValueType);
                        if (accessorData == null) continue;

                        recursive(accessorData);
                    }
                }

                checkingStack.Remove(clazz);
            };

            foreach (var accessor in dataClass.Accessors)
            {
                if (!accessor.IsBasicValueType)
                {
                    var accessorData = project.FindDatabaseDefinition(accessor.ValueType);
                    if (accessorData == null) continue;

                    recursive(accessorData);
                }
            }

            return ret;
        }
Esempio n. 3
0
        /// <summary>
        /// データベース定義を使用しているクラスの一覧を取得する。
        /// </summary>
        ///// <param name="project">プロジェクト情報のインスタンス。</param>
        /// <returns></returns>
        public List<dynamic> FindUsingClass(WarlockProject project)
        {
            var ret = new List<dynamic>();

            var dataClass = project.FindClassDefinition(this.DataClass);
            if (dataClass == null) return ret;

            List<dynamic> extendClasses = dataClass.GetExtendClasses(project);
            extendClasses.Reverse();

            var checkingStack = new List<ClassDefinition>();
            Action<ClassDefinition> recursive = null;
            recursive = (clazz) =>
            {
                if (!ret.Contains(clazz)) ret.Add(clazz);
                if (checkingStack.Contains(clazz)) return;
                checkingStack.Add(clazz);

                foreach (var accessor in clazz.Accessors)
                {
                    if (!accessor.IsBasicValueType)
                    {
                        var accessorData = project.FindDatabaseDefinition(accessor.ValueType);
                        if (accessorData == null) continue;

                        var accessorClass = project.FindClassDefinition(accessorData.DataClass);
                        if (accessorClass == null) continue;

                        recursive(accessorClass);
                    }
                }

                checkingStack.Remove(clazz);
            };

            foreach (var extendClass in extendClasses)
            {
                ret.Add(extendClass);

                if (extendClass is ClassDefinition)
                {
                    var castedExtendClass = (ClassDefinition)extendClass;

                    recursive(castedExtendClass);
                }
            }

            return ret;
        }