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 2015/07/17 01:19:10 UTC

svn commit: r1691459 - in /portals/jetspeed-2/portal/trunk: applications/jetspeed/src/main/webapp/WEB-INF/min-pages/charts/ applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/ applications/jetspeed/src/main/webapp/WEB-INF/pages/charts/ ...

Author: taylor
Date: Thu Jul 16 23:19:09 2015
New Revision: 1691459

URL: http://svn.apache.org/r1691459
Log:
JS2-1331: add feature to modify number of columns for Responsive Layouts

Modified:
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/charts/charts.psml
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/four-rows.psml
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/logins.psml
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/my-account2.psml
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/nested.psml
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/registration.psml
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/responsive-blue.psml
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/charts/charts.psml
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/four-rows.psml
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/logins.psml
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/my-account2.psml
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/nested.psml
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/registration.psml
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/responsive-blue.psml
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/templates/layout/html/responsive/layout.vm
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/css/styles.css
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/css/styles.css
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/css/styles.css
    portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/css/styles.css
    portals/jetspeed-2/portal/trunk/components/jetspeed-layout-portlets/src/main/java/org/apache/jetspeed/portlets/layout/MultiColumnPortlet.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/layout/impl/PageLayoutComponentImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentFragmentImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentPageImpl.java
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/layout/PageLayoutComponent.java
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/page/ContentFragment.java

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/charts/charts.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/charts/charts.psml?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/charts/charts.psml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/charts/charts.psml Thu Jul 16 23:19:09 2015
@@ -15,7 +15,7 @@
         See the License for the specific language governing permissions and
         limitations under the License.
         -->
-<page id="/charts/jvm-memory.psml" hidden="false">
+<page id="/charts/charts.psml" hidden="false">
     <title>Jetspeed Chart Demo</title>
     <fragment id="P-chart-demo-10008" type="layout" name="jetspeed-layouts::ResponsiveLayout">
         <fragment id="P-chart-memory-20009" type="portlet" name="j2-admin::MemoryUsageChart">

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/four-rows.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/four-rows.psml?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/four-rows.psml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/four-rows.psml Thu Jul 16 23:19:09 2015
@@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY
 See the License for the specific language governing permissions and
 limitations under the License.
 -->
-<page id="/default-page.psml" hidden="false">
+<page id="/responsive/four-rows.psml" hidden="false">
     <security-constraints>
         <security-constraints-ref>public-view</security-constraints-ref>
     </security-constraints>

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/logins.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/logins.psml?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/logins.psml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/logins.psml Thu Jul 16 23:19:09 2015
@@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY
 See the License for the specific language governing permissions and
 limitations under the License.
 -->
-<page id="/test/logins.psml" hidden="false">
+<page id="/responsive/logins.psml" hidden="false">
     <security-constraints>
         <security-constraints-ref>public-view</security-constraints-ref>
     </security-constraints>

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/my-account2.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/my-account2.psml?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/my-account2.psml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/my-account2.psml Thu Jul 16 23:19:09 2015
@@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY
 See the License for the specific language governing permissions and
 limitations under the License.
 -->
-<page id="my-account2"
+<page id="/responsive/my-account2"
     xmlns="http://portals.apache.org/jetspeed"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://portals.apache.org/jetspeed http://portals.apache.org/jetspeed-2/2.2/schemas/psml.xsd">

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/nested.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/nested.psml?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/nested.psml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/nested.psml Thu Jul 16 23:19:09 2015
@@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY
 See the License for the specific language governing permissions and
 limitations under the License.
 -->
-<page id="/nested.psml" hidden="false">
+<page id="/responsive/nested.psml" hidden="false">
     <security-constraints>
         <security-constraints-ref>public-view</security-constraints-ref>
     </security-constraints>

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/registration.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/registration.psml?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/registration.psml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/registration.psml Thu Jul 16 23:19:09 2015
@@ -15,13 +15,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY
 See the License for the specific language governing permissions and
 limitations under the License.
 -->
-<page id="/registration.psml" hidden="false">
+<page id="/responsive/registration.psml" hidden="false">
     <security-constraints>
         <security-constraints-ref>guest-only</security-constraints-ref>
     </security-constraints>
     <title>Registration</title>
     <short-title>Registration</short-title>
-    <fragment id="jsreg-1" type="layout" name="jetspeed-layouts::VelocityOneColumn">
+    <fragment id="jsreg-1" type="layout" name="jetspeed-layouts::ResponsiveLayout">
         <fragment id="jsreg-2" type="portlet" name="j2-admin::UserRegistrationPortlet">
             <property name="row" value="1"></property>
             <property name="column" value="0"></property>

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/responsive-blue.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/responsive-blue.psml?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/responsive-blue.psml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/responsive/responsive-blue.psml Thu Jul 16 23:19:09 2015
@@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY
 See the License for the specific language governing permissions and
 limitations under the License.
 -->
