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]

Reply via email to