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);
         }