-<page id="/test/responsive-blue.psml" hidden="false">
+<page id="/responsive/responsive-blue.psml" hidden="false">
     <security-constraints>
         <security-constraints-ref>public-view</security-constraints-ref>
     </security-constraints>

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/charts/charts.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/charts/charts.psml?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/charts/charts.psml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/charts/charts.psml Thu Jul 16 23:19:09 2015
@@ -15,7 +15,7 @@
         See the License for the specific language governing permissions and
         limitations under the License.
         -->
-<page id="/charts/jvm-memory.psml" hidden="false">
+<page id="/charts/charts.psml" hidden="false">
     <title>Jetspeed Chart Demo</title>
     <fragment id="P-chart-demo-10008" type="layout" name="jetspeed-layouts::ResponsiveLayout">
         <fragment id="P-chart-memory-20009" type="portlet" name="j2-admin::MemoryUsageChart">

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/four-rows.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/four-rows.psml?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/four-rows.psml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/four-rows.psml Thu Jul 16 23:19:09 2015
@@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY
 See the License for the specific language governing permissions and
 limitations under the License.
 -->
-<page id="/default-page.psml" hidden="false">
+<page id="/responsive/four-rows.psml" hidden="false">
     <security-constraints>
         <security-constraints-ref>public-view</security-constraints-ref>
     </security-constraints>

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/logins.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/logins.psml?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/logins.psml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/logins.psml Thu Jul 16 23:19:09 2015
@@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY
 See the License for the specific language governing permissions and
 limitations under the License.
 -->
-<page id="/test/logins.psml" hidden="false">
+<page id="/responsive/logins.psml" hidden="false">
     <security-constraints>
         <security-constraints-ref>public-view</security-constraints-ref>
     </security-constraints>

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/my-account2.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/my-account2.psml?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/my-account2.psml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/my-account2.psml Thu Jul 16 23:19:09 2015
@@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY
 See the License for the specific language governing permissions and
 limitations under the License.
 -->
-<page id="my-account2"
+<page id="/responsive/my-account2"
     xmlns="http://portals.apache.org/jetspeed"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://portals.apache.org/jetspeed http://portals.apache.org/jetspeed-2/2.2/schemas/psml.xsd">

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/nested.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/nested.psml?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/nested.psml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/nested.psml Thu Jul 16 23:19:09 2015
@@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY
 See the License for the specific language governing permissions and
 limitations under the License.
 -->
-<page id="/nested.psml" hidden="false">
+<page id="/responsive/nested.psml" hidden="false">
     <security-constraints>
         <security-constraints-ref>public-view</security-constraints-ref>
     </security-constraints>

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/registration.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/registration.psml?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/registration.psml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/registration.psml Thu Jul 16 23:19:09 2015
@@ -15,13 +15,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY
 See the License for the specific language governing permissions and
 limitations under the License.
 -->
-<page id="/registration.psml" hidden="false">
+<page id="/responsive/registration.psml" hidden="false">
     <security-constraints>
         <security-constraints-ref>guest-only</security-constraints-ref>
     </security-constraints>
     <title>Registration</title>
     <short-title>Registration</short-title>
-    <fragment id="jsreg-1" type="layout" name="jetspeed-layouts::VelocityOneColumn">
+    <fragment id="jsreg-1" type="layout" name="jetspeed-layouts::ResponsiveLayout">
         <fragment id="jsreg-2" type="portlet" name="j2-admin::UserRegistrationPortlet">
             <property name="row" value="1"></property>
             <property name="column" value="0"></property>

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/responsive-blue.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/responsive-blue.psml?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/responsive-blue.psml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/responsive/responsive-blue.psml Thu Jul 16 23:19:09 2015
@@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY
 See the License for the specific language governing permissions and
 limitations under the License.
 -->
