1 31 32 package org.antlr.works.stats; 33 34 import org.antlr.xjlib.appkit.app.XJApplication; 35 import org.antlr.xjlib.foundation.XJUtils; 36 import org.antlr.works.dialog.DialogPersonalInfo; 37 import org.antlr.works.prefs.AWPrefs; 38 39 import java.io.BufferedReader ; 40 import java.io.IOException ; 41 import java.io.InputStreamReader ; 42 import java.net.URL ; 43 import java.net.URLConnection ; 44 import java.util.HashMap ; 45 import java.util.Map ; 46 47 public class StatisticsReporter { 48 49 51 public static final String URL_REGISTER = "http://www.antlr.org/stats/register?"; 52 public static final String URL_SEND_STATS = "http://www.antlr.org/stats/notify?"; 53 54 public static final String TYPE_GUI = "antlrworks"; 55 public static final String TYPE_GRAMMAR = "grammar"; 56 public static final String TYPE_RUNTIME = "runtime"; 57 58 protected String error = null; 59 protected boolean cancel = false; 60 61 public StatisticsReporter() { 62 } 63 64 public String getError() { 65 return error; 66 } 67 68 public String fetchIDFromServer() { 69 Map info = AWPrefs.getPersonalInfo(); 70 71 if(info == null) { 72 System.err.println("No personal info available. Sending blank data to request a new ID from ANTLR's server."); 73 info = new HashMap (); 74 } 75 76 StringBuffer s = new StringBuffer (URL_REGISTER); 77 s.append("who="); 78 s.append(info.get(DialogPersonalInfo.INFO_WHO)); 79 s.append("§or="); 80 s.append(info.get(DialogPersonalInfo.INFO_SECTOR)); 81 s.append("&devtool="); 82 s.append(info.get(DialogPersonalInfo.INFO_DEVTOOL)); 83 s.append("&yearslang="); 84 s.append(info.get(DialogPersonalInfo.INFO_YEARSLANG)); 85 s.append("&yearsprog="); 86 s.append(info.get(DialogPersonalInfo.INFO_YEARSPROG)); 87 s.append("&residing="); 88 s.append(XJUtils.encodeToURL((String )info.get(DialogPersonalInfo.INFO_RESIDING), "-")); 89 s.append("&caffeine="); 90 s.append(XJUtils.encodeToURL((String )info.get(DialogPersonalInfo.INFO_CAFFEINE), "-")); 91 s.append("&version="); 92 s.append(XJUtils.encodeToURL(XJApplication.getAppVersionShort(), "-")); 93 94 URLConnection urc; 95 URL url; 96 try { 97 url = new URL (s.toString()); 98 urc = url.openConnection(); 99 } catch (Exception e) { 100 error = e.toString(); 101 return null; 102 } 103 104 BufferedReader br; 105 try { 106 br = new BufferedReader (new InputStreamReader (urc.getInputStream())); 107 } catch (IOException e) { 108 error = e.toString(); 109 return null; 110 } 111 112 String id; 113 114 try { 115 id = br.readLine(); 116 br.close(); 117 } catch (IOException e) { 118 error = e.toString(); 119 return null; 120 } 121 122 return id; 123 } 124 125 public String getID() { 126 String id = AWPrefs.getServerID(); 127 if(id == null || id.length() == 0) { 128 id = fetchIDFromServer(); 129 if(id == null || id.length() == 0) 130 return null; 131 AWPrefs.setServerID(id); 132 } 133 return id; 134 } 135 136 public void cancel() { 137 cancel = true; 138 } 139 140 public boolean submitStats(StatisticsManager sm) { 141 cancel = false; 142 for(int index=0; index<sm.getStatsCount(); index++) { 143 if(!submitStats(getID(), sm.type, sm.getRawString(index))) 144 return false; 145 if(cancel) 146 return true; 147 } 148 149 return true; 150 } 151 152 protected boolean submitStats(String id, String type, String data) { 153 if(id == null) { 154 error = "cannot submit stat with a null id"; 155 return false; 156 } 157 158 StringBuffer param = new StringBuffer (); 159 param.append(URL_SEND_STATS); 160 param.append("ID="); 161 param.append(id); 162 param.append("&type="); 163 param.append(type); 164 param.append("&data="); 165 param.append(XJUtils.encodeToURL(data)); 166 167 URLConnection urc; 168 URL url; 169 BufferedReader br; 170 boolean success = false; 171 try { 172 url = new URL (param.toString()); 173 urc = url.openConnection(); 174 br = new BufferedReader (new InputStreamReader (urc.getInputStream())); 175 success = br.readLine().equalsIgnoreCase("OK"); 176 br.close(); 177 } catch (IOException e) { 178 error = e.toString(); 179 } 180 181 return success; 182 } 183 184 } 185 | Popular Tags |