From 85c1bb982abe89c1e60674784136e3db56722caf Mon Sep 17 00:00:00 2001 From: Wei Hsu Date: Wed, 19 Aug 2015 23:24:06 -0700 Subject: [PATCH 1/2] reduce ua_parser logging message from info to finer since they are mostly trace level msgs --- src/main/java/ua_parser/ManufactureParser.java | 4 ++-- src/main/java/ua_parser/Parser.java | 2 +- src/main/java/ua_parser/PlatformParser.java | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/ua_parser/ManufactureParser.java b/src/main/java/ua_parser/ManufactureParser.java index 1b08531..56e9057 100644 --- a/src/main/java/ua_parser/ManufactureParser.java +++ b/src/main/java/ua_parser/ManufactureParser.java @@ -36,13 +36,13 @@ public Manufacture parse(String uaString) { final Matcher matcher = pattern.matcher(uaString); if (matcher.find()) { - LOGGER.info("Found match in manufacture with key: " + entry.getKey()); + LOGGER.finer("Found match in manufacture with key: " + entry.getKey()); return new Manufacture(entry.getKey()); } } } - LOGGER.info("Could not find a manufacturer, using default manufaacture value"); + LOGGER.finer("Could not find a manufacturer, using default manufacture value"); return new Manufacture(Constants.OTHER); } diff --git a/src/main/java/ua_parser/Parser.java b/src/main/java/ua_parser/Parser.java index 06a75c8..c22cafc 100644 --- a/src/main/java/ua_parser/Parser.java +++ b/src/main/java/ua_parser/Parser.java @@ -51,7 +51,7 @@ public Parser(InputStream regexYaml) { } public Client parse(String agentString) { - LOGGER.info("Parsing UA: " + agentString); + LOGGER.finer("Parsing UA: " + agentString); UserAgent ua = parseUserAgent(agentString); OS os = parseOS(agentString); Device device = deviceParser.parse(agentString); diff --git a/src/main/java/ua_parser/PlatformParser.java b/src/main/java/ua_parser/PlatformParser.java index 68243fb..b53e25f 100644 --- a/src/main/java/ua_parser/PlatformParser.java +++ b/src/main/java/ua_parser/PlatformParser.java @@ -35,12 +35,12 @@ public Platform parse(String uaString) { } private boolean isMobile(String ua) { - LOGGER.info("Checking For Mobile Device"); + LOGGER.finer("Checking For Mobile Device"); return runPatternsOnString(mobileDevicePatters, ua); } private boolean isTablet(String ua) { - LOGGER.info("Checking For Tablet Device"); + LOGGER.finer("Checking For Tablet Device"); return runPatternsOnString(tabletDevicePatters, ua); } @@ -51,11 +51,11 @@ private boolean runPatternsOnString(Map patterns, String input) if (matcher.find()) { // Found a match - LOGGER.info("Found match in device with key: " + entry.getKey()); + LOGGER.finer("Found match in device with key: " + entry.getKey()); return true; } } - LOGGER.info("No match found, using default platform value"); + LOGGER.finer("No match found, using default platform value"); return false; } } From cb4bb84a3c2f3ce8cf7ef856d78ef2cc8e6e96ce Mon Sep 17 00:00:00 2001 From: Alain Caron Date: Thu, 15 Oct 2015 15:15:22 -0400 Subject: [PATCH 2/2] Modifying version number, avoid compiling regex more than once, fix bugs in Client --- pom.xml | 2 +- src/main/java/ua_parser/Client.java | 21 ++++---- src/main/java/ua_parser/DeviceParser.java | 4 +- src/main/java/ua_parser/Manufacture.java | 2 +- .../java/ua_parser/ManufactureParser.java | 51 +++++++++---------- src/main/java/ua_parser/Parser.java | 5 +- src/main/java/ua_parser/PlatformParser.java | 33 ++++++++---- 7 files changed, 64 insertions(+), 54 deletions(-) diff --git a/pom.xml b/pom.xml index 5e82292..538eeab 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ ua_parser ua-parser jar - 1.3.1-SNAPSHOT + 1.3.1.sociablelabs-SNAPSHOT ua-parser https://github.com/sociable/uap-java diff --git a/src/main/java/ua_parser/Client.java b/src/main/java/ua_parser/Client.java index 2d24286..f4c0c57 100644 --- a/src/main/java/ua_parser/Client.java +++ b/src/main/java/ua_parser/Client.java @@ -42,23 +42,22 @@ public Client(UserAgent userAgent, OS os, Device device, Platform platform, Manu * @return A string with format X.Y.Z */ public String calculateBrowserVersion() { - final String browserVersion; // Build the browser version from all it's parts if (this.userAgent.major != null) { - browserVersion = this.userAgent.major; + final StringBuilder builder = new StringBuilder(this.userAgent.major); if (this.userAgent.minor != null) { - browserVersion.concat("."+this.userAgent.minor); + builder.append('.').append(this.userAgent.minor); if (this.userAgent.patch != null) { - browserVersion.concat("."+this.userAgent.patch); + builder.append('.').append(this.userAgent.patch); } } + return builder.toString(); } else { - browserVersion = Constants.UNDEFINED; + return Constants.UNDEFINED; } - return browserVersion; } /** @@ -68,17 +67,17 @@ public String calculateBrowserVersion() { * @return iOS 8, iOS 7, Android 2.0 */ public String calculateOSName() { - final String osName = this.os.family; + final StringBuilder osName = new StringBuilder(this.os.family); if(this.os.major != null) { - osName.concat(" " + this.os.major); + osName.append(' ').append(this.os.major); if (this.os.minor != null) { - osName.concat("." + this.os.minor); + osName.append('.').append(this.os.minor); } } - return osName; + return osName.toString(); } @Override @@ -106,4 +105,4 @@ public String toString() { userAgent, os, device); } -} \ No newline at end of file +} diff --git a/src/main/java/ua_parser/DeviceParser.java b/src/main/java/ua_parser/DeviceParser.java index 868b5ba..7861997 100644 --- a/src/main/java/ua_parser/DeviceParser.java +++ b/src/main/java/ua_parser/DeviceParser.java @@ -58,7 +58,7 @@ public static DeviceParser fromList(List> configList) { return new DeviceParser(configPatterns); } - protected static DevicePattern patternFromMap(Map configMap) { + private static DevicePattern patternFromMap(Map configMap) { String regex = configMap.get("regex"); if (regex == null) { throw new IllegalArgumentException("Device is missing regex"); @@ -115,4 +115,4 @@ private List getSubstitutions(String deviceReplacement) { } -} \ No newline at end of file +} diff --git a/src/main/java/ua_parser/Manufacture.java b/src/main/java/ua_parser/Manufacture.java index a95fa0d..163f245 100644 --- a/src/main/java/ua_parser/Manufacture.java +++ b/src/main/java/ua_parser/Manufacture.java @@ -16,7 +16,7 @@ public boolean equals(Object other) { if (!(other instanceof Manufacture)) return false; final Manufacture o = (Manufacture) other; - return ((this.name != null) && this.name.equals(o.name)) || this.name == o.name; + return this.name == null ? o.name == null : this.name.equals(o.name); } @Override diff --git a/src/main/java/ua_parser/ManufactureParser.java b/src/main/java/ua_parser/ManufactureParser.java index 56e9057..db3b331 100644 --- a/src/main/java/ua_parser/ManufactureParser.java +++ b/src/main/java/ua_parser/ManufactureParser.java @@ -7,8 +7,10 @@ package ua_parser; import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; import java.util.Map; +import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -19,7 +21,18 @@ public class ManufactureParser { private final Logger LOGGER = Logger.getLogger(PlatformParser.class.getName()); - public ManufactureParser() { } + public ManufactureParser() { + } + + private static final Multimap MANUFACTURER_OS_PATTERN_MAP = + ImmutableMultimap.builder() + .put(Constants.APPLE, Pattern.compile("iOS")) + .put(Constants.APPLE, Pattern.compile("OS X")) + .put(Constants.APPLE, Pattern.compile("Macintosh")) + .put(Constants.GOOGLE, Pattern.compile("Android")) + .put(Constants.MICROSOFT, Pattern.compile("Windows")) + .put(Constants.LINUX, Pattern.compile("Linux")) + .build(); /** * Calculate the manufacture of the hosting OS from the User Agent @@ -28,37 +41,21 @@ public ManufactureParser() { } * @return The manufacture of the host OS */ public Manufacture parse(String uaString) { - for (Map.Entry entry : getManufactureOsMap().entries()) { - - // Itterate over all expressions assigned to a key - for (String regex : getManufactureOsMap().get(entry.getKey())) { - final Pattern pattern = Pattern.compile(regex); - final Matcher matcher = pattern.matcher(uaString); - - if (matcher.find()) { - LOGGER.finer("Found match in manufacture with key: " + entry.getKey()); - return new Manufacture(entry.getKey()); + for (Map.Entry entry : MANUFACTURER_OS_PATTERN_MAP.entries()) { + final String key = entry.getKey(); + final Pattern pattern = entry.getValue(); + final Matcher matcher = pattern.matcher(uaString); + + if (matcher.find()) { + if (LOGGER.isLoggable(Level.FINEST)) { + LOGGER.finest("Found match in manufacture with key: " + key); } + return new Manufacture(key); } } - LOGGER.finer("Could not find a manufacturer, using default manufacture value"); + LOGGER.finest("Could not find a manufacturer, using default manufacture value"); return new Manufacture(Constants.OTHER); } - /** - * A simple map with manufactures along with a regex for it's representation - * - * @return a immutable map with manufacture => regex - */ - private static ImmutableMultimap getManufactureOsMap() { - return ImmutableMultimap.builder(). - put(Constants.APPLE, "iOS"). - put(Constants.APPLE, "OS X"). - put(Constants.APPLE, "Macintosh"). - put(Constants.GOOGLE, "Android"). - put(Constants.MICROSOFT, "Windows"). - put(Constants.LINUX, "Linux"). - build(); - } } diff --git a/src/main/java/ua_parser/Parser.java b/src/main/java/ua_parser/Parser.java index c22cafc..3410ea6 100644 --- a/src/main/java/ua_parser/Parser.java +++ b/src/main/java/ua_parser/Parser.java @@ -20,6 +20,7 @@ import java.io.InputStream; import java.util.List; import java.util.Map; +import java.util.logging.Level; import java.util.logging.Logger; import org.yaml.snakeyaml.Yaml; @@ -51,7 +52,9 @@ public Parser(InputStream regexYaml) { } public Client parse(String agentString) { - LOGGER.finer("Parsing UA: " + agentString); + if (LOGGER.isLoggable(Level.FINEST)) { + LOGGER.finest("Parsing UA: " + agentString); + } UserAgent ua = parseUserAgent(agentString); OS os = parseOS(agentString); Device device = deviceParser.parse(agentString); diff --git a/src/main/java/ua_parser/PlatformParser.java b/src/main/java/ua_parser/PlatformParser.java index b53e25f..289868a 100644 --- a/src/main/java/ua_parser/PlatformParser.java +++ b/src/main/java/ua_parser/PlatformParser.java @@ -6,19 +6,30 @@ */ package ua_parser; +import com.google.common.collect.ImmutableMap; + import java.util.Map; +import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PlatformParser { - private final Map mobileDevicePatters; - private final Map tabletDevicePatters; + private final Map mobileDevicePatters; + private final Map tabletDevicePatters; private final Logger LOGGER = Logger.getLogger(PlatformParser.class.getName()); public PlatformParser(Map mobileDevicePatters, Map tabletDevicePatters) { - this.mobileDevicePatters = mobileDevicePatters; - this.tabletDevicePatters = tabletDevicePatters; + this.mobileDevicePatters = toPatternMap(mobileDevicePatters); + this.tabletDevicePatters = toPatternMap(tabletDevicePatters); + } + + private static Map toPatternMap(Map stringPatternMap) { + final ImmutableMap.Builder builder = ImmutableMap.builder(); + for (Map.Entry entry : stringPatternMap.entrySet()) { + builder.put(entry.getKey(), Pattern.compile(entry.getValue())); + } + return builder.build(); } public Platform parse(String uaString) { @@ -35,27 +46,27 @@ public Platform parse(String uaString) { } private boolean isMobile(String ua) { - LOGGER.finer("Checking For Mobile Device"); return runPatternsOnString(mobileDevicePatters, ua); } private boolean isTablet(String ua) { - LOGGER.finer("Checking For Tablet Device"); return runPatternsOnString(tabletDevicePatters, ua); } - private boolean runPatternsOnString(Map patterns, String input) { - for (Map.Entry entry : patterns.entrySet()) { - final Pattern pattern = Pattern.compile(entry.getValue()); + private boolean runPatternsOnString(Map patterns, String input) { + for (Map.Entry entry : patterns.entrySet()) { + final Pattern pattern = entry.getValue(); final Matcher matcher = pattern.matcher(input); if (matcher.find()) { // Found a match - LOGGER.finer("Found match in device with key: " + entry.getKey()); + if (LOGGER.isLoggable(Level.FINEST)) { + LOGGER.finest("Found match in device with key: " + entry.getKey()); + } return true; } } - LOGGER.finer("No match found, using default platform value"); + LOGGER.finest("No match found, using default platform value"); return false; } }