-<page id="/test/responsive-blue.psml" hidden="false">
+<page id="/responsive/responsive-blue.psml" hidden="false">
     <security-constraints>
         <security-constraints-ref>public-view</security-constraints-ref>
     </security-constraints>

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/templates/layout/html/responsive/layout.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/templates/layout/html/responsive/layout.vm?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/templates/layout/html/responsive/layout.vm (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/templates/layout/html/responsive/layout.vm Thu Jul 16 23:19:09 2015
@@ -51,9 +51,265 @@ limitations under the License.
 #set($rc = $renderRequest.getAttribute("org.apache.jetspeed.request.RequestContext"))
 #set($psrc = $rc.getAttribute("org.apache.jetspeed.portalsite.PortalSiteRequestContext"))
 #set($profiledPage = $psrc.PageOrTemplate.Path)
+#set($numberOfColumns = $columnLayout.getNumberOfColumns())
 
 <div id="$renderResponse.namespace" class="container-fluid ${layoutClass} ${layoutClass}-${layoutType}">
 
+#if($editing)
+  <div class="layout-edit-bar">
+    #if($isRoot)
+      #getBoolProperty($allowChangePageTheme $rootDecorator "allow.change.page.theme" true)
+      #getBoolProperty($allowAddPage $rootDecorator "allow.add.page" true)
+      #getBoolProperty($allowChangePageName $rootDecorator "allow.change.page.name" true)
+      #getBoolProperty($allowNavigatePage $rootDecorator "allow.navigate.page" true)
+      #getBoolProperty($allowDeletePage $rootDecorator "allow.delete.page" true)
+      #getBoolProperty($allowChangeFolderTheme $rootDecorator "allow.change.folder.theme" true)
+      #getBoolProperty($allowAddFolder $rootDecorator "allow.add.folder" true)
+      #getBoolProperty($allowChangeFolderName $rootDecorator "allow.change.folder.name" true)
+      #getBoolProperty($allowNavigateFolder $rootDecorator "allow.navigate.folder" true)
+      #getBoolProperty($allowDeleteFolder $rootDecorator "allow.delete.folder" true)
+      #getBoolProperty($allowCustomizeAll $rootDecorator "allow.customize.all" false)
+    #else
+      #set($allowChangePageTheme=false)
+      #set($allowAddPage=false)
+      #set($allowChangePageName=false)
+      #set($allowNavigatePage=false)
+      #set($allowDeletePage=false)
+      #set($allowChangeFolderTheme=false)
+      #set($allowAddFolder=false)
+      #set($allowChangeFolderName=false)
+      #set($allowNavigateFolder=false)
+      #set($allowDeleteFolder=false)
+      #set($allowCustomizeAll=false)
+    #end
+
+    #getIntProperty($maxLayoutNesting $rootDecorator "max.layout.nesting" 2)
+    #set ($fnl = $request.getAttribute("fragmentNestingLevel"))
+    #if (! $fnl)
+        #set ($fnl = 0)
+    #end
+    #if($fnl < $maxLayoutNesting)
+      #set($allowAddLayout=true)
+    #else
+      #set($allowAddLayout=false)
+    #end
+    #getBoolProperty($allowChangeLayout $rootDecorator "allow.change.layout" true)
+    #getBoolProperty($allowAddPortlet $rootDecorator "allow.add.portlet" true)
+    #if ($myFragment.isLocked() == false)             
+    <fieldset>    
+    <div class="layout-edit-bar-left">
+        <div class="layout-title"><b>$messages.getString("portal.page.customizer.name")</b></div>
+    </div>
+    <div class="layout-edit-bar-right">
+      #if($allowAddPortlet)
+        <label>$messages.getString("portal.page.editing.portlet")</label>
+          #set ($chooser = "${jetspeed.basePath}/system/customizer/selector.psml?jspage=${profiledPage}&jslayoutid=$myFragment.id")  
+          <a href="$response.encodeURL($chooser)">
+          <img src="#GetPageResource('images/select.gif')" border="0" title="$messages.getString("portal.page.editing.addportlet")"/>
+        </a>
+      #end
+    </div>
+    </fieldset>
+      #set($form="f${renderResponse.namespace}")
+      #set($formAction = "$renderResponse.createActionURL()")
+      #set($submit = ".submit()")
+
+    <form name="$form" action="$formAction" method='post'>
+    #if($allowCustomizeAll)
+    <fieldset>
+    	<legend>$messages.getString("portal.userfolder.config.title")</legend>
+    	<label for="user_pages_theme">$messages.getString("portal.page.editing.theme")</label>
+    	<select id="user_pages_theme" name="user_pages_theme">
+        	#foreach($td in $decorationFactory.getPageDecorations($rc))
+            <option value='$td'>$td
+            #end
+        </select>   
+        <input type="submit" name="jsChangeUserPagesTheme" value='$messages.getString("portal.page.editing.changetheme")' />
+        <label for="user_portlets_deco">$messages.getString("portal.page.editing.portlet.decorator")</label>
+        <select id="user_portlets_deco" name="user_portlets_deco">
+    		<option value=''>
+    	    #foreach($pd in $decorationFactory.getPortletDecorations($rc))
+        	<option value='$pd'>$pd
+    	   	#end
+        </select>
+        <input type="submit" name="jsChangeUserPortletsDeco" value='$messages.getString("portal.page.editing.changethemeall")'/>        
+    </fieldset>
+    #end
+    <fieldset>
+    <div class="layout-edit-bar-left">
+        #if($allowAddLayout||$allowChangeLayout)
+      <div class="layout-title"><b>$messages.getString("portal.page.editing.layoutConfiguration")</b></div>
+      <div class="layout-content">
+        #end
+##        #if ($allowChangePageTheme)
+        <div>
+          <label for="theme">$messages.getString("portal.page.editing.theme")</label>
+          <select id='theme' name='theme' onChange="$form$submit">
+            #foreach($td in $decorationFactory.getPageDecorations($rc))
+            <option value='$td' #if($rootDecorator.Name == $td) SELECTED #end>$td
+            #end
+          </select>   
+        </div>
+##        #end
+        #if($allowAddLayout||$allowChangeLayout)
+        <div>
+          <label for="layout">$messages.getString("portal.page.editing.layout")</label>
+          <select id='layout' name='layout'>
+            #foreach($ld in $decorationFactory.getLayouts($rc))     
+            <option value='$ld.Name' #if($myFragment.Name == $ld.Name) SELECTED #end>$ld.DisplayName
+            #end
+          </select>
+        #end
+        #if ($allowChangeLayout)
+          <input type="submit" name="jsChangeLayout" value="$messages.getString("portal.page.editing.changelayout")" />
+        #end
+        #if($allowAddLayout)
+          <input type="submit" name="jsAddLayout" value="$messages.getString("portal.page.editing.addlayout")" />
+        #end    
+        #if($allowAddLayout||$allowChangeLayout)
+        </div>
+        #end
+        #if ($allowChangeLayout)
+        <div>
+          <label for="jsNumberColumns">Number of columns</label>
+          <select id="jsNumberColumns" name='jsNumberColumns'>
+              <option value='1' #if($numberOfColumns == "1") SELECTED #end>1</option>
+              <option value='2' #if($numberOfColumns == "2") SELECTED #end>2</option>
+              <option value='3' #if($numberOfColumns == "3") SELECTED #end>3</option>
+              <option value='4' #if($numberOfColumns == "4") SELECTED #end>4</option>
+          </select>
+          <input type="submit" name="jsChangeColumns" value="Change Columns" />
+        </div>
+        #end
+        #getBoolProperty($allowChangePortletDecorator $rootDecorator "allow.change.portlet.decorator" true)
+         ####### Take all fragments and apply style	  
+        #if($allowChangePortletDecorator)          
+        <div>
+          <input type="hidden" name="fragment" value="$myFragment.id">
+          <input type="hidden" name="move" value="">
+          <input type="hidden" name="remove" value="">
+          <label for="decorators">$messages.getString("portal.page.editing.portlet.decorator")</label>
+          <select id="decorators" name="decorators">
+            <option value=''>        	    
+                #set ($fd = "")
+                #if ($f.Decorator)
+                    #set ($fd = $f.Decorator)
+                #end
+				#foreach($pd in $decorationFactory.getPortletDecorations($rc))
+			<option value='$pd' #if ($pd == $fd) SELECTED #end>$pd
+        	    #end
+          </select>
+          <input type="submit" name="jsChangeThemeAll" value="$messages.getString("portal.page.editing.changethemeall")"/>
+        </div>
+        #end	   
+        #if($allowAddLayout||$allowChangeLayout)
+      </div>
+        #end
+    </div> 
+    </fieldset>
+    #end       
+    <fieldset style="float:left;width:49%;margin:0px;padding:0px;">
+    <div class="layout-edit-bar-left">
+        #if($allowAddPage||$allowChangePageName||$allowDeletePage)
+      <div class="page-title"><b>$messages.getString("portal.page.editing.pageConfiguration")</b></div>
+      <div class="page-content">
+        #end
+        #if($allowAddPage||$allowChangePageName)
+        <div>
+          <label for="pagename">$messages.getString("portal.page.editing.page")</label>
+          <input id='pagename' name='jsPageName'/>
+        </div>
+        <div>
+          <label for="pagetitle">$messages.getString("portal.page.editing.page.title")</label>
+          <input id='pagetitle' name='jsPageTitle'/>
+        </div>
+        <div>
+          <label for="pageshorttitle">$messages.getString("portal.page.editing.page.shorttitle")</label>
+          <input id='pageshorttitle' name='jsPageShortTitle'/>
+        </div>
+        <div>
+        #end
+        #if($allowAddPage)
+          <input type="submit" name="jsSubmitPage" value="$messages.getString("portal.page.editing.addpage")"/>
+        #end
+        #if($allowChangePageName)
+          <input type="submit" name="jsChangePageName" value="$messages.getString("portal.page.editing.changepagename")"/>
+        #end
+        #if($allowAddPage||$allowChangePageName)
+        </div>
+        #end
+        #if($allowNavigatePage)
+        <div>
+          <label>$messages.getString("portal.page.editing.pagenavigation")</label>
+          <input id="move-page-left" type="submit" name="jsMovePageLeft" value="$messages.getString("portal.page.editing.movePageLeft")" />
+          <input id="move-page-right" type="submit" name="jsMovePageRight" value="$messages.getString("portal.page.editing.movePageRight")" />
+        </div>
+        #end
+        #if($allowDeletePage)
+        <div>
+          <label for="deletepage">$messages.getString("portal.page.editing.deleteThisPage")</label>
+          <input id="deletepage" type="submit" name="jsDeletePage" value="$messages.getString("portal.page.editing.deletePage")" onclick="if(window.confirm('$messages.getString("portal.page.editing.confirmDeleteThisPage")')){return true;}return false;"/>
+        </div>
+        #end
+        #if($allowAddPage||$allowChangePageName||$allowDeletePage)
+      </div>
+        #end
+    </div> 
+    </fieldset>
+    <fieldset style="width:49%;margin:0px;padding:0px;">
+    <div class="layout-edit-bar-left">
+        #if($allowAddFolder||$allowChangeFolderName||$allowDeleteFolder)
+      <div class="folder-title"><b>$messages.getString("portal.folder.editing.folderConfiguration")</b></div>
+      <div class="folder-content">
+        #end
+        #if($allowAddFolder||$allowChangeFolderName)
+        <div>
+          <label for="foldername">$messages.getString("portal.folder.editing.folder")</label>
+          <input id='foldername' name='jsFolderName'/>
+        </div>
+        <div>
+          <label for="foldertitle">$messages.getString("portal.folder.editing.folder.title")</label>
+          <input id='foldertitle' name='jsFolderTitle'/>
+        </div>
+        <div>
+          <label for="foldershorttitle">$messages.getString("portal.folder.editing.folder.shorttitle")</label>
+          <input id='foldershorttitle' name='jsFolderShortTitle'/>
+        </div>
+        <div>
+        #end
+        #if($allowAddFolder)
+          <input type="submit" name="jsSubmitFolder" value="$messages.getString("portal.folder.editing.addfolder")"/>
+        #end
+        #if($allowChangeFolderName)
+          <input type="submit" name="jsChangeFolderName" value="$messages.getString("portal.folder.editing.changefoldername")"/>
+        #end
+        #if($allowAddFolder||$allowChangeFolderName)
+        </div>
+        #end
+        #if($allowNavigateFolder)
+        <div>
+          <label>$messages.getString("portal.folder.editing.foldernavigation")</label>
+          <input id="move-folder-left" type="submit" name="jsMoveFolderLeft" value="$messages.getString("portal.folder.editing.moveFolderLeft")" />
+          <input id="move-folder-right" type="submit" name="jsMoveFolderRight" value="$messages.getString("portal.folder.editing.moveFolderRight")" />
+        </div>
+        #end
+        #if($allowDeleteFolder)
+        <div>
+          <label for="deletefolder">$messages.getString("portal.folder.editing.deleteThisFolder")</label>
+          <input id="deletefolder" type="submit" name="jsDeleteFolder" value="$messages.getString("portal.folder.editing.deleteFolder")" onclick="if(window.confirm('$messages.getString("portal.folder.editing.confirmDeleteThisFolder")')){return true;}return false;"/>
+        </div>
+        #end
+        #if($allowAddFolder||$allowChangeFolderName||$allowDeleteFolder)
+      </div>
+        #end
+    </div>
+    </fieldset>
+    <br style="clear:both;">
+    </form>
+  </div>
+## end edit mode
+#end
+
   #set ($dcnt = 0)
   #set ($columnIndex = 0)
   #set ($columnCounter = 0)
@@ -61,10 +317,13 @@ limitations under the License.
   #set ($perDesktopColumn = 12 / $originalColumnNumber)
   #set ($perTabletColumn = 12 / $originalColumnNumber * 2)
   #set ($perMobileColumn = 12)
+  #set ($form="f${renderResponse.namespace}")
+  #set ($formAction = "$renderResponse.createActionURL()")
+  #set ($submit = ".submit()")
 
 <div class="row" rel="$originalColumnNumber">
   #foreach($column in $columnLayout.columns)
-    #if(($columnCounter == 2) && ($originalColumnNumber > 2))
+    #if(($columnCounter == $originalColumnNumber) && ($originalColumnNumber > 2))
         <br class="visible-sm-block" style="clear: both" />
     #end
     #if($columnCounter == $originalColumnNumber)
@@ -121,7 +380,7 @@ limitations under the License.
                             #set($fragmentType="Layout")
                           #end
                         ## Move portlet left
-                          #if($lastColumn > 0 && $col > 0)
+                          #if($originalColumnNumber > 0 && $col > 0)
                               <a href="#" onClick="${form}${dcnt}.move.value='3';$form$dcnt$submit;return false;" class="move-portlet-left">
                                   <img src="#GetPageResource('images/movePortletLeft.gif')" border="0" title="$messages.getString("portal.page.editing.move${fragmentType}Left")"/>
                               </a>
@@ -143,7 +402,7 @@ limitations under the License.
                               </a>
                           #end
                         ## Move portlet right
-                          #if($lastColumn > 0 && $col < $lastColumn)
+                          #if($originalColumnNumber > 0 && $col < $originalColumnNumber)
                               <a href="#" onClick="${form}${dcnt}.move.value='4';$form$dcnt$submit;return false;" class="move-portlet-right">
                                   <img src="#GetPageResource('images/movePortletRight.gif')" border="0" title="$messages.getString("portal.page.editing.move${fragmentType}Right")"/>
                               </a>
@@ -162,8 +421,6 @@ limitations under the License.
               #end
             </div>
         #end
-
-
       </div>
     #set ($columnIndex = $columnIndex + 1)
     #set ($columnCounter = $columnCounter + 1)

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/css/styles.css
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/css/styles.css?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/css/styles.css (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/css/styles.css Thu Jul 16 23:19:09 2015
@@ -337,6 +337,7 @@ background-position: 0px -30px
     position: relative;
     top: 55px;
     left: -10px;
+    z-index: 1;
 }
 
 .FolderList
@@ -533,7 +534,7 @@ background-position: 0px -30px
 .layout-jetspeed .layout-title,
 .layout-jetspeed .layout-edit-bar b{font-weight: bold; background: #c2c2c2; color: #666666; padding: 5px; display: block; width: auto; margin-bottom: 5px;}
 
-.layout-jetspeed .layout-edit-bar label{width: 71px; display: block; float: left; text-align: right; padding: 6px; clear: left}
+.layout-jetspeed .layout-edit-bar label{width: 71px; display: block; float: left; text-align: right; padding: 2px 6px; clear: left; margin-bottom: 0}
 .layout-jetspeed .layout-edit-bar select{width: 200px;}
 .layout-jetspeed .layout-edit-bar input{margin-bottom: 5px; margin-top: 5px;}
 
@@ -567,10 +568,11 @@ background-position: 0px -30px
 
 .layout-jetspeed .portlet-edit-bar{
     background: url("../images/portlet-layout-bar-back.gif") no-repeat top left;
-    height: 18px;
-    margin: 10px;
+    height: 28px;
+    margin: 10px 10px 10px 5px;
     margin-bottom: -5px;
-    padding: 1px;
+    padding: 1px 1px 1px 8px;
+    border-top-left-radius: 15px;
 }
 .layout-jetspeed .portlet-edit-bar a{display: block ; float: left; margin-top: 2px;}
 .layout-jetspeed .portlet-edit-bar select{width: 120px;}

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/css/styles.css
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/css/styles.css?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/css/styles.css (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/css/styles.css Thu Jul 16 23:19:09 2015
@@ -337,6 +337,7 @@ background-position: 0px -30px
     position: relative;
     top: 55px;
     left: -10px;
+    z-index: 1;
 }
 
 .FolderList
@@ -533,7 +534,7 @@ background-position: 0px -30px
 .layout-jetspeed .layout-title,
 .layout-jetspeed .layout-edit-bar b{font-weight: bold; background: #c2c2c2; color: #666666; padding: 5px; display: block; width: auto; margin-bottom: 5px;}
 
-.layout-jetspeed .layout-edit-bar label{width: 71px; display: block; float: left; text-align: right; padding: 6px; clear: left}
+.layout-jetspeed .layout-edit-bar label{width: 71px; display: block; float: left; text-align: right; padding: 2px 6px; clear: left; margin-bottom: 0}
 .layout-jetspeed .layout-edit-bar select{width: 200px;}
 .layout-jetspeed .layout-edit-bar input{margin-bottom: 5px; margin-top: 5px;}
 
@@ -567,10 +568,11 @@ background-position: 0px -30px
 
 .layout-jetspeed .portlet-edit-bar{
     background: url("../images/portlet-layout-bar-back.gif") no-repeat top left;
-    height: 18px;
-    margin: 10px;
+    height: 28px;
+    margin: 10px 10px 10px 5px;
     margin-bottom: -5px;
-    padding: 1px;
+    padding: 1px 1px 1px 8px;
+    border-top-left-radius: 15px;
 }
 .layout-jetspeed .portlet-edit-bar a{display: block ; float: left; margin-top: 2px;}
 .layout-jetspeed .portlet-edit-bar select{width: 120px;}

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/css/styles.css
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/css/styles.css?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/css/styles.css (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/css/styles.css Thu Jul 16 23:19:09 2015
@@ -337,6 +337,7 @@ background-position: 0px -30px
     position: relative;
     top: 55px;
     left: -10px;
+    z-index: 1;
 }
 
 .FolderList
@@ -533,7 +534,7 @@ background-position: 0px -30px
 .layout-jetspeed .layout-title,
 .layout-jetspeed .layout-edit-bar b{font-weight: bold; background: #c2c2c2; color: #666666; padding: 5px; display: block; width: auto; margin-bottom: 5px;}
 
-.layout-jetspeed .layout-edit-bar label{width: 71px; display: block; float: left; text-align: right; padding: 6px; clear: left}
+.layout-jetspeed .layout-edit-bar label{width: 71px; display: block; float: left; text-align: right; padding: 2px 6px; clear: left; margin-bottom: 0}
 .layout-jetspeed .layout-edit-bar select{width: 200px;}
 .layout-jetspeed .layout-edit-bar input{margin-bottom: 5px; margin-top: 5px;}
 
@@ -567,10 +568,11 @@ background-position: 0px -30px
 
 .layout-jetspeed .portlet-edit-bar{
     background: url("../images/portlet-layout-bar-back.gif") no-repeat top left;
-    height: 18px;
-    margin: 10px;
+    height: 28px;
+    margin: 10px 10px 10px 5px;
     margin-bottom: -5px;
-    padding: 1px;
+    padding: 1px 1px 1px 8px;
+    border-top-left-radius: 15px;
 }
 .layout-jetspeed .portlet-edit-bar a{display: block ; float: left; margin-top: 2px;}
 .layout-jetspeed .portlet-edit-bar select{width: 120px;}

Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/css/styles.css
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/css/styles.css?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/css/styles.css (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/css/styles.css Thu Jul 16 23:19:09 2015
@@ -337,6 +337,7 @@ background-position: 0px -30px
     position: relative;
     top: 55px;
     left: -10px;
+    z-index: 1;
 }
 
 .FolderList
@@ -533,7 +534,7 @@ margin-left: 2px;
 .layout-jetspeed .layout-title,
 .layout-jetspeed .layout-edit-bar b{font-weight: bold; background: #c2c2c2; color: #666666; padding: 5px; display: block; width: auto; margin-bottom: 5px;}
 
-.layout-jetspeed .layout-edit-bar label{width: 71px; display: block; float: left; text-align: right; padding: 6px; clear: left}
+.layout-jetspeed .layout-edit-bar label{width: 71px; display: block; float: left; text-align: right; padding: 2px 6px; clear: left; margin-bottom: 0}
 .layout-jetspeed .layout-edit-bar select{width: 200px;}
 .layout-jetspeed .layout-edit-bar input{margin-bottom: 5px; margin-top: 5px;}
 
@@ -567,10 +568,11 @@ padding: 4px;
 
 .layout-jetspeed .portlet-edit-bar{
 background: url("../images/portlet-layout-bar-back.gif") no-repeat top left; 
-height: 18px;
-margin: 10px;
+height: 28px;
+margin: 10px 10px 10px 5px;
 margin-bottom: -5px;
-padding: 1px;
+padding: 1px 1px 1px 8px;
+border-top-left-radius: 15px;
 }
 .layout-jetspeed .portlet-edit-bar a{display: block ; float: left; margin-top: 2px;}
 .layout-jetspeed .portlet-edit-bar select{width: 120px;}

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-layout-portlets/src/main/java/org/apache/jetspeed/portlets/layout/MultiColumnPortlet.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-layout-portlets/src/main/java/org/apache/jetspeed/portlets/layout/MultiColumnPortlet.java?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-layout-portlets/src/main/java/org/apache/jetspeed/portlets/layout/MultiColumnPortlet.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-layout-portlets/src/main/java/org/apache/jetspeed/portlets/layout/MultiColumnPortlet.java Thu Jul 16 23:19:09 2015
@@ -442,6 +442,31 @@ public class MultiColumnPortlet extends
                 return;
             }
 
+            // JS2-1331: since 2.3.0
+            if ( request.getParameter("jsChangeColumns" ) != null )
+            {
+                String columns = request.getParameter("jsNumberColumns");
+                if ( columns != null && columns.length() > 0 )
+                {
+                    PortletWindow window = requestContext.getActionWindow();
+                    ContentFragment targetFragment = requestPage.getFragmentById(window.getId().toString());
+                    if ( targetFragment != null )
+                    {
+                        try
+                        {
+                            int max = Integer.parseInt(columns);
+                            targetFragment.reorderColumns(max);
+                            clearLayoutAttributes(request);
+                        }
+                        catch (Exception e)
+                        {
+                            throw new PortletException("failed to change columns " + layout + " to page: " + requestPage+": "+e.getMessage(), e);
+                        }
+                    }
+                }
+                return;
+            }
+
             String theme = request.getParameter("theme");
             if ( theme != null && theme.length() > 0 )
             {
@@ -644,6 +669,7 @@ public class MultiColumnPortlet extends
                 }
                 return;
             }
+
         }
     }
         

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/layout/impl/PageLayoutComponentImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/layout/impl/PageLayoutComponentImpl.java?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/layout/impl/PageLayoutComponentImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/layout/impl/PageLayoutComponentImpl.java Thu Jul 16 23:19:09 2015
@@ -2874,4 +2874,59 @@ public class PageLayoutComponentImpl imp
         }
         throw new PageNotRemovedException("Unable to classify page by type: "+((pageOrTemplate != null) ? pageOrTemplate.getClass().getName() : "null"));
     }
