# Reply.java

    /*
     * Copyright (C) 2000 - 2024 Silverpeas
     *
     * This program is free software: you can redistribute it and/or modify
     * it under the terms of the GNU Affero General Public License as
     * published by the Free Software Foundation, either version 3 of the
     * License, or (at your option) any later version.
     *
     * As a special exception to the terms and conditions of version 3.0 of
     * the GPL, you may redistribute this Program in connection with Free/Libre
     * Open Source Software ("FLOSS") applications as described in Silverpeas's
     * FLOSS exception. You should have received a copy of the text describing
     * the FLOSS exception, and it is also available here:
     * "http://www.silverpeas.org/docs/core/legal/floss_exception.html"
     *
     * This program 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 Affero General Public License for more details.
     *
     * You should have received a copy of the GNU Affero General Public License
     * along with this program. If not, see <https://www.gnu.org/licenses/>.
     */
    package org.silverpeas.components.questionreply.model;

    import org.silverpeas.core.ResourceReference;
    import org.silverpeas.core.admin.user.model.User;
    import org.silverpeas.core.admin.user.model.UserDetail;
    import org.silverpeas.core.contribution.content.wysiwyg.service.WysiwygController;
    import org.silverpeas.core.contribution.model.Contribution;
    import org.silverpeas.core.contribution.model.ContributionIdentifier;
    import org.silverpeas.core.contribution.model.WithAttachment;
    import org.silverpeas.core.i18n.I18NHelper;
    import org.silverpeas.core.persistence.jdbc.bean.SilverpeasBean;
    import org.silverpeas.core.util.DateUtil;
    import org.silverpeas.kernel.annotation.NonNull;

    import java.text.ParseException;
    import java.util.Date;

    @SuppressWarnings("deprecation")
    public class Reply extends SilverpeasBean implements Contribution, WithAttachment {

      private static final long serialVersionUID = 5638699228049557540L;
      private long questionId;
      private String title;
      private String content;
      private String wysiwygContent;
      private String creatorId;
      private String creationDate;
      private int publicReply = 0;
      private int privateReply = 1;

      public Reply() {
      }

      public Reply(String creatorId) {
        this.creatorId = creatorId;
        this.creationDate = DateUtil.date2SQLDate(new Date());
      }

      public Reply(long questionId, String creatorId) {
        this(creatorId);
        this.questionId = questionId;
      }

      public long getQuestionId() {
        return questionId;
      }

      public String getTitle() {
        return title;
      }

      @Override
      public boolean canBeAccessedBy(final User user) {
        return false;
      }

      public String getContent() {
        return content;
      }

      public String getCreatorId() {
        return creatorId;
      }

      @Override
      public ContributionIdentifier getIdentifier() {
        return ContributionIdentifier.from(new ResourceReference(getPK()));
      }

      @Override
      public User getCreator() {
        return User.getById(getCreatorId());
      }

      @Override
      public Date getCreationDate() {
        try {
          return DateUtil.parse(this.getCreationDateAsString());
        } catch (ParseException e) {
          throw new RuntimeException(e);
        }
      }

      @Override
      public User getLastUpdater() {
        return getCreator();
      }

      @Override
      public Date getLastUpdateDate() {
        return getCreationDate();
      }

      public String getCreationDateAsString() {
        return creationDate;
      }

      public int getPublicReply() {
        return publicReply;
      }

      public int getPrivateReply() {
        return privateReply;
      }

      public void setQuestionId(long questionId) {
        this.questionId = questionId;
      }

      public void setCreatorId(String creatorId) {
        this.creatorId = creatorId;
      }

      @SuppressWarnings("unused")
      public void setCreationDate() {
        setCreationDate(new Date());
      }

      public void setCreationDate(String creationDate) {
        this.creationDate = creationDate;
      }

      public void setCreationDate(Date creationDate) {
        this.creationDate = DateUtil.date2SQLDate(creationDate);
      }

      public void setTitle(String title) {
        this.title = title;
      }

      public void setContent(String content) {
        this.content = content;
      }

      public void setPublicReply(int publicReply) {
        this.publicReply = publicReply;
      }

      public void setPrivateReply(int privateReply) {
        this.privateReply = privateReply;
      }

      public String readCreatorName() {
        String creatorName = null;
        UserDetail userDetail = readAuthor();
        if (userDetail != null) {
          creatorName = userDetail.getDisplayedName();
        }
        return creatorName;
      }

      public UserDetail readAuthor() {
        return UserDetail.getById(getCreatorId());
      }

      public String loadWysiwygContent() {
       this.wysiwygContent = WysiwygController.load(getPK().getInstanceId(), getPK().getId(),
              I18NHelper.DEFAULT_LANGUAGE);
        return wysiwygContent;
      }

      public String readCurrentWysiwygContent() {
        return this.wysiwygContent;
      }

      public void writeWysiwygContent(String wysiwygContent) {
        this.wysiwygContent = wysiwygContent;
      }

      @Override
      @NonNull
      protected String getTableName() {
        return "SC_QuestionReply_Reply";
      }

      @Override
      public boolean isIndexable() {
        return this.getPublicReply() == 1;
      }

      @Override
      public String toString() {
        return "Reply{" + "questionId=" + questionId + ", title=" + title + ", content=" + content
            + ", creatorId=" + creatorId + ", creationDate=" + creationDate + ", publicReply="
            + publicReply + ", privateReply=" + privateReply + '}';
      }
    }