You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2009/10/30 06:52:01 UTC

svn commit: r831206 - /portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java

Author: taylor
Date: Fri Oct 30 05:52:00 2009
New Revision: 831206

URL: http://svn.apache.org/viewvc?rev=831206&view=rev
Log:
https://issues.apache.org/jira/browse/JS2-1057
wrote a crude portlet placement algorithm, figures out best column to place a Added Portlet. Candidate for jetspeed-page-layout component api

Modified:
    portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java

Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java?rev=831206&r1=831205&r2=831206&view=diff
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java (original)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/toolbox/JetspeedToolbox.java Fri Oct 30 05:52:00 2009
@@ -222,13 +222,15 @@
         String portletAdd = actionRequest.getParameter("portletAdd");
         if (portletAdd != null)
         {
+            // BOZO: this should be done via AJAX API
             Page page = requestContext.getPage();            
             Fragment fragment = pageManager.newFragment();
             fragment.setType( Fragment.PORTLET );
             fragment.setName(portletAdd);            
-            page.getRootFragment().getFragments().add(fragment);
             try
             {
+                // TODO: move this operation into Randy's new jetspeed-page-layout component
+                addPortletToLeastUsedColumn(page.getRootFragment().getFragments(), fragment, page.getRootFragment().getName()); 
                 pageManager.updatePage(page);
             }
             catch (PageNotUpdatedException e)
@@ -553,4 +555,62 @@
         
     }   
 
+    // BOZO: this only works with flat collections of 1,2,3,4 column layouts. Not meant to work with nested layouts
+    // TODO: move code to an AJAX API
+    protected void addPortletToLeastUsedColumn(List untypedList, Fragment portlet, String layoutType)
+    {
+        List<Fragment> fragments = (List<Fragment>)untypedList;
+        int columnCounts[] = new int[getLayoutSize(layoutType)];
+        for (Fragment fragment : fragments)
+        {
+            int column = fragment.getLayoutColumn();
+            int row = fragment.getLayoutRow();
+            if (column == -1)
+                column = min(columnCounts);
+            if (row == -1)
+                row = columnCounts[column];            
+            if (column > fragments.size() -1)
+            {
+                fragment.setLayoutColumn(0);
+                column = 0;
+            }
+            columnCounts[column]++;
+        }
+        int placedColumn = 0;
+        for (int ix = 1; ix < columnCounts.length; ix++)
+        {
+            if (columnCounts[ix] < columnCounts[placedColumn])
+                placedColumn = ix;
+            
+        }
+        System.out.println("adding portlet at row = " + columnCounts[placedColumn] + ", col = " + placedColumn);
+        portlet.setLayoutColumn(placedColumn);
+        portlet.setLayoutRow(columnCounts[placedColumn] );
+        fragments.add(portlet);
+    }
+    
+    public static int min(int[] numbers)
+    {
+        int minValue = numbers[0];
+        for (int i = 1; i < numbers.length; i++)
+        {
+            if (numbers[i] < minValue)
+            {
+                minValue = numbers[i];
+            }
+        }
+        return minValue;
+    }
+    
+    public static int getLayoutSize(String layoutType)
+    {
+        if (layoutType.indexOf("TwoColumns") > -1)
+            return 2;
+        if (layoutType.indexOf("ThreeColumns") > -1)
+            return 3;
+        if (layoutType.indexOf("FourColumns") > -1)
+            return 4;
+        else
+            return 1;
+    }
 }
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org