Ejemplo n.º 1
0
        // Das ist immernoch mit Kanonen auf Spatzen. Zur Zeit ist nur fuer Track.Property.Bpm u. .Year left join erwuenscht...
        private static void loadJunctions(Junction junction, ARelation aRelation, ISet<string> aliases, ICriteria criteria)
        {
            if(aRelation is ComplexRelation) {
                Junction newJunction = aRelation.BinaryRelator == Relator.Binary.AND ? new Conjunction() : new Disjunction() as Junction;

                foreach(ARelation relatum in aRelation.Relata)
                    TrackSearch_Service.loadJunctions(newJunction, relatum, aliases, criteria);

                junction.Add(newJunction);
            }
            else { // if( aRelation is ASimpleRelation)
                ASimpleRelation aSimpleRelation = aRelation as ASimpleRelation;
                AbstractCriterion abstractCriterion;

                if(aSimpleRelation is SimpleRelation<string>) {
                    if(aliases.Add(aSimpleRelation.Alias))
                        criteria.CreateAlias(aSimpleRelation.AssociationPath, aSimpleRelation.Alias);

                    abstractCriterion = new InsensitiveLikeExpression(
                        aSimpleRelation.SearchProperty, ((StringSearch)aSimpleRelation).Relatum, MatchMode.Anywhere);

                }
                else if(aSimpleRelation is SimpleRelation<int>) {
                    if(aliases.Add(aSimpleRelation.Alias))
                        criteria.CreateAlias(aSimpleRelation.AssociationPath, aSimpleRelation.Alias, JoinType.LeftOuterJoin);

                    abstractCriterion = new EqExpression(
                        aSimpleRelation.SearchProperty, ((IntSearch)aSimpleRelation).Relatum);
                }
                else if( aSimpleRelation is Between_String ) {
                    if(aliases.Add(aSimpleRelation.Alias))
                        criteria.CreateAlias(aSimpleRelation.AssociationPath, aSimpleRelation.Alias, JoinType.LeftOuterJoin);

                    abstractCriterion = new BetweenExpression(
                        aSimpleRelation.SearchProperty, ((Between_String)aSimpleRelation).Phrase1, ((Between_String)aSimpleRelation).Phrase2);
                }
                else if( aSimpleRelation is Between_Int ) {
                    if(aliases.Add(aSimpleRelation.Alias))
                        criteria.CreateAlias(aSimpleRelation.AssociationPath, aSimpleRelation.Alias, JoinType.LeftOuterJoin);

                    abstractCriterion = new BetweenExpression(
                        aSimpleRelation.SearchProperty, ((Between_Int)aSimpleRelation).Phrase1, ((Between_Int)aSimpleRelation).Phrase2);
                }
                else { // if(aSimpleRelation is SimpleRelation<Ending.Attribute>) {

                    abstractCriterion = new EqExpression(
                        Track.Property.Ending.ToString(), new Ending(((EndingAttributeSearch)aSimpleRelation).Relatum));
                }

                if(aSimpleRelation.UnaryRelator == Relator.Unary.NOT)
                    abstractCriterion = Expression.Not(abstractCriterion);
                // else // if(aSimpleRelation.UnaryRelator == Relator.Unary.IS)
                junction.Add(abstractCriterion);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Without explicit sorting.
        /// </summary>
        public static IList<Track> getTrackListing(ARelation relation)
        {
            ICriteria criteria = NHibernateSessionManager.Instance.GetSession().CreateCriteria(typeof(Track));
            ISet<string> aliases = new HashedSet<string>();
            Junction junction = relation.BinaryRelator == Relator.Binary.AND ? new Conjunction() : new Disjunction() as Junction;

            foreach(ARelation relatum in relation.Relata)
                TrackSearch_Service.loadJunctions(junction, relatum, aliases, criteria);

            return criteria.Add(junction).List<Track>();
        }
Ejemplo n.º 3
0
        /// <summary>
        /// With explicit sorting.
        /// </summary>
        public static IList<Track> getTrackListing(ARelation relation, Track.Property sortExpression, SortDirection sortDirection)
        {
            ICriteria criteria = NHibernateSessionManager.Instance.GetSession().CreateCriteria(typeof(Track));
            ISet<string> aliases = new HashedSet<string>();
            Junction junction = relation.BinaryRelator == Relator.Binary.AND ? new Conjunction() : new Disjunction() as Junction;

            foreach(ARelation relatum in relation.Relata)
                TrackSearch_Service.loadJunctions(junction, relatum, aliases, criteria);
            criteria.Add(junction);
            if(!aliases.Contains(sortExpression.ToString().ToLower()))
                criteria.CreateAlias(sortExpression.ToString(), sortExpression.ToString().ToLower());

            Order order;
            if(sortDirection == SortDirection.Ascending)
                order = Order.Asc(String.Format("{0}.{1}", sortExpression.ToString().ToLower(), Track.getChildPropertyAsString(sortExpression)));
            else
                order = Order.Desc(String.Format("{0}.{1}", sortExpression.ToString().ToLower(), Track.getChildPropertyAsString(sortExpression)));
            criteria.AddOrder(order);
            return criteria.List<Track>();
        }
 public static void setActiveSearchRelation(HttpSessionState session, ARelation value)
 {
     set(SessionKey.SearchRelation, session, value);
 }