/*
* 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.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.model.WikiTreeNode;
import java.util.List;
import java.io.Serializable;
/**
* @author Christian Bauer
*/
@Name("faqBrowser")
@Scope(ScopeType.PAGE)
public class FaqBrowser implements Serializable {
@Logger
Log log;
@In(create = true)
FaqBrowserDAO faqBrowserDAO;
@In
WikiNodeDAO wikiNodeDAO;
@In
WikiDirectory currentDirectory;
@In(required = false)
String requestedCategory;
List<WikiTreeNode<WikiDirectory>> tree;
WikiTreeNode<WikiDirectory> selectedDir;
boolean directorySelected = false;
public void loadTree() {
log.debug("loading faq root, starting search for parent default file with macro in directory: " + currentDirectory);
WikiDirectory faqRoot = faqBrowserDAO.findFaqRootDir(currentDirectory);
if (faqRoot != null) {
log.debug("found faq root: " + faqRoot);
tree = wikiNodeDAO.findWikiDirectoryTree(faqRoot, WikiNode.SortableProperty.createdOn, true);
} else {
log.warn("did not find faq root, started search in: " + currentDirectory);
}
if (tree == null) {
log.warn("faq directory tree has not been loaded");
}
}
@Create
public void setDefaultDir() {
if (requestedCategory != null) {
log.debug("trying to resolve requested category: " + requestedCategory);
WikiDirectory dir = wikiNodeDAO.findWikiDirectoryInArea(currentDirectory.getAreaNumber(), requestedCategory);
if (dir != null) {
log.debug("found requested category, setting selected directory: " + dir);
selectedDir = new WikiTreeNode(0, dir);
showQuestions();
}
}
if (selectedDir == null) {
log.debug("setting selected directory to current directory");
selectedDir = new WikiTreeNode(0, wikiNodeDAO.findWikiDirectory(currentDirectory.getId()));
}
}
public List<WikiTreeNode<WikiDirectory>> getTree() {
log.debug("getting faq tree");
if (tree == null) loadTree();
return tree;
}
public WikiTreeNode<WikiDirectory> getSelectedDir() {
log.debug("getting selected directory : " + selectedDir);
return selectedDir;
}
public void setSelectedDir(WikiTreeNode<WikiDirectory> selectedDir) {
log.debug("setting selected directory: " + selectedDir);
this.selectedDir = selectedDir;
}
public boolean isDirectorySelected() {
return directorySelected;
}
@Observer("FaqBrowser.questionListRefresh")
public void showQuestions() {
log.debug("showing questions of currently selected: " + selectedDir);
directorySelected = true;
questions = wikiNodeDAO.findWikiDocuments(selectedDir.getNode(), WikiNode.SortableProperty.createdOn, true);
}
public void hideQuestions() {
log.debug("hiding questions");
directorySelected = false;
this.questions = null;
}
List<WikiDocument> questions;
public List<WikiDocument> getQuestions() {
log.debug("retrieving questions: " + questions);
return questions;
}
}