Click here to Skip to main content
15,885,546 members
Articles / Web Development / ASP.NET

Eucalypto - ASP.NET CMS Library using NHibernate

Rate me:
Please Sign up or sign in to vote.
4.84/5 (36 votes)
10 Jun 2009MIT24 min read 318.9K   4.6K   260  
An ASP.NET server library for creating CMS website (forums, articles/wiki, news, users/roles, ...), using NHibernate for data access.
using System;
using System.Collections.Generic;
using System.Text;
using NHibernate;
using NHibernate.Expression;

namespace Eucalypto.Forum
{
    /// <summary>
    /// Class that use NHibernate to save the Message data
    /// </summary>
    public class MessageDataStore : EntityDataStoreBase<Message, string>
    {
        public MessageDataStore(TransactionScope transactionScope)
            : base(transactionScope)
        {
        }

        public IList<Message> FindByTopic(Topic topic)
        {
            ICriteria criteria = CreateCriteria();
            criteria.CreateCriteria("Topic").Add(Expression.Eq("Id", topic.Id));
            criteria.AddOrder(Order.Asc("InsertDate"));

            return Find(criteria);
        }

        /// <summary>
        /// Returns the message root of a specified topic
        /// </summary>
        /// <param name="idTopic"></param>
        /// <returns></returns>
        public Message FindByTopicRoot(Topic topic)
        {
            ICriteria criteria = CreateCriteria();
            criteria.Add(Expression.IsNull("IdParentMessage"));
            criteria.CreateCriteria("Topic").Add(Expression.Eq("Id", topic.Id));

            return FindUnique(criteria);
        }

        public int MessageCountByTopic(Topic topic)
        {
            ICriteria criteria = CreateCriteria();
            criteria.CreateCriteria("Topic").Add(Expression.Eq("Id", topic.Id));

            return Count(criteria);
        }

        public IList<Message> FindByParent(string idParent)
        {
            ICriteria criteria = CreateCriteria();
            criteria.Add(Expression.Eq("IdParentMessage", idParent));
            criteria.AddOrder(Order.Asc("InsertDate"));

            return Find(criteria);
        }

        /// <summary>
        /// The fields are aggregated with an AND expression.
        /// </summary>
        /// <param name="categoryName"></param>
        /// <param name="searchFor"></param>
        /// <param name="owner"></param>
        /// <param name="tag"></param>
        /// <param name="fromDate"></param>
        /// <param name="toDate"></param>
        /// <param name="paging"></param>
        /// <returns></returns>
        public IList<Message> FindByFields(Filter<string> categoryName,
                                           Filter<string> searchFor,
                                           Filter<string> owner,
                                           Filter<string> tag,  
                                           DateTime? fromDate, DateTime? toDate,
                                           PagingInfo paging)
        {
            ICriteria criteria = CreateCriteria();

            if (owner != null)
                criteria.Add(owner.ToCriterion("Owner"));

            if (tag != null)
                criteria.Add(tag.ToCriterion("Tag"));

            if (searchFor != null)
                criteria.Add(Expression.Or(searchFor.ToCriterion("Title"),
                                           searchFor.ToCriterion("Body")));

            if (fromDate != null)
                criteria.Add(Expression.Ge("InsertDate", fromDate));

            if (toDate != null)
                criteria.Add(Expression.Le("InsertDate", toDate));

            ICriteria topicCriteria = criteria.CreateCriteria("Topic");

            if (categoryName != null)
            {
                ICriteria forumCriteria = topicCriteria.CreateCriteria("Category");
                forumCriteria.Add(categoryName.ToCriterion("Name"));
            }
            else
                throw new ForumNotSpecifiedException();

            criteria.AddOrder(Order.Desc("InsertDate"));

            return Find(criteria, paging);
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The MIT License


Written By
Software Developer
Italy Italy
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions