Author: taylor
Date: Mon Nov  2 01:18:02 2009
New Revision: 831787

URL: http://svn.apache.org/viewvc?rev=831787&view=rev
Log:
https://issues.apache.org/jira/browse/JS2-1057
implementation of persistence of Move Absolute clientside logic in /ui 
pipeline. Webpage, grid, non-nested PSML absolute move operations (only)
Refactored ColumnLayout to Java 5 to better communicate collection types

Modified:
    
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/jetui/yui/jetui-portlet.jsp
    
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/jetui/yui/jetui.jsp
    
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/jetui/engine/portal.js
    
portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/portlets/layout/ColumnLayout.java

Modified: 
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/jetui/yui/jetui-portlet.jsp
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/jetui/yui/jetui-portlet.jsp?rev=831787&r1=831786&r2=831787&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/jetui/yui/jetui-portlet.jsp
 (original)
+++ 
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/jetui/yui/jetui-portlet.jsp
 Mon Nov  2 01:18:02 2009
@@ -24,6 +24,7 @@
 <%@ page import="org.apache.jetspeed.om.page.Page" %>
 <%@ page import="org.apache.jetspeed.om.page.ContentFragment" %>
 <%@ page import="org.apache.jetspeed.portlets.layout.ColumnLayout" %>
+<%@ page import="org.apache.jetspeed.portlets.layout.LayoutCoordinate" %>
 <%@ page import="org.apache.jetspeed.om.page.ContentFragment" %>
 <%@ page import="org.apache.jetspeed.decoration.DecoratorAction" %>
 <%@ page import="org.apache.jetspeed.PortalReservedParameters" %>
@@ -31,11 +32,12 @@
        String content = (String)request.getAttribute("content");
        String pageDec = (String)request.getAttribute("pageDec");
        ContentFragment fragment = 
(ContentFragment)request.getAttribute("fragment");
+       LayoutCoordinate coordinate = 
(LayoutCoordinate)request.getAttribute("coordinate");
        String title = "";
        if (fragment.getPortletContent() != null)
            title = fragment.getPortletContent().getTitle();
 %>
-       <div class="portal-layout-cell" id="<%=fragment.getId()%>" 
name="<%=fragment.getName()%>">
+       <div class="portal-layout-cell" id="<%=fragment.getId()%>" 
name="<%=fragment.getName()%>" column="<%=coordinate.getX()%>" 
row="<%=coordinate.getY()%>">
                <div class="portlet <%=pageDec%>">
                    <div class="PTitle" >
                  <div class="PTitleContent"><%=title%></div>               

Modified: 
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/jetui/yui/jetui.jsp
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/jetui/yui/jetui.jsp?rev=831787&r1=831786&r2=831787&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/jetui/yui/jetui.jsp
 (original)
+++ 
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/jetui/yui/jetui.jsp
 Mon Nov  2 01:18:02 2009
@@ -23,6 +23,7 @@
 <%@ page import="org.apache.jetspeed.request.RequestContext" %>
 <%@ page import="org.apache.jetspeed.om.page.Page" %>
 <%@ page import="org.apache.jetspeed.om.page.ContentFragment" %>
+<%@ page import="org.apache.jetspeed.om.page.Fragment" %>
 <%@ page import="org.apache.jetspeed.portlets.layout.ColumnLayout" %>
 <%@ page import="org.apache.jetspeed.om.page.ContentFragment" %>
 <%@ page import="org.apache.jetspeed.decoration.DecoratorAction" %>
