All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencastproject.event.comment.persistence.EventCommentDto Maven / Gradle / Ivy

There is a newer version: 16.7
Show newest version
/**
 * Licensed to The Apereo Foundation under one or more contributor license
 * agreements. See the NOTICE file distributed with this work for additional
 * information regarding copyright ownership.
 *
 *
 * The Apereo Foundation licenses this file to you under the Educational
 * Community License, Version 2.0 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of the License
 * at:
 *
 *   http://opensource.org/licenses/ecl2.txt
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations under
 * the License.
 *
 */

package org.opencastproject.event.comment.persistence;

import static org.opencastproject.util.RequireUtil.notNull;

import org.opencastproject.event.comment.EventComment;
import org.opencastproject.event.comment.EventCommentReply;
import org.opencastproject.security.api.User;
import org.opencastproject.security.api.UserDirectoryService;
import org.opencastproject.util.data.Option;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Index;
import javax.persistence.Lob;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity(name = "EventComment")
@Table(name = "oc_event_comment", indexes = {
    @Index(name = "IX_oc_event_comment_event", columnList = "event, organization")
})
@NamedQueries({
    @NamedQuery(
        name = "EventComment.countAll",
        query = "SELECT COUNT(e) FROM EventComment e"
    ),
    @NamedQuery(
        name = "EventComment.findAll",
        query = "SELECT e FROM EventComment e"
    ),
    @NamedQuery(
        name = "EventComment.findReasons",
        query = "SELECT e.reason FROM EventComment e WHERE e.organization = :org GROUP BY e.reason"
    ),
    @NamedQuery(
        name = "EventComment.findByEvent",
        query = "SELECT e FROM EventComment e "
            + "WHERE e.eventId = :eventId AND e.organization = :org ORDER BY e.creationDate"
    ),
    @NamedQuery(
        name = "EventComment.findByCommentId",
        query = "SELECT e FROM EventComment e WHERE e.id = :commentId"
    ),
    @NamedQuery(
        name = "EventComment.findAllWIthOrg",
        query = "SELECT e.organization, e.eventId FROM EventComment e ORDER BY e.organization ASC"
    ),
    @NamedQuery(
        name = "EventComment.clear",
        query = "DELETE FROM EventComment e WHERE e.organization = :org"
    ),
})
public class EventCommentDto {

  @Id
  @GeneratedValue
  @Column(name = "id")
  private long id;

  @Column(name = "organization", length = 128, nullable = false)
  private String organization;

  @Column(name = "event", length = 128, nullable = false)
  private String eventId;

  @Lob
  @Column(name = "text", nullable = false)
  private String text;

  @Column(name = "creation_date", nullable = false)
  @Temporal(TemporalType.TIMESTAMP)
  private Date creationDate;

  @Column(name = "modification_date", nullable = false)
  @Temporal(TemporalType.TIMESTAMP)
  private Date modificationDate;

  @Column(name = "author", nullable = false)
  private String author;

  @Column(name = "reason")
  private String reason;

  @Column(name = "resolved_status", nullable = false)
  private boolean resolvedStatus = false;

  @OneToMany(
      targetEntity = EventCommentReplyDto.class,
      fetch = FetchType.LAZY,
      cascade = { CascadeType.REMOVE },
      mappedBy = "eventComment",
      orphanRemoval = true
  )
  private List replies = new ArrayList();

  /**
   * Default constructor
   */
  public EventCommentDto() {
  }

  public static EventCommentDto from(EventComment comment) {
    EventCommentDto dto = new EventCommentDto();

    if (comment.getId().isSome()) {
      dto.id = comment.getId().get().longValue();
    }
    dto.organization = comment.getOrganization();
    dto.eventId = comment.getEventId();
    dto.text = comment.getText();
    dto.creationDate = comment.getCreationDate();
    dto.modificationDate = comment.getModificationDate();
    dto.author = comment.getAuthor().getUsername();
    dto.reason = comment.getReason();
    dto.resolvedStatus = comment.isResolvedStatus();

    for (final EventCommentReply reply : comment.getReplies()) {
      dto.addReply(EventCommentReplyDto.from(reply));
    }

    return dto;
  }

