You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by hu...@apache.org on 2008/01/15 04:06:42 UTC
svn commit: r611999 - in
/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components:
AbstractRemoteBean.java Autocompleter.java DateTimePicker.java Submit.java
TabbedPanel.java TextArea.java Tree.java TreeNode.java
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);
}