You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devicemap.apache.org by wk...@apache.org on 2016/06/19 02:27:23 UTC

svn commit: r1749123 - in /devicemap/trunk/clients/1.0/java: ./ client/ client/src/main/java/org/apache/devicemap/ client/src/main/java/org/apache/devicemap/loader/ client/src/main/java/org/apache/devicemap/loader/resource/ console/

Author: wkeil
Date: Sun Jun 19 02:27:23 2016
New Revision: 1749123

URL: http://svn.apache.org/viewvc?rev=1749123&view=rev
Log:
DMAP-111: Improve Web Examples 

Task-Url: https://issues.apache.org/jira/browse/DMAP-111

Modified:
    devicemap/trunk/clients/1.0/java/client/pom.xml
    devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/DeviceMapClient.java
    devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/DeviceMapFactory.java
    devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/loader/LoaderFactory.java
    devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/loader/resource/URLResource.java
    devicemap/trunk/clients/1.0/java/console/pom.xml
    devicemap/trunk/clients/1.0/java/pom.xml

Modified: devicemap/trunk/clients/1.0/java/client/pom.xml
URL: http://svn.apache.org/viewvc/devicemap/trunk/clients/1.0/java/client/pom.xml?rev=1749123&r1=1749122&r2=1749123&view=diff
==============================================================================
--- devicemap/trunk/clients/1.0/java/client/pom.xml (original)
+++ devicemap/trunk/clients/1.0/java/client/pom.xml Sun Jun 19 02:27:23 2016
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.devicemap</groupId>
     <artifactId>devicemap-java</artifactId>
-    <version>1.1.1-SNAPSHOT</version>
+    <version>1.2.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.apache.devicemap</groupId>

