public void ComplexHierarchyDataTest()
        {
            // define the metadata of geography.
            metadataTypeId = metadataApi.AddType("Geography", "HierarchyData", null, ObjectMetadataTypes.Custom, false, null);
            metadataApi.SaveField(metadataTypeId, new StringFieldMetadata { Name = "Chief Executive" });
            metadataApi.SaveField(metadataTypeId, new IntegerFieldMetadata { Name = "Population", MinValue = 0 });

            // create geographic areas with extension properties
            HierarchyDataObject china = new HierarchyDataObject { HierarchyType = GEOGRAPHY, Name = "China", ExtensionDataTypeId = metadataTypeId };
            china["Chief Executive"] = "XXX";
            china["Population"] = 1300000000;
            hierarchyApi.Save(china);

            HierarchyDataObject shanghai = new HierarchyDataObject { HierarchyType = GEOGRAPHY, Name = "Shanghai", ParentHierarchyDataId = china.HierarchyDataId, ExtensionDataTypeId = metadataTypeId };
            shanghai["Chief Executive"] = "YYY";
            shanghai["Population"] = 20000000;
            hierarchyApi.Save(shanghai);

            HierarchyDataObject beijing = new HierarchyDataObject { HierarchyType = GEOGRAPHY, Name = "Beijing", ParentHierarchyDataId = china.HierarchyDataId, ExtensionDataTypeId = metadataTypeId };
            beijing["Chief Executive"] = "ZZZ";
            beijing["Population"] = 30000000;
            hierarchyApi.Save(beijing);

            this.temporaryHierarchyDataIds.AddRange(new[] { china.HierarchyDataId, shanghai.HierarchyDataId, beijing.HierarchyDataId });

            // query hierarchy data by name.
            int recordCount;
            LinqPredicate predicate = new LinqPredicate("Name=@0 AND HierarchyType=@1", "Shanghai", GEOGRAPHY);
            IEnumerable<HierarchyDataObject> geographicAreas = hierarchyApi.FindHierarchyData(predicate, null, 0, 10, out recordCount);
            shanghai = geographicAreas.First();
            Assert.AreEqual(1, recordCount);
            Assert.AreEqual("YYY", shanghai["Chief Executive"]);
            Assert.AreEqual(20000000, shanghai["Population"]);
        }
        public void TestQuery()
        {
            HierarchyDataManagement page = new HierarchyDataManagement();

            DynamicPageProxy proxy = new DynamicPageProxy(page);

            IHierarchyApi hierarchyApi = SpringContext.Current.GetObject<IHierarchyApi>();

            using (var httpEnv = new HttpEnvironment())
            {
                Guid guid = Guid.NewGuid();
                string surfix = guid.ToString().Substring(0, 5);

                HierarchyDataObject obj = new HierarchyDataObject()
                {

                    HierarchyType = "Department",
                    Name = "HierarchyType" + surfix,
                    Description = "HierarchyType" + surfix

                };

                hierarchyApi.Save(obj);
                httpEnv.SetRequestUrl(@"/HierarchyDataDetailPanel/DynamicPage.svc?HierarchyType=Department");

                QueryParameterExpression expression = new QueryParameterExpression("Name", QueryFieldOperators.Equal, "HierarchyType" + surfix);

                SortExpression sort = new SortExpression("Name");

                QueryParameter parameters = new QueryParameter()
                {
                    //Expressions = express,
                    PageIndex = 0,
                    PageSize = 10,
                    SortExpression = sort
                };

                parameters.Expressions.Add(expression);

                QueryResults results = proxy.Query(parameters);

                foreach (var result in results.Results)
                {
                    Assert.AreEqual(DataBinder.Eval(result, "Name"), "HierarchyType" + surfix);
                }
            }
        }
        public void SetupHierarchy()
        {
            IAuthenticationContext authenticationContext = SpringContext.Current.GetObject<IAuthenticationContext>();
            IOrganizationApi organizationApi = SpringContext.Current.GetObject<IOrganizationApi>();
            membershipApi = new MembershipApi(authenticationContext, organizationApi);

            this.shanghai = new HierarchyDataObject { HierarchyType = GEOGRAPHY, Name = "Shang Hai" };
            hierarchyApi.Save(this.shanghai);

            this.beijing = new HierarchyDataObject { HierarchyType = GEOGRAPHY, Name = "Bei Jing" };
            hierarchyApi.Save(this.beijing);

            this.sichuan = new HierarchyDataObject { HierarchyType = GEOGRAPHY, Name = "Si Chuan" };
            hierarchyApi.Save(this.sichuan);

            this.chengdu = new HierarchyDataObject { HierarchyType = GEOGRAPHY, Name = "Cheng Du", ParentHierarchyDataId = this.sichuan.HierarchyDataId };
            hierarchyApi.Save(this.chengdu);

            this.mianyang = new HierarchyDataObject { HierarchyType = GEOGRAPHY, Name = "Mian Yang", ParentHierarchyDataId = this.sichuan.HierarchyDataId };
            hierarchyApi.Save(this.mianyang);
        }
        public void TestUpdate()
        {
            HierarchyDataDetailPanel page = new HierarchyDataDetailPanel();

            DetailPanelPageProxy proxy = new DetailPanelPageProxy(page);

            IHierarchyApi hierarchyApi = SpringContext.Current.GetObject<IHierarchyApi>();

            using (var httpEnv = new HttpEnvironment())
            {
                #region Create Data
                httpEnv.SetRequestUrl(@"/HierarchyDataDetailPanel/DynamicPage.svc?HierarchyType=Department");
                Guid guid = Guid.NewGuid();

                string surfix = guid.ToString().Substring(0, 5);

                HierarchyDataObject obj = new HierarchyDataObject()
                {
                    HierarchyType = "Department",
                    Name = "HierarchyType" + surfix,
                    Description = "HierarchyType" + surfix

                };

                hierarchyApi.Save(obj);
                #endregion

                #region Bind Web Control
                W.TextBox TextBoxName = new W.TextBox();
                TextBoxName.Text = "HierarchyType" + surfix;
                proxy.Set("TextBoxName", TextBoxName);

                W.TextBox TextBoxDescription = new W.TextBox();
                TextBoxDescription.Text = "HierarchyTypeUpdate" + surfix;
                proxy.Set("TextBoxDescription", TextBoxDescription);

                proxy.Set("ComboBoxParentHierarchyData", null);

                proxy.Set("ExtensionDataForm", null);
                #endregion

                proxy.Update(obj.HierarchyDataId.ToString());

                Assert.AreEqual(obj.Description, "HierarchyType" + surfix);

                obj = hierarchyApi.GetHierarchyData(obj.HierarchyDataId);

                Assert.AreEqual(obj.Description, "HierarchyTypeUpdate" + surfix);

            }
        }
        /// <summary>
        /// Get the copy of current object.
        /// </summary>
        /// <returns></returns>
        public HierarchyDataObject Clone()
        {
            HierarchyDataObject copy = new HierarchyDataObject
            {
                HierarchyDataId = this.HierarchyDataId,
                Name = this.Name,
                Description = this.Description,
                ParentHierarchyDataId = this.ParentHierarchyDataId,
                HierarchyType = this.HierarchyType,
                CreatedBy = this.CreatedBy,
                CreatedDate = this.CreatedDate,
                LastUpdatedBy = this.LastUpdatedBy,
                LastUpdatedDate = this.LastUpdatedDate,
                ExtensionDataTypeId = this.ExtensionDataTypeId
            };

            this.ClonePropertiesTo(copy);
            return copy;
        }
        public void SimpleHierarchyDataTest()
        {
            HierarchyDataObject china = new HierarchyDataObject { HierarchyType = GEOGRAPHY, Name = "China" };
            hierarchyApi.Save(china);

            HierarchyDataObject shanghai = new HierarchyDataObject { HierarchyType = GEOGRAPHY, Name = "Shanghai", ParentHierarchyDataId = china.HierarchyDataId };
            hierarchyApi.Save(shanghai);

            HierarchyDataObject beijing = new HierarchyDataObject { HierarchyType = GEOGRAPHY, Name = "Beijing", ParentHierarchyDataId = china.HierarchyDataId };
            hierarchyApi.Save(beijing);

            this.temporaryHierarchyDataIds.AddRange(new[] { china.HierarchyDataId, shanghai.HierarchyDataId, beijing.HierarchyDataId });

            // get all areas
            IEnumerable<HierarchyDataObject> areas = hierarchyApi.GetAllChildren(GEOGRAPHY, null);
            Assert.AreEqual(3, areas.Count());

            // get both implicit and explicit child areas of China
            areas = hierarchyApi.GetAllChildren(GEOGRAPHY, china.HierarchyDataId);
            Assert.AreEqual(2, areas.Count());

            // get only explicit child areas which is the root node in geography.
            areas = hierarchyApi.GetImmediateChildren(GEOGRAPHY, null);
            Assert.AreEqual(1, areas.Count());
            Assert.AreEqual("China", areas.First().Name);

            // query hierarchy data by name.
            int recordCount;
            LinqPredicate predicate = new LinqPredicate("Name=@0 AND ParentHierarchyDataId=@1 AND HierarchyType=@2", "Beijing", china.HierarchyDataId, GEOGRAPHY);
            hierarchyApi.FindHierarchyData(predicate, null, 0, 10, out recordCount);
            Assert.AreEqual(1, recordCount);
        }