| 
					
				 | 
			
			
				@@ -1,10 +1,12 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.gmail.nossr50.util.uuid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.google.common.collect.ImmutableList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.google.gson.Gson; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.google.gson.JsonArray; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.google.gson.JsonObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.google.gson.JsonPrimitive; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.io.InputStreamReader; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.io.OutputStream; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.net.HttpURLConnection; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.net.URL; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -28,6 +30,40 @@ public class UUIDFetcher implements Callable<Map<String, UUID>> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this(names, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Map<String, UUID> call() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, UUID> uuidMap = new HashMap<String, UUID>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (int i = 0; i < requests; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            HttpURLConnection connection = createConnection(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<String> nameSubList = names.subList(i * PROFILES_PER_REQUEST, Math.min((i + 1) * PROFILES_PER_REQUEST, names.size())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            JsonArray array = new JsonArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for(String name : nameSubList) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                JsonPrimitive element = new JsonPrimitive(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                array.add(element); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Gson gson = new Gson(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String body = array.toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            writeBody(connection, body); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            JsonObject[] jsonStreamArray = gson.fromJson(new InputStreamReader(connection.getInputStream()), JsonObject[].class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (JsonObject jsonProfile : jsonStreamArray) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String id = jsonProfile.get("id").getAsString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String name = jsonProfile.get("name").getAsString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                UUID uuid = UUIDFetcher.getUUID(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                uuidMap.put(name, uuid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (rateLimiting && i != requests - 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Thread.sleep(RATE_LIMIT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return uuidMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private static void writeBody(HttpURLConnection connection, String body) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         OutputStream stream = connection.getOutputStream(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         stream.write(body.getBytes()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -70,34 +106,4 @@ public class UUIDFetcher implements Callable<Map<String, UUID>> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public static UUID getUUIDOf(String name) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return new UUIDFetcher(Collections.singletonList(name)).call().get(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public Map<String, UUID> call() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Map<String, UUID> uuidMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (int i = 0; i < requests; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            HttpURLConnection connection = createConnection(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<String> nameSubList = names.subList(i * PROFILES_PER_REQUEST, Math.min((i + 1) * PROFILES_PER_REQUEST, names.size())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            JsonArray array = new JsonArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (String name : nameSubList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                JsonPrimitive element = new JsonPrimitive(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                array.add(element); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            String body = array.getAsString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            writeBody(connection, body); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (Object profile : array) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                JsonObject jsonProfile = (JsonObject) profile; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                String id = jsonProfile.get("id").getAsString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                String name = jsonProfile.get("name").getAsString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                UUID uuid = UUIDFetcher.getUUID(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                uuidMap.put(name, uuid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (rateLimiting && i != requests - 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Thread.sleep(RATE_LIMIT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return uuidMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |