You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by tv...@apache.org on 2019/03/03 10:31:06 UTC

svn commit: r1854685 - in /turbine/core/trunk/src: java/org/apache/turbine/util/BrowserDetector.java test/org/apache/turbine/util/BrowserDetectorTest.java

Author: tv
Date: Sun Mar  3 10:31:05 2019
New Revision: 1854685

URL: http://svn.apache.org/viewvc?rev=1854685&view=rev
Log:
Replace unmaintained uadetector with yauaa

Modified:
    turbine/core/trunk/src/java/org/apache/turbine/util/BrowserDetector.java
    turbine/core/trunk/src/test/org/apache/turbine/util/BrowserDetectorTest.java

Modified: turbine/core/trunk/src/java/org/apache/turbine/util/BrowserDetector.java
URL: http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/util/BrowserDetector.java?rev=1854685&r1=1854684&r2=1854685&view=diff
==============================================================================
--- turbine/core/trunk/src/java/org/apache/turbine/util/BrowserDetector.java (original)
+++ turbine/core/trunk/src/java/org/apache/turbine/util/BrowserDetector.java Sun Mar  3 10:31:05 2019
@@ -19,17 +19,18 @@ package org.apache.turbine.util;
  * under the License.
  */
 
-import java.util.HashMap;
-import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import nl.basjes.parse.useragent.UserAgent;
+import nl.basjes.parse.useragent.UserAgentAnalyzer;
 
-import net.sf.uadetector.OperatingSystem;
-import net.sf.uadetector.ReadableUserAgent;
-import net.sf.uadetector.UserAgentStringParser;
-import net.sf.uadetector.VersionNumber;
-import net.sf.uadetector.service.UADetectorServiceFactory;
 /**
  * This class parses the user agent string and provides getters for
- * its parts. It uses UADetector (http://uadetector.sourceforge.net/)
+ * its parts. It uses YAUAA (https://yauaa.basjes.nl/)
+ *
+ * The initialization step for a full UserAgentAnalyzer
+ * (i.e. all fields) usually takes something in the range of 2-5 seconds.
  *
  * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
  * @author <a href="mailto:leon@clearink.com">Leon Atkisnon</a>
@@ -42,13 +43,18 @@ public class BrowserDetector
     /** The user agent string. */
     private String userAgentString = "";
 
-    /** The user agent cache. */
-    private static volatile Map<String, ReadableUserAgent> userAgentCache =
-            new HashMap<String, ReadableUserAgent>();
-
     /** The user agent parser */
-    private static UserAgentStringParser parser =
-            UADetectorServiceFactory.getCachingAndUpdatingParser();
+    private static UserAgentAnalyzer uaa = UserAgentAnalyzer
+            .newBuilder()
+            .withFields(UserAgent.AGENT_NAME,
+                    UserAgent.AGENT_VERSION,
+                    UserAgent.OPERATING_SYSTEM_NAME)
+            .hideMatcherLoadStats()
+            .build();
+
+    /** The user agent cache. */
+    private static volatile ConcurrentMap<String, UserAgent> userAgentCache =
+            new ConcurrentHashMap<>();
 
     /** The browser name specified in the user agent string. */
     private String browserName = "";
@@ -72,7 +78,15 @@ public class BrowserDetector
     public BrowserDetector(String userAgentString)
     {
         this.userAgentString = userAgentString;
-        parse();
+        UserAgent userAgent = getUserAgent();
+
+        // Get the browser name and version.
+        browserName = userAgent.getValue(UserAgent.AGENT_NAME);
+        String version = userAgent.getValue(UserAgent.AGENT_VERSION);
+        browserVersion = toFloat(version);
+
+        // Try to figure out what platform.
+        browserPlatform = userAgent.getValue(UserAgent.OPERATING_SYSTEM_NAME);
     }
 
     /**
@@ -130,32 +144,19 @@ public class BrowserDetector
      *
      * @return A user agent.
      */