  /**
   * Returns the id of this entity
   *
   * @return the id as long
   */
  public long getId() {
    return id;
  }

  /**
   * Returns the event identifier
   *
   * @return the event identifier
   */
  public String getEventId() {
    return eventId;
  }

  /**
   * Sets the event identifier
   *
   * @param eventId
   *          the event identifier
   */
  public void setEventId(String eventId) {
    this.eventId = eventId;
  }

  /**
   * Returns the organization
   *
   * @return the organization
   */
  public String getOrganization() {
    return organization;
  }

  /**
   * Sets the organization
   *
   * @param organization
   *          the organization
   */
  public void setOrganization(String organization) {
    this.organization = organization;
  }

  /**
   * Sets the text
   *
   * @param text
   *          the text
   */
  public void setText(String text) {
    this.text = text;
  }

  /**
   * Returns the text
   *
   * @return the text
   */
  public String getText() {
    return text;
  }

  /**
   * Sets the creation date
   *
   * @param creationDate
   *          the creation date
   */
  public void setCreationDate(Date creationDate) {
    this.creationDate = creationDate;
  }

  /**
   * Returns the creation date
   *
   * @return the creation date
   */
  public Date getCreationDate() {
    return creationDate;
  }

  /**
   * Sets the modification date
   *
   * @param modificationDate
   *          the modification date
   */
  public void setModificationDate(Date modificationDate) {
    this.modificationDate = modificationDate;
  }

  /**
   * Returns the modification date
   *
   * @return the modification date
   */
  public Date getModificationDate() {
    return modificationDate;
  }

  /**
   * Sets the author
   *
   * @param author
   *          the author
   */
  public void setAuthor(String author) {
    this.author = author;
  }

  /**
   * Returns the author
   *
   * @return the author
   */
  public String getAuthor() {
    return author;
  }

  /**
   * Sets the reason
   *
   * @param reason
   *          the reason
   */
  public void setReason(String reason) {
    this.reason = reason;
  }

  /**
   * Returns the reason
   *
   * @return the reason
   */
  public String getReason() {
    return reason;
  }

  /**
   * Sets whether the status is resolved
   *
   * @param resolvedStatus
   *          whether the status is resolved
   */
  public void setResolvedStatus(boolean resolvedStatus) {
    this.resolvedStatus = resolvedStatus;
  }

  /**
   * Returns whether the status is resolved
   *
   * @return whether the status is resolved
   */
  public boolean isResolvedStatus() {
    return resolvedStatus;
  }

  /**
   * Sets a comment replies list.
   *
   * @param replies
   *          the replies list
   */
  public void setReplies(List replies) {
    this.replies = notNull(replies, "replies");
  }

  /**
   * Returns the replies list
   *
   * @return the replies list
   */
  public List getReplies() {
    return replies;
  }

  /**
   * Add a reply to the comment
   *
   * @param reply
   *          the reply to add to this comment
   *
   * @return true if this collection changed as a result of the call
   */
  public boolean addReply(EventCommentReplyDto reply) {
    notNull(reply, "reply").setEventComment(this);
    return replies.add(reply);
  }

  /**
   * Remove a reply from the comment
   *
   * @param reply
   *          the reply to remove from this comment
   *
   * @return true if this collection changed as a result of the call
   */
  public boolean removeReply(EventCommentReplyDto reply) {
    return replies.remove(notNull(reply, "reply"));
  }

  /**
   * Returns the business object of this comment
   *
   * @return the business object model of this comment
   */
  public EventComment toComment(UserDirectoryService userDirectoryService) {
    User user = userDirectoryService.loadUser(author);
    EventComment comment = EventComment.create(Option.option(id), eventId, organization, text, user, reason,
            resolvedStatus, creationDate, modificationDate);
    for (EventCommentReplyDto reply : replies) {
      comment.addReply(reply.toCommentReply(userDirectoryService));
    }
    return comment;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy