weaver 2004/08/05 16:36:46
Modified: layout-portlets/src/java/org/apache/jetspeed/portlets/layout
MultiColumnPortlet.java LayoutPortlet.java
portal/src/webapp/WEB-INF/templates/layout/html/columns
layout.vm
Log:
Houston, we have customization!!!!
Revision Changes Path
1.2 +180 -86
jakarta-jetspeed-2/layout-portlets/src/java/org/apache/jetspeed/portlets/layout/MultiColumnPortlet.java
Index: MultiColumnPortlet.java
===================================================================
RCS file:
/home/cvs/jakarta-jetspeed-2/layout-portlets/src/java/org/apache/jetspeed/portlets/layout/MultiColumnPortlet.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MultiColumnPortlet.java 10 Jun 2004 20:12:45 -0000 1.1
+++ MultiColumnPortlet.java 5 Aug 2004 23:36:46 -0000 1.2
@@ -16,25 +16,26 @@
package org.apache.jetspeed.portlets.layout;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
-import java.util.ArrayList;
-import java.util.Vector;
import java.util.StringTokenizer;
-import java.util.Collections;
+import java.util.Vector;
import javax.portlet.PortletConfig;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.jetspeed.Jetspeed;
import org.apache.jetspeed.om.page.Fragment;
-import org.apache.jetspeed.om.page.Property;
+import org.apache.jetspeed.om.page.Page;
+import org.apache.jetspeed.page.PageManager;
import org.apache.jetspeed.request.RequestContext;
import org.apache.pluto.om.window.PortletWindow;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
/**
*/
@@ -51,40 +52,58 @@
private int numColumns = 0;
private String colSizes = null;
private String portletName = null;
+ private String layoutType;
- public void init(PortletConfig config)
- throws PortletException
+ public void init( PortletConfig config ) throws PortletException
{
super.init(config);
this.numColumns =
Integer.parseInt(config.getInitParameter(PARAM_NUM_COLUMN));
this.colSizes = config.getInitParameter(PARAM_COLUMN_SIZES);
this.portletName = config.getPortletName();
+ this.layoutType = config.getInitParameter("layoutType");
}
- public void doView(RenderRequest request, RenderResponse response)
- throws PortletException, IOException
+ public void doView( RenderRequest request, RenderResponse response ) throws
PortletException, IOException
{
RequestContext context = Jetspeed.getCurrentRequestContext();
PortletWindow window =
context.getNavigationalState().getMaximizedWindow(context.getPage());
-
+
+ if (request.getParameter("moveBy") != null &&
request.getParameter("fragmentId") != null)
+ {
+ Page page = getPage(request);
+ ArrayList tempFrags = new
ArrayList(page.getRootFragment().getFragments());
+
doMoveFragment(page.getFragmentById(request.getParameter("fragmentId")),
request.getParameter("moveBy"), request, tempFrags);
+ PageManager pm = (PageManager)
Jetspeed.getComponentManager().getComponent(PageManager.class);
+ try
+ {
+ pm.updatePage(page);
+ }
+ catch (Exception e)
+ {
+ throw new PortletException(e.toString(), e);
+ }
+
+ }
+
// if (targetState != null && targetState.isMaximized())
if (window != null)
{
- super.doView(request,response);
+ super.doView(request, response);
return;
}
-
+
List[] columns = buildColumns(getFragment(request, false), this.numColumns);
request.setAttribute("columns", columns);
+ request.setAttribute("numberOfColumns", new Integer(numColumns));
// now invoke the JSP associated with this portlet
- super.doView(request,response);
+ super.doView(request, response);
request.removeAttribute("columns");
}
- protected List[] buildColumns(Fragment f, int colNum)
+ protected List[] buildColumns( Fragment f, int colNum )
{
// normalize the constraints and calculate max num of rows needed
Iterator iterator = f.getFragments().iterator();
@@ -95,41 +114,28 @@
while (iterator.hasNext())
{
Fragment fChild = (Fragment) iterator.next();
- List properties = fChild.getProperties(this.portletName);
- if (properties != null)
+ try
{
- Iterator pIterator = properties.iterator();
- while(pIterator.hasNext())
+ row = Integer.parseInt(fChild.getPropertyValue(this.layoutType,
"row"));
+ if (row > rowNum)
{
- Property prop = (Property)pIterator.next();
+ rowNum = row;
+ }
- try
- {
- if (prop.getName().equals("row"))
- {
- row = Integer.parseInt(prop.getValue());
- if (row > rowNum)
- {
- rowNum = row;
- }
- }
- else if (prop.getName().equals("column"))
- {
- col = Integer.parseInt(prop.getValue());
- if (col > colNum)
- {
- prop.setValue(String.valueOf(col % colNum));
- }
- }
- }
- catch (Exception e)
- {
- //ignore any malformed layout properties
- }
+ col = Integer.parseInt(fChild.getPropertyValue(this.layoutType,
"column"));
+ if (col > colNum)
+ {
+ fChild.setPropertyValue(this.layoutType, "column",
String.valueOf(col % colNum));
}
+
}
+ catch (Exception e)
+ {
+ //ignore any malformed layout properties
+ }
+
}
int sCount = f.getFragments().size();
@@ -154,7 +160,7 @@
//others
for (int i = 0; i < sCount; i++)
{
- addElement((Fragment)f.getFragments().get(i), table, work, colNum);
+ addElement((Fragment) f.getFragments().get(i), table, work, colNum);
}
//insert the unconstrained elements in the table
@@ -189,13 +195,15 @@
return table;
}
- /** Parses the size config info and returns a list of
- * size values for the current set
- *
- * @param sizeList java.lang.String a comma separated string a values
- * @return a List of values
+ /**
+ * Parses the size config info and returns a list of size values for the
+ * current set
+ *
+ * @param sizeList
+ * java.lang.String a comma separated string a values
+ * @return a List of values
*/
- protected static List getCellSizes(String sizeList)
+ protected static List getCellSizes( String sizeList )
{
List list = new Vector();
@@ -211,7 +219,7 @@
return list;
}
- protected static List getCellClasses(String classlist)
+ protected static List getCellClasses( String classlist )
{
List list = new Vector();
@@ -228,46 +236,32 @@
}
/**
- * Add an element to the "table" or "work" objects. If the element is
- * unconstrained, and the position is within the number of columns, then
- * the element is added to "table". Othewise the element is added to "work"
- *
- * @param f fragment to add
- * @param table of positioned elements
- * @param work list of un-positioned elements
- * @param columnCount Number of colum
+ * Add an element to the "table" or "work" objects. If the element is
+ * unconstrained, and the position is within the number of columns, then the
+ * element is added to "table". Othewise the element is added to "work"
+ *
+ * @param f
+ * fragment to add
+ * @param table
+ * of positioned elements
+ * @param work
+ * list of un-positioned elements
+ * @param columnCount
+ * Number of colum
*/
- protected void addElement(Fragment f, List[] table, List work, int columnCount)
+ protected void addElement( Fragment f, List[] table, List work, int columnCount
)
{
int row = -1;
int col = -1;
- List properties = f.getProperties(this.portletName);
-
- if (properties != null)
+ try
{
- Iterator pIterator = properties.iterator();
-
- while(pIterator.hasNext())
- {
- Property prop = (Property)pIterator.next();
-
- try
- {
- if (prop.getName().equals("row"))
- {
- row = Integer.parseInt(prop.getValue());
- }
- else if (prop.getName().equals("column"))
- {
- col = Integer.parseInt(prop.getValue());
- }
- }
- catch (Exception e)
- {
- //ignore any malformed layout properties
- }
- }
+ row = Integer.parseInt(f.getPropertyValue(this.layoutType, "row"));
+ col = Integer.parseInt(f.getPropertyValue(this.layoutType, "column"));
+ }
+ catch (Exception e)
+ {
+ //ignore any malformed layout properties
}
if ((row >= 0) && (col >= 0) && (col < columnCount))
@@ -276,7 +270,107 @@
}
else
{
- work.add(f);
+ work.add(f);
+ }
+ }
+
+ protected void doMoveFragment( Fragment fToMove, String coordinates,
RenderRequest request, List fragments )
+ {
+
+ StringTokenizer coorTk = new StringTokenizer(coordinates, ",");
+ int x = Integer.parseInt(coorTk.nextToken());
+ int y = Integer.parseInt(coorTk.nextToken());
+ if (x == 0 && y == 0)
+ {
+ return;
+ }
+
+
+ String rowValue = fToMove.getPropertyValue(layoutType, "row");
+ int row = Integer.parseInt(rowValue);
+ int column = Integer.parseInt(fToMove.getPropertyValue(layoutType,
"column"));
+
+ int newRow = row + y;
+ int newColumn = column + x;
+ doMoveFragmentTo(fToMove, newColumn, newRow, request, fragments);
+
+ }
+
+ protected void doMoveFragmentTo( Fragment fToMove, int column, int row,
RenderRequest request, List fragments )
+ {
+ //Wrapping logic
+ if(column >= numColumns)
+ {
+ column = 0;
+ row+=1;
+ doMoveFragmentTo(fToMove, column, row, request, fragments);
+ return;
+
+ }
+ else if(column < 0)
+ {
+ row-=1;
+ column=(numColumns-1);
+ doMoveFragmentTo(fToMove, column, row, request, fragments);
+ return;
+ }
+ else if(row < 0)
+ {
+ row = getLastRowInColumn(column, fragments, fToMove)+1;
+ doMoveFragmentTo(fToMove, column, row, request, fragments);
+ return;
+ }
+ else
+ {
+ int currentRow = Integer.parseInt(fToMove.getPropertyValue(layoutType,
"row"));
+ int currentColumn =
Integer.parseInt(fToMove.getPropertyValue(layoutType, "column"));
+
+ int lastRow = getLastRowInColumn(column, fragments, fToMove);
+
+ // Prevent wacky row 999 if there are only 2 rows in the column
+ if(row > (lastRow+1))
+ {
+ row = lastRow + 1;
+ }
+
+ fToMove.setPropertyValue(layoutType, "row", String.valueOf(row));
+ fToMove.setPropertyValue(layoutType, "column", String.valueOf(column));
+
+
+ for(int i=0; i<fragments.size(); i++)
+ {
+ Fragment aFragment = (Fragment) fragments.get(i);
+ if (!aFragment.equals(fToMove))
+ {
+ int aRow =
Integer.parseInt(aFragment.getPropertyValue(layoutType, "row"));
+ int aColumn =
Integer.parseInt(aFragment.getPropertyValue(layoutType, "column"));
+ if (aColumn == column && aRow == row)
+ {
+ doMoveFragmentTo(aFragment, currentColumn, currentRow,
request, fragments );
+ }
+ }
+
+ }
+ return;
+ }
+
+
+ }
+
+ protected int getLastRowInColumn(int column, List fragments, Fragment f)
+ {
+ int row=0;
+ Iterator allFrags = fragments.iterator();
+ while(allFrags.hasNext())
+ {
+ Fragment aFrag = (Fragment) allFrags.next();
+ int currentRow = Integer.parseInt(aFrag.getPropertyValue(layoutType,
"row"));
+ int currentColumn = Integer.parseInt(aFrag.getPropertyValue(layoutType,
"column"));
+ if(currentRow > row && currentColumn == column &&(f == null ||
!f.equals(aFrag)))
+ {
+ row = currentRow;
+ }
}
+ return row;
}
}
1.2 +17 -0
jakarta-jetspeed-2/layout-portlets/src/java/org/apache/jetspeed/portlets/layout/LayoutPortlet.java
Index: LayoutPortlet.java
===================================================================
RCS file:
/home/cvs/jakarta-jetspeed-2/layout-portlets/src/java/org/apache/jetspeed/portlets/layout/LayoutPortlet.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- LayoutPortlet.java 10 Jun 2004 20:12:45 -0000 1.1
+++ LayoutPortlet.java 5 Aug 2004 23:36:46 -0000 1.2
@@ -144,5 +144,22 @@
return dispatcher;
}
+
+
+ /**
+ * <p>
+ * doEdit
+ * </p>
+ *
+ * @see javax.portlet.GenericPortlet#doEdit(javax.portlet.RenderRequest,
javax.portlet.RenderResponse)
+ * @param request
+ * @param response
+ * @throws PortletException
+ * @throws IOException
+ */
+ public void doEdit( RenderRequest request, RenderResponse response ) throws
PortletException, IOException
+ {
+ doView(request, response);
+ }
}
1.7 +49 -2
jakarta-jetspeed-2/portal/src/webapp/WEB-INF/templates/layout/html/columns/layout.vm
Index: layout.vm
===================================================================
RCS file:
/home/cvs/jakarta-jetspeed-2/portal/src/webapp/WEB-INF/templates/layout/html/columns/layout.vm,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- layout.vm 28 Jul 2004 13:20:07 -0000 1.6
+++ layout.vm 5 Aug 2004 23:36:46 -0000 1.7
@@ -39,6 +39,16 @@
#parse($jetspeed.getDecoration($decoTop, "layout").appRelativePath)
#end
+
+#if($jetspeed.portletMode.toString() == "edit")
+ #set($editing = true)
+ #set($lastColumn = $renderRequest.getAttribute("numberOfColumns") - 1)
+ #set($layoutType =$portletConfig.getInitParameter("layoutType"))
+ <a href="$jetspeed.createAction(3).action">Done</a>
+#else
+ <a href="$jetspeed.createAction(4).action">Customize</a>
+#end
+
<table id="portal-layout-${myPage.id}" width="100%" cellspacing="0" cellpadding="0"
class="portal-layout">
<tr>
@@ -48,9 +58,46 @@
#foreach($f in $entry)
<tr>
<td width="100%">
+ #if($editing)<div id="_$f.id">
+
+ <div style="position:relative; top:10px; left:0; width:100%;
height:100%; border: solid thin blue; ">
+ #set($row = $f.getProperties($layoutType).get(0).intValue)
+ #set($col = $f.getProperties($layoutType).get(1).intValue)
+
+ #if($col > 0)
+ #set($leftUrl = $renderResponse.createRenderURL())
+ $!leftUrl.setParameter("moveBy","-1,0")
+ $!leftUrl.setParameter("fragmentId","$f.id")
+ <a href="$leftUrl">Move Left</a>
+ #end
+ #if($col < $lastColumn )
+ #set($rightUrl = $renderResponse.createRenderURL())
+ $!rightUrl.setParameter("moveBy","1,0")
+ $!rightUrl.setParameter("fragmentId","$f.id")
+ <a href="$rightUrl">Move Right</a>
+ #end
+ #if($row > 0)
+ #set($upUrl = $renderResponse.createRenderURL())
+ $!upUrl.setParameter("moveBy","0,-1")
+ $!upUrl.setParameter("fragmentId","$f.id")
+ <a href="$upUrl">Move Up</a>
+ #end
+ #set($downUrl = $renderResponse.createRenderURL())
+ $!downUrl.setParameter("moveBy","0,1")
+ $!downUrl.setParameter("fragmentId","$f.id")
+ <a href="$downUrl">Move Down</a>
+
+ #end
+
## get the decorated Portlet content
- $jetspeed.decorateAndInclude($f)
- </td></tr>
+ $jetspeed.decorateAndInclude($f)
+ #if($editing)
+ </div>
+ </div>
+
+ #end
+ </td>
+ </tr>
#end
</table></td>
#end
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]