+
+    public void reorderColumns(ContentFragment contentFragment, int maxColumns) {
+        if (log.isDebugEnabled()) {
+            log.debug("PageLayoutComponentImpl.reorderColumns() invoked");
+        }
+        try {
+            // validate content fragment
+            ContentFragmentImpl contentFragmentImpl = (ContentFragmentImpl) contentFragment;
+            if (contentFragmentImpl.getDefinition() == null) {
+                throw new IllegalArgumentException("Transient content fragments are not mutable");
+            }
+            if (contentFragmentImpl.isLocked()) {
+                throw new IllegalArgumentException("Locked content fragment is not mutable");
+            }
+            if (!contentFragmentImpl.getDefinition().getPath().equals(contentFragmentImpl.getPageOrTemplate().getPath())) {
+                throw new IllegalArgumentException("Only page fragments can be modified");
+            }
+
+            // retrieve current page or template and fragment from page manager
+            BaseFragmentsElement pageOrTemplate = getPageOrTemplate(contentFragmentImpl.getPageOrTemplate().getPath());
+            BaseFragmentElement parentFragment = pageOrTemplate.getFragmentById(contentFragmentImpl.getFragment().getId());
+            if (!(parentFragment instanceof Fragment)) {
+                throw new IllegalArgumentException("New fragment cannot be added to parent fragment");
+            }
+            Fragment fragment = (Fragment) parentFragment;
+            if (!Fragment.LAYOUT.equals(fragment.getType())) {
+                throw new IllegalArgumentException("New fragment cannot be added to non-layout parent fragment");
+            }
+
+            // check for edit permission
+            fragment.checkAccess(JetspeedActions.EDIT);
+
+            // Perform ReOrder
+            int count = maxColumns - 1;
+            int row = 0;
+            for (Object f : contentFragmentImpl.getFragments()) {
+                ContentFragmentImpl impl = (ContentFragmentImpl)f;
+                impl.updateRowColumn(row, count);
+                count = count - 1;
+                if (count < 0) {
+                    count = maxColumns - 1;
+                    row++;
+                }
+            }
+
+            // update page in page manager
+            updatePage(pageOrTemplate);
+
+        } catch (Exception e) {
+            throw new PageLayoutComponentException("Unexpected exception: " + e, e);
+        }
+
+    }
+
+
 }

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentFragmentImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentFragmentImpl.java?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentFragmentImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentFragmentImpl.java Thu Jul 16 23:19:09 2015
@@ -1738,4 +1738,12 @@ public class ContentFragmentImpl impleme
         this.refreshFunction = function;
     }
 
