/** {@inheritDoc} */
  public boolean canViewAllPurposeItem(Assignment a) {
    boolean rv = false;

    if (a != null) {
      AssignmentAllPurposeItem aItem = getAllPurposeItem(a.getId());
      if (aItem != null) {
        if (!aItem.getHide()) {
          Time now = TimeService.newTime();
          Date releaseDate = aItem.getReleaseDate();
          Date retractDate = aItem.getRetractDate();

          if (releaseDate == null && retractDate == null) {
            // no time limitation on showing the item
            rv = true;
          } else if (releaseDate != null && retractDate == null) {
            // has relase date but not retract date
            rv = now.getTime() > releaseDate.getTime();
          } else if (releaseDate == null && retractDate != null) {
            // has retract date but not release date
            rv = now.getTime() < retractDate.getTime();
          } else if (now != null) {
            // both releaseDate and retract date are not null
            // has both release and retract dates
            rv = now.getTime() > releaseDate.getTime() && now.getTime() < retractDate.getTime();
          }
        } else {
          rv = false;
        }
      }

      if (rv) {
        // reset rv
        rv = false;

        // need to check role/user permission only if the above time test returns true
        List<String> access = getAccessListForAllPurposeItem(aItem);
        User u = m_userDirectoryService.getCurrentUser();
        if (u != null) {
          if (access.contains(u.getId())) rv = true;
          else {
            try {
              String role =
                  m_authzGroupService.getUserRole(
                      u.getId(), m_siteService.siteReference(a.getContext()));
              if (access.contains(role)) rv = true;
            } catch (Exception e) {
              Log.warn(
                  this
                      + ".callViewAllPurposeItem() Hibernate cannot access user role for user id= "
                      + u.getId());
              return rv;
            }
          }
        }
      }
    }

    return rv;
  }
 /** {@inheritDoc} */
 public boolean cleanAllPurposeItemAccess(AssignmentAllPurposeItem mItem) {
   boolean rv = false;
   Set<AssignmentAllPurposeItemAccess> accessSet = mItem.getAccessSet();
   if (accessSet != null) {
     for (Iterator<AssignmentAllPurposeItemAccess> iAccessSet = accessSet.iterator();
         iAccessSet.hasNext(); ) {
       AssignmentAllPurposeItemAccess access = iAccessSet.next();
       rv = removeAllPurposeItemAccess(access);
     }
   }
   return rv;
 }
 /** {@inheritDoc}} */
 public boolean saveAllPurposeItem(AssignmentAllPurposeItem nItem) {
   try {
     getHibernateTemplate().saveOrUpdate(nItem);
     return true;
   } catch (DataAccessException e) {
     e.printStackTrace();
     Log.warn(
         this
             + ".saveAllPurposeItem() Hibernate could not save private AllPurpose for assignment "
             + nItem.getAssignmentId());
     return false;
   }
 }
  /** {@inheritDoc}} */
  public boolean removeAllPurposeItem(AssignmentAllPurposeItem mItem) {

    try {
      getHibernateTemplate().delete(mItem);
      return true;
    } catch (DataAccessException e) {
      e.printStackTrace();
      Log.warn(
          this
              + ".removeAllPurposeItem() Hibernate could not delete AllPurposeItem for assignment "
              + mItem.getAssignmentId());
      return false;
    }
  }