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