[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