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

Christian Bauer christian at hibernate.org
Sat Sep 15 13:06:17 EDT 2007


  User: cbauer  
  Date: 07/09/15 13:06:17

  Modified:    examples/wiki/src/main/org/jboss/seam/wiki/core/dao   
                        WikiNodeFactory.java NodeDAO.java
  Added:       examples/wiki/src/main/org/jboss/seam/wiki/core/dao   
                        WikiTreeNodeAdapter.java
  Log:
  Various updates (tests still broken)
  
  Revision  Changes    Path
  1.10      +4 -4      jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeFactory.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: WikiNodeFactory.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeFactory.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -b -r1.9 -r1.10
  --- WikiNodeFactory.java	17 Aug 2007 13:00:26 -0000	1.9
  +++ WikiNodeFactory.java	15 Sep 2007 17:06:17 -0000	1.10
  @@ -32,7 +32,7 @@
       @In
       protected EntityManager restrictedEntityManager;
   
  -    @Factory(value = "wikiRoot", scope = ScopeType.CONVERSATION, autoCreate = true)
  +    @Factory(value = "wikiRoot", scope = ScopeType.PAGE, autoCreate = true)
       public Directory loadWikiRoot() {
           entityManager.joinTransaction();
           try {
  @@ -45,7 +45,7 @@
           }
       }
   
  -    @Factory(value = "wikiStart", scope = ScopeType.CONVERSATION, autoCreate = true)
  +    @Factory(value = "wikiStart", scope = ScopeType.PAGE, autoCreate = true)
       public Document loadWikiStart() {
           restrictedEntityManager.joinTransaction();
           WikiPreferences wikiPreferences = (WikiPreferences) Component.getInstance("wikiPreferences");
  @@ -64,7 +64,7 @@
       }
   
       // Loads the same instance into a different persistence context
  -    @Factory(value = "restrictedWikiRoot", scope = ScopeType.CONVERSATION, autoCreate = true)
  +    @Factory(value = "restrictedWikiRoot", scope = ScopeType.PAGE, autoCreate = true)
       public Directory loadWikiRootRestricted() {
           Directory wikiroot = (Directory) Component.getInstance("wikiRoot");
   
  @@ -80,7 +80,7 @@
           }
       }
   
  -    @Factory(value = "memberArea", scope = ScopeType.CONVERSATION, autoCreate = true)
  +    @Factory(value = "memberArea", scope = ScopeType.PAGE, autoCreate = true)
       public Directory loadMemberArea() {
           Long memberAreaId = ((WikiPreferences)Component.getInstance("wikiPreferences")).getMemberAreaId();
           entityManager.joinTransaction();
  
  
  
  1.27      +21 -21    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.26
  retrieving revision 1.27
  diff -u -b -r1.26 -r1.27
  --- NodeDAO.java	6 Sep 2007 15:54:28 -0000	1.26
  +++ NodeDAO.java	15 Sep 2007 17:06:17 -0000	1.27
  @@ -12,7 +12,6 @@
   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.wiki.preferences.PreferenceProvider;
   import org.jboss.seam.Component;
   import org.jboss.seam.log.Log;
   import org.hibernate.Session;
  @@ -20,7 +19,6 @@
   import javax.persistence.EntityManager;
   import javax.persistence.EntityNotFoundException;
   import javax.persistence.NoResultException;
  -import javax.persistence.Query;
   import java.util.*;
   
   /**
  @@ -318,25 +316,7 @@
   
       public NestedSetNodeWrapper<Node> findMenuItems(Node startNode, Long maxDepth, Long flattenToLevel, boolean showAdminOnly) {
   
  -        // Needs to be equals() safe (SortedSet):
  -        // - compare by display position, 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.getDisplayPosition().compareTo(node2.getDisplayPosition()) != 0) {
  -                        return node1.getDisplayPosition().compareTo(node2.getDisplayPosition());
  -                    } else if (node1.getName().compareTo(node2.getName()) != 0) {
  -                        return node1.getName().compareTo(node2.getName());
  -                    }
  -                    return node1.getId().compareTo(node2.getId());
  -                }
  -            };
  -
  -        NestedSetNodeWrapper<Node> startNodeWrapper = new NestedSetNodeWrapper<Node>(startNode, comp);
  +        NestedSetNodeWrapper<Node> startNodeWrapper = new NestedSetNodeWrapper<Node>(startNode, getComparatorDisplayPosition());
           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
  @@ -425,4 +405,24 @@
               return ((Session)((org.jboss.seam.persistence.EntityManagerProxy) entityManager).getDelegate());
           }
       }
  +
  +    public Comparator<NestedSetNodeWrapper<Node>> getComparatorDisplayPosition() {
  +        // Needs to be equals() safe (SortedSet):
  +        // - compare by display position, if equal
  +        // - compare by name, if equal
  +        // - compare by id
  +        return
  +            new Comparator<NestedSetNodeWrapper<Node>>() {
  +                public int compare(NestedSetNodeWrapper<Node> o1, NestedSetNodeWrapper<Node> o2) {
  +                    Node node1 = o1.getWrappedNode();
  +                    Node node2 = o2.getWrappedNode();
  +                    if (node1.getDisplayPosition().compareTo(node2.getDisplayPosition()) != 0) {
  +                        return node1.getDisplayPosition().compareTo(node2.getDisplayPosition());
  +                    } else if (node1.getName().compareTo(node2.getName()) != 0) {
  +                        return node1.getName().compareTo(node2.getName());
  +                    }
  +                    return node1.getId().compareTo(node2.getId());
  +                }
  +            };
  +    }
   }
  
  
  
  1.1      date: 2007/09/15 17:06:17;  author: cbauer;  state: Exp;jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiTreeNodeAdapter.java
  
  Index: WikiTreeNodeAdapter.java
  ===================================================================
  package org.jboss.seam.wiki.core.dao;
  
  import org.richfaces.model.TreeNode;
  import org.jboss.seam.wiki.core.model.Node;
  import org.jboss.seam.wiki.core.nestedset.NestedSetNodeWrapper;
  import org.jboss.seam.wiki.core.nestedset.NestedSetResultTransformer;
  import org.jboss.seam.wiki.util.WikiUtil;
  import org.jboss.seam.Component;
  
  import java.util.*;
  
  public class WikiTreeNodeAdapter extends NestedSetNodeWrapper<Node>
          implements org.richfaces.model.TreeNode {
  
      private Long prefetchDepth;
  
      public WikiTreeNodeAdapter(Node wrappedNode, Comparator<NestedSetNodeWrapper<Node>> comparator, Long prefetchDepth) {
          super(wrappedNode, comparator);
          this.prefetchDepth = prefetchDepth;
      }
  
      private WikiTreeNodeAdapter(Node wrappedNode,
                                  Comparator<NestedSetNodeWrapper<Node>> comparator,
                                  Long level,
                                  Map<String, Object> additionalProjections,
                                  Long prefetchDepth) {
          super(wrappedNode, comparator, level, additionalProjections);
          this.prefetchDepth = prefetchDepth;
      }
  
      public Object getData() {
          return this;
      }
  
      public boolean isLeaf() {
          //return !WikiUtil.isDirectory(this.getWrappedNode());
          if (!childrenLoaded && getWrappedNode().getTotalChildCount() != 0) {
              System.out.println("###### LOADING CHILDREN OF: " + this);
              loadChildren();
              childrenLoaded = true;
          }
          if (childrenLoaded) {
              System.out.println("###### CHILDREN ARE LOADED OF: " + this);
              return getWrappedChildren().size() == 0;
          }
          System.out.println("###### HUH?: " + this);
          return true;
      }
  
      public Iterator getChildren() {
  
          //if (!childrenLoaded) loadChildren();
  
          // Super ugly API, need to return Map.Entry
          return new Iterator() {
              final List wrappedList = new ArrayList(getWrappedChildrenSorted());
              Iterator wrappedIterator = new ArrayList(getWrappedChildrenSorted()).iterator();
              public boolean hasNext() {
                  return wrappedIterator.hasNext();
              }
              public Object next() {
                  final WikiTreeNodeAdapter next = (WikiTreeNodeAdapter)wrappedIterator.next();
                  return new Map.Entry() {
                      public Object getKey() { return wrappedList.indexOf(next); }
                      public Object getValue() { return next; }
                      public Object setValue(Object o) { throw new UnsupportedOperationException(); }
                  };
              }
              public void remove() { throw new UnsupportedOperationException(); }
          };
      }
  
      public TreeNode getChild(Object identifier) {
          return (WikiTreeNodeAdapter)new ArrayList(getWrappedChildrenSorted()).get( (Integer)identifier );
      }
  
      public TreeNode getParent() {
          return (WikiTreeNodeAdapter)getWrappedParent();
      }
  
      public void setData(Object o) {
          throw new UnsupportedOperationException("Tree is immutable!");
      }
  
      public void addChild(Object o, TreeNode treeNode) {
          throw new UnsupportedOperationException("Tree is immutable!");
      }
  
      public void removeChild(Object o) {
          throw new UnsupportedOperationException("Tree is immutable!");
      }
  
      public void setParent(TreeNode treeNode) {
          throw new UnsupportedOperationException("Tree is immutable!");
      }
  
      public void loadChildren() {
  
          // Override creation of adapters when the tree is transformed
          NestedSetResultTransformer<Node> transformer =
              new NestedSetResultTransformer<Node>(this) {
                  public NestedSetNodeWrapper<Node> createNestedSetNodeWrapper(Node nestedSetNode,
                                                                               Comparator<NestedSetNodeWrapper<Node>> comparator,
                                                                               Long nestedSetNodeLevel,
                                                                               Map<String, Object> additionalProjectionValues) {
                      return new WikiTreeNodeAdapter(nestedSetNode, comparator, nestedSetNodeLevel, additionalProjectionValues, prefetchDepth);
                  }
  
                  public void flattenTree(List<NestedSetNodeWrapper<Node>> flatChildren, long i, NestedSetNodeWrapper<Node> nestedSetNodeWrapper) {
                      throw new UnsupportedOperationException("Can't flatten an adapted nested set tree for RichFaces display");
                  }
              };
  
          NodeDAO nodeDAO = (NodeDAO) Component.getInstance("nodeDAO");
  
          nodeDAO.appendNestedSetNodes(transformer, prefetchDepth, false, "n1.class = 'DIRECTORY'");
      }
  
  }
  
  
  



More information about the jboss-cvs-commits mailing list