@@ -115,28 +116,28 @@
        else
        {
                int index = 0;
-               for (Object collections : columnLayout.getColumns())
+               for (Collection<Fragment> collections : 
columnLayout.getColumns())
                {
                    String columnFloat = columnLayout.getColumnFloat(index);
                    String columnWidth = columnLayout.getColumnWidth(index);
                // class="portal-layout-column 
portal-layout-column-${layoutType}-${columnIndex}"               
 %>
 <div id="column_id_<%=index%>" 
-     class="portal-layout-column"
+     class="portal-layout-column" column='<%=index%>'
      style="float:<%=columnFloat%>; min-height: 100px; width:<%=columnWidth%>; 
background-color: #ffffff;">
 
 <%         
                        int subindex = 0;
-                   Collection<ContentFragment> columns = 
(Collection<ContentFragment>)collections;
-                   for (ContentFragment fragment : columns)
+                   for (Fragment fragment : collections)
                    {
                        if 
(!(fragment.getName().equals("j2-admin::JetspeedToolbox") || 
fragment.getName().equals("j2-admin::JetspeedNavigator")))
                        {
                                //String content = 
jetui.renderPortletWindow(fragment.getId(), fragment.getName(), rc);
-                               String content = 
jetui.getRenderedContent(fragment, rc);
+                               String content = 
jetui.getRenderedContent((ContentFragment)fragment, rc);
                                request.setAttribute("content", content);
                                request.setAttribute("pageDec", pageDec);
-                               request.setAttribute("fragment", fragment);     
                        
+                               request.setAttribute("fragment", fragment);     
         
+                               request.setAttribute("coordinate", 
columnLayout.getCoordinate(fragment));
 %>
 <jsp:include page="jetui-portlet.jsp"/>
 <%             

Modified: 
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/jetui/engine/portal.js
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/jetui/engine/portal.js?rev=831787&r1=831786&r2=831787&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/jetui/engine/portal.js
 (original)
+++ 
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/jetui/engine/portal.js
 Mon Nov  2 01:18:02 2009
@@ -1,5 +1,5 @@
 //Use loader to grab the modules needed
-YUI(yuiConfig).use('console', 'dd', 'anim', 'io', 'cookie', 'json', 
'node-base', function(Y) {
+YUI(yuiConfig).use('console', 'dd', 'anim', 'io', 'datatype-xml', 
'dataschema-xml', 'node-base', function(Y) {
        //new Y.Console().render(); 
     //Make this an Event Target so we can bubble to it
     var Portal = function() {
@@ -31,12 +31,15 @@
        "name" : { value: "undefined" }, 
         "id" : { value: "0" },
         "toolbar" : { value : false },
-        "detached" : { value : false }
+        "detached" : { value : false },
+        "column" : { value : 0 },
+        "row" : { value : 0 }
     };
        Portlet.prototype.info = function() {
                Y.log("name: " + this.get("name"));
                Y.log("id  : " + this.get("id"));               
                Y.log("toolbar  : " + this.get("toolbar"));             
+               Y.log("col, row  : " + this.get("column") + "," + 
this.get("row"));             
                Y.log("---------");
     };
 
@@ -55,12 +58,15 @@
     Layout.ATTRS = {
        "name" : { value: "undefined" }, 
         "id" : { value: "0" },
-        "nested" : { value : false }
+        "nested" : { value : false },
+        "column" : { value : 0 },
+        "row" : { value : 0 }
     };
        Layout.prototype.info = function() {
                Y.log("name: " + this.get("name"));
                Y.log("id  : " + this.get("id"));               
                Y.log("nested  : " + this.get("nested"));               
+               Y.log("col, row  : " + this.get("column") + "," + 
this.get("row"));             
                Y.log("---------");
     };
     
@@ -175,8 +181,9 @@
         portlet.set("id", v.getAttribute("id"));
         portlet.set("toolbar", false);
         portlet.set("detached", false);
+        portlet.set("column", v.getAttribute("column"));
+        portlet.set("row", v.getAttribute("row"));
         v.data = portlet;
-        //portlet.info();        
         var ddNav = new Y.DD.Drag({
             node: v,
             groups: ['portlets'],
@@ -189,6 +196,7 @@
             node: v,
             groups: ['portlets', 'toolbars']            
         });        
+       //portlet.info();
     });
     
     var dropLayouts = Y.Node.all('.portal-layout-column');
@@ -197,6 +205,8 @@
         layout.set("name", v.getAttribute("name"));
         layout.set("id", v.getAttribute("id"));
         layout.set("nested", false);
+        layout.set("column", v.getAttribute("column"));        
+        layout.set("row", 0);
         v.data = layout;
         //layout.info();
         if (v.get('children').size() == 0)
@@ -208,11 +218,10 @@
         }
     });
 
-    var onComplete = function(id, o, args) { 
+    var onRemoveComplete = function(id, o, args) { 
        var id = id; // Transaction ID. 
        var data = o.responseText; // Response data. 
        var widgetId = args[0];
-       Y.log("widget removed = " + widgetId);
        // now remove it from the dom
        var widget = Y.one("#" + widgetId);
        if (widget)
@@ -230,20 +239,19 @@
        }
     };     
     
-    var onClickWindow = function(e) {
+    var onClickRemove = function(e) {
        var uri = document.location.href;
        uri = uri.replace("/ui", "/ajaxapi");
        var windowId =  e.currentTarget.getAttribute('id');
        windowId = windowId.replace("jetspeed-close-", "");
        var uri = uri + "?action=remove&id=" + windowId;
-       Y.log("delete uri = " + uri);           
-        Y.on('io:complete', onComplete, this, [windowId]); 
+        Y.on('io:complete', onRemoveComplete, this, [windowId]); 
         var request = Y.io(uri); 
     };
-    
+
     var closeWindows = Y.Node.all('.portlet-action-close');    
     closeWindows.each(function(v, k) {
-        v.on('click', onClickWindow);
+        v.on('click', onClickRemove);
     });
         
     Portal.prototype.toggleToolbar = function(toolbar, toggler, compareStyle) {
@@ -261,11 +269,10 @@
         }              
         toolbar.fx.set('reverse', !toolbar.fx.get('reverse')); // toggle 
reverse 
         toolbar.fx.run();
-       };
-           
+       };         
     
        Y.DD.DDM.on('drag:drophit', function(e) {
-        var drop = e.drop.get('node'),
+               var drop = e.drop.get('node'),
             drag = e.drag.get('node');
         if (drag.data.get("toolbar"))
         {              
@@ -294,6 +301,9 @@
                                }                                       
             }
         }
+        else
+        {
+        }
     });
        
     Portal.prototype.moveToLayout = function(e)
