/**
  * Sets up all of the comments about the classified used in the current test. The comment to use
  * in the invocation of the callback is also set.
  */
 protected void setUpClassifiedComments() {
   ForeignPK classifiedPk = new ForeignPK(String.valueOf(CLASSIFIED_ID), CLASSIFIED_INSTANCEID);
   for (int i = 0; i < 5; i++) {
     Date date = new Date();
     UserDetail commentAuthor = new UserDetail();
     commentAuthor.setId(String.valueOf(i));
     Comment aComment =
         new Comment(
             new CommentPK(String.valueOf(i), CLASSIFIED_INSTANCEID),
             COMMENT_RESOURCETYPE,
             classifiedPk,
             i,
             "Toto" + i,
             "comment " + i,
             date,
             date);
     aComment.setOwnerDetail(commentAuthor);
     classifiedComments.add(aComment);
   }
   Date date = new Date();
   UserDetail commentAuthor = new UserDetail();
   commentAuthor.setId(String.valueOf(COMMENT_AUTHORID));
   concernedComment =
       new Comment(
           new CommentPK("10", CLASSIFIED_INSTANCEID),
           COMMENT_RESOURCETYPE,
           classifiedPk,
           Integer.parseInt(COMMENT_AUTHORID),
           "Toto" + COMMENT_AUTHORID,
           "concerned comment",
           date,
           date);
   concernedComment.setOwnerDetail(commentAuthor);
   classifiedComments.add(concernedComment);
 }
  @Override
  public String doAction(HttpServletRequest request) {
    HttpSession session = request.getSession();
    String key = (String) session.getAttribute("svplogin_Key");
    boolean answerCrypted = getAuthenticationSettings().getBoolean("loginAnswerCrypted", false);

    try {
      String userId = getAdmin().authenticate(key, session.getId(), false, false);
      UserDetail userDetail = getAdmin().getUserDetail(userId);
      String question = request.getParameter("question");
      String answer = request.getParameter("answer");
      userDetail.setLoginQuestion(question);

      // encrypt the answer if needed
      if (answerCrypted) {
        answer = CryptMD5.encrypt(answer);
      }
      userDetail.setLoginAnswer(answer);
      getAdmin().updateUser(userDetail);

      if (getGeneral().getBoolean("userLoginForcePasswordChange", false)) {
        return getGeneral().getString("userLoginForcePasswordChangePage");
      }
      return sessionOpenener.openSession(request, key);
    } catch (AdminException e) {
      // Error : go back to login page
      SilverTrace.error(
          "peasCore", "validationQuestionHandler.doAction()", "peasCore.EX_USER_KEY_NOT_FOUND", e);
      return "/Login.jsp";
    }
  }
 protected static Classified aClassified() {
   UserDetail author = new UserDetail();
   author.setId("0");
   Classified classified =
       new Classified(CLASSIFIED_ID, CLASSIFIED_INSTANCEID)
           .createdBy(author)
           .entitled("a classified");
   return classified;
 }
  /**
   * Logs in the user.
   *
   * @see javax.security.auth.spi.LoginModule#login()
   */
  @SuppressWarnings("unchecked")
  @Override
  public boolean login() throws LoginException {
    HttpRequestCallback rcb = new HttpRequestCallback();
    AuthorizerCallback acb = new AuthorizerCallback();
    Callback[] callbacks = new Callback[] {rcb, acb};
    try {
      // First, try to extract a Principal object out of the request
      // directly. If we find one, we're done.
      m_handler.handle(callbacks);
      HttpServletRequest request = rcb.getRequest();
      if (request == null) {
        throw new LoginException("No Http request supplied.");
      }
      UserDetail userDetail =
          (UserDetail) request.getAttribute(SilverpeasWikiAuthorizer.USER_ATTR_NAME);
      if (userDetail == null) {
        throw new LoginException("No user supplied.");
      }
      String[] userRoles = (String[]) request.getAttribute(SilverpeasWikiAuthorizer.ROLE_ATTR_NAME);
      Principal principal = new WikiPrincipal(userDetail.getLogin(), WikiPrincipal.LOGIN_NAME);
      Principal principalFullName =
          new WikiPrincipal(userDetail.getDisplayedName(), WikiPrincipal.FULL_NAME);
      Principal principalWikiName =
          new WikiPrincipal(userDetail.getDisplayedName(), WikiPrincipal.WIKI_NAME);
      SilverTrace.debug(
          "wiki",
          "SilverpeasWikiLoginModule",
          "Added Principal " + principal.getName() + ",Role.ANONYMOUS,Role.ALL");
      m_principals.add(new PrincipalWrapper(principal));
      m_principals.add(new PrincipalWrapper(principalWikiName));
      m_principals.add(new PrincipalWrapper(principalFullName));
      // Add any container roles
      injectWebAuthorizerRoles(acb.getAuthorizer(), request);
      // If login succeeds, commit these roles
      for (String userRole : userRoles) {
        m_principals.add(convertSilverpeasRole(userRole));
      }
      // If login succeeds, remove these principals/roles
      m_principalsToOverwrite.add(WikiPrincipal.GUEST);
      m_principalsToOverwrite.add(Role.ANONYMOUS);
      m_principalsToOverwrite.add(Role.ASSERTED);
      // If login fails, remove these roles
      m_principalsToRemove.add(Role.AUTHENTICATED);

      return true;
    } catch (IOException e) {
      SilverTrace.error("wiki", "SilverpeasWikiLoginModule", "wiki.EX_LOGIN", e);
      return false;
    } catch (UnsupportedCallbackException e) {
      SilverTrace.error("wiki", "SilverpeasWikiLoginModule", "wiki.EX_LOGIN", e);
      return false;
    }
  }
  /**
   * @param question the current question-reply question
   * @param users list of users to notify
   * @throws QuestionReplyException
   */
  private void notifyTemplateReply(Question question, Reply reply, UserDetail[] users)
      throws QuestionReplyException {
    try {
      UserDetail user = getUserDetail(getUserId());
      String senderName = user.getFirstName() + " " + user.getLastName();
      String subject = getString("questionReply.notification") + getComponentLabel();
      // String message = senderName + intro + " \n" + content + "\n \n";

      // Get default resource bundle
      String resource = "com.stratelia.webactiv.survey.multilang.surveyBundle";
      ResourceLocator message = new ResourceLocator(resource, I18NHelper.defaultLanguage);

      // Initialize templates
      Map<String, SilverpeasTemplate> templates = new HashMap<String, SilverpeasTemplate>();
      NotificationMetaData notifMetaData =
          new NotificationMetaData(NotificationParameters.NORMAL, subject, templates, "reply");

      List<String> languages = DisplayI18NHelper.getLanguages();
      for (String language : languages) {
        // initialize new resource locator
        message = new ResourceLocator(resource, language);

        // Create a new silverpeas template
        SilverpeasTemplate template = getNewTemplate();
        template.setAttribute("UserDetail", user);
        template.setAttribute("userName", senderName);
        template.setAttribute("QuestionDetail", question);
        template.setAttribute("ReplyDetail", reply);
        template.setAttribute("replyTitle", reply.getTitle());
        template.setAttribute("replyContent", reply.getContent());
        templates.put(language, template);
        notifMetaData.addLanguage(
            language,
            message.getString("questionReply.notification", "") + getComponentLabel(),
            "");
      }
      notifMetaData.setSender(getUserId());
      notifMetaData.addUserRecipients(users);
      notifMetaData.setSource(getSpaceLabel() + " - " + getComponentLabel());
      // notifMetaData.setLink(question._getURL());
      getNotificationSender().notifyUser(notifMetaData);
    } catch (Exception e) {
      throw new QuestionReplyException(
          "QuestionReplySessionController.notify()",
          SilverpeasException.ERROR,
          "questionReply.EX_NOTIFICATION_MANAGER_FAILED",
          "",
          e);
    }
  }
  /** Constructs a new comment service and mocks some of the underlying resource. */
  public MyCommentService() {
    super();
    Comment aComment = CommentBuilder.getBuilder().buildWith("Toto", "Vu à la télé");
    List<Comment> comments = new ArrayList<Comment>();
    comments.add(aComment);
    comments.add(CommentBuilder.getBuilder().buildWith("Titi", "Repasses demain"));
    mockedDAO = mock(CommentDAO.class);
    when(mockedDAO.getAllCommentsByForeignKey(any(ForeignPK.class))).thenReturn(comments);
    when(mockedDAO.getComment(any(CommentPK.class))).thenReturn(aComment);

    UserDetail userDetail = new UserDetail();
    userDetail.setFirstName("Toto");
    userDetail.setLastName("Chez-les-papoos");
    mockedController = mock(OrganizationController.class);
    when(mockedController.getUserDetail(anyString())).thenReturn(userDetail);
  }
  /**
   * Returns the string value of this field : the user names (FirstName LastName,FirstName
   * LastName,FirstName LastName, ...)
   */
  public String getValue() {
    String theUserCardIds = getUserCardIds(); // userCardId-userId,userCardId-userId
    // ....
    if (!StringUtil.isDefined(theUserCardIds)) {
      return theUserCardIds;
    }

    try {

      theUserCardIds += ",";
      String userCardIdUserId = null;
      int index = -1;
      String userCardId = null;
      String userId = null;
      UserDetail user = null;
      StringBuffer names = new StringBuffer("");
      int begin = 0;
      int end = 0;

      end = theUserCardIds.indexOf(',', begin);
      while (end != -1) {
        userCardIdUserId = theUserCardIds.substring(begin, end); // userCardId-userId
        index = userCardIdUserId.indexOf("-");
        userCardId = userCardIdUserId.substring(0, index);
        userId = userCardIdUserId.substring(index + 1);

        user = organizationController.getUserDetail(userId);
        if (user == null) {
          names.append("userCardId(").append(userCardId).append(")");
        } else {
          names.append(user.getFirstName()).append(" ").append(user.getLastName());
        }
        names.append(",");
        begin = end + 1;
        end = theUserCardIds.indexOf(',', begin);
      }

      if (!names.toString().equals("")) {
        names = names.deleteCharAt(names.length() - 1);
      }

      return names.toString();
    } catch (Exception e) {
      SilverTrace.error("form", "PdcUserField.getValue", "root.MSG_GEN_PARAM_VALUE", "", e);
      return null;
    }
  }
  /*
   * Récupère la liste des experts du domaine de la question qui ne sont pas déjà destinataires
   */
  public Collection<UserDetail> getCurrentQuestionAvailableWriters() throws QuestionReplyException {
    Collection<UserDetail> users = getCurrentQuestionWriters();
    Collection<UserDetail> availableUsers = new ArrayList<UserDetail>();
    Collection<Recipient> recipients = getCurrentQuestion().readRecipients();

    for (UserDetail user : users) {
      boolean isRecipient = false;
      for (Recipient recipient : recipients) {
        if (user.getId().equals(recipient.getUserId())) {
          isRecipient = true;
        }
      }
      if (!isRecipient) {
        availableUsers.add(user);
      }
    }
    return availableUsers;
  }
