AnswerEntity.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:
* "https://www.silverpeas.org/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.survey.web;
import org.silverpeas.core.ResourceReference;
import org.silverpeas.core.questioncontainer.answer.model.Answer;
import org.silverpeas.core.questioncontainer.answer.model.AnswerPK;
import org.silverpeas.core.questioncontainer.question.model.Question;
import org.silverpeas.core.security.html.HtmlSanitizer;
import org.silverpeas.kernel.bundle.ResourceLocator;
import org.silverpeas.kernel.bundle.SettingBundle;
import org.silverpeas.core.util.file.FileServerUtils;
import org.silverpeas.core.web.rs.WebEntity;
import java.net.URI;
import java.util.Optional;
import static java.util.Optional.empty;
import static java.util.Optional.of;
import static org.silverpeas.kernel.util.StringUtil.isDefined;
/**
* This is a WEB entity representation of an {@link Answer} linked to a {@link Question}.
* @author silveryocha
*/
public class AnswerEntity implements WebEntity {
private static final long serialVersionUID = 8677864967906410516L;
private static final SettingBundle settings =
ResourceLocator.getSettingBundle("org.silverpeas.survey.surveySettings");
private String id;
private String instanceId;
private String questionId;
private String label;
private String imageUrl;
private boolean opened;
private int nbVoters;
protected AnswerEntity() {
}
/**
* Gets the {@link AnswerEntity} instance from given {@link Answer} one.
* @param answer the answer model to get into WEB entity representation.
* @return an {@link AnswerEntity} instance.
*/
public static AnswerEntity asWebEntity(final Answer answer) {
final AnswerEntity entity = new AnswerEntity();
final AnswerPK pk = answer.getPK();
final ResourceReference questionPK = answer.getQuestionPK();
entity.id = pk.getId();
entity.instanceId = questionPK.getComponentInstanceId();
entity.questionId = questionPK.getLocalId();
entity.label = HtmlSanitizer.get().sanitize(answer.getLabel());
entity.nbVoters = answer.getNbVoters();
entity.opened = answer.isOpened();
entity.imageUrl = normalizeImageUrl(pk.getInstanceId(), answer.getImage()).orElse(null);
return entity;
}
/**
* Normalizes the image URL of an answer. This method does not take into parameters directly an
* {@link Answer} instance in order to be used in context of survey creation. In a such
* context, {@link Answer} data are not safe.
* @param instanceId the identifier of the survey component instance.
* @param imageUrl the URL of the image linked to an answer.
* @return an optional normalized URL.
*/
public static Optional<String> normalizeImageUrl(final String instanceId, final String imageUrl) {
Optional<String> url = empty();
if (isDefined(imageUrl)) {
if (imageUrl.startsWith("/")) {
url = of(imageUrl + "&Size=266x150");
} else {
url = of(FileServerUtils.getUrl(instanceId, imageUrl, imageUrl, "image/gif",
settings.getString("imagesSubDirectory")));
}
}
return url;
}
/**
* Gets the identifier of the answer.
* @return a string identifier.
*/
public String getId() {
return id;
}
public void setId(final String id) {
this.id = id;
}
/**
* Gets the identifier of the survey component instance hosting the answer.
* @return a string identifier.
*/
public String getInstanceId() {
return instanceId;
}
public void setInstanceId(final String instanceId) {
this.instanceId = instanceId;
}
/**
* Gets the identifier of the question the answer is linked to.
* @return a string identifier.
*/
public String getQuestionId() {
return questionId;
}
public void setQuestionId(final String questionId) {
this.questionId = questionId;
}
/**
* Gets the label of the answer.
* @return a string.
*/
public String getLabel() {
return label;
}
public void setLabel(final String label) {
this.label = label;
}
/**
* Indicates if the answer is an opened one.
* @return true if opened, false otherwise.
*/
public boolean isOpened() {
return opened;
}
public void setOpened(final boolean opened) {
this.opened = opened;
}
/**
* Gets the number of voters who choose the answer.
* @return an integer.
*/
public int getNbVoters() {
return nbVoters;
}
public void setNbVoters(final int nbVoters) {
this.nbVoters = nbVoters;
}
/**
* Gets the URL of a linked image if any.
* @return a string if any, null or empty otherwise.
*/
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(final String imageUrl) {
this.imageUrl = imageUrl;
}
@Override
public URI getURI() {
return null;
}
}