@@ -379,6 +389,17 @@
         }        
     };    
 
+    var onMoveComplete = function(id, o, args) { 
+       var id = id; // Transaction ID. 
+       var data = o.responseText; // Response data.
+       Y.log("move result = " + data);
+       var dataIn = Y.DataType.XML.parse(data),
+               schema = {  resultListLocator: "status", resultFields: 
[{key:"status"}] },
+               dataOut = Y.DataSchema.XML.apply(schema, dataIn);
+               Y.log("data = " + dataOut)                
+       var widgetId = args[0];
+    };     
+    
     Y.DD.DDM.on('drag:end', function(e) {
         var drag = e.target;
         if (drag.target) {
@@ -399,8 +420,44 @@
         //drag.get('node').setStyle('border', '');                
         drag.get('node').removeClass('moving');
         drag.get('dragNode').set('innerHTML', '');
+
+        persistMove(drag.get('node'));
     });
     
+    var persistMove = function(drag) {
+        if (drag.data.get("toolbar") == false) {
+               var uri = document.location.href;
+               uri = uri.replace("/ui", "/ajaxapi");
+               var windowId =  drag.getAttribute('id');
+               var oldColumn = drag.data.get('column');
+               var oldRow = drag.data.get('row');              
+               var dragParent = drag.get('parentNode');
+               var parentColumn = dragParent.data.get('column');
+               if (parentColumn != oldColumn)
+               {
+                       reallocateColumn(oldColumn); // moved from different 
column
+                       drag.data.set('column', parentColumn);
+               }
+               reallocateColumn(parentColumn);
+               var uri = uri + "?action=moveabs&id=" + windowId + "&col=" + 
drag.data.get('column') + "&row=" + drag.data.get('row');
+            Y.on('io:complete', onMoveComplete, this, [windowId]); 
+            var request = Y.io(uri);                   
+        }      
+    };
+       var reallocateColumn = function(column) {
+           var columns = Y.Node.all('.portal-layout-column');
+           columns.each(function(v, k) {
+               if (v.data.get('column') == column)
+               {
+                       var row = 0;
+                       v.get('children').each(function(v,k) {
+                               v.data.set('row', row);
+                               row++;
+                       }, row);
+               }
+           });
+       };    
+    
     Y.DD.DDM.on('drag:start', function(e) {
         var drag = e.target;
 //        if (drag.target) {

Modified: 
portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/portlets/layout/ColumnLayout.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/portlets/layout/ColumnLayout.java?rev=831787&r1=831786&r2=831787&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/portlets/layout/ColumnLayout.java
 (original)
+++ 
portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/portlets/layout/ColumnLayout.java
 Mon Nov  2 01:18:02 2009
@@ -69,6 +69,8 @@
  */
 public class ColumnLayout implements Serializable
 {
+    private static final long serialVersionUID = 1L;
+
     /** Percentage widths gutter width */
     private final static double PERCENTAGE_WIDTH_GUTTER = 0.01;
 
@@ -80,7 +82,7 @@
     private final int numberOfColumns;
     
     /** SortedMap of Columns (which are also sorted maps */
-    private final SortedMap columns;
+    private final SortedMap<Integer, SortedMap<Integer, Fragment>> columns;
     
     /** Width settings for eacah column */
     private final String[] columnWidths;
@@ -89,10 +91,10 @@
     private final int[] nextRowNumber;
     
     /** maps Fragments (key) to it's current LayoutCoordinate (value) in this 
layout */
-    private final Map coordinates;
+    private final Map<Fragment, LayoutCoordinate> coordinates;
     
     /** All of the LayoutEventListeners registered to this layout */
-    private final List eventListeners;
+    private final List<LayoutEventListener> eventListeners;
 
     /**
      * 
@@ -113,14 +115,14 @@
     {
         this.numberOfColumns = numberOfColumns;
         this.columnWidths = columnWidths;
-        eventListeners = new ArrayList();
+        eventListeners = new ArrayList<LayoutEventListener>();
 
-        columns = new TreeMap();
-        coordinates = new HashMap();
+        columns = new TreeMap<Integer, SortedMap<Integer, Fragment>>();
+        coordinates = new HashMap<Fragment, LayoutCoordinate>();
 
         for (int i = 0; i < numberOfColumns; i++)
         {
-            columns.put(new Integer(i), new TreeMap());
+            columns.put(new Integer(i), new TreeMap<Integer, Fragment>());
         }
 
         nextRowNumber = new int[numberOfColumns];
@@ -152,10 +154,10 @@
      *            are used.
      * @throws LayoutEventException
      */
-    public ColumnLayout(int numberOfColumns, String layoutType, Collection 
fragments, String[] columnWidths) throws LayoutEventException
+    public ColumnLayout(int numberOfColumns, String layoutType, 
Collection<Fragment> fragments, String[] columnWidths) throws 
LayoutEventException
     {
         this(numberOfColumns, layoutType, columnWidths);
-        Iterator fragmentsItr = fragments.iterator();
+        Iterator<Fragment> fragmentsItr = fragments.iterator();
         try
         {
             while (fragmentsItr.hasNext())
@@ -238,7 +240,7 @@
      * @throws InvalidLayoutLocationException
      *             if the column is outisde of the constraints of this layout
      */
-    public Collection getColumn(int columnNumber) throws 
InvalidLayoutLocationException
+    public Collection<Fragment> getColumn(int columnNumber) throws 
InvalidLayoutLocationException
     {
         return 
Collections.unmodifiableCollection(getColumnMap(columnNumber).values());
     }
@@ -312,15 +314,13 @@
      *         Collection objects) in order within this layout. All Collections
      *         are immutable.
      */
-    public Collection getColumns()
+    public Collection<Collection<Fragment>> getColumns()
     {
-        ArrayList columnList = new ArrayList(getNumberOfColumns());
-        Iterator itr = columns.values().iterator();
-        while (itr.hasNext())
+        ArrayList<Collection<Fragment>> columnList = new 
ArrayList<Collection<Fragment>>(getNumberOfColumns());
+        for (SortedMap<Integer, Fragment> map : columns.values())
         {
-            columnList.add(Collections.unmodifiableCollection(((Map) 
itr.next()).values()));
+            columnList.add(Collections.unmodifiableCollection(map.values()));
         }
-
         return Collections.unmodifiableCollection(columnList);
     }
     
@@ -342,7 +342,7 @@
      * this ColumnLayout in no sepcific order.
      * @return Immutable Collection of Fragments.
      */
-    public Collection getFragments()
+    public Collection<Fragment> getFragments()
     {
         return Collections.unmodifiableCollection(coordinates.keySet());
     }
@@ -360,7 +360,7 @@
     public Fragment getFragmentAt(int columnNumber, int rowNumber) throws 
EmptyLayoutLocationException,
             InvalidLayoutLocationException
     {
-        SortedMap column = getColumnMap(columnNumber);
+        SortedMap<Integer, Fragment> column = getColumnMap(columnNumber);
         Integer rowInteger = new Integer(rowNumber);
         if (column.containsKey(rowInteger))
         {
@@ -404,7 +404,7 @@
      * 
      * @return The last column in this layout.  The Collection is immutable.
      */
-    public Collection getLastColumn() 
+    public Collection<Fragment> getLastColumn() 
     {
         try
         {
@@ -422,7 +422,7 @@
      * 
      * @return The last column in this layout.  The Collection is immutable.
      */
-    public Collection getFirstColumn()
+    public Collection<Fragment> getFirstColumn()
     {
         try
         {
@@ -646,7 +646,7 @@
     protected void doMove(Fragment fragment, LayoutCoordinate oldCoordinate, 
LayoutCoordinate newCoordinate)
             throws InvalidLayoutLocationException, LayoutEventException
     {
-        SortedMap oldColumn = getColumnMap(oldCoordinate.getX());
+        SortedMap<Integer, Fragment> oldColumn = 
getColumnMap(oldCoordinate.getX());
         oldColumn.remove(new Integer(oldCoordinate.getY()));
         coordinates.remove(fragment);
 
@@ -686,7 +686,7 @@
      */
     protected void doAdd(int columnNumber, int rowNumber, Fragment fragment) 
throws InvalidLayoutLocationException, LayoutEventException
     {
-        SortedMap column = getColumnMap(columnNumber);
+        SortedMap<Integer, Fragment> column = getColumnMap(columnNumber);
     
         Integer rowInteger = new Integer(rowNumber);
         LayoutCoordinate targetCoordinate = new LayoutCoordinate(columnNumber, 
rowNumber);
@@ -719,17 +719,17 @@
      * SortedMap.
      * 
      * @param columnNumber
-     * @return
+     * @return SortedMap<Integer, Fragment>
      * @throws InvalidLayoutLocationException if the <code>columnNumber</code> 
resides
      * outside the bounds of this layout.
      */
-    protected final SortedMap getColumnMap(int columnNumber) throws 
InvalidLayoutLocationException
+    protected final SortedMap<Integer, Fragment> getColumnMap(int 
columnNumber) throws InvalidLayoutLocationException
     {
-        Integer columnNumberIneteger = new Integer(columnNumber);
+        Integer columnNumberInteger = new Integer(columnNumber);
 
-        if (columns.containsKey(columnNumberIneteger))
+        if (columns.containsKey(columnNumberInteger))
         {
-            return ((SortedMap) columns.get(columnNumberIneteger));
+            return columns.get(columnNumberInteger);
         }
         else
         {
@@ -807,10 +807,8 @@
      */
     protected final void processEvent(LayoutEvent event) throws 
LayoutEventException
     {
-        Iterator itr = eventListeners.iterator();
-        while(itr.hasNext())
+        for (LayoutEventListener eventListener : eventListeners)
         {
-            LayoutEventListener eventListener = (LayoutEventListener) 
itr.next();
             eventListener.handleEvent(event);
         }
         



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

Reply via email to