[jboss-cvs] jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao ...

Christian Bauer christian at hibernate.org
Sat Aug 25 13:59:20 EDT 2007


  User: cbauer  
  Date: 07/08/25 13:59:20

  Modified:    examples/wiki/src/main/org/jboss/seam/wiki/core/dao   
                        UserDAO.java FeedDAO.java NodeDAO.java
  Log:
  Major refactoring of navigation
  
  Revision  Changes    Path
  1.7       +2 -2      jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/UserDAO.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: UserDAO.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/UserDAO.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -b -r1.6 -r1.7
  --- UserDAO.java	22 Apr 2007 19:19:29 -0000	1.6
  +++ UserDAO.java	25 Aug 2007 17:59:20 -0000	1.7
  @@ -37,7 +37,7 @@
       public User findUser(String username, boolean onlyActivated, boolean caseSensitive) {
           entityManager.joinTransaction();
   
  -        StringBuffer query = new StringBuffer("select u from User u where");
  +        StringBuilder query = new StringBuilder("select u from User u where");
           if (caseSensitive)
               query.append(" u.username = :username");
           else
  @@ -58,7 +58,7 @@
       public User findUserWithActivationCode(String activationCode) {
           entityManager.joinTransaction();
   
  -        StringBuffer query = new StringBuffer("select u from User u where u.activationCode = :activationCode");
  +        StringBuilder query = new StringBuilder("select u from User u where u.activationCode = :activationCode");
           try {
               return (User) entityManager
                       .createQuery(query.toString())
  
  
  
  1.12      +1 -1      jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/FeedDAO.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: FeedDAO.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/FeedDAO.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -b -r1.11 -r1.12
  --- FeedDAO.java	17 Aug 2007 13:00:26 -0000	1.11
  +++ FeedDAO.java	25 Aug 2007 17:59:20 -0000	1.12
  @@ -41,7 +41,7 @@
       public List<FeedEntry> findLastFeedEntries(Long feedId, int maxResults) {
           restrictedEntityManager.joinTransaction();
           return (List<FeedEntry>) restrictedEntityManager
  -                .createQuery("select fe from Feed f join f.feedEntries fe where f.id = :feedId order by f.publishedDate desc")
  +                .createQuery("select fe from Feed f join f.feedEntries fe where f.id = :feedId order by fe.publishedDate desc")
                   .setParameter("feedId", feedId)
                   .setHint("org.hibernate.cacheable", true)
                   .setMaxResults(maxResults)
  
  
  
  1.19      +65 -1     jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/NodeDAO.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: NodeDAO.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/NodeDAO.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -b -r1.18 -r1.19
  --- NodeDAO.java	17 Aug 2007 13:00:26 -0000	1.18
  +++ NodeDAO.java	25 Aug 2007 17:59:20 -0000	1.19
  @@ -14,6 +14,7 @@
   import org.jboss.seam.wiki.core.nestedset.NestedSetNode;
   import org.jboss.seam.wiki.core.nestedset.NestedSetNodeWrapper;
   import org.jboss.seam.wiki.core.nestedset.NestedSetResultTransformer;
  +import org.jboss.seam.wiki.core.nestedset.NestedSetNodeDuplicator;
   import org.jboss.seam.Component;
   import org.hibernate.Session;
   import org.hibernate.Criteria;
  @@ -201,6 +202,14 @@
                               .list();
       }
       
  +    public Long findNumberOfHistoricalNodes(Node node) {
  +        if (node == null) return null;
  +        return (Long)getSession().createQuery("select count(n) from HistoricalNode n where n.nodeId = :nodeId")
  +                                  .setParameter("nodeId", node.getId())
  +                                  .uniqueResult();
  +
  +    }
  +    
       // Multi-row constraint validation
       public boolean isUniqueWikiname(Node node) {
           Node foundNode = findNodeInArea(node.getParent().getAreaNumber(), node.getWikiname(), entityManager);
  @@ -314,21 +323,76 @@
           NestedSetNodeWrapper<Node> startNodeWrapper = new NestedSetNodeWrapper<Node>(startNode, comp);
           NestedSetResultTransformer<Node> transformer = new NestedSetResultTransformer<Node>(startNodeWrapper, flattenToLevel);
   
  +        // Make hollow copies for menu display so that changes to the model in the persistence context don't appear
  +        transformer.setNestedSetNodeDuplicator(
  +            new NestedSetNodeDuplicator<Node>() {
  +                public Node duplicate(Node nestedSetNode) {
  +                    Node copy = null;
  +                    if (nestedSetNode instanceof Document) {
  +                        copy = new Document((Document)nestedSetNode);
  +                    } else if (nestedSetNode instanceof Directory) {
  +                        copy = new Directory((Directory)nestedSetNode);
  +                    } else if (nestedSetNode instanceof File) {
  +                        copy = new File((File)nestedSetNode);
  +                    }
  +                    if (copy != null) {
  +                        copy.setId(nestedSetNode.getId());
  +                        copy.setParent(nestedSetNode.getParent());
  +                    }
  +                    return copy;
  +                }
  +            }
  +        );
  +
           appendNestedSetNodes(transformer, maxDepth, showAdminOnly, "n1.menuItem = true");
           return startNodeWrapper;
       }
   
  +    // TODO: Not used
  +    public NestedSetNodeWrapper<Node> findWithCommentCountOrderedByCreatedOn(Node startNode, Long maxDepth, Long flattenToLevel) {
  +        // Needs to be equals() safe (SortedSet):
  +        // - compare by creation date (note: don't compare data/timestamp), if equal
  +        // - compare by name, if equal
  +        // - compare by id
  +        Comparator<NestedSetNodeWrapper<Node>> comp =
  +            new Comparator<NestedSetNodeWrapper<Node>>() {
  +                public int compare(NestedSetNodeWrapper<Node> o1, NestedSetNodeWrapper<Node> o2) {
  +                    Node node1 = o1.getWrappedNode();
  +                    Node node2 = o2.getWrappedNode();
  +                    if (node1.getCreatedOn().getTime() != node2.getCreatedOn().getTime()) {
  +                        return node1.getCreatedOn().getTime() > node2.getCreatedOn().getTime() ? -1 : 1;
  +                    } else if (node1.getName().compareTo(node2.getName()) != 0) {
  +                        return node1.getName().compareTo(node2.getName());
  +                    }
  +                    return node1.getId().compareTo(node2.getId());
  +                }
  +            };
  +
  +        Map<String, String> additionalProjections = new LinkedHashMap<String, String>();
  +        additionalProjections.put("commentCount", "(select count(c) from Comment c where c.document.id = n1.id)");
  +
  +        NestedSetNodeWrapper<Node> startNodeWrapper = new NestedSetNodeWrapper<Node>(startNode, comp);
  +        NestedSetResultTransformer<Node> transformer =
  +                new NestedSetResultTransformer<Node>(startNodeWrapper, flattenToLevel, additionalProjections);
  +
  +        appendNestedSetNodes(transformer, maxDepth, false);
  +        return startNodeWrapper;
  +    }
  +
       public <N extends NestedSetNode> void appendNestedSetNodes(NestedSetResultTransformer<N> transformer,
                                                                  Long maxDepth,
                                                                  boolean showAdminOnly,
                                                                  String... restrictionFragment) {
   
           N startNode = transformer.getRootWrapper().getWrappedNode();
  -        StringBuffer queryString = new StringBuffer();
  +        StringBuilder queryString = new StringBuilder();
   
           queryString.append("select").append(" ");
           queryString.append("count(n1.id) as nestedSetNodeLevel").append(", ");
           queryString.append("n1 as nestedSetNode").append(" ");
  +        for (Map.Entry<String, String> entry : transformer.getAdditionalProjections().entrySet()) {
  +            queryString.append(", ").append(entry.getValue()).append(" as ").append(entry.getKey()).append(" ");
  +        }
           queryString.append("from ").append(startNode.getTreeSuperclassEntityName()).append(" n1, ");
           queryString.append(startNode.getTreeSuperclassEntityName()).append(" n2 ");
           queryString.append("where n1.nsThread = :thread and n2.nsThread = :thread").append(" ");
  
  
  



More information about the jboss-cvs-commits mailing list