-    public ReadableUserAgent getUserAgent()
+    public UserAgent getUserAgent()
     {
-        return userAgentCache.get(userAgentString);
+        return parse(userAgentString);
     }
 
     /**
      * Helper method to initialize this class.
+     *
+     * @param userAgentString the user agent string
      */
-    private void parse()
+    private static UserAgent parse(String userAgentString)
     {
-        ReadableUserAgent userAgent = userAgentCache.get(userAgentString);
-
-        if (userAgent == null)
-        {
-            userAgent = parser.parse(userAgentString);
-            userAgentCache.put(userAgentString, userAgent);
-        }
-
-        // Get the browser name and version.
-        browserName = userAgent.getName();
-        VersionNumber version = userAgent.getVersionNumber();
-        browserVersion = toFloat(version.toVersionString());
-
-        // Try to figure out what platform.
-        OperatingSystem os = userAgent.getOperatingSystem();
-        browserPlatform = os.getFamilyName();
+        return userAgentCache.computeIfAbsent(userAgentString, uaa::parse);
     }
 
     /**
@@ -168,5 +169,4 @@ public class BrowserDetector
     {
         return Float.parseFloat(s);
     }
-
 }

Modified: turbine/core/trunk/src/test/org/apache/turbine/util/BrowserDetectorTest.java
URL: http://svn.apache.org/viewvc/turbine/core/trunk/src/test/org/apache/turbine/util/BrowserDetectorTest.java?rev=1854685&r1=1854684&r2=1854685&view=diff
==============================================================================
--- turbine/core/trunk/src/test/org/apache/turbine/util/BrowserDetectorTest.java (original)
+++ turbine/core/trunk/src/test/org/apache/turbine/util/BrowserDetectorTest.java Sun Mar  3 10:31:05 2019
@@ -40,7 +40,7 @@ public class BrowserDetectorTest extends
         BrowserDetector bd = new BrowserDetector(userAgent);
         assertEquals("Firefox", bd.getBrowserName());
         assertEquals(1.5f, bd.getBrowserVersion(), 0.0f);
-        assertEquals("Windows", bd.getBrowserPlatform());
+        assertEquals("Windows NT", bd.getBrowserPlatform());
     }
 
     @Test public void testOpera()
@@ -49,27 +49,27 @@ public class BrowserDetectorTest extends
         BrowserDetector bd = new BrowserDetector(userAgent);
         assertEquals("Opera", bd.getBrowserName());
         assertEquals(8.02f, bd.getBrowserVersion(), 0.0f);
-        assertEquals("Windows", bd.getBrowserPlatform());
+        assertEquals("Windows NT", bd.getBrowserPlatform());
 
         userAgent = "Opera/7.51 (Windows NT 5.1; U) [en]";
         bd = new BrowserDetector(userAgent);
         assertEquals("Opera", bd.getBrowserName());
         assertEquals(7.51f, bd.getBrowserVersion(), 0.0f);
-        assertEquals("Windows", bd.getBrowserPlatform());
+        assertEquals("Windows NT", bd.getBrowserPlatform());
     }
 
     @Test public void testIE()
     {
         String userAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
         BrowserDetector bd = new BrowserDetector(userAgent);
-        assertEquals("IE", bd.getBrowserName());
+        assertEquals("Internet Explorer", bd.getBrowserName());
         assertEquals(6.0f, bd.getBrowserVersion(), 0.0f);
-        assertEquals("Windows", bd.getBrowserPlatform());
+        assertEquals("Windows NT", bd.getBrowserPlatform());
 
         userAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";
         bd = new BrowserDetector(userAgent);
-        assertEquals("IE", bd.getBrowserName());
+        assertEquals("Internet Explorer", bd.getBrowserName());
         assertEquals(6.0f, bd.getBrowserVersion(), 0.0f);
-        assertEquals("Windows", bd.getBrowserPlatform());
+        assertEquals("Windows NT", bd.getBrowserPlatform());
     }
 }