+    @Override
+    public void reorderColumns(int max) {
+        if (pageLayoutComponent != null)
+        {
+            // delegate to page layout component
+            pageLayoutComponent.reorderColumns(this, max);
+        }
+    }
 }

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentPageImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentPageImpl.java?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentPageImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentPageImpl.java Thu Jul 16 23:19:09 2015
@@ -938,4 +938,5 @@ public class ContentPageImpl implements
     {
         this.inheritable = inheritable;
     }
+
 }

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/layout/PageLayoutComponent.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/layout/PageLayoutComponent.java?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/layout/PageLayoutComponent.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/layout/PageLayoutComponent.java Thu Jul 16 23:19:09 2015
@@ -478,4 +478,13 @@ public interface PageLayoutComponent
      * @param shortTitle page short title
      */
     void updateTitles(ContentPage contentPage, String title, String shortTitle);
+
+    /**
+     * Reorder portlet columns locations over maxColumns
+     *
+     * @param targetFragment
+     * @param maxColumns
+     */
+    void reorderColumns(ContentFragment targetFragment, int maxColumns);
+
 }

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/page/ContentFragment.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/page/ContentFragment.java?rev=1691459&r1=1691458&r2=1691459&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/page/ContentFragment.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/page/ContentFragment.java Thu Jul 16 23:19:09 2015
@@ -699,4 +699,7 @@ public interface ContentFragment
     void setRefreshRate(long rate);
     String getRefreshFunction();
     void setRefreshFunction(String function);
+
+    void reorderColumns(int max);
+
 }



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