Modified: devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/DeviceMapClient.java
URL: http://svn.apache.org/viewvc/devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/DeviceMapClient.java?rev=1749123&r1=1749122&r2=1749123&view=diff
==============================================================================
--- devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/DeviceMapClient.java (original)
+++ devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/DeviceMapClient.java Sun Jun 19 02:27:23 2016
@@ -34,187 +34,195 @@ import org.apache.devicemap.loader.Loade
 
 /**
  * @author Werner Keil
- * @version 1.0.12
+ * @version 1.0.13
  */
 public class DeviceMapClient {
-	private static final Logger LOG = Logger.getLogger(DeviceMapClient.class
-			.getName());
-	private static final java.util.regex.Pattern TEXT_SPLIT_PATTERN = java.util.regex.Pattern
-			.compile(" |-|_|/|\\\\|\\[|\\]|\\(|\\)|;");
-
-	private static long initCount = 0;
-
-	// indexes
-	private Map<String, DeviceType> devices;
-	private Map<String, List<DeviceType>> patterns;
-
-	private final Device unknown;
-
-	public DeviceMapClient() {
-		devices = null;
-		patterns = null;
-		Map<String, String> uAttributes = new HashMap<String, String>();
-		uAttributes.put("id", Device.UNKNOWN_ID);
-		uAttributes = Collections.unmodifiableMap(uAttributes);
-		unknown = new Device(Device.UNKNOWN_ID, uAttributes);
-	}
-
-	public void initDeviceData(LoaderOption option) throws IOException {
-		initDeviceData(option, null);
-	}
-
-	public synchronized void initDeviceData(LoaderOption option, String path)
-			throws IOException {
-		devices = LoaderFactory.getLoader(option, path).getData();
-		initCount++;
-
-		if (initCount % 1000 == 0) {
-			LOG.log(Level.WARNING,
-					"Possible device data over-initialization detected");
-		}
-
-		if (devices == null) {
-			patterns = null;
-			return;
-		}
-		createIndex();
-	}
-
-	private void createIndex() {
-		patterns = new HashMap<String, List<DeviceType>>(8000);
-
-		for (DeviceType device : devices.values()) {
-			for (Pattern pattern : device.getPatternSet().getPatterns()) {
-				for (int i = 0; i < pattern.getPatternParts().size(); i++) {
-					String part = pattern.getPatternParts().get(i);
-
-					// duplicate
-					if (patterns.get(part) != null) {
-						if (i == (pattern.getPatternParts().size() - 1)
-								&& !patterns.get(part).contains(device)) {
-							patterns.get(part).add(device);
-						}
-					} else {
-						List<DeviceType> single = new ArrayList<DeviceType>();
-						single.add(device);
-						patterns.put(part, single);
-					}
-				}
-			}
-		}
-	}
-
-	public Map<String, String> classify(String text) {
-		if (devices == null) {
-			throw new RuntimeException("Uninitialized device index");
-		}
-
-		if (text == null) {
-			return null;
-		}
-
-		Set<String> hitPatterns = new HashSet<String>();
-		Set<DeviceType> hitDevices = new HashSet<DeviceType>();
-		DeviceType winner = null;
-		Pattern winnerPattern = null;
-		LOG.log(Level.FINE, "classify: ''{0}''", text);
-		List<String> parts = split(text);
-
-		// generate ngrams upto size 4
-		for (int i = 0; i < parts.size(); i++) {
-			String pattern = "";
-			for (int j = 0; j < 4 && (j + i) < parts.size(); j++) {
-				pattern += parts.get(i + j);
-				List<DeviceType> dlist = patterns.get(pattern);
-				if (dlist != null) {
-					hitPatterns.add(pattern);
-					hitDevices.addAll(dlist);
-					for (DeviceType device : dlist) {
-						LOG.log(Level.FINER,
-								"Hit found: ''{0}'' => id: ''{1}'' {2}",
-								new Object[] { pattern, device.getId(),
-										device.getPatternSet() });
-					}
-				}
-			}
-		}
-
-		// look for the strongest hit
-		for (DeviceType device : hitDevices) {
-			Pattern pattern = device.getPatternSet().isValid(hitPatterns);
-			if (pattern == null) {
-				continue;
+    private static final Logger LOG = Logger.getLogger(DeviceMapClient.class.getName());
+    private static final java.util.regex.Pattern TEXT_SPLIT_PATTERN = java.util.regex.Pattern
+	    .compile(" |-|_|/|\\\\|\\[|\\]|\\(|\\)|;");
+
+    private static long initCount = 0;
+
+    // indexes
+    private Map<String, DeviceType> devices;
+    private Map<String, List<DeviceType>> patterns;
+
+    private final Device unknown;
+
+    public DeviceMapClient() {
+	devices = null;
+	patterns = null;
+	Map<String, String> uAttributes = new HashMap<String, String>();
+	uAttributes.put("id", Device.UNKNOWN_ID);
+	uAttributes = Collections.unmodifiableMap(uAttributes);
+	unknown = new Device(Device.UNKNOWN_ID, uAttributes);
+    }
+
+    public void initDeviceData(LoaderOption option, boolean snapshot) throws IOException {
+	initDeviceData(option, null, snapshot);
+    }
+    
+    public void initDeviceData(LoaderOption option) throws IOException {
+	initDeviceData(option, false);
+    }
+
+    public synchronized void initDeviceData(LoaderOption option, String path,
+	    boolean snapshot) throws IOException {
+	devices = LoaderFactory.getLoader(option, path, snapshot).getData();
+	initCount++;
+
+	if (initCount % 1000 == 0) {
+	    LOG.log(Level.WARNING,
+		    "Possible device data over-initialization detected");
+	}
+
+	if (devices == null) {
+	    patterns = null;
+	    return;
+	}
+	createIndex();
+    }
+
+    public void initDeviceData(LoaderOption option, String path)
+	    throws IOException {
+	initDeviceData(option, path, false);
+    }
+
+    private void createIndex() {
+	patterns = new HashMap<String, List<DeviceType>>(8000);
+
+	for (DeviceType device : devices.values()) {
+	    for (Pattern pattern : device.getPatternSet().getPatterns()) {
+		for (int i = 0; i < pattern.getPatternParts().size(); i++) {
+		    String part = pattern.getPatternParts().get(i);
+
+		    // duplicate
+		    if (patterns.get(part) != null) {
+			if (i == (pattern.getPatternParts().size() - 1)
+				&& !patterns.get(part).contains(device)) {
+			    patterns.get(part).add(device);
 			}
-
+		    } else {
+			List<DeviceType> single = new ArrayList<DeviceType>();
+			single.add(device);
+			patterns.put(part, single);
+		    }
+		}
+	    }
+	}
+    }
+
+    public Map<String, String> classify(String text) {
+	if (devices == null) {
+	    throw new RuntimeException("Uninitialized device index");
+	}
+
+	if (text == null) {
+	    return null;
+	}
+
+	Set<String> hitPatterns = new HashSet<String>();
+	Set<DeviceType> hitDevices = new HashSet<DeviceType>();
+	DeviceType winner = null;
+	Pattern winnerPattern = null;
+	LOG.log(Level.FINE, "classify: ''{0}''", text);
+	List<String> parts = split(text);
+
+	// generate ngrams upto size 4
+	for (int i = 0; i < parts.size(); i++) {
+	    String pattern = "";
+	    for (int j = 0; j < 4 && (j + i) < parts.size(); j++) {
+		pattern += parts.get(i + j);
+		List<DeviceType> dlist = patterns.get(pattern);
+		if (dlist != null) {
+		    hitPatterns.add(pattern);
+		    hitDevices.addAll(dlist);
+		    for (DeviceType device : dlist) {
 			LOG.log(Level.FINER,
-					"Hit candidate: ''{0}'' => ({1},{2})",
-					new Object[] { device.getId(), pattern.getType(),
-							pattern.getRank() });
-
-			if (winnerPattern == null
-					|| pattern.getRank() > winnerPattern.getRank()) {
-				winner = device;
-				winnerPattern = pattern;
-			}
-		}
-
-		if (winner != null) {
-			LOG.log(Level.FINE, "Result: {0}", winner);
-
-			UserAgent userAgent = UserAgent.of(text);
-			LOG.log(Level.FINE, "User Agent: {0}", userAgent);
-			// fixFromUserAgent(winner, userAgent);
-			return fixFromUserAgent(winner, userAgent).getAttributes();
-		} else {
-			return null;
-		}
-	}
-
-	private static List<String> split(String text) {
-		String[] parts = TEXT_SPLIT_PATTERN.split(text);
-		List<String> nonemptyParts = new ArrayList<String>();
-		for (String part : parts) {
-			String normalizedPart = Pattern.normalize(part);
-			if (normalizedPart != null && !normalizedPart.isEmpty())
-				nonemptyParts.add(normalizedPart);
-		}
-		return nonemptyParts;
-	}
-
-	public Device classifyDevice(String text) {
-		Map<String, String> m = classify(text);
-		if (m == null) {
-			return unknown;
-		}
-		return new Device(m.get("id"), m);
-	}
-
-	public int getDeviceCount() {
-		if (devices == null) {
-			return -1;
-		}
-		return devices.size();
-	}
-
-	public int getPatternCount() {
-		if (patterns == null) {
-			return -1;
-		}
-		return patterns.size();
-	}
-
-	public long getNodeCount() {
-		if (patterns == null) {
-			return -1;
-		}
-		long count = 0;
-		for (List<DeviceType> pDevices : patterns.values()) {
-			count += pDevices.size();
-		}
-		return count;
-	}
-
-	Map<String, DeviceType> getDevices() {
-		return devices;
-	}
+				"Hit found: ''{0}'' => id: ''{1}'' {2}",
+				new Object[] { pattern, device.getId(),
+					device.getPatternSet() });
+		    }
+		}
+	    }
+	}
+
+	// look for the strongest hit
+	for (DeviceType device : hitDevices) {
+	    Pattern pattern = device.getPatternSet().isValid(hitPatterns);
+	    if (pattern == null) {
+		continue;
+	    }
+
+	    LOG.log(Level.FINER,
+		    "Hit candidate: ''{0}'' => ({1},{2})",
+		    new Object[] { device.getId(), pattern.getType(),
+			    pattern.getRank() });
+
+	    if (winnerPattern == null
+		    || pattern.getRank() > winnerPattern.getRank()) {
+		winner = device;
+		winnerPattern = pattern;
+	    }
+	}
+
+	if (winner != null) {
+	    LOG.log(Level.FINE, "Result: {0}", winner);
+
+	    UserAgent userAgent = UserAgent.of(text);
+	    LOG.log(Level.FINE, "User Agent: {0}", userAgent);
+	    // fixFromUserAgent(winner, userAgent);
+	    return fixFromUserAgent(winner, userAgent).getAttributes();
+	} else {
+	    return null;
+	}
+    }
+
+    private static List<String> split(String text) {
+	String[] parts = TEXT_SPLIT_PATTERN.split(text);
+	List<String> nonemptyParts = new ArrayList<String>();
+	for (String part : parts) {
+	    String normalizedPart = Pattern.normalize(part);
+	    if (normalizedPart != null && !normalizedPart.isEmpty())
+		nonemptyParts.add(normalizedPart);
+	}
+	return nonemptyParts;
+    }
+
+    public Device classifyDevice(String text) {
+	Map<String, String> m = classify(text);
+	if (m == null) {
+	    return unknown;
+	}
+	return new Device(m.get("id"), m);
+    }
+
+    public int getDeviceCount() {
+	if (devices == null) {
+	    return -1;
+	}
+	return devices.size();
+    }
+
+    public int getPatternCount() {
+	if (patterns == null) {
+	    return -1;
+	}
+	return patterns.size();
+    }
+
+    public long getNodeCount() {
+	if (patterns == null) {
+	    return -1;
+	}
+	long count = 0;
+	for (List<DeviceType> pDevices : patterns.values()) {
+	    count += pDevices.size();
+	}
+	return count;
+    }
+
+    Map<String, DeviceType> getDevices() {
+	return devices;
+    }
 }

