/**
   * add a new content. It is registered to contentManager service
   *
   * @param con a Connection
   * @param pubDetail the content to register
   * @param userId the creator of the content
   * @return the unique silverObjectId which identified the new content
   */
  public int createSilverContent(
      Connection con, PublicationDetail pubDetail, String userId, boolean isVisible)
      throws ContentManagerException {

    SilverContentVisibility scv =
        new SilverContentVisibility(pubDetail.getBeginDate(), pubDetail.getEndDate(), isVisible);
    return getContentManager()
        .addSilverContent(
            con, pubDetail.getPK().getId(), pubDetail.getPK().getComponentName(), userId, scv);
  }
 /**
  * return a list of silverContent according to a list of publicationPK
  *
  * @param pubPKs a list of publicationPK
  * @return a list of publicationDetail
  */
 private List getHeaders(List<PublicationPK> pubPKs) {
   List<PublicationDetail> publicationDetails =
       new ArrayList<>(getPublicationService().getPublications(pubPKs));
   List<PublicationDetail> headers = new ArrayList<>(publicationDetails.size());
   for (PublicationDetail pubDetail : publicationDetails) {
     pubDetail.setIconUrl(CONTENT_ICON);
     headers.add(pubDetail);
   }
   return headers;
 }
 @Override
 public List<PublicationDetail> getLatestPublications(String spaceId, int nbPublis) {
   List<PublicationDetail> publications = super.getLatestPublications(spaceId, nbPublis * 2);
   List<PublicationDetail> result = new ArrayList<PublicationDetail>();
   for (PublicationDetail publication : publications) {
     if (!isComponentForNews(publication.getPK().getInstanceId())) {
       result.add(publication);
     }
     if (result.size() == nbPublis) {
       return result;
     }
   }
   return result;
 }
  @Override
  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
      throws IOException, ServletException {

    Boolean mob = (Boolean) ((HttpServletRequest) req).getSession().getAttribute("isMobile");
    if (mob != null && !mob) {
      chain.doFilter(req, res);
      return;
    }

    String userAgent = ((HttpServletRequest) req).getHeader("User-Agent");
    if (userAgent != null) {
      boolean isMobile = userAgent.contains("Android") || userAgent.contains("iPhone");
      ((HttpServletRequest) req).getSession().setAttribute("isMobile", new Boolean(isMobile));

      if (isMobile) {
        String url = ((HttpServletRequest) req).getRequestURL().toString();
        String params = "";
        if (url.contains("Publication")) {
          String id = url.substring(url.lastIndexOf("/") + 1);
          PublicationDetail pub = getPubBm().getDetail(new PublicationPK(id));
          String appId = pub.getInstanceId();
          params =
              "?shortcutContentType=Publication&shortcutContentId="
                  + id
                  + "&shortcutAppId="
                  + appId;
        } else if (url.contains("Media")) {
          String id = url.substring(url.lastIndexOf("/") + 1);
          Media media = getGalleryService().getMedia(new MediaPK(id));
          String appId = media.getInstanceId();
          params = "?shortcutContentType=Media&shortcutContentId=" + id + "&shortcutAppId=" + appId;
        } else {
          chain.doFilter(req, res);
          return;
        }
        ((HttpServletResponse) res).sendRedirect("/silverpeas/spmobile/" + params);
        return;
      } else {
        chain.doFilter(req, res);
        return;
      }
    } else {
      chain.doFilter(req, res);
      return;
    }
  }
  /**
   * update the visibility attributes of the content. Here, the type of content is a
   * PublicationDetail
   *
   * @param pubDetail the content
   */
  public void updateSilverContentVisibility(PublicationDetail pubDetail, boolean isVisible)
      throws ContentManagerException {
    int silverContentId =
        getContentManager()
            .getSilverContentId(pubDetail.getPK().getId(), pubDetail.getPK().getComponentName());
    if (silverContentId != -1) {
      SilverContentVisibility scv =
          new SilverContentVisibility(pubDetail.getBeginDate(), pubDetail.getEndDate(), isVisible);

      getContentManager()
          .updateSilverContentVisibilityAttributes(
              scv, pubDetail.getPK().getComponentName(), silverContentId);
      ClassifyEngine.clearCache();
    } else {
      createSilverContent(null, pubDetail, pubDetail.getCreatorId(), isVisible);
    }
  }