Package org.projectforge.book

Source Code of org.projectforge.book.BookDao

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.book;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.projectforge.access.AccessType;
import org.projectforge.access.OperationType;
import org.projectforge.core.BaseDao;
import org.projectforge.core.BaseSearchFilter;
import org.projectforge.core.Configuration;
import org.projectforge.core.ConfigurationParam;
import org.projectforge.core.QueryFilter;
import org.projectforge.task.TaskDO;
import org.projectforge.task.TaskDao;
import org.projectforge.user.PFUserDO;
import org.projectforge.user.UserDao;

/**
*
* @author Kai Reinhard (k.reinhard@micromata.de)
*
*/
public class BookDao extends BaseDao<BookDO>
{
  // private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(BookDao.class);

  private static final String[] ADDITIONAL_SEARCH_FIELDS = new String[] { "lendOutBy.username", "lendOutBy.firstname",
    "lendOutBy.lastname", "task.title"};

  private UserDao userDao;

  private Configuration configuration;

  private TaskDao taskDao;

  public void setConfiguration(final Configuration configuration)
  {
    this.configuration = configuration;
  }

  public void setUserDao(final UserDao userDao)
  {
    this.userDao = userDao;
  }

  public void setTaskDao(final TaskDao taskDao)
  {
    this.taskDao = taskDao;
  }

  public BookDao()
  {
    super(BookDO.class);
  }

  /**
   * Books will be assigned to a default task.
   */
  public Integer getDefaultTaskId()
  {
    return configuration.getTaskIdValue(ConfigurationParam.DEFAULT_TASK_ID_4_BOOKS);
  }

  @Override
  protected String[] getAdditionalSearchFields()
  {
    return ADDITIONAL_SEARCH_FIELDS;
  }

  @Override
  public List<BookDO> getList(final BaseSearchFilter filter)
  {
    final BookFilter myFilter;
    if (filter instanceof BookFilter) {
      myFilter = (BookFilter) filter;
    } else {
      myFilter = new BookFilter(filter);
    }
    final QueryFilter queryFilter = new QueryFilter(myFilter);
    if (StringUtils.isBlank(myFilter.getSearchString()) == true) {
      Collection<BookStatus> col = null;
      if (myFilter.isPresent() == true || myFilter.isMissed() == true || myFilter.isDisposed() == true) {
        col = new ArrayList<BookStatus>();
        if (myFilter.isPresent() == true) {
          // Book must be have status 'present'.
          col.add(BookStatus.PRESENT);
        }
        if (myFilter.isMissed() == true) {
          // Book must be have status 'missed'.
          col.add(BookStatus.MISSED);
        }
        if (myFilter.isDisposed() == true) {
          // Book must be have status 'disposed'.
          col.add(BookStatus.DISPOSED);
        }
      }
      myFilter.setIgnoreDeleted(false);
      if (col != null) {
        final Criterion inCrit = Restrictions.in("status", col);
        if (myFilter.isDeleted() == true) {
          queryFilter.add(Restrictions.or(inCrit, Restrictions.eq("deleted", true)));
          myFilter.setIgnoreDeleted(true);
        } else {
          queryFilter.add(inCrit);
        }
      }
    }
    queryFilter.addOrder(Order.desc("created"));
    queryFilter.addOrder(Order.asc("authors"));
    return getList(queryFilter);
  }

  /**
   * Does the book's signature already exists? If signature is null, then return always false.
   * @param signature
   * @return
   */
  @SuppressWarnings("unchecked")
  public boolean doesSignatureAlreadyExist(final BookDO book)
  {
    Validate.notNull(book);
    if (book.getSignature() == null) {
      return false;
    }
    List<BookDO> list = null;
    if (book.getId() == null) {
      // New book
      list = getHibernateTemplate().find("from BookDO b where b.signature = ?", book.getSignature());
    } else {
      // Book already exists. Check maybe changed signature:
      list = getHibernateTemplate().find("from BookDO b where b.signature = ? and pk <> ?",
          new Object[] { book.getSignature(), book.getId()});
    }
    if (CollectionUtils.isNotEmpty(list) == true) {
      return true;
    }
    return false;
  }

  @Override
  protected void onSaveOrModify(final BookDO obj)
  {
    if (obj.getTaskId() == null) {
      setTask(obj, getDefaultTaskId());
    }
  }

  /**
   * @param book
   * @param taskId If null, then task will be set to null;
   * @see BaseDao#getOrLoad(Integer)
   */
  public void setTask(final BookDO book, final Integer taskId)
  {
    final TaskDO task = taskDao.getOrLoad(taskId);
    book.setTask(task);
  }

  /**
   * @param book
   * @param lendOutById If null, then task will be set to null;
   * @see BaseDao#getOrLoad(Integer)
   */
  public void setLendOutBy(final BookDO book, final Integer lendOutById)
  {
    final PFUserDO user = userDao.getOrLoad(lendOutById);
    book.setLendOutBy(user);
  }

  /**
   * return Always true, no generic select access needed for book objects.
   * @see org.projectforge.core.BaseDao#hasSelectAccess()
   */
  @Override
  public boolean hasSelectAccess(final PFUserDO user, final boolean throwException)
  {
    return true;
  }

  /**
   * @see org.projectforge.core.BaseDao#hasAccess(Object, OperationType)
   */
  @Override
  public boolean hasAccess(final PFUserDO user, final BookDO obj, final BookDO oldObj, final OperationType operationType,
      final boolean throwException)
  {
    return accessChecker.hasPermission(user, obj.getTaskId(), AccessType.TASKS, operationType, throwException);
  }

  /**
   * @see org.projectforge.core.BaseDao#hasUpdateAccess(Object, Object)
   */
  @Override
  public boolean hasUpdateAccess(final PFUserDO user, final BookDO obj, final BookDO dbObj, final boolean throwException)
  {
    Validate.notNull(dbObj);
    Validate.notNull(obj);
    Validate.notNull(dbObj.getTaskId());
    Validate.notNull(obj.getTaskId());
    if (accessChecker.hasPermission(user, obj.getTaskId(), AccessType.TASKS, OperationType.UPDATE, throwException) == false) {
      return false;
    }
    if (dbObj.getTaskId().equals(obj.getTaskId()) == false) {
      // User moves the object to another task:
      if (accessChecker.hasPermission(user, obj.getTaskId(), AccessType.TASKS, OperationType.INSERT, throwException) == false) {
        // Inserting of object under new task not allowed.
        return false;
      }
      if (accessChecker.hasPermission(user, dbObj.getTaskId(), AccessType.TASKS, OperationType.DELETE, throwException) == false) {
        // Deleting of object under old task not allowed.
        return false;
      }
    }
    return true;
  }

  @Override
  public BookDO newInstance()
  {
    return new BookDO();
  }


  /**
   * @see org.projectforge.core.BaseDao#useOwnCriteriaCacheRegion()
   */
  @Override
  protected boolean useOwnCriteriaCacheRegion()
  {
    return true;
  }
}
TOP

Related Classes of org.projectforge.book.BookDao

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.