package org.jboss.seam.wiki.plugin.faqBrowser; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.*; import org.jboss.seam.core.Conversation; import org.jboss.seam.core.Events; import org.jboss.seam.international.StatusMessages; import org.jboss.seam.wiki.core.action.DocumentHome; import org.jboss.seam.wiki.core.model.WikiDocument; import static org.jboss.seam.international.StatusMessage.Severity.INFO; @Name("faqQuestionHome") @Scope(ScopeType.CONVERSATION) public class FaqQuestionHome extends DocumentHome { @In(create = true) FaqBrowser faqBrowser; private boolean showForm = false; /* -------------------------- Basic Overrides ------------------------------ */ @Override protected boolean isPageRootController() { return false; } @Override public Class<WikiDocument> getEntityClass() { return WikiDocument.class; } @Override public void create() { super.create(); setParentNodeId(faqBrowser.getSelectedDir().getNode().getId()); } @Override public WikiDocument afterNodeCreated(WikiDocument doc) { WikiDocument newQuestion = super.afterNodeCreated(doc); newQuestion.setDefaults(new FaqQuestionDefaults()); return newQuestion; } @Override public String persist() { String outcome = super.persist(); if (outcome != null) endConversation(); return null; // Prevent navigation } @Override public String update() { String outcome = super.update(); if (outcome != null) endConversation(); return null; // Prevent navigation } @Override public String remove() { String outcome = super.remove(); if (outcome != null) endConversation(); return null; // Prevent navigation } /* -------------------------- Messages ------------------------------ */ protected void createdMessage() { StatusMessages.instance().addFromResourceBundleOrDefault( INFO, "fb.faqBrowser.msg.Question.Persist", "Question '{0}' has been saved.", getInstance().getName() ); } protected void updatedMessage() { StatusMessages.instance().addFromResourceBundleOrDefault( INFO, "fb.faqBrowser.msg.Question.Update", "Question '{0}' has been updated.", getInstance().getName() ); } protected void deletedMessage() { StatusMessages.instance().addFromResourceBundleOrDefault( INFO, "fb.faqBrowser.msg.Question.Delete", "Question '{0}' has been deleted.", getInstance().getName() ); } /* -------------------------- Internal Methods ------------------------------ */ private void endConversation() { getLog().debug("ending conversation and hiding question form"); showForm = false; Conversation.instance().end(); getEntityManager().clear(); // Need to force re-read in the question list refresh Events.instance().raiseEvent("FaqBrowser.questionListRefresh"); } /* -------------------------- Public Features ------------------------------ */ public boolean isShowForm() { return showForm; } public void setShowForm(boolean showForm) { this.showForm = showForm; } @Begin(flushMode = FlushModeType.MANUAL, join = true) public void newQuestion() { initEditor(false); showForm = true; } public void cancel() { endConversation(); } }