예제 #1
0
        public string[] GetCitiesCompletionList(string prefixText, int count, string contextKey)
        {
            // TODO: manufacture a guest ticket and run this through WebServiceImpl

            // country;state
            string[] context_parts = contextKey.Split(";,|".ToCharArray(), 2);
            if (context_parts.Length != 2)
            {
                return(null);
            }

            using (SnCore.Data.Hibernate.Session.OpenConnection())
            {
                ISession session = SnCore.Data.Hibernate.Session.Current;

                int country_id = 0;
                if (!string.IsNullOrEmpty(context_parts[0]))
                {
                    if (!ManagedCountry.TryGetCountryId(session, context_parts[0], out country_id))
                    {
                        return(null);
                    }
                }

                int state_id = 0;
                if (!string.IsNullOrEmpty(context_parts[1]))
                {
                    if (!ManagedState.TryGetStateId(session, context_parts[1], context_parts[0], out state_id))
                    {
                        return(null);
                    }
                }

                ICriteria ic = session.CreateCriteria(typeof(City))
                               .Add(Expression.Like("Name", string.Format("{0}%", Renderer.SqlEncode(prefixText))));

                if (country_id != 0)
                {
                    ic.Add(Expression.Eq("Country.Id", country_id));
                }
                if (state_id != 0)
                {
                    ic.Add(Expression.Eq("State.Id", state_id));
                }

                IList <City> nhs = ic.AddOrder(Order.Asc("Name"))
                                   .SetMaxResults(count)
                                   .List <City>();

                List <string> result = new List <string>(nhs.Count);
                foreach (City nh in nhs)
                {
                    result.Add(nh.Name);
                }

                return(result.ToArray());
            }
        }