jford       2004/07/13 21:14:52

  Modified:    src/java/org/apache/jetspeed/modules/actions/controllers
                        XMultiColumnControllerAction.java
  Log:
  Avoid NPE if no changes are made
  Verify rows and columns are within bounds
  
  PR: JS1-501
  
  Revision  Changes    Path
  1.3       +68 -14    
jakarta-jetspeed/src/java/org/apache/jetspeed/modules/actions/controllers/XMultiColumnControllerAction.java
  
  Index: XMultiColumnControllerAction.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/modules/actions/controllers/XMultiColumnControllerAction.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XMultiColumnControllerAction.java 23 Feb 2004 02:49:58 -0000      1.2
  +++ XMultiColumnControllerAction.java 14 Jul 2004 04:14:52 -0000      1.3
  @@ -23,6 +23,8 @@
   import org.apache.jetspeed.om.profile.psml.PsmlEntry;
   import org.apache.jetspeed.portal.Portlet;
   import org.apache.jetspeed.portal.PortletController;
  +import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
  +import org.apache.jetspeed.services.logging.JetspeedLogger;
   import org.apache.jetspeed.services.rundata.JetspeedRunData;
   import org.apache.jetspeed.services.statemanager.SessionState;
   import org.apache.jetspeed.util.template.JetspeedTool;
  @@ -39,6 +41,11 @@
    */
   public class XMultiColumnControllerAction extends MultiColumnControllerAction
   {
  +     /**
  +     * Static initialization of the logger for this class
  +     */    
  +    private static final JetspeedLogger logger = 
JetspeedLogFactoryService.getLogger(XMultiColumnControllerAction.class.getName());
  +     
       protected void buildCustomizeContext(
           PortletController controller,
           Context context,
  @@ -108,22 +115,69 @@
           {
               String[] moves = StringUtils.stringToArray(modelChangeList[0], ";");
   
  -            SessionState customizationState = ((JetspeedRunData) 
data).getPageSessionState();
  -            List[] columns = (List[]) 
customizationState.getAttribute("customize-columns");
  -
  -            for (int i = 0; i < moves.length; i++)
  +            if(moves != null)
               {
  -                String[] values = StringUtils.stringToArray(moves[i], ",");
  -                int originCol = Integer.parseInt(values[0]);
  -                int originRow = Integer.parseInt(values[1]);
  -                int destCol = Integer.parseInt(values[2]);
  -                int destRow = Integer.parseInt(values[3]);
  -
  -                Object portletEntry = columns[originCol].get(originRow);
  -                columns[originCol].remove(originRow);
  -                columns[destCol].add(destRow, portletEntry);
  +                 SessionState customizationState = ((JetspeedRunData) 
data).getPageSessionState();
  +                 List[] columns = (List[]) 
customizationState.getAttribute("customize-columns");
  +     
  +                 for (int i = 0; i < moves.length; i++)
  +                 {
  +                     String[] values = StringUtils.stringToArray(moves[i], ",");
  +                     if(values != null  && values.length >= 4)
  +                     {
  +                             int originCol = Integer.parseInt(values[0]);
  +                             int originRow = Integer.parseInt(values[1]);
  +                             int destCol = Integer.parseInt(values[2]);
  +                             int destRow = Integer.parseInt(values[3]);
  +                             
  +                             if(verifyColumnsBounds(originCol, destCol, columns))
  +                             {
  +                                     List originColumn = columns[originCol];
  +                                     if((originRow >= 0) && (originRow < 
originColumn.size()))
  +                                     {
  +                                             List destinationColumn = 
columns[destCol];
  +                                             if((destRow >=0) && (destRow < 
destinationColumn.size()))
  +                                             {
  +                                                     Object portletEntry = 
originColumn.get(originRow);
  +                                                     originColumn.remove(originRow);
  +                                                     destinationColumn.add(destRow, 
portletEntry);
  +                                             }
  +                                             else
  +                                             {
  +                                                     logger.warn("Destination Row " 
+ destRow + " is out of bounds.");
  +                                             }
  +                                     }
  +                                     else
  +                                     {
  +                                             logger.warn("Origin Row " + originRow 
+ " is out of bounds.");
  +                                     }
  +                             }
  +                     }
  +                 }
               }
           }
  +    }
  +    
  +    private boolean verifyColumnsBounds(int originCol, int destCol, List[] columns)
  +    {
  +     boolean result = false;
  +     
  +     result = (originCol >=0) && (originCol < columns.length);
  +     if(result)
  +     {
  +             result = (destCol >=0) && (destCol < columns.length);
  +             
  +             if(!result)
  +             {
  +                     logger.warn("Destination Column " + destCol + " is out of 
bounds.");
  +             }
  +     }
  +     else
  +     {
  +             logger.warn("Origin Column " + originCol + " is out of bounds.");
  +     }
  +     
  +     return result;
       }
   }    
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to