/**
   * Caches the task in the entity cache if it is enabled.
   *
   * @param task the task
   */
  @Override
  public void cacheResult(Task task) {
    EntityCacheUtil.putResult(
        TaskModelImpl.ENTITY_CACHE_ENABLED, TaskImpl.class, task.getPrimaryKey(), task);

    task.resetOriginalValues();
  }
  /**
   * Clears the cache for the task.
   *
   * <p>The {@link com.liferay.portal.kernel.dao.orm.EntityCache} and {@link
   * com.liferay.portal.kernel.dao.orm.FinderCache} are both cleared by this method.
   */
  @Override
  public void clearCache(Task task) {
    EntityCacheUtil.removeResult(
        TaskModelImpl.ENTITY_CACHE_ENABLED, TaskImpl.class, task.getPrimaryKey());

    FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
    FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
  }
 /**
  * Caches the tasks in the entity cache if it is enabled.
  *
  * @param tasks the tasks
  */
 @Override
 public void cacheResult(List<Task> tasks) {
   for (Task task : tasks) {
     if (EntityCacheUtil.getResult(
             TaskModelImpl.ENTITY_CACHE_ENABLED, TaskImpl.class, task.getPrimaryKey())
         == null) {
       cacheResult(task);
     } else {
       task.resetOriginalValues();
     }
   }
 }
  @Override
  public Task updateImpl(com.rivetlogic.portlet.todo.model.Task task) throws SystemException {
    task = toUnwrappedModel(task);

    boolean isNew = task.isNew();

    TaskModelImpl taskModelImpl = (TaskModelImpl) task;

    Session session = null;

    try {
      session = openSession();

      if (task.isNew()) {
        session.save(task);

        task.setNew(false);
      } else {
        session.merge(task);
      }
    } catch (Exception e) {
      throw processException(e);
    } finally {
      closeSession(session);
    }

    FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);

    if (isNew || !TaskModelImpl.COLUMN_BITMASK_ENABLED) {
      FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
    } else {
      if ((taskModelImpl.getColumnBitmask()
              & FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_USERID.getColumnBitmask())
          != 0) {
        Object[] args = new Object[] {taskModelImpl.getOriginalUserId()};

        FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_USERID, args);
        FinderCacheUtil.removeResult(FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_USERID, args);

        args = new Object[] {taskModelImpl.getUserId()};

        FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_USERID, args);
        FinderCacheUtil.removeResult(FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_USERID, args);
      }
    }

    EntityCacheUtil.putResult(
        TaskModelImpl.ENTITY_CACHE_ENABLED, TaskImpl.class, task.getPrimaryKey(), task);

    return task;
  }
  protected Task toUnwrappedModel(Task task) {
    if (task instanceof TaskImpl) {
      return task;
    }

    TaskImpl taskImpl = new TaskImpl();

    taskImpl.setNew(task.isNew());
    taskImpl.setPrimaryKey(task.getPrimaryKey());

    taskImpl.setTaskId(task.getTaskId());
    taskImpl.setUserId(task.getUserId());
    taskImpl.setName(task.getName());
    taskImpl.setDescription(task.getDescription());
    taskImpl.setDate(task.getDate());
    taskImpl.setCompleted(task.getCompleted());
    taskImpl.setCalendarBookingId(task.getCalendarBookingId());

    return taskImpl;
  }