package org.hadatac.console.http;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.net.URLConnection;
import java.util.List;
import org.hadatac.console.controllers.AuthApplication;
import org.hadatac.utils.Collections;
import org.hadatac.entity.pojo.Measurement;
import be.objectify.deadbolt.java.actions.Group;
import be.objectify.deadbolt.java.actions.Restrict;
import play.mvc.Controller;
import play.mvc.Result;
import play.data.DynamicForm;
import play.data.Form;
public class SolrSearchProxy extends Controller {
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result getSolrSearch(String path) {
InputStream is = null;
URL url = null;
HttpURLConnection con = null;
try {
url = new URL(path.substring(0, path.indexOf('?')));
con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Accept-Charset", "utf-8");
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(path.substring(path.indexOf('?')+1, path.length()));
wr.flush();
wr.close();
} catch (Exception e) {
e.printStackTrace();
}
try (OutputStream output = con.getOutputStream()) {
output.write(path.getBytes("utf-8"));
} catch (IOException e) {
e.printStackTrace();
}
try {
is = con.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
if (is != null) {
return ok(is);
} else {
return ok();
}
}
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result getIndicatorValueDownload(String lm) {
File file = new File(lm);
return ok(file);
}
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result getDataAcquisitionDownload(){
DynamicForm form = Form.form().bindFromRequest();
String request_fl;
String request_wt;
String request_rows;
String request_q;
String request_encoding = "";
if (form.data().size() == 0) {
return badRequest("[ERROR] getDataAcuisitionDownload expects some data");
} else {
request_fl = form.get("fl");
request_wt = form.get("wt");
request_rows = form.get("rows");
request_q = form.get("q");
request_encoding = "wt=" + request_wt + "&rows=" + request_rows + "&q=" + request_q;
if (!request_fl.equals("")) {
request_encoding += "&fl=" + request_fl;
}
//System.out.println("Request: " + request_encoding);
}
String path = Collections.getCollectionsName(Collections.DATA_ACQUISITION) + "/select" +
//"?" + URLEncoder.encode(request_encoding);
"?" + request_encoding;
response().setContentType("text/csv");
return getSolrSearch(path);
}
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result getStudyAcquisitionDownload(){
String path = Collections.getCollectionsName(Collections.STUDY_ACQUISITION) +
request().toString().split((request().path()))[1];
//System.out.println(path);
response().setContentType("text/csv");
return getSolrSearch(path);
}
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result getStudyAcquisition(){
String path = Collections.getCollectionsName(Collections.STUDY_ACQUISITION) +
request().toString().split((request().path()))[1];
return getSolrSearch(path);
}
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result getSubjectAcquisition(){
String path = Collections.getCollectionsName(Collections.SUBJECTS_ACQUISITION) +
request().toString().split((request().path()))[1];
return getSolrSearch(path);
}
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result getSampleAcquisition(){
String path = Collections.getCollectionsName(Collections.SAMPLES_ACQUISITION) +
request().toString().split((request().path()))[1];
return getSolrSearch(path);
}
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result getAnalytesAcquisition(){
String path = Collections.getCollectionsName(Collections.ANALYTES_ACQUISITION) +
request().toString().split((request().path()))[1];
return getSolrSearch(path);
}
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result getMetadataDataAcquisition(){
// String path = Collections.getCollectionsName(Collections.METADATA_DA) +
// request().toString().split((request().path()))[1];
String path = Collections.getCollectionsName(Collections.DATA_COLLECTION) + "/select" +
request().toString().split((request().path()))[1];
return getSolrSearch(path);
}
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result getDataAcquisition(){
// String path = Collections.getCollectionsName(Collections.METADATA_DA) +
// request().toString().split((request().path()))[1];
String path = Collections.getCollectionsName(Collections.METADATA_AQUISITION) + "/select" +
request().toString().split((request().path()))[1];
System.out.println("Solr Search Path: " + path);
return getSolrSearch(path);
}
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result getSchemaAttributes(){
String path = Collections.getCollectionsName(Collections.SA_ACQUISITION) + "/select" +
request().toString().split((request().path()))[1];
return getSolrSearch(path);
}
}