Modified: devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/DeviceMapFactory.java
URL: http://svn.apache.org/viewvc/devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/DeviceMapFactory.java?rev=1749123&r1=1749122&r2=1749123&view=diff
==============================================================================
--- devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/DeviceMapFactory.java (original)
+++ devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/DeviceMapFactory.java Sun Jun 19 02:27:23 2016
@@ -21,11 +21,14 @@ package org.apache.devicemap;
 import java.io.IOException;
 import org.apache.devicemap.loader.LoaderOption;
 
-public class DeviceMapFactory {
-
+/**
+ * @author Werner Keil
+ * @version 1.1
+ */
+public final class DeviceMapFactory {
     private static DeviceMapClient client = null;
     private static volatile boolean initialized = false;
-
+    
     private static final LoaderOption DEFAULT = LoaderOption.JAR;
 
     private DeviceMapFactory() {
@@ -35,17 +38,21 @@ public class DeviceMapFactory {
         return getClient(DEFAULT, null);
     }
 
+    public static DeviceMapClient getClient(LoaderOption option, boolean snapshot) {
+        return getClient(option, null, snapshot);
+    }
+    
     public static DeviceMapClient getClient(LoaderOption option) {
-        return getClient(option, null);
+        return getClient(option, false);
     }
 
-    public static DeviceMapClient getClient(LoaderOption option, String path) {
+    public static DeviceMapClient getClient(LoaderOption option, String path, boolean snapshot) {
         if (!initialized) {
             synchronized (DeviceMapFactory.class) {
                 if (!initialized) {
                     client = new DeviceMapClient();
                     try {
-                        client.initDeviceData(option, path);
+                        client.initDeviceData(option, path, snapshot);
                     } catch (IOException ex) {
                         throw new RuntimeException(ex);
                     }
@@ -56,6 +63,10 @@ public class DeviceMapFactory {
         return client;
     }
     
+    public static DeviceMapClient getClient(LoaderOption option, String path) {
+	return getClient(option, path, false);
+    }
+    
     public static void resetClient() {
         initialized = false;
     }

Modified: devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/loader/LoaderFactory.java
URL: http://svn.apache.org/viewvc/devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/loader/LoaderFactory.java?rev=1749123&r1=1749122&r2=1749123&view=diff
==============================================================================
--- devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/loader/LoaderFactory.java (original)
+++ devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/loader/LoaderFactory.java Sun Jun 19 02:27:23 2016
@@ -26,9 +26,13 @@ import org.apache.devicemap.loader.impl.
 import org.apache.devicemap.loader.resource.URLResource;
 import org.apache.devicemap.loader.impl.UninitializedLoader;
 
-public class LoaderFactory {
+/**
+ * @author Werner Keil
+ * @version 1.1
+ */
+public abstract class LoaderFactory {
 
-    public static Loader getLoader(LoaderOption option, String path) {
+    public static Loader getLoader(LoaderOption option, String path, boolean snapshot) {
         switch (option) {
             case JAR: {
                 return new DDRLoader(new JarResource(path));
@@ -42,7 +46,12 @@ public class LoaderFactory {
             case NOOP: {
                 return new NoopLoader();
             }
-        }
-        return new UninitializedLoader();
+            default:
+        	return new UninitializedLoader();
+        }       
+    }
+    
+    public static Loader getLoader(LoaderOption option, String path) {
+	return getLoader(option, path, false);
     }
-}
+}
\ No newline at end of file

Modified: devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/loader/resource/URLResource.java
URL: http://svn.apache.org/viewvc/devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/loader/resource/URLResource.java?rev=1749123&r1=1749122&r2=1749123&view=diff
==============================================================================
--- devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/loader/resource/URLResource.java (original)
+++ devicemap/trunk/clients/1.0/java/client/src/main/java/org/apache/devicemap/loader/resource/URLResource.java Sun Jun 19 02:27:23 2016
@@ -24,25 +24,38 @@ import java.net.URL;
 
 import org.apache.devicemap.loader.Resource;
 
+/**
+ * @author Werner Keil
+ * @version 1.1
+ */
 public class URLResource implements Resource {
-
     //TODO: put on CDN of some kind
-    private static final String DEFAULT_PATH = "http://devicemap-vm.apache.org/data/latest";
+    private static final String LATEST_PATH = "http://devicemap-vm.apache.org/data/latest";
+    private static final String SNAPSHOT_PATH = "http://devicemap-vm.apache.org/data/snapshot";
 
     private final String path;
-
-    public URLResource(String path) {
+    private final boolean isSnapshot;
+    
+    public URLResource(String path, boolean snapshot) {
+	this.isSnapshot = snapshot;
         if (path == null) {
-            this.path = DEFAULT_PATH;
+            if (isSnapshot) {
+        	this.path = SNAPSHOT_PATH;
+            } else {
+        	this.path = LATEST_PATH;
+            }
         } else {
             this.path = path;
         }
     }
+    
+    public URLResource(String path) {
+	this(path, false);
+    }
 
     @Override
     public InputStream getResource(String file) throws IOException {
         String rpath = path + "/" + file;
         return new URL(rpath).openStream();
     }
-
 }

Modified: devicemap/trunk/clients/1.0/java/console/pom.xml
URL: http://svn.apache.org/viewvc/devicemap/trunk/clients/1.0/java/console/pom.xml?rev=1749123&r1=1749122&r2=1749123&view=diff
==============================================================================
--- devicemap/trunk/clients/1.0/java/console/pom.xml (original)
+++ devicemap/trunk/clients/1.0/java/console/pom.xml Sun Jun 19 02:27:23 2016
@@ -16,7 +16,7 @@
 	<parent>
 		<groupId>org.apache.devicemap</groupId>
 		<artifactId>devicemap-java</artifactId>
-		<version>1.1.1-SNAPSHOT</version>
+		<version>1.2.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>devicemap-java-console</artifactId>

Modified: devicemap/trunk/clients/1.0/java/pom.xml
URL: http://svn.apache.org/viewvc/devicemap/trunk/clients/1.0/java/pom.xml?rev=1749123&r1=1749122&r2=1749123&view=diff
==============================================================================
--- devicemap/trunk/clients/1.0/java/pom.xml (original)
+++ devicemap/trunk/clients/1.0/java/pom.xml Sun Jun 19 02:27:23 2016
@@ -23,7 +23,7 @@
 	<groupId>org.apache.devicemap</groupId>
 	<artifactId>devicemap-java</artifactId>
 	<packaging>pom</packaging>
-	<version>1.1.1-SNAPSHOT</version>
+	<version>1.2.0-SNAPSHOT</version>
 	<name>Apache DeviceMap for Java</name>
 	<description>Apache DeviceMap Java API</description>
 	<url>http://devicemap.apache.org/</url>