Go to the documentation of this file.00001 package crowdUser;
00002
00003 import java.io.BufferedInputStream;
00004 import java.io.BufferedOutputStream;
00005 import java.io.BufferedReader;
00006 import java.io.BufferedWriter;
00007 import java.io.File;
00008 import java.io.FileOutputStream;
00009 import java.io.FileWriter;
00010 import java.io.InputStream;
00011 import java.io.InputStreamReader;
00012 import java.io.OutputStreamWriter;
00013 import java.net.HttpURLConnection;
00014 import java.net.URL;
00015 import java.net.URLConnection;
00016 import java.net.URLEncoder;
00017 import java.util.*;
00018 import java.util.zip.ZipEntry;
00019 import java.util.zip.ZipInputStream;
00020
00021 import myDataBases.MySQLbase;
00022 import myDataBases.MediaBase;
00023
00024
00039 public class CrowdManager {
00040
00041
00042
00043
00044
00049 private List<Integer> greater;
00054 private List<Integer> smaller;
00058 private List<String> axes;
00062 private Integer comparisonsNumber;
00067 private String cfKey ;
00074 private Integer originalJobId;
00078 private String resultsUrl;
00082 private MediaBase dbMedia ;
00086 private MySQLbase dbSQL;
00090 private Refiner refiner;
00091
00092
00093
00094
00095
00110 public CrowdManager (Integer firstJobId, String key, String resultsUrl, MySQLbase baseSQL,
00111 MediaBase baseDIR, List<String> fieldsHardData)
00112 {
00113 this.comparisonsNumber = 0;
00114 this.resultsUrl = resultsUrl;
00115 this.greater = new ArrayList<Integer>();
00116 this.smaller = new ArrayList<Integer>();
00117 this.axes = new ArrayList<String>();
00118 this.originalJobId = firstJobId;
00119 this.cfKey = key;
00120 this.dbSQL = baseSQL;
00121 this.dbMedia = baseDIR ;
00122 this.refiner = new Refiner(fieldsHardData);
00123 };
00124
00125
00126
00127
00128
00139 public Integer createNewJob()
00140 {
00141 Integer id = 0;
00142
00143 String postUrl = "http://api.crowdflower.com/v1/jobs/" + this.originalJobId
00144 + "/copy.json?key=" + this.cfKey ;
00145
00146 try
00147 {
00148 URL url = new URL(postUrl);
00149 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
00150
00151 conn.setDoOutput(true);
00152 conn.setRequestMethod("POST");
00153 conn.connect();
00154
00155 BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
00156 String line, idString = "";
00157 while ((line = rd.readLine()) != null)
00158 if (line.contains('"'+"id"+'"'))
00159
00160 for (int i = line.lastIndexOf('"' +"id"+'"')+5; i<line.length(); i++)
00161 if ( line.charAt(i) == ',' )
00162 break;
00163 else
00164 idString += line.charAt(i) ;
00165 id = Integer.parseInt(idString);
00166 rd.close();
00167 } catch (Exception e) { e.printStackTrace(); }
00168
00169 return id;
00170 }
00171
00172
00173
00187 public void uploadHIT(Integer jobId)
00188 {
00189 this.comparisonsNumber += this.greater.size() ;
00190 String post = "";
00191
00192 try{
00193 BufferedWriter fichier = new BufferedWriter
00194 (new FileWriter("../data/HITdata/" + jobId + ".csv"));
00195 String line = "axis,idMedia1,idMedia2,urlMedia1,urlMedia2,miscData1,miscData2";
00196 fichier.write(line);
00197 fichier.newLine();
00198 post += line ;
00199 for (int i=0; i<this.greater.size(); i++)
00200 {
00201 line = this.axes.get(i) + "," + this.greater.get(i) + "," + this.smaller.get(i) +
00202 "," + this.dbMedia.getMedia(this.greater.get(i)) +
00203 "," + this.dbMedia.getMedia(this.smaller.get(i)) +
00204 ",\"" + this.dbMedia.getContent().get(this.greater.get(i)).get("miscData") +
00205 "\",\"" + this.dbMedia.getContent().get(this.smaller.get(i)).get("miscData") + "\"";
00206 fichier.write(line);
00207 fichier.newLine();
00208 post += "\n" + line ;
00209 }
00210 fichier.close();
00211
00212 }
00213 catch (Exception e) { e.printStackTrace(); }
00214
00215
00216
00217 try
00218 {
00219 URL url = new URL("http://api.crowdflower.com/v1/jobs/" + jobId +
00220 "/upload.json?key=" + this.cfKey);
00221 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
00222
00223 conn.setDoOutput(true);
00224 conn.setRequestMethod("PUT");
00225 conn.setRequestProperty("Content-Type", "text/csv");
00226 OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream());
00227 osw.write(post);
00228 osw.flush();
00229 osw.close();
00230
00231
00232 BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
00233 String line;
00234 while ((line = rd.readLine()) != null) {
00235 System.out.println(line);
00236 }
00237
00238 rd.close();
00239 } catch (Exception e) { e.printStackTrace(); }
00240
00241 }
00242
00243
00259 public String getHITresults(Integer jobId)
00260 {
00261 try
00262 {
00263
00264 String urlString = this.resultsUrl + "csv/" + jobId + ".txt";
00265 System.out.println(urlString);
00266 URL url = new URL(urlString);
00267 System.out.println("Opening connection to " + urlString + "...");
00268
00269 InputStream is = url.openStream();
00270 System.out.flush();
00271
00272 FileOutputStream fos=null;
00273 fos = new FileOutputStream("../data/HITresults/results" + jobId + ".csv");
00274
00275 int oneChar, count=0;
00276 while ((oneChar=is.read()) != -1)
00277 {
00278 fos.write(oneChar);
00279 count++;
00280 }
00281
00282 is.close();
00283 fos.close();
00284 System.out.println("csv results file downloaded, " + count + " byte(s) copied");
00285 }
00286 catch (Exception e) { e.printStackTrace(); }
00287
00288 return "results" + jobId ;
00289 }
00290
00291
00306 public void readHITresults( String path )
00307 {
00308 List<String[]> entries ;
00309
00310 this.refiner.csv2List(path) ;
00311 entries = this.refiner.getData() ;
00312 this.dbSQL.insertHardDataInSQL(entries);
00313
00314 this.refiner.getanotherlabel() ;
00315 entries = this.refiner.getData() ;
00316 this.dbSQL.insertResultsInSQL(entries,this.dbMedia) ;
00317 }
00318
00319
00331
00332
00333 public static void thisIsTheEnd(String antechamberUrl, String results)
00334 {
00335 try
00336 {
00337 URL url = new URL(antechamberUrl);
00338 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
00339
00340 conn.setDoOutput(true);
00341 conn.setRequestMethod("POST");
00342 OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream());
00343 String data = URLEncoder.encode("signal", "UTF-8") + "=" + URLEncoder.encode("sort_finished","UTF-8")
00344 + "&" + URLEncoder.encode("payload", "UTF-8") + "=" + URLEncoder.encode(results, "UTF-8");
00345 osw.write(data);
00346 osw.flush();
00347 osw.close();
00348
00349 BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
00350 String line;
00351 while ((line = rd.readLine()) != null) {
00352 System.out.println(line);
00353 }
00354 rd.close();
00355 } catch (Exception e) { e.printStackTrace(); }
00356 }
00357
00358
00359
00360
00361
00366 public List<Integer> getGreater()
00367 { return this.greater ; }
00368
00369
00374 public List<Integer> getSmaller()
00375 { return this.smaller; }
00376
00377
00382 public List<String> getAxes()
00383 { return this.axes; }
00384
00385
00390 public Integer getComparisonsNumber()
00391 { return this.comparisonsNumber; }
00392
00393
00394 }