Author: husted Date: Mon Jan 14 19:06:41 2008 New Revision: 611999 URL: http://svn.apache.org/viewvc?rev=611999&view=rev Log: WW-2286 Apply FIXBUG patches supplied by Giovanni Azua Garcia.
Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/DateTimePicker.java struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TabbedPanel.java struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TextArea.java struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Tree.java struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TreeNode.java Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java?rev=611999&r1=611998&r2=611999&view=diff ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java Mon Jan 14 19:06:41 2008 @@ -34,6 +34,8 @@ */ public abstract class AbstractRemoteBean extends ClosingUIBean implements RemoteBean { + final private static transient Random RANDOM = new Random(); + protected String href; protected String errorText; protected String executeScripts; @@ -111,8 +113,11 @@ boolean generateId = !(Boolean)stack.getContext().get(Head.PARSE_CONTENT); addParameter("pushId", generateId); if ((this.id == null || this.id.length() == 0) && generateId) { - Random random = new Random(); - this.id = "widget_" + Math.abs(random.nextInt()); + // resolves Math.abs(Integer.MIN_VALUE) issue reported by FindBugs + // http://findbugs.sourceforge.net/bugDescriptions.html#RV_ABSOLUTE_VALUE_OF_RANDOM_INT + int nextInt = RANDOM.nextInt(); + nextInt = nextInt == Integer.MIN_VALUE ? Integer.MAX_VALUE : Math.abs(nextInt); + this.id = "widget_" + String.valueOf(nextInt); addParameter("id", this.id); } } Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java?rev=611999&r1=611998&r2=611999&view=diff ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Autocompleter.java Mon Jan 14 19:06:41 2008 @@ -200,6 +200,7 @@ public class Autocompleter extends ComboBox { public static final String TEMPLATE = "autocompleter"; final private static String COMPONENT_NAME = Autocompleter.class.getName(); + private final static transient Random RANDOM = new Random(); protected String forceValidOption; protected String searchType; @@ -229,7 +230,7 @@ protected String transport; protected String preload; protected String keyValue; - + public Autocompleter(ValueStack stack, HttpServletRequest request, HttpServletResponse response) { super(stack, request, response); @@ -326,9 +327,11 @@ boolean generateId = !(Boolean)stack.getContext().get(Head.PARSE_CONTENT); addParameter("pushId", generateId); if ((this.id == null || this.id.length() == 0) && generateId) { - Random random = new Random(); - this.id = "widget_" + Math.abs(random.nextInt()); - addParameter("id", this.id); + // resolves Math.abs(Integer.MIN_VALUE) issue reported by FindBugs + // http://findbugs.sourceforge.net/bugDescriptions.html#RV_ABSOLUTE_VALUE_OF_RANDOM_INT + int nextInt = RANDOM.nextInt(); + nextInt = nextInt == Integer.MIN_VALUE ? Integer.MAX_VALUE : Math.abs(nextInt); + this.id = "widget_" + String.valueOf(nextInt); } } Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/DateTimePicker.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/DateTimePicker.java?rev=611999&r1=611998&r2=611999&view=diff ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/DateTimePicker.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/DateTimePicker.java Mon Jan 14 19:06:41 2008 @@ -21,6 +21,8 @@ package org.apache.struts2.dojo.components; import java.text.DateFormat; +import java.text.Format; +import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; @@ -172,9 +174,14 @@ public class DateTimePicker extends UIBean { final public static String TEMPLATE = "datetimepicker"; - final private static SimpleDateFormat RFC3339_FORMAT = new SimpleDateFormat( - "yyyy-MM-dd'T'HH:mm:ss"); + // SimpleDateFormat is not thread-safe see: + // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6231579 + // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6178997 + // solution is to use stateless MessageFormat instead: + final private static String RFC3339_FORMAT = "yyyy-MM-dd'T'HH:mm:ss"; + final private static String RFC3339_PATTERN = "{0,date," + RFC3339_FORMAT + "}"; final protected static Logger LOG = LoggerFactory.getLogger(DateTimePicker.class); + final private static transient Random RANDOM = new Random(); protected String iconPath; protected String formatLength; @@ -193,7 +200,7 @@ protected String language; protected String templateCssPath; protected String valueNotifyTopics; - + public DateTimePicker(ValueStack stack, HttpServletRequest request, HttpServletResponse response) { super(stack, request, response); } @@ -256,8 +263,11 @@ boolean generateId = !(Boolean)stack.getContext().get(Head.PARSE_CONTENT); addParameter("pushId", generateId); if ((this.id == null || this.id.length() == 0) && generateId) { - Random random = new Random(); - this.id = "widget_" + Math.abs(random.nextInt()); + // resolves Math.abs(Integer.MIN_VALUE) issue reported by FindBugs + // http://findbugs.sourceforge.net/bugDescriptions.html#RV_ABSOLUTE_VALUE_OF_RANDOM_INT + int nextInt = RANDOM.nextInt(); + nextInt = nextInt == Integer.MIN_VALUE ? Integer.MAX_VALUE : Math.abs(nextInt); + this.id = "widget_" + String.valueOf(nextInt); addParameter("id", this.id); } } @@ -366,21 +376,21 @@ return null; if(obj instanceof Date) { - return RFC3339_FORMAT.format((Date) obj); + return MessageFormat.format(RFC3339_PATTERN, (Date) obj); } else if(obj instanceof Calendar) { - return RFC3339_FORMAT.format(((Calendar) obj).getTime()); + return MessageFormat.format(RFC3339_PATTERN, ((Calendar) obj).getTime()); } else { // try to parse a date String dateStr = obj.toString(); if(dateStr.equalsIgnoreCase("today")) - return RFC3339_FORMAT.format(new Date()); + return MessageFormat.format(RFC3339_PATTERN, new Date()); Date date = null; //formats used to parse the date List<DateFormat> formats = new ArrayList<DateFormat>(); - formats.add(RFC3339_FORMAT); + formats.add(new SimpleDateFormat(RFC3339_FORMAT)); formats.add(SimpleDateFormat.getTimeInstance(DateFormat.SHORT)); formats.add(SimpleDateFormat.getDateInstance(DateFormat.SHORT)); formats.add(SimpleDateFormat.getDateInstance(DateFormat.MEDIUM)); @@ -401,7 +411,7 @@ try { date = format.parse(dateStr); if (date != null) - return RFC3339_FORMAT.format(date); + return MessageFormat.format(RFC3339_PATTERN, date); } catch (Exception e) { //keep going } Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java?rev=611999&r1=611998&r2=611999&view=diff ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java Mon Jan 14 19:06:41 2008 @@ -127,6 +127,7 @@ public class Submit extends FormButton implements RemoteBean { private static final Logger LOG = LoggerFactory.getLogger(Submit.class); + private final static transient Random RANDOM = new Random(); final public static String TEMPLATE = "submit"; @@ -239,8 +240,11 @@ boolean generateId = !(Boolean)stack.getContext().get(Head.PARSE_CONTENT); addParameter("pushId", generateId); if ((this.id == null || this.id.length() == 0) && generateId) { - Random random = new Random(); - this.id = "widget_" + Math.abs(random.nextInt()); + // resolves Math.abs(Integer.MIN_VALUE) issue reported by FindBugs + // http://findbugs.sourceforge.net/bugDescriptions.html#RV_ABSOLUTE_VALUE_OF_RANDOM_INT + int nextInt = RANDOM.nextInt(); + nextInt = nextInt == Integer.MIN_VALUE ? Integer.MAX_VALUE : Math.abs(nextInt); + this.id = "widget_" + String.valueOf(nextInt); addParameter("id", this.id); } } Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TabbedPanel.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TabbedPanel.java?rev=611999&r1=611998&r2=611999&view=diff ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TabbedPanel.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TabbedPanel.java Mon Jan 14 19:06:41 2008 @@ -83,6 +83,7 @@ public static final String TEMPLATE = "tabbedpanel"; public static final String TEMPLATE_CLOSE = "tabbedpanel-close"; final private static String COMPONENT_NAME = TabbedPanel.class.getName(); + private final static transient Random RANDOM = new Random(); protected String selectedTab; protected String closeButton; @@ -130,8 +131,11 @@ boolean generateId = !(Boolean)stack.getContext().get(Head.PARSE_CONTENT); addParameter("pushId", generateId); if ((this.id == null || this.id.length() == 0) && generateId) { - Random random = new Random(); - this.id = "widget_" + Math.abs(random.nextInt()); + // resolves Math.abs(Integer.MIN_VALUE) issue reported by FindBugs + // http://findbugs.sourceforge.net/bugDescriptions.html#RV_ABSOLUTE_VALUE_OF_RANDOM_INT + int nextInt = RANDOM.nextInt(); + nextInt = nextInt == Integer.MIN_VALUE ? Integer.MAX_VALUE : Math.abs(nextInt); + this.id = "widget_" + String.valueOf(nextInt); addParameter("id", this.id); } } Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TextArea.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TextArea.java?rev=611999&r1=611998&r2=611999&view=diff ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TextArea.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TextArea.java Mon Jan 14 19:06:41 2008 @@ -37,6 +37,7 @@ */ @StrutsTag(name="textarea", tldTagClass="org.apache.struts2.dojo.views.jsp.ui.TextareaTag", description="Renders Dojo Editor2 widget") public class TextArea extends org.apache.struts2.components.TextArea { + private final static transient Random RANDOM = new Random(); public TextArea(ValueStack stack, HttpServletRequest request, HttpServletResponse response) { @@ -49,8 +50,11 @@ boolean generateId = !(Boolean)stack.getContext().get(Head.PARSE_CONTENT); addParameter("pushId", generateId); if ((this.id == null || this.id.length() == 0) && generateId) { - Random random = new Random(); - this.id = "widget_" + Math.abs(random.nextInt()); + // resolves Math.abs(Integer.MIN_VALUE) issue reported by FindBugs + // http://findbugs.sourceforge.net/bugDescriptions.html#RV_ABSOLUTE_VALUE_OF_RANDOM_INT + int nextInt = RANDOM.nextInt(); + nextInt = nextInt == Integer.MIN_VALUE ? Integer.MAX_VALUE : Math.abs(nextInt); + this.id = "widget_" + String.valueOf(nextInt); addParameter("id", this.id); } } Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Tree.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Tree.java?rev=611999&r1=611998&r2=611999&view=diff ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Tree.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Tree.java Mon Jan 14 19:06:41 2008 @@ -105,6 +105,7 @@ private static final String TEMPLATE = "tree-close"; private static final String OPEN_TEMPLATE = "tree"; + private final static transient Random RANDOM = new Random(); protected String toggle; protected String selectedNotifyTopics; @@ -256,8 +257,11 @@ boolean generateId = !(Boolean)stack.getContext().get(Head.PARSE_CONTENT); addParameter("pushId", generateId); if ((this.id == null || this.id.length() == 0) && generateId) { - Random random = new Random(); - this.id = "widget_" + Math.abs(random.nextInt()); + // resolves Math.abs(Integer.MIN_VALUE) issue reported by FindBugs + // http://findbugs.sourceforge.net/bugDescriptions.html#RV_ABSOLUTE_VALUE_OF_RANDOM_INT + int nextInt = RANDOM.nextInt(); + nextInt = nextInt == Integer.MIN_VALUE ? Integer.MAX_VALUE : Math.abs(nextInt); + this.id = "widget_" + String.valueOf(nextInt); addParameter("id", this.id); } @@ -539,4 +543,5 @@ this.errorNotifyTopics = errorNotifyTopics; } } + Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TreeNode.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TreeNode.java?rev=611999&r1=611998&r2=611999&view=diff ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TreeNode.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/TreeNode.java Mon Jan 14 19:06:41 2008 @@ -87,6 +87,7 @@ public class TreeNode extends ClosingUIBean { private static final String TEMPLATE = "treenode-close"; private static final String OPEN_TEMPLATE = "treenode"; + private final static transient Random RANDOM = new Random(); public TreeNode(ValueStack stack, HttpServletRequest request, HttpServletResponse response) { super(stack, request, response); @@ -117,8 +118,11 @@ boolean generateId = !(Boolean)stack.getContext().get(Head.PARSE_CONTENT); addParameter("pushId", generateId); if ((this.id == null || this.id.length() == 0) && generateId) { - Random random = new Random(); - this.id = "widget_" + Math.abs(random.nextInt()); + // resolves Math.abs(Integer.MIN_VALUE) issue reported by FindBugs + // http://findbugs.sourceforge.net/bugDescriptions.html#RV_ABSOLUTE_VALUE_OF_RANDOM_INT + int nextInt = RANDOM.nextInt(); + nextInt = nextInt == Integer.MIN_VALUE ? Integer.MAX_VALUE : Math.abs(nextInt); + this.id = "widget_" + String.valueOf(nextInt); addParameter("id", this.id); }