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]