/** * Copyright (C) 2003-2007 eXo Platform SAS. * * 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. * * 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. **/ package org.exoplatform.faq.service; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.exoplatform.services.jcr.util.IdGenerator; /** * Data of question node is stored in question object which is used in processings: * add new question, edit question and reponse question. * * @author : Hung Nguyen Quang */ public class Question { /** The id. */ private String id; /** The language. */ private String language; /** The question. */ private String question; /** The question. */ private String detail; /** The author. */ private String author; /** The email. */ private String email; /** The is activated. */ private boolean isActivated = true; /** The is approved. */ private boolean isApproved = true; /** The created date. */ private Date createdDate; /** The category id. */ private String categoryId; /** The relations. */ private String[] relations; /** link to question. */ private String link = ""; /** The list attachments. */ private List<FileAttachment> listAttachments = new ArrayList<FileAttachment>(); /** language of question which is not yet answer. */ private String languagesNotYetAnswered = ""; /** The name attachs. */ private String[] nameAttachs; /** The answers. */ private Answer[] answers; /** The comments. */ private Comment[] comments; /** The users vote. */ private String[] usersVote; /** The mark vote. */ private double markVote = 0; /** The users watch. */ private String[] usersWatch = null; /** The emails watch. */ private String[] emailsWatch = null; private QuestionLanguage[] multiLanguages; /** The path topic discuss. */ private String topicIdDiscuss; private String path; /** author who make last activity of question */ private String authorOfLastActivity; /** the time when last activity appears */ private long timeOfLastActivity = -1; /** number of answers that are activated and approved */ private long numberOfPublicAnswers = 0; /** * Class constructor specifying id of object is created. */ public Question() { id = "Question" + IdGenerator.generate(); relations = new String[] {}; multiLanguages = new QuestionLanguage[] {}; } /** * Get id of Question object. * * @return question's id */ public String getId() { return id; } /** * Set an id for Question object. * * @param id the id of question object */ public void setId(String id) { this.id = id; } /** * Get content of Question which is wanted answer. * * @return the content of question */ public String getDetail() { return detail; } /** * Set content for Question object. * * @param name the content of question which is wanted answer */ public void setDetail(String name) { this.detail = name; } /** * Set language for question, a language may be have multi languages but * all of languages is used must be supported in portal. And the language * which is useing in portal will be auto setted for this quetsion. * * @param language the language is default language is used in system */ public void setLanguage(String language) { this.language = language; } /** * Get question's language, this is default language of system * when created question. * * @return language the language is default of system and question */ public String getLanguage() { return language; } /** * Set name for property author of this question, author is person who * write question and wait an answer. * * @param author ther author of question */ public void setAuthor(String author) { this.author = author; } /** * Get question's author who write question and wait an answer. * * @return author the name of question's author */ public String getAuthor() { return author; } /** * Get list questions in system which are like, related or support for this question. * * @return relations return list question's content is like this question */ public String[] getRelations() { return relations; } /** * Registers list questions is related or supported for this question. * * @param relations list questions have related with this question */ public void setRelations(String[] relations) { this.relations = relations; } /** * Registers email address of question's author for this Question object. * * @param email the email */ public void setEmail(String email) { this.email = email; } /** * Get email address of question's author. * * @return email the email address of person who write question */ public String getEmail() { return email; } /** * Registers date time for Question object. * * @param createdDate the date time when question is created */ public void setCreatedDate(Date createdDate) { this.createdDate = createdDate; } /** * Return date time when question is created or updated. * * @return the date time of question */ public Date getCreatedDate() { return createdDate; } /** * Registers for this Question object is activated or not. This setting with * set approve for question will allow question is viewed or not * * @param isActivated is <code>true</code> if this question is activated and * is <code>false</code> if this questiosn is not activated */ public void setActivated(boolean isActivated) { this.isActivated = isActivated; } /** * Return status of this question, return <code>true</code> if * this question is activated and <code>false</code> if opposite. * * @return status of this question object, is activated or not */ public boolean isActivated() { return isActivated; } /** * Registers for this question is approved or not. This setting with * set activate for question will allow this question is viewed or not * * @param isApproved is <code>true</code> if this question is approved and * is <code>false</code> if this question is not approved */ public void setApproved(boolean isApproved) { this.isApproved = isApproved; } /** * Return status of thi question, return <code>true</code> if * this question is approved and <code>false</code> if opposite. * * @return status of question is approved or not */ public boolean isApproved() { return isApproved; } /** * Registers id for property categoryId of Question object, * each question is contained in a category and this property is used to * point this cateogry. * * @param catId id of category which contain this question */ public void setCategoryId(String catId) { this.categoryId = catId; } /** * Get id of category which contain this question. * * @return an id of category which thi question */ public String getCategoryId() { return categoryId; } /** * Registers list files will be attach to this question to description for this question. * Each file have size is less than 10MB and larger 0B * * @param listFile list files are attached to question. */ public void setAttachMent(List<FileAttachment> listFile) { this.listAttachments = listFile; } /** * Get list files are attached to this quetsion. * * @return list files are attached to this quetsion * * @see FileAttachment */ public List<FileAttachment> getAttachMent() { return this.listAttachments; } /** * Get list languages of question which are not yet answered. * * @return list languages */ public String getLanguagesNotYetAnswered() { return languagesNotYetAnswered; } /** * Registers language is not yet answered. * * @param languagesNotYetAnswered the languages not yet answered * * @return the question */ public Question setLanguagesNotYetAnswered(String languagesNotYetAnswered) { this.languagesNotYetAnswered = languagesNotYetAnswered; return this; } /** * Gets the name attachs. * * @return the name attachs */ public String[] getNameAttachs() { return nameAttachs; } /** * Sets the name attachs. * * @param nameAttachs the new name attachs */ public void setNameAttachs(String[] nameAttachs) { this.nameAttachs = nameAttachs; } /** * Get link to question, this link is used to send mail notify, * when user click in to this link, will be jump to FAQ and view this question. * * @return link to question */ public String getLink() { return link; } /** * Register link to question, this link is used to send mail notify, * when user click in to this link, will be jump to FAQ and view this question. * * @param link the link */ public void setLink(String link) { this.link = link; } /** * Gets the users vote. * * @return the users vote */ public String[] getUsersVote() { return usersVote; } /** * Sets the users vote. * * @param usersVote the new users vote */ public void setUsersVote(String[] usersVote) { this.usersVote = usersVote; } /** * Gets the mark vote. * * @return the mark vote */ public double getMarkVote() { return markVote; } /** * Sets the mark vote. * * @param markVote the new mark vote */ public void setMarkVote(double markVote) { this.markVote = markVote; } /** * Gets the users watch. * * @return the users watch */ public String[] getUsersWatch() { return usersWatch; } /** * Sets the users watch. * * @param usersWatch the new users watch */ public void setUsersWatch(String[] usersWatch) { this.usersWatch = usersWatch; } /** * Gets the emails watch. * * @return the emails watch */ public String[] getEmailsWatch() { return emailsWatch; } /** * Sets the emails watch. * * @param emailsWatch the new emails watch */ public void setEmailsWatch(String[] emailsWatch) { this.emailsWatch = emailsWatch; } /** * Gets the question. * * @return the question */ public String getQuestion() { return question; } /** * Sets the question. * * @param title the new question */ public void setQuestion(String title) { this.question = title; } /** * Gets the path topic discuss. * * @return the path topic discuss */ public String getTopicIdDiscuss() { return topicIdDiscuss; } /** * Sets the path topic discuss. * * @param pathTopicDiscus the new path topic discuss */ public void setTopicIdDiscuss(String topicIdDiscuss) { this.topicIdDiscuss = topicIdDiscuss; } /** * Gets the answers. * * @return the answers */ public Answer[] getAnswers() { return answers; } /** * Sets the answers. * * @param answers the new answers */ public void setAnswers(Answer[] answers) { this.answers = answers; } /** * Gets the comments. * * @return the comments */ public Comment[] getComments() { return comments; } /** * Sets the comments. * * @param comments the new comments */ public void setComments(Comment[] comments) { this.comments = comments; } public void setPath(String path) { this.path = path; } public String getPath() { return path; } public void setMultiLanguages(QuestionLanguage[] multiLanguages) { this.multiLanguages = multiLanguages; } public QuestionLanguage[] getMultiLanguages() { return multiLanguages; } public String getAuthorOfLastActivity() { if (authorOfLastActivity == null || authorOfLastActivity.length() == 0) { return author; } return authorOfLastActivity; } public long getTimeOfLastActivity() { if (timeOfLastActivity < 0 && createdDate != null) { return createdDate.getTime(); } return timeOfLastActivity; } /** * set information of last activity of question. * @param info includes two parts separated by a dash. the first part is user name has last activity. * The second part is long value of time that appears last activity. */ public void setLastActivity(String info) { authorOfLastActivity = Utils.getAuthorOfLastActivity(info); timeOfLastActivity = Utils.getTimeOfLastActivity(info); } /** * @return the numberOfPublicAnswers */ public long getNumberOfPublicAnswers() { return numberOfPublicAnswers; } /** * @param numberOfPublicAnswers the numberOfPublicAnswers to set */ public void setNumberOfPublicAnswers(long numberOfPublicAnswers) { this.numberOfPublicAnswers = numberOfPublicAnswers; } }