[jboss-cvs] jboss-seam/src/main/org/jboss/seam/util ...

Gavin King gavin.king at jboss.com
Wed May 30 17:53:10 EDT 2007


  User: gavin   
  Date: 07/05/30 17:53:10

  Modified:    src/main/org/jboss/seam/util   Sorter.java
  Removed:     src/main/org/jboss/seam/util   SorterNew.java
  Log:
  remove dupe class
  
  Revision  Changes    Path
  1.2       +74 -71    jboss-seam/src/main/org/jboss/seam/util/Sorter.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Sorter.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/util/Sorter.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -b -r1.1 -r1.2
  --- Sorter.java	21 Aug 2005 19:29:38 -0000	1.1
  +++ Sorter.java	30 May 2007 21:53:10 -0000	1.2
  @@ -1,71 +1,74 @@
  -//$Id: Sorter.java,v 1.1 2005/08/21 19:29:38 gavin Exp $
   package org.jboss.seam.util;
   
   import java.util.ArrayList;
   import java.util.List;
   
  -/**
  - * Uses a brute force O(n^4) algorithm to discover an acceptable
  - * order for partially ordered elements where the transitivity
  - * of the ordering is not known in advance. Of course, this
  - * should only be used to order small numbers of elements.
  - * 
  - * @author Gavin King
  - */
  -public abstract class Sorter<T>
  +public class Sorter<T> 
   {
  -   public void sort(List<T> originalList)
  +   
  +	private List<SortItem<T>> list = null; //new ArrayList();
  +
  +	public List<SortItem<T>> sort(List<SortItem<T>> lst)
      {
  -      List<T> remaining = new ArrayList(originalList);
  -      originalList.clear();
  -      sortInto(originalList, remaining);
         
  -      if ( !isGoodOrder(originalList) )
  +      this.list = lst;
  +		List<SortItem<T>> res = new ArrayList<SortItem<T>>();
  +		SortItem<T> inmost = null;
  +		
  +      do 
  +      {	
  +			inmost = getInmost();
  +			if (inmost!=null)
         {
  -         throw new IllegalStateException();
  +				res.add(inmost);
  +				remove(inmost);
         }
      }
  +      while ( !list.isEmpty() && inmost!=null );
      
  -   private boolean sortInto(List<T> result, List<T> remaining)
  +      if ( !list.isEmpty() )
      {
  -      if (remaining.size()==0)
  -      {
  -         return true;
  +			throw new IllegalArgumentException("Can not sort list:"+list);
         }
  -      else 
  -      {
  -         int loc = result.size();
  -         result.add(null);
  -         for (int i=0; i<remaining.size(); i++)
  -         {
  -            List<T> nowRemaining = new ArrayList<T>(remaining);
  -            T interceptor = nowRemaining.remove(i);
  -            result.set(loc, interceptor);
  -            if ( isGoodOrder(result) )
  +		
  +      return res;		
  +	}
  +   
  +	private void remove(SortItem<T> item)
               {
  -               if ( sortInto(result, nowRemaining) )
  +		list.remove(item);
  +		for (SortItem<T> o: list)
                  {
  -                  return true;
  +			o.getWithin().remove(item);
                  }
               }
  +   
  +	private SortItem<T> getInmost() 
  +   {
  +		SortItem<T> res=null;
  +		for (SortItem<T> o: list)
  +      {
  +			if ( o.getWithin().isEmpty() && nobodyWantsAround(o) )
  +         {
  +				res = o;
  +				break;
            }
  -         result.remove(loc);
  -         return false;
         }
  +		return res;
      }
      
  -   private boolean isGoodOrder(List<T> list)
  +	private boolean nobodyWantsAround(SortItem<T> item)
      {
  -      for (int i = 0; i < list.size(); i++)
  +		boolean res = true;
  +		for (SortItem<T> o: list)
         {
  -         for (int j=0; j<i; j++)
  +			if ( o.getAround().contains(item) )
            {
  -            if ( isOrderViolated( list.get(j), list.get(i) ) ) return false;
  +				res = false;
  +				break;
            }
         }
  -      return true;
  +		return res;
      }
   
  -   protected abstract boolean isOrderViolated(T outside, T inside);
  -   
   }
  
  
  



More information about the jboss-cvs-commits mailing list