use of it.vige.rubia.model.PollOption in project rubia-forums by flashboss.
the class ForumsModuleImpl method createTopic.
@Override
public Post createTopic(Forum forum, Message message, Date creationDate, Poster poster, Poll poll, Collection<Attachment> attachments, TopicType type) throws ModuleException {
try {
if (poster.getId() == null || em.find(Poster.class, poster.getId()) == null)
em.persist(poster);
em.merge(poster);
em.persist(poll);
for (PollOption pollOption : poll.getOptions()) em.persist(pollOption);
em.flush();
Post post = new Post();
post.setMessage(message);
post.setCreateDate(creationDate);
post.setPoster(poster);
if (attachments != null)
for (Attachment attachment : attachments) {
em.persist(attachment);
post.addAttachment(attachment);
}
Topic topic = new Topic();
topic.setSubject(message.getSubject());
topic.setForum(forum);
topic.setPoster(poster);
post.setTopic(topic);
topic.setLastPostDate(creationDate);
topic.setType(type);
topic.setStatus(TOPIC_UNLOCKED);
topic.setPoll(poll);
em.persist(topic);
em.persist(post);
em.flush();
forum.addTopicSize();
forum.addPostSize();
em.merge(forum);
post.setTopic(topic);
em.persist(post);
notificationEngine.scheduleForNotification(post.getId(), MODE_POST);
em.flush();
return post;
} catch (Exception e) {
String errorMessage = "Cannot create topic";
throw new ModuleException(errorMessage, e);
}
}
use of it.vige.rubia.model.PollOption in project rubia-forums by flashboss.
the class EditPost method execute.
/**
* @return the navigation state of the application
*/
@SecureActionForum
@Interceptors(AuthorizationListener.class)
public String execute() {
String navState = null;
boolean success = false;
try {
// setup the business objects to be updated
Post post = forumsModule.findPostById(postId);
forumsModule.updateAttachments(attachments, post);
// TODO: cleanup this forums update process............move this as
// a private method
// setup attachment information
Topic topic = post.getTopic();
// make sure this topic is not locked
if (topic.getStatus() == TOPIC_LOCKED) {
// should not allow posting a reply since the topic is locked
throw new Exception(getBundleMessage(BUNDLE_NAME, TOPIC_LOCKED_ERR_KEY));
}
// setup the message/subject related data
Message message = createMessage();
message.setText(this.message);
message.setSubject(subject);
// update the message/subject/topicType data on the business objects
post.setMessage(message);
if (isFirstPost) {
topic.setSubject(subject);
topic.setType(topicType);
}
// miscellaneous post related update
post.setEditCount(post.getEditCount() + 1);
post.setEditDate(new Date());
// TODO: cleanup this poll update process............move this as a
// private method
// setup poll information
List<PollOption> localPollOptions = new LinkedList<PollOption>();
for (String key : options.keySet()) {
PollOption pollOption = createPollOption(topic.getPoll());
pollOption.setQuestion(options.get(key));
pollOption.setVotes(0);
localPollOptions.add(pollOption);
}
// update poll information
if (topic.getPoll() == null || topic.getPoll().getTitle() == null || topic.getPoll().getTitle().trim().length() == 0) {
// no existing poll information found in the database
if (localPollOptions.size() > 0 && question != null && question.trim().length() > 0) {
// need to add a new poll to this topic
Poll poll = createPoll();
poll.setTitle(question);
poll.setLength(activeDuration);
poll.setOptions(localPollOptions);
validatePoll(poll);
forumsModule.addPollToTopic(topic, poll);
}
} else {
// existing poll information is available in the database
if (localPollOptions.size() > 0) {
// this is a diff update..............................
// setup the poll to be updated in the database
Poll poll = createPoll();
poll.setTitle(question);
poll.setLength(activeDuration);
poll.setVoted(topic.getPoll().getVoted());
poll.setCreationDate(topic.getPoll().getCreationDate());
for (PollOption newPollOption : localPollOptions) {
Iterator<PollOption> stored = topic.getPoll().getOptions().iterator();
while (stored.hasNext()) {
PollOption oldPollOption = (PollOption) stored.next();
if (oldPollOption != null && oldPollOption.getQuestion().equals(newPollOption.getQuestion())) {
newPollOption.setVotes(oldPollOption.getVotes());
break;
}
}
}
poll.setOptions(localPollOptions);
forumsModule.addPollToTopic(topic, poll);
} else {
// remove the poll from the database...poll was removed
// during this editPost process
topic.setPoll(null);
}
}
forumsModule.update(topic);
forumsModule.update(post);
// set the proper navigation state
navState = SUCCESS;
success = true;
} catch (PollValidationException e) {
// handle proper validation error with a proper message...not just a
// generic message..
// just use generic error page for the proof of concept
// set the custom exception such that e.toString() results in the
// proper message
handleException(e);
} catch (Exception e) {
handleException(e);
} finally {
// cleanup if necessary
if (success) {
cleanup();
}
}
return navState;
}
use of it.vige.rubia.model.PollOption in project rubia-forums by flashboss.
the class NewTopic method execute.
/**
* Execute
*
* @return the navigation state of the application
*/
@SecureActionForum
@Interceptors(AuthorizationListener.class)
public String execute() {
String navState = null;
boolean success = false;
try {
// setup the message
Message message = createMessage();
message.setText(this.message);
message.setSubject(subject);
// setup the forum and the corresponding poster
Forum forum = forumsModule.findForumById(forumId);
Poster poster = getPoster(userModule, forumsModule);
// setup the poll related information
Poll poll = createPoll();
if (question != null && question.trim().length() > 0) {
poll.setTitle(question);
poll.setLength(activeDuration);
List<PollOption> pollOptions = new LinkedList<PollOption>();
for (String option : options.keySet()) {
PollOption pollOption = createPollOption(poll);
pollOption.setQuestion((String) options.get(option));
pollOption.setVotes(0);
pollOptions.add(pollOption);
}
poll.setOptions(pollOptions);
validatePoll(poll);
}
poster.incrementPostCount();
// actually create the topic in this forum
// use this method when poll and attachments are actually integrated
// poll
forumsModule.createTopic(// poll
forum, // poll
message, // poll
new Date(), // poll
poster, // poll
poll, // attachments
attachments, topicType);
// setup the navigation state
navState = SUCCESS;
success = true;
} catch (MessageValidationException e) {
// handle proper validation error with a proper message...not just a
// generic message..
// just use generic error page for the proof of concept
// set the custom exception such that e.toString() results in the
// proper message
handleException(e);
} catch (PollValidationException e) {
// handle proper validation error with a proper message...not just a
// generic message..
// just use generic error page for the proof of concept
// set the custom exception such that e.toString() results in the
// proper message
handleException(e);
} catch (Exception e) {
handleException(e);
} finally {
// cleanup if necessary
if (success) {
cleanup();
}
}
return navState;
}
use of it.vige.rubia.model.PollOption in project rubia-forums by flashboss.
the class ForumsModuleImpl method addPollToTopic.
@Override
public Poll addPollToTopic(Topic topic, Poll poll) throws ModuleException {
try {
TypedQuery<Poll> query = em.createNamedQuery("findPoll", Poll.class);
query.setParameter("topicid", topic.getId());
Poll oldpoll = null;
try {
oldpoll = query.getSingleResult();
} catch (NoResultException ex) {
oldpoll = null;
}
if (oldpoll != null) {
em.remove(oldpoll);
}
em.persist(poll);
topic.setPoll(poll);
for (PollOption pollOption : poll.getOptions()) {
pollOption.setPoll(poll);
em.persist(pollOption);
}
update(topic);
em.flush();
return poll;
} catch (Exception e) {
String errorMessage = "Cannot add poll to topic";
throw new ModuleException(errorMessage, e);
}
}
use of it.vige.rubia.model.PollOption in project rubia-forums by flashboss.
the class OperationPollTest method verifyVote.
@Test
public void verifyVote() {
Topic topic = new Topic(new Forum("Second Test Forum"), "Fourth Test Topic");
goTo(driver, topic);
Poll pollToUpdate = getPollOfCurrentTopic(driver);
Poll updatedPoll = vote(driver, pollToUpdate, 0);
assertEquals("Fourth Test Question", updatedPoll.getTitle());
assertEquals(100, updatedPoll.getVotesSum());
List<PollOption> options = updatedPoll.getOptions();
assertEquals("Seventh Test Answer", options.get(0).getQuestion());
assertEquals("Eight Test Answer", options.get(1).getQuestion());
assertEquals(100, options.get(0).getVotes());
assertEquals(0, options.get(1).getVotes());
assertEquals(2, options.size());
updatedPoll = vote(driver, pollToUpdate, 1);
assertEquals("Fourth Test Question", updatedPoll.getTitle());
assertEquals(100, updatedPoll.getVotesSum());
options = updatedPoll.getOptions();
assertEquals("Seventh Test Answer", options.get(0).getQuestion());
assertEquals("Eight Test Answer", options.get(1).getQuestion());
assertEquals(50, options.get(0).getVotes());
assertEquals(50, options.get(1).getVotes());
assertEquals(2, options.size());
topic.setPoll(updatedPoll);
String message = removePoll(driver, topic);
assertTrue(message.equals(OK));
String[] createdOptions = addPoll(driver, updatedPoll);
assertEquals(2, createdOptions.length);
}
Aggregations