package org.hadatac.console.controllers.annotator;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.hadatac.console.controllers.AuthApplication;
import org.hadatac.console.http.DeploymentQueries;
import org.hadatac.console.http.GetSparqlQuery;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.StringTokenizer;
import org.hadatac.console.models.SparqlQuery;
import org.hadatac.console.models.SparqlQueryResults;
import org.hadatac.console.models.CSVAnnotationHandler;
import org.hadatac.console.models.TripleDocument;
import play.mvc.BodyParser;
import play.mvc.Controller;
import play.mvc.Result;
import play.mvc.Http.MultipartFormData;
import play.mvc.Http.MultipartFormData.FilePart;
import org.hadatac.console.views.html.error_page;
import org.hadatac.console.views.html.annotator.*;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import be.objectify.deadbolt.java.actions.Group;
import be.objectify.deadbolt.java.actions.Restrict;
public class FileProcessing extends Controller {
private static final String UPLOAD_PATH = "tmp/uploads/";
private static String[] extractFields(String str) {
String line = str.substring(0, str.indexOf('\n'));
System.out.println("Line: [" + line + "]");
StringTokenizer st = new StringTokenizer(line, ",");
String[] fields = new String[st.countTokens()];
int pos = 0;
while (st.hasMoreElements()) {
fields[pos++] = (String)(st.nextElement());
}
return fields;
}
public static SparqlQueryResults getQueryResults(String tabName) {
SparqlQuery query = new SparqlQuery();
GetSparqlQuery query_submit = new GetSparqlQuery(query);
SparqlQueryResults theResults = null;
String query_json = null;
try {
query_json = query_submit.executeQuery(tabName);
System.out.println("query_json = " + query_json);
theResults = new SparqlQueryResults(query_json, false);
} catch (IllegalStateException | NullPointerException e1) {
e1.printStackTrace();
}
return theResults;
}
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
@BodyParser.Of(value = BodyParser.MultipartFormData.class, maxLength = 500 * 1024 * 1024)
public static Result uploadFile(String handler_json) {
try {
handler_json = URLDecoder.decode(handler_json, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(handler_json);
ObjectMapper mapper = new ObjectMapper();
CSVAnnotationHandler handler = null;
try {
handler = mapper.readValue(handler_json, CSVAnnotationHandler.class);
} catch (Exception e) {
e.printStackTrace();
return ok (uploadCSV.render(null, "fail", "Lost deployment information."));
}
MultipartFormData body = request().body().asMultipartFormData();
FilePart uploadedfile = body.getFile("pic");
if (uploadedfile != null) {
File file = uploadedfile.getFile();
handler.setDatasetName(UPLOAD_PATH + uploadedfile.getFilename());
File newFile = new File(handler.getDatasetName());
InputStream isFile;
InputStream isFile2;
try {
isFile = new FileInputStream(file);
isFile2 = new FileInputStream(file);
byte[] byteFile;
try {
byteFile = IOUtils.toByteArray(isFile);
String str = IOUtils.toString(isFile2, "UTF-8");
//System.out.println("File Processing: [" + str + "]");
handler.setFields(extractFields(str));
try {
FileUtils.writeByteArrayToFile(newFile, byteFile);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
isFile.close();
} catch (Exception e) {
return ok (uploadCSV.render(null, "fail", "Could not save uploaded file."));
}
} catch (Exception e) {
return ok (uploadCSV.render(null, "fail", "Could not process uploaded file."));
}
} catch (FileNotFoundException e1) {
return ok (uploadCSV.render(null, "fail", "Could not find uploaded file"));
}
return ok(measurementsSpec.render(handler, getQueryResults("Entities"), getQueryResults("Units")));
} else {
return ok (uploadCSV.render(null, "fail", "Error uploading file. Please try again."));
}
}
}