[jboss-cvs] jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/plugin/faqBrowser ...
Christian Bauer
christian at hibernate.org
Tue Jan 15 20:40:43 EST 2008
User: cbauer
Date: 08/01/15 20:40:43
Added: examples/wiki/src/main/org/jboss/seam/wiki/plugin/faqBrowser
FaqQuestionHome.java FaqBrowser.java
FaqBrowserDAO.java
Log:
JBSEAM-2486 - Implemented FAQ browser plugin
Revision Changes Path
1.1 date: 2008/01/16 01:40:43; author: cbauer; state: Exp;jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/plugin/faqBrowser/FaqQuestionHome.java
Index: FaqQuestionHome.java
===================================================================
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.Messages;
import org.jboss.seam.wiki.core.action.DocumentHome;
import org.jboss.seam.wiki.core.model.WikiDirectory;
import org.jboss.seam.wiki.core.model.WikiDocument;
import org.jboss.seam.wiki.core.model.WikiDocumentDefaults;
import static javax.faces.application.FacesMessage.SEVERITY_INFO;
@Name("faqQuestionHome")
@Scope(ScopeType.CONVERSATION)
public class FaqQuestionHome extends DocumentHome {
@In
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().getWrappedNode().getId());
}
@Override
public WikiDocument afterNodeCreated(WikiDocument doc) {
WikiDocument newQuestion = super.afterNodeCreated(doc);
WikiDocumentDefaults newQuestionDefaults=
new WikiDocumentDefaults() {
@Override
public String getName() {
return Messages.instance().get("faqBrowser.label.NewQuestionTitle");
}
@Override
public String[] getHeaderMacrosAsString() {
return new String[] { "faqBrowser", "docPager" };
}
@Override
public String getContentText() {
return Messages.instance().get("lacewiki.msg.wikiTextEditor.EditThisTextPreviewUpdatesAutomatically");
}
@Override
public void setOptions(WikiDocument newQuestion) {
newQuestion.setNameAsTitle(true);
newQuestion.setEnableComments(true);
newQuestion.setEnableCommentForm(true);
newQuestion.setEnableCommentsOnFeeds(false);
}
};
newQuestion.setDefaults(newQuestionDefaults);
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() {
getFacesMessages().addFromResourceBundleOrDefault(
SEVERITY_INFO,
"faqBrowser.msg.Question.Persist",
"Question '{0}' has been saved.",
getInstance().getName()
);
}
protected void updatedMessage() {
getFacesMessages().addFromResourceBundleOrDefault(
SEVERITY_INFO,
"faqBrowser.msg.Question.Update",
"Question '{0}' has been updated.",
getInstance().getName()
);
}
protected void deletedMessage() {
getFacesMessages().addFromResourceBundleOrDefault(
SEVERITY_INFO,
"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() {
setEdit(true);
showForm = true;
}
public void cancel() {
endConversation();
}
}
1.1 date: 2008/01/16 01:40:43; author: cbauer; state: Exp;jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/plugin/faqBrowser/FaqBrowser.java
Index: FaqBrowser.java
===================================================================
/*
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.seam.wiki.plugin.faqBrowser;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.*;
import org.jboss.seam.annotations.web.RequestParameter;
import org.jboss.seam.log.Log;
import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
import org.jboss.seam.wiki.core.model.WikiDirectory;
import org.jboss.seam.wiki.core.model.WikiDocument;
import org.jboss.seam.wiki.core.model.WikiNode;
import org.jboss.seam.wiki.core.nestedset.query.NestedSetNodeWrapper;
import java.util.List;
/**
* @author Christian Bauer
*/
@Name("faqBrowser")
@Scope(ScopeType.PAGE)
@AutoCreate
public class FaqBrowser {
@Logger
Log log;
@In
FaqBrowserDAO faqBrowserDAO;
@In
WikiNodeDAO wikiNodeDAO;
@In
WikiDirectory currentDirectory;
NestedSetNodeWrapper<WikiDirectory> root;
public NestedSetNodeWrapper<WikiDirectory> getRoot() {
if (root == null) loadRoot();
return root;
}
public void loadRoot() {
log.debug("loading faq root, starting search for parent default file with macro in directory: " + currentDirectory);
WikiDirectory faqRoot = faqBrowserDAO.findFaqRootDir(currentDirectory);
if (faqRoot != null) {
root = wikiNodeDAO.findWikiDirectoryTree(faqRoot, 99l, 1l, false);
}
}
NestedSetNodeWrapper<WikiDirectory> selectedDir;
boolean directorySelected = false;
@Create
public void setDefaultDir() {
selectedDir = new NestedSetNodeWrapper<WikiDirectory>(currentDirectory);
}
public NestedSetNodeWrapper<WikiDirectory> getSelectedDir() {
return selectedDir;
}
public void setSelectedDir(NestedSetNodeWrapper<WikiDirectory> selectedDir) {
this.selectedDir = selectedDir;
}
public boolean isDirectorySelected() {
return directorySelected;
}
@Observer("FaqBrowser.questionListRefresh")
public void showQuestions() {
log.debug("showing questions of currently selected directory: " + selectedDir.getWrappedNode());
directorySelected = true;
questions = wikiNodeDAO.findWikiDocuments(selectedDir.getWrappedNode(), WikiNode.SortableProperty.createdOn, true);
}
public void hideQuestions() {
log.debug("hiding questions");
directorySelected = false;
this.questions = null;
}
List<WikiDocument> questions;
public List<WikiDocument> getQuestions() {
return questions;
}
@RequestParameter("category")
public void selectCategory(String requestParam) {
if (requestParam != null && requestParam.length() > 0 && getRoot() != null) {
WikiDirectory category = wikiNodeDAO.findWikiDirectoryInArea(getRoot().getWrappedNode().getAreaNumber(), requestParam);
if (category != null) {
selectedDir = new NestedSetNodeWrapper<WikiDirectory>(category);
showQuestions();
}
}
}
}
1.1 date: 2008/01/16 01:40:43; author: cbauer; state: Exp;jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/plugin/faqBrowser/FaqBrowserDAO.java
Index: FaqBrowserDAO.java
===================================================================
/*
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.seam.wiki.plugin.faqBrowser;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.wiki.core.model.WikiDirectory;
import javax.persistence.EntityManager;
import javax.persistence.EntityNotFoundException;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import java.io.Serializable;
/**
* @author Christian Bauer
*/
@Name("faqBrowserDAO")
@Scope(ScopeType.CONVERSATION)
@AutoCreate
public class FaqBrowserDAO implements Serializable {
@In
EntityManager restrictedEntityManager;
public WikiDirectory findFaqRootDir(WikiDirectory startDir) {
StringBuilder queryString = new StringBuilder();
queryString.append("select dir from WikiDirectory dir join dir.defaultFile f, WikiDocument doc");
queryString.append(" where dir.nodeInfo.nsThread = :nsThread and");
queryString.append(" dir.nodeInfo.nsLeft <= :nsLeft and dir.nodeInfo.nsRight >= :nsRight");
queryString.append(" and f = doc and doc.headerMacrosString like '%faqBrowser%'");
Query query = restrictedEntityManager.createQuery(queryString.toString())
.setParameter("nsThread", startDir.getNodeInfo().getNsThread())
.setParameter("nsLeft", startDir.getNodeInfo().getNsLeft())
.setParameter("nsRight", startDir.getNodeInfo().getNsRight());
try {
return (WikiDirectory) query.getSingleResult();
}
catch (EntityNotFoundException ex) {}
catch (NoResultException ex) {}
return null;
}
}
More information about the jboss-cvs-commits
mailing list