You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devicemap.apache.org by re...@apache.org on 2013/06/25 23:34:05 UTC

svn commit: r1496642 - /incubator/devicemap/trunk/devicemapjava/src/main/java/org/apache/devicemap/client/DeviceMapClient.java

Author: rezan
Date: Tue Jun 25 21:34:04 2013
New Revision: 1496642

URL: http://svn.apache.org/r1496642
Log:
duplicate patterns

Modified:
    incubator/devicemap/trunk/devicemapjava/src/main/java/org/apache/devicemap/client/DeviceMapClient.java

Modified: incubator/devicemap/trunk/devicemapjava/src/main/java/org/apache/devicemap/client/DeviceMapClient.java
URL: http://svn.apache.org/viewvc/incubator/devicemap/trunk/devicemapjava/src/main/java/org/apache/devicemap/client/DeviceMapClient.java?rev=1496642&r1=1496641&r2=1496642&view=diff
==============================================================================
--- incubator/devicemap/trunk/devicemapjava/src/main/java/org/apache/devicemap/client/DeviceMapClient.java (original)
+++ incubator/devicemap/trunk/devicemapjava/src/main/java/org/apache/devicemap/client/DeviceMapClient.java Tue Jun 25 21:34:04 2013
@@ -22,6 +22,7 @@ package org.apache.devicemap.client;
 import org.apache.devicemap.client.data.Device;
 import org.apache.devicemap.client.loaders.FileLoader;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -34,11 +35,11 @@ import org.apache.devicemap.client.data.
 public class DeviceMapClient {
     
     Map<String,Device> devices;
-    Map<String,Device> patterns;
+    Map<String,List<Device>> patterns;
     
     public DeviceMapClient() {
         devices=new HashMap<String,Device>();
-        patterns=new HashMap<String,Device>();
+        patterns=new HashMap<String,List<Device>>();
     }
     
     public void loadFromFolder(String folder) throws IOException {
@@ -50,15 +51,26 @@ public class DeviceMapClient {
     private void createIndex() {
         for(Device device:devices.values()) {
             for(List<String> patternset:device.getPatterns().getPatterns()) {
-                for(String pattern:patternset) {
-                    patterns.put(pattern, device);
+                for(int i=0;i<patternset.size();i++) {
+                    String pattern=patternset.get(i);
+                    
+                    //duplicate
+                    if(patterns.get(pattern)!=null) {
+                        if(i==(patternset.size()-1) && !patterns.get(pattern).contains(device)) {
+                            patterns.get(pattern).add(device);
+                        }
+                    } else {
+                        List<Device> single=new ArrayList<Device>();
+                        single.add(device);
+                        patterns.put(pattern, single);
+                    }
                 }
             }
         }
     }
     
     public Map<String,String> classify(String text) {
-        Map<String,Device> hits=new HashMap<String,Device>();
+        Map<String,List<Device>> hits=new HashMap<String,List<Device>>();
         Device winner=null;
         String winnerStr="";
         
@@ -75,36 +87,38 @@ public class DeviceMapClient {
             for(int j=0;j<4 && (j+i)<parts.length;j++) {
                 pattern+=Util.normalize(parts[i+j]);
                 
-                Device device=patterns.get(pattern);
+                List<Device> dlist=patterns.get(pattern);
                 
-                if(device!=null) {
-                    hits.put(pattern, device);
+                if(dlist!=null) {
+                    hits.put(pattern, dlist);
                     
-                    Util.debugLog("Hit found: "+pattern+" => "+device.getId());
+                    for(Device device:dlist) {
+                        Util.debugLog("Hit found: "+pattern+" => "+device.getId()+" "+device.getPatterns());
+                    }
                 }
             }
         }
         
         for(String hit:hits.keySet()) {
-            Device device=hits.get(hit);
+            for(Device device:hits.get(hit)) {
+                if(!device.getPatterns().isValid(hits.keySet())) {
+                    continue;
+                }
 
-            if(!device.getPatterns().isValid(hits.keySet())) {
-                continue;
-            }
-            
-            Util.debugLog("Hit candidate: "+hit+" => "+device.getId());
-            
-            if(winner!=null) {
-                if("simple".equals(winner.getType()) && !"simple".equals(device.getType())) {
-                    winner=device;
-                    winnerStr=hit;
-                } else if(hit.length()>winnerStr.length() && !"simple".equals(device.getType())) {
+                Util.debugLog("Hit candidate: "+hit+" => "+device.getId());
+
+                if(winner!=null) {
+                    if("simple".equals(winner.getType()) && !"simple".equals(device.getType())) {
+                        winner=device;
+                        winnerStr=hit;
+                    } else if(hit.length()>winnerStr.length() && !"simple".equals(device.getType())) {
+                        winner=device;
+                        winnerStr=hit;
+                    }
+                } else {
                     winner=device;
                     winnerStr=hit;
                 }
-            } else {
-                winner=device;
-                winnerStr=hit;
             }
         }