Example #9
0
 protected Ticket(
     int sharedObjectId,
     String componentId,
     UserDetail creator,
     Date creationDate,
     Date endDate,
     int nbAccessMax) {
   this(sharedObjectId, componentId, creator.getId(), creationDate, endDate, nbAccessMax);
 }
 /*
  * Retourne true si la liste contient deja le user
  */
 private boolean exist(UserDetail user, Collection<UserDetail> listUser) {
   int i = 0;
   List<UserDetail> arrayUser = new ArrayList<UserDetail>(listUser);
   if (user != null) {
     String idUser = user.getId();
     while (i < arrayUser.size()) {
       UserDetail theUser = arrayUser.get(i);
       String theId = theUser.getId();
       if (theId.equals(idUser)) {
         return true;
       }
       i++;
     }
   } else {
     return true;
   }
   return false;
 }
 /**
  * Is the specified user can access this publication?
  *
  * <p>A user can access a publication if he has enough rights to access both the application
  * instance in which is managed this publication and one of the nodes to which this publication
  * belongs to.
  *
  * @param user a user in Silverpeas.
  * @return true if the user can access this publication, false otherwise.
  */
 @Override
 public boolean canBeAccessedBy(final UserDetail user) {
   AccessController<String> accessController =
       AccessControllerProvider.getAccessController("componentAccessController");
   boolean canBeAccessed =
       accessController.isUserAuthorized(user.getId(), getComponentInstanceId());
   if (canBeAccessed) {
     AccessController<NodePK> nodeAccessController =
         AccessControllerProvider.getAccessController("nodeAccessController");
     Collection<NodePK> nodes =
         getPublicationBm().getAllFatherPK(new PublicationPK(getId(), getInstanceId()));
     for (NodePK aNode : nodes) {
       canBeAccessed = nodeAccessController.isUserAuthorized(user.getId(), aNode);
       if (canBeAccessed) {
         break;
       }
     }
   }
   return canBeAccessed;
 }
 @Override
 public String doAction(HttpServletRequest request) {
   String login = request.getParameter("Login");
   String domainId = request.getParameter("DomainId");
   try {
     String userId = getAdmin().getUserIdByLoginAndDomain(login, domainId);
     UserDetail userDetail = getAdmin().getUserDetail(userId);
     if (StringUtil.isDefined(userDetail.getLoginQuestion())) {
       request.setAttribute("userDetail", userDetail);
       return getGeneral().getString("userLoginQuestionPage");
     } else {
       // page d'erreur : veuillez contacter votre admin
       return "/Login.jsp";
     }
   } catch (AdminException e) {
     // Error : go back to login page
     SilverTrace.error(
         "peasCore",
         "loginQuestionHandler.doAction()",
         "peasCore.EX_USER_KEY_NOT_FOUND",
         "login="******"/Login.jsp";
   }
 }
  private PublicationDetail importFile(
      File file,
      ImportReportManager reportManager,
      MassiveReport massiveReport,
      GEDImportExport gedIE,
      PdcImportExport pdcIE,
      ImportSettings settings) {
    SilverTrace.debug(
        "importExport",
        "RepositoriesTypeManager.importFile",
        "root.MSG_GEN_ENTER_METHOD",
        "file = " + file.getName());
    String componentId = gedIE.getCurrentComponentId();
    UserDetail userDetail = gedIE.getCurentUserDetail();
    PublicationDetail pubDetailToCreate = null;
    try {
      // Création du rapport unitaire
      UnitReport unitReport = new UnitReport();
      massiveReport.addUnitReport(unitReport);

      // Check the file size
      ResourceLocator uploadSettings =
          new ResourceLocator("org.silverpeas.util.uploads.uploadSettings", "");
      long maximumFileSize = uploadSettings.getLong("MaximumFileSize", 10485760);
      long fileSize = file.length();
      if (fileSize <= 0L) {
        unitReport.setError(UnitReport.ERROR_NOT_EXISTS_OR_INACCESSIBLE_FILE);
        reportManager.addNumberOfFilesNotImported(1);
        return pubDetailToCreate;
      } else if (fileSize > maximumFileSize) {
        unitReport.setError(UnitReport.ERROR_FILE_SIZE_EXCEEDS_LIMIT);
        reportManager.addNumberOfFilesNotImported(1);
        return pubDetailToCreate;
      }

      // On récupére les infos nécéssaires à la création de la publication
      pubDetailToCreate =
          PublicationImportExport.convertFileInfoToPublicationDetail(file, settings);
      pubDetailToCreate.setPk(new PublicationPK("unknown", "useless", componentId));
      if ((settings.isDraftUsed() && pdcIE.isClassifyingMandatory(componentId))
          || settings.isDraftUsed()) {
        pubDetailToCreate.setStatus(PublicationDetail.DRAFT);
        pubDetailToCreate.setStatusMustBeChecked(false);
      }
      SilverTrace.debug(
          "importExport",
          "RepositoriesTypeManager.importFile",
          "root.MSG_GEN_PARAM_VALUE",
          "pubDetailToCreate.status = " + pubDetailToCreate.getStatus());

      // Création de la publication
      pubDetailToCreate =
          gedIE.createPublicationForMassiveImport(unitReport, pubDetailToCreate, settings);
      unitReport.setLabel(pubDetailToCreate.getPK().getId());

      SilverTrace.debug(
          "importExport",
          "RepositoriesTypeManager.importFile",
          "root.MSG_GEN_PARAM_VALUE",
          "pubDetailToCreate created");

      if (FileUtil.isMail(file.getName())) {
        // if imported file is an e-mail, its textual content is saved in a dedicated form
        // and attached files are attached to newly created publication
        processMailContent(
            pubDetailToCreate, file, reportManager, unitReport, gedIE, settings.isVersioningUsed());
      }

      // add attachment
      SimpleDocument document;
      SimpleDocumentPK pk = new SimpleDocumentPK(null, componentId);
      if (settings.isVersioningUsed()) {
        document = new HistorisedDocument();
        document.setPublicDocument(
            settings.getVersionType() == DocumentVersion.TYPE_PUBLIC_VERSION);
      } else {
        document = new SimpleDocument();
      }
      document.setPK(pk);
      document.setFile(new SimpleAttachment());
      document.setFilename(file.getName());
      document.setSize(fileSize);
      document.getFile().setCreatedBy(userDetail.getId());
      if (settings.useFileDates()) {
        document.setCreated(pubDetailToCreate.getCreationDate());
        if (pubDetailToCreate.getUpdateDate() != null) {
          document.setUpdated(pubDetailToCreate.getUpdateDate());
        }
      } else {
        document.setCreated(new Date());
      }
      document.setForeignId(pubDetailToCreate.getPK().getId());
      document.setContentType(FileUtil.getMimeType(file.getName()));
      AttachmentServiceFactory.getAttachmentService()
          .createAttachment(document, file, pubDetailToCreate.isIndexable(), false);
      reportManager.addNumberOfFilesProcessed(1);
      reportManager.addImportedFileSize(document.getSize(), componentId);
    } catch (Exception ex) {
      massiveReport.setError(UnitReport.ERROR_ERROR);
      SilverTrace.error(
          "importExport", "RepositoriesTypeManager.importFile", "root.EX_NO_MESSAGE", ex);
    }
    return pubDetailToCreate;
  }
Example #14
0
 public void setCreator(final UserDetail creator) {
   this.creatorId = creator.getId();
 }
  @Override
  public void doPost(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException {
    SilverTrace.info("peasUtil", "RssServlet.doPost", "root.MSG_GEN_ENTER_METHOD");
    String instanceId = getObjectId(req);
    String userId = getUserId(req);
    String login = getLogin(req);
    String password = getPassword(req);
    // rechercher si le composant a bien le flux RSS autorisé
    if (isComponentRss(instanceId)) {
      try {
        SilverTrace.info(
            "peasUtil",
            "RssServlet.doPost",
            "root.MSG_GEN_PARAM_VALUE",
            "InstanceId = " + instanceId);

        // Vérification que le user a droit d'accès au composant
        AdminController adminController = new AdminController(null);
        UserFull user = adminController.getUserFull(userId);
        if (user != null
            && login.equals(user.getLogin())
            && password.equals(user.getPassword())
            && isComponentAvailable(adminController, instanceId, userId)) {

          String serverURL = getServerURL(adminController, user.getDomainId());
          ChannelIF channel = new Channel();

          // récupération de la liste des N éléments à remonter dans le flux
          int nbReturnedElements = getNbReturnedElements();
          Collection<T> listElements = getListElements(instanceId, nbReturnedElements);

          // création d'une liste de ItemIF en fonction de la liste des éléments

          for (T element : listElements) {
            String title = getElementTitle(element, userId);
            URL link = new URL(serverURL + getElementLink(element, userId));
            String description = getElementDescription(element, userId);
            Date dateElement = getElementDate(element);
            String creatorId = getElementCreatorId(element);
            ItemIF item = new Item();
            item.setTitle(title);
            item.setLink(link);
            item.setDescription(description);
            item.setDate(dateElement);

            if (StringUtil.isDefined(creatorId)) {
              UserDetail creator = adminController.getUserDetail(creatorId);
              if (creator != null) {
                item.setCreator(creator.getDisplayedName());
              }
            } else if (StringUtil.isDefined(getExternalCreatorId(element))) {
              item.setCreator(getExternalCreatorId(element));
            }
            channel.addItem(item);
          }

          // construction de l'objet Channel
          channel.setTitle(getChannelTitle(instanceId));
          URL componentUrl =
              new URL(
                  serverURL
                      + URLManager.getApplicationURL()
                      + URLManager.getURL("useless", instanceId));
          channel.setLocation(componentUrl);

          // exportation du channel
          res.setContentType("application/rss+xml");
          res.setHeader("Content-Disposition", "inline; filename=feeds.rss");
          Writer writer = res.getWriter();
          RSS_2_0_Exporter rssExporter = new RSS_2_0_Exporter(writer, "UTF-8");
          rssExporter.write(channel);
        } else {
          objectNotFound(req, res);
        }
      } catch (Exception e) {
        objectNotFound(req, res);
      }
    }
  }
Example #16
0
 public void setLastModifier(UserDetail modifier) {
   this.updaterId = modifier.getId();
 }
 @Override
 public UserDetail getCreator() {
   return UserDetail.getById(getCreatorId());
 }
Example #18
0
  /**
   * Method declaration
   *
   * @param req
   * @param res
   * @throws IOException
   * @throws ServletException
   * @see
   */
  @Override
  public void doPost(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException {
    SilverTrace.info("attachment", "DragAndDrop.doPost", "root.MSG_GEN_ENTER_METHOD");
    HttpRequest request = HttpRequest.decorate(req);
    if (!request.isContentInMultipart()) {
      res.getOutputStream().println("SUCCESS");
      return;
    }

    String userId = req.getParameter("UserId");
    try {
      request.setCharacterEncoding(CharEncoding.UTF_8);
      String componentId = request.getParameter("ComponentId");
      String id = request.getParameter("PubId");
      String lang = I18NHelper.checkLanguage(request.getParameter("lang"));
      SilverTrace.info(
          "attachment",
          "DragAndDrop.doPost",
          "root.MSG_GEN_PARAM_VALUE",
          "componentId = " + componentId + ", id = " + id + ", userId = " + userId);
      boolean bIndexIt = StringUtil.getBooleanValue(request.getParameter("IndexIt"));

      List<FileItem> items = request.getFileItems();
      for (FileItem item : items) {
        SilverTrace.info(
            "attachment",
            "DragAndDrop.doPost",
            "root.MSG_GEN_PARAM_VALUE",
            "item = " + item.getFieldName());
        SilverTrace.info(
            "attachment",
            "DragAndDrop.doPost",
            "root.MSG_GEN_PARAM_VALUE",
            "item = " + item.getName() + "; " + item.getString(CharEncoding.UTF_8));

        if (!item.isFormField()) {
          String fileName = item.getName();
          if (fileName != null) {
            String mimeType = FileUtil.getMimeType(fileName);
            SilverTrace.info(
                "attachment",
                "DragAndDrop.doPost",
                "root.MSG_GEN_PARAM_VALUE",
                "item size = " + item.getSize());
            // create AttachmentDetail Object
            SimpleDocument document =
                new SimpleDocument(
                    new SimpleDocumentPK(null, componentId),
                    id,
                    0,
                    false,
                    new SimpleAttachment(
                        fileName,
                        lang,
                        null,
                        null,
                        item.getSize(),
                        mimeType,
                        userId,
                        new Date(),
                        null));
            document.setDocumentType(determineDocumentType(request));
            File tempFile = File.createTempFile("silverpeas_", fileName);
            try {
              FileUploadUtil.saveToFile(tempFile, item);
              MetadataExtractor extractor = MetadataExtractor.getInstance();
              MetaData metadata = extractor.extractMetadata(tempFile);
              document.setSize(tempFile.length());
              document.setTitle(metadata.getTitle());
              document.setDescription(metadata.getSubject());
              document =
                  AttachmentServiceFactory.getAttachmentService()
                      .createAttachment(document, tempFile, bIndexIt);
            } finally {
              FileUtils.deleteQuietly(tempFile);
            }
            // Specific case: 3d file to convert by Actify Publisher
            ActifyDocumentProcessor.getProcessor().process(document);
          }
        }
      }
    } catch (Exception e) {
      SilverTrace.error("attachment", "DragAndDrop.doPost", "ERREUR", e);
      final StringBuilder sb = new StringBuilder("ERROR: ");
      final String errorMessage =
          SilverpeasTransverseWebErrorUtil.performAppletAlertExceptionMessage(
              e, UserDetail.getById(userId).getUserPreferences().getLanguage());
      if (StringUtil.isDefined(errorMessage)) {
        sb.append(errorMessage);
      } else {
        sb.append(e.getMessage());
      }
      res.getOutputStream().println(sb.toString());
      return;
    }
    res.getOutputStream().println("SUCCESS");
  }
  /**
   * This method generates the Javascript instructions to retrieve in AJAX the comments on the given
   * resource and to display them. The generated code is built upon the JQuery toolkit, so that it
   * is required to be included within the the XHTML header section.
   *
   * @return the javascript code to handle a list of comments on a given resource.
   */
  private String setUpJQueryCommentPlugin() {
    String context = URLManager.getApplicationURL();

    OrganisationController controller = OrganisationControllerFactory.getOrganisationController();
    ResourcesWrapper settings = getSettings();
    UserDetail currentUser = controller.getUserDetail(getUserId());
    String[] profiles = controller.getUserProfiles(getUserId(), getComponentId());
    final boolean isAdmin;
    if (profiles != null) {
      isAdmin = Arrays.asList(profiles).contains(SilverpeasRole.admin.name());
    } else {
      isAdmin = currentUser.isAccessAdmin();
    }
    boolean canBeUpdated = settings.getSetting("AdminAllowedToUpdate", true) && isAdmin;

    String script =
        "$('#commentaires').comment({"
            + "uri: '"
            + context
            + "/services/comments/"
            + getComponentId()
            + "/"
            + getResourceType()
            + "/"
            + getResourceId()
            + "', author: { avatar: '"
            + URLManager.getApplicationURL()
            + currentUser.getAvatar()
            + "', id: '"
            + getUserId()
            + "', anonymous: "
            + currentUser.isAnonymous()
            + "}, "
            + "update: { activated: function( comment ) {"
            + "if ("
            + canBeUpdated
            + "|| (comment.author.id === '"
            + getUserId()
            + "'))"
            + "return true; else return false;},icon: '"
            + getUpdateIconURL()
            + "',"
            + "altText: '"
            + settings.getString("GML.update")
            + "'},"
            + "deletion: {activated: function( comment ) {if ("
            + canBeUpdated
            + " || (comment.author.id === '"
            + getUserId()
            + "')) return true; else return false;},"
            + "confirmation: '"
            + settings.getString("comment.suppressionConfirmation")
            + "',"
            + "icon: '"
            + getDeletionIconURL()
            + "',altText: '"
            + settings.getString("GML.delete")
            + "'}, updateBox: { title: '"
            + settings.getString("comment.comment")
            + "'}, editionBox: { title: '"
            + settings.getString("comment.add")
            + "', ok: '"
            + settings.getString("GML.validate")
            + "'}, validate: function(text) { if (text == null || $.trim(text).length == 0) { "
            + "alert('"
            + settings.getString("comment.pleaseFill_single")
            + "');"
            + "} else if (!isValidTextArea(text)) { alert('"
            + settings.getString("comment.champsTropLong")
            + "'); } else { return true; } return false; },"
            + "mandatory: '"
            + getMandatoryFieldSymbolURL()
            + "', mandatoryText: '"
            + settings.getString("GML.requiredField")
            + "'";
    if (isDefined(getCallback())) {
      script += ",callback: " + getCallback() + "});";
    } else {
      script += "});";
    }

    return script;
  }
  private void processMailContent(
      PublicationDetail pubDetail,
      File file,
      ImportReportManager reportManager,
      UnitReport unitReport,
      GEDImportExport gedIE,
      boolean isVersioningUsed)
      throws ImportExportException {

    String componentId = gedIE.getCurrentComponentId();
    UserDetail userDetail = gedIE.getCurentUserDetail();
    MailExtractor extractor = null;
    Mail mail = null;
    try {
      extractor = Extractor.getExtractor(file);
      mail = extractor.getMail();
    } catch (Exception e) {
      SilverTrace.error(
          "importExport",
          "RepositoriesTypeManager.processMailContent",
          "importExport.EX_CANT_EXTRACT_MAIL_DATA",
          e);
    }
    if (mail != null) {
      // save mail data into dedicated form
      String content = mail.getBody();
      PublicationContentType pubContent = new PublicationContentType();
      XMLModelContentType modelContent = new XMLModelContentType("mail");
      pubContent.setXMLModelContentType(modelContent);
      List<XMLField> fields = new ArrayList<XMLField>();
      modelContent.setFields(fields);

      XMLField subject = new XMLField("subject", mail.getSubject());
      fields.add(subject);

      XMLField body = new XMLField("body", ESCAPE_ISO8859_1.translate(content));
      fields.add(body);

      XMLField date = new XMLField("date", DateUtil.getOutputDateAndHour(mail.getDate(), "fr"));
      fields.add(date);

      InternetAddress address = mail.getFrom();
      String from = "";
      if (StringUtil.isDefined(address.getPersonal())) {
        from += address.getPersonal() + " - ";
      }
      from += "<a href=\"mailto:" + address.getAddress() + "\">" + address.getAddress() + "</a>";
      XMLField fieldFROM = new XMLField("from", from);
      fields.add(fieldFROM);

      Address[] recipients = mail.getAllRecipients();
      String to = "";
      for (Address recipient : recipients) {
        InternetAddress ia = (InternetAddress) recipient;
        if (StringUtil.isDefined(ia.getPersonal())) {
          to += ia.getPersonal() + " - ";
        }
        to += "<a href=\"mailto:" + ia.getAddress() + "\">" + ia.getAddress() + "</a></br>";
      }
      XMLField fieldTO = new XMLField("to", to);
      fields.add(fieldTO);

      // save form
      gedIE.createPublicationContent(
          reportManager,
          unitReport,
          Integer.parseInt(pubDetail.getPK().getId()),
          pubContent,
          userDetail.getId(),
          null);

      // extract each file from mail...
      try {
        List<AttachmentDetail> documents = new ArrayList<AttachmentDetail>();

        List<MailAttachment> attachments = extractor.getAttachments();
        for (MailAttachment attachment : attachments) {
          if (attachment != null) {
            AttachmentDetail attDetail = new AttachmentDetail();
            AttachmentPK pk = new AttachmentPK("unknown", "useless", componentId);
            attDetail.setLogicalName(attachment.getName());
            attDetail.setPhysicalName(attachment.getPath());
            attDetail.setAuthor(userDetail.getId());
            attDetail.setSize(attachment.getSize());
            attDetail.setPK(pk);

            documents.add(attDetail);
          }
        }

        // ... and save it
        if (isVersioningUsed) {
          // versioning mode
          VersioningImportExport versioningIE = new VersioningImportExport(userDetail);
          versioningIE.importDocuments(
              pubDetail.getPK().getId(),
              componentId,
              documents,
              Integer.parseInt(userDetail.getId()),
              pubDetail.isIndexable());
        } else {
          // classic mode
          AttachmentImportExport attachmentIE = new AttachmentImportExport();
          attachmentIE.importAttachments(
              pubDetail.getPK().getId(),
              componentId,
              documents,
              userDetail.getId(),
              pubDetail.isIndexable());
        }
      } catch (Exception e) {
        SilverTrace.error(
            "importExport", "RepositoriesTypeManager.processMailContent", "root.EX_NO_MESSAGE", e);
      }
    }
  }