StartHandler.java 4.59 KiB
package code;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
public class StartHandler implements HttpHandler {
@Override
public void handle(HttpExchange he) throws IOException {
URI requestedUri = he.getRequestURI();
System.out.println(requestedUri.toString());
/*
if(he.getRequestHeaders().get("version")==null) {
he.sendResponseHeaders(426, "VERSIONE NON PRESENTE. (USARE -H version:1.0)".length());
OutputStream os = he.getResponseBody();
os.write("VERSIONE NON PRESENTE. (USARE -H version:1.0)".getBytes());
os.close();
return;
}
else if(he.getRequestHeaders().get("version").get(0).compareTo("1.0")!=0) {
he.sendResponseHeaders(426, "CAMBIA VERSIONE. (USARE -H version:1.0)".length());
OutputStream os = he.getResponseBody();
os.write("CAMBIA VERSIONE. (USARE -H version:1.0)".getBytes());
os.close();
return;
}
*/
String requestMethod = he.getRequestMethod();
String query = requestedUri.getRawQuery();
String body = readBody(he.getRequestBody());
String response = "AYYYYY";
if(requestMethod.compareToIgnoreCase("POST")==0) {
URL url = new URL("http://localhost:3000/start");//maybe, se CloudApp è in localhost porta 8080
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("version", "1.0");
Map<String, String> parameters = new HashMap<>();
System.out.println("pino1");
//{“domain”:”nome_dominio”} check utente chiamante ha permessi su dominio chiamato, chi fa install è admin
parameters.put("param1", "val");//fix parametri da mandare
//leggo da DB domini e riempio (magari famo .DAO??)
con.setDoOutput(true);
System.out.println("pino2");
DataOutputStream out = new DataOutputStream(con.getOutputStream());//inserimento param in call
out.writeBytes(ParameterStringBuilder.getParamsString(parameters));
out.flush();
out.close();
System.out.println("pino3");
//con.setRequestProperty("Content-Type", "application/json");
//String contentType = con.getHeaderField("Content-Type");
con.setConnectTimeout(5000);
con.setReadTimeout(5000);
//System.out.println("pino4");
//leggo risposta
int status = con.getResponseCode();
Reader streamReader = null;
if (status > 299) {
System.out.println("pino5");
streamReader = new InputStreamReader(con.getErrorStream());
BufferedReader in = new BufferedReader(streamReader);
String inputLine;
StringBuffer content = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
response = content.toString();
in.close();
} else {
System.out.println("pino6");
streamReader = new InputStreamReader(con.getInputStream());
BufferedReader in = new BufferedReader(streamReader);
String inputLine;
StringBuffer content = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
response = content.toString();
in.close();
}
con.disconnect();
he.sendResponseHeaders(status, response.length());
OutputStream os = he.getResponseBody();
os.write(response.getBytes());
os.close();
}
else {
System.out.println("OPERAZIONE NON IMPLEMENTATA");
he.sendResponseHeaders(501,0);
OutputStream os = he.getResponseBody();
os.write("OPERAZIONE NON IMPLEMENTATA".getBytes());
os.close();
}
}
private String readBody(InputStream requestBody) {
int req;
StringBuffer sb = new StringBuffer();
try {
while((req = requestBody.read()) !=-1)
sb.append(Character.toString((char)req));
}
catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
}