org.wings.session.CachedUserAgentStringParser Maven / Gradle / Ivy
The newest version!
package org.wings.session;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import net.sf.uadetector.ReadableUserAgent;
import net.sf.uadetector.UserAgentStringParser;
import net.sf.uadetector.service.UADetectorServiceFactory;
final public class CachedUserAgentStringParser implements UserAgentStringParser {
final private UserAgentStringParser parser = UADetectorServiceFactory.getCachingAndUpdatingParser();
final private ConcurrentMap cache = new ConcurrentHashMap<>();
static final private UserAgentStringParser instance = new CachedUserAgentStringParser();
private CachedUserAgentStringParser() {}
static public UserAgentStringParser getParser() {
return instance;
}
/**
* {@inheritDoc}
*/
@Override
public String getDataVersion() {
return parser.getDataVersion();
}
/**
* @⁄null
*/
@Override
public ReadableUserAgent parse(final String userAgentString) {
ReadableUserAgent result = cache.get(userAgentString);
if (result == null) {
result = parser.parse(userAgentString);
cache.putIfAbsent(userAgentString, result);
}
return result;
}
@Override
public void shutdown() {
// do nothing
}
}