Initial commit

This commit is contained in:
Manos
2015-10-29 01:06:42 +02:00
commit 2d5dbe00f7
36 changed files with 7139 additions and 0 deletions

View File

@ -0,0 +1,194 @@
package com.www.server;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.util.UUID;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
@Path("devs")
public class DeviceService {
@Context
UriInfo uriInfo;
@Context
Request request;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String respondAsReady() {
return "DeviceService is ready.";
}
@GET
@Path("register_test")
@Produces(MediaType.TEXT_PLAIN)
public Response register_test() throws Exception {
String username = "emkatsom";
String model = "nexus";
String os = "android";
// String id = getNewId();
String id = "0";
String date = Utils.getDate();
String time = Utils.getTime();
Class.forName("com.mysql.jdbc.Driver");
ResultSet rs;
try (
Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password);
Statement s = c.createStatement()) {
String sql = "INSERT INTO devices (`username`, `model`, `os`, `reg_date`, `reg_time`, `last_date`, `last_time`) "
+ "VALUES ('" + username + "', '" + model + "', '" + os + "', '" + date + "', '" + time + "', '" + date + "', '" + time + "')";
s.executeUpdate(sql);
s.executeQuery("SELECT * FROM devices ORDER BY id DESC LIMIT 1");
rs = s.getResultSet();
if (rs.next()) {
id = rs.getString("id");
}
}
System.out.println("DeviceService/register: Device (" + username + "|" + model + "|" + os + ") with id " + id + " successfully registered.");
deviceUnregister();
return Response.ok().entity(id).build();
}
@POST
@Path("register")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Response register(MultivaluedMap<String, String> deviceParams) throws Exception {
String username = deviceParams.getFirst("username");
String model = deviceParams.getFirst("model");
String os = deviceParams.getFirst("os");
// String id = getNewId();
String id = "0";
String date = Utils.getDate();
String time = Utils.getTime();
Class.forName("com.mysql.jdbc.Driver");
ResultSet rs;
try (
Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password);
Statement s = c.createStatement()) {
String sql = "INSERT INTO devices (`username`, `model`, `os`, `reg_date`, `reg_time`, `last_date`, `last_time`) "
+ "VALUES ('" + username + "', '" + model + "', '" + os + "', '" + date + "', '" + time + "', '" + date + "', '" + time + "')";
s.executeUpdate(sql);
s.executeQuery("SELECT * FROM devices ORDER BY id DESC LIMIT 1");
rs = s.getResultSet();
if (rs.next()) {
id = rs.getString("id");
}
}
System.out.println("DeviceService/register: Device (" + username + "|" + model + "|" + os + ") with id " + id + " successfully registered.");
deviceUnregister();
return Response.ok().entity(id).build();
}
@GET
@Path("{id}/unregister")
public Response unregister(@PathParam("id") String id) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password);
Statement s = c.createStatement();
s.executeQuery("SELECT * FROM devices WHERE id='" + id + "'");
ResultSet rs = s.getResultSet();
String result;
if (rs.next()) {
s.executeUpdate("DELETE FROM devices WHERE id='" + id + "'");
System.out.println("DeviceService.unregister: Device with id " + id + " successfully unregistered.");
result = "OK";
} else {
System.out.println("DeviceService.unregister: Device with id " + id + " not found.");
result = "Not registered";
}
rs.close();
s.close();
c.close();/**/
deviceUnregister();
return Response.ok().entity(result).build();
}
@POST
@Path("test")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Response test(MultivaluedMap<String, String> deviceParams) throws ClassNotFoundException, SQLException, ParseException {
System.out.println("test");
System.out.println(deviceParams.toString());
String username = deviceParams.getFirst("username");
String model = deviceParams.getFirst("model");
String os = deviceParams.getFirst("os");
System.out.println(username + "|" + model + "|" + os);
return Response.ok().entity("OK").build();
}
private String getNewId() throws ClassNotFoundException, SQLException {
String id = "";
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password);
Statement s = null;
ResultSet rs;
do {
id = UUID.randomUUID().toString().replaceAll("-", "");
s = c.createStatement();
s.executeQuery("SELECT * FROM devices WHERE id='" + id + "'");
rs = s.getResultSet();
} while (rs.next());
s.close();
rs.close();
c.close();
return id;
}
/*
Description:
Called periodically to delete inactive devices.
Changelog:
*/
public void deviceUnregister() throws SQLException, ClassNotFoundException, ParseException {
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password);
Statement s = c.createStatement();
s.executeQuery("SELECT * FROM devices");
ResultSet rs = s.getResultSet();
while (rs.next()) {
String id = rs.getString("id");
String date = rs.getString("last_date");
String time = rs.getString("last_time");
//if (!Utils.isTimeRecent(time, 0, 1, 0)) {
if (!Utils.isDateRecent(date, 1, 0, 0)) {
System.out.println("DeviceService/DeviceUnregister: Unregistering device with id " + id + "...");
s = c.createStatement();
s.executeUpdate("DELETE FROM devices WHERE id='" + id + "'");
}
}
s.close();
rs.close();
c.close();
}
}

View File

@ -0,0 +1,112 @@
package com.www.server;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
public class DeviceUnregister extends Thread {
String DB_SERVER = Globals.db_server;
String DB_USERNAME = Globals.db_username;
String DB_PASSWORD = Globals.db_password;
ResultSet rs = null;
Statement s = null;
Connection c = null;
DeviceUnregister() {
super("DeviceUnregister thread");
System.out.println("DeviceUnregister: " + this);
try {
Class.forName("com.mysql.jdbc.Driver");
c = DriverManager.getConnection(DB_SERVER, DB_USERNAME, DB_PASSWORD);
} catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(DeviceUnregister.class.getName()).log(Level.SEVERE, null, ex);
}
start();
}
public void run() {
try {
while (true) {
s = c.createStatement();
s.executeQuery("SELECT * FROM devices");
rs = s.getResultSet();
if (rs.next()) {
do {
String id = rs.getString("id");
String date = rs.getString("last_date");
String time = rs.getString("last_time");
if (!isTimeRecent(time)) {
System.out.println("DeviceUnregister: Unregistering device with id " + id + "...");
s = c.createStatement();
s.executeUpdate("DELETE FROM devices WHERE id='" + id + "'");
}/**/
/*if (!isDateRecent(date)) {
System.out.println("DeviceUnregister: Unregistering device with id " + id + "...");
s = c.createStatement();
s.executeUpdate("DELETE FROM devices WHERE id='" + id + "'");
}/**/
} while (rs.next());
Thread.sleep(6 * 10000);
//Thread.sleep(86400000);
} else {
break;
}
}
} catch (InterruptedException e) {
System.out.println("DeviceUnregister: Interrupted.");
} catch (SQLException | ParseException ex) {
Logger.getLogger(DeviceUnregister.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("DeviceUnregister: Exiting thread...");
try {
s.close();
rs.close();
c.close();
} catch (SQLException ex) {
Logger.getLogger(DeviceUnregister.class.getName()).log(Level.SEVERE, null, ex);
}
}
private Boolean isDateRecent(String date) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Calendar calPrev = Calendar.getInstance();
Date datePrev = sdf.parse(date);
calPrev.setTime(datePrev);
Calendar calCurr = Calendar.getInstance();
Date dateCurr = sdf.parse(sdf.format(calCurr.getTime()));
calCurr.setTime(dateCurr);
calCurr.add(Calendar.MONTH, -1);
/*System.out.println("calCurr: " + sdf.format(calCurr.getTime()));
System.out.println("calPrev: " + sdf.format(calPrev.getTime()));
System.out.println("calPrev after calCurr: " + calPrev.after(calCurr));/**/
return calPrev.after(calCurr);
}
private Boolean isTimeRecent(String time) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
Calendar calPrev = Calendar.getInstance();
Date datePrev = sdf.parse(time);
calPrev.setTime(datePrev);
Calendar calCurr = Calendar.getInstance();
Date dateCurr = sdf.parse(sdf.format(calCurr.getTime()));
calCurr.setTime(dateCurr);
calCurr.add(Calendar.MINUTE, -2);
/*System.out.println("calCurr: " + sdf.format(calCurr.getTime()));
System.out.println("calPrev: " + sdf.format(calPrev.getTime()));
System.out.println("calPrev after calCurr: " + calPrev.after(calCurr));/**/
return calPrev.after(calCurr);
}
}

View File

@ -0,0 +1,180 @@
package com.www.server;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.jdom.JDOMException;
public class Edit extends HttpServlet {
private String CONSOLE_CMD, DB_DIR, SERVER_URL, LIB_URL, JAVAC_CMD, DX_CMD, DB_SERVER, DB_USERNAME, DB_PASSWORD;
private Boolean isCompiled = true;
private Boolean isCompiledClient = false;
private Boolean hasServer = false;
private Boolean isCompiledServer = false;
private String userName, userDir,
fileId, fileDir, xmlUrl,
fileNameClient, fileCodeClient, fileCompileClient, dirClient, fileUrlClient, fileTimeClient, fileDateClient,
fileNameServer, fileCodeServer, fileCompileServer, dirServer, fileUrlServer, fileTimeServer, fileDateServer;
@Override
public void init() {
SERVER_URL = Globals.server_url;
DB_DIR = Globals.db_dir;
CONSOLE_CMD = Globals.console_cmd;
LIB_URL = Globals.lib_url;
JAVAC_CMD = Globals.javac_cmd;
DX_CMD = Globals.dx_cmd;
DB_USERNAME = Globals.db_username;
DB_PASSWORD = Globals.db_password;
DB_SERVER = Globals.db_server;
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
HttpSession session = request.getSession(true);
userName = (String) session.getAttribute("username");
try {
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
String fieldName = item.getFieldName();
if (item.isFormField()) {
String fieldValue = item.getString();
if ("file_id".equals(fieldName)) {
fileId = fieldValue;
}
if ("client_name".equals(fieldName)) {
fileNameClient = fieldValue;
}
if ("server_name".equals(fieldName)) {
if (Utils.stringIsEmpty(fieldValue)) {
hasServer = false;
} else {
fileNameServer = fieldValue;
hasServer = true;
}
}
if ("client_code".equals(fieldName)) {
fileCodeClient = fieldValue;
}
if ("server_code".equals(fieldName)) {
fileCodeServer = fieldValue;
}
if ("client_compiled".equals(fieldName)) {
if ("true".equals(fieldValue)) {
isCompiledClient = true;
} else {
isCompiledClient = false;
}
}
if ("server_compiled".equals(fieldName)) {
if ("true".equals(fieldValue)) {
isCompiledServer = true;
} else {
isCompiledServer = false;
}
}
}
}
} catch (FileUploadException e) {
throw new ServletException("Cannot parse multipart request.", e);
}
System.out.println("userName: " + userName
+ "\nfileId: " + fileId
+ "\nclient_name: " + fileNameClient
+ "\nisCompiledClient: " + isCompiledClient
+ "\nserver_name: " + fileNameServer
+ "\nisCompiledServer: " + isCompiledServer);
try {
initFile();
if (!isCompiledClient) {
File file = new File(fileUrlClient);
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(fileCodeClient);
bw.close();
fileCompileClient = Utils.compileAndroidFile(dirClient, fileNameClient);
fileCompileClient += "\n" + Utils.compileDex(dirClient, fileNameClient);
fileDateClient = Utils.getDate();
fileTimeClient = Utils.getTime();
if (Utils.stringIsEmpty(fileCompileClient)) {
isCompiledClient = true;
isCompiled = true;
Utils.setText(xmlUrl, "client", "compile", "status", "true");
Utils.setText(fileDir + "/" + fileId + ".xml", "client", "zip_size", Utils.zipDex(dirClient, fileId));
} else {
isCompiledClient = false;
isCompiled = false;
}
Utils.setText(xmlUrl, "client", "compile", "date", fileDateClient);
Utils.setText(xmlUrl, "client", "compile", "time", fileTimeClient);
Utils.setText(xmlUrl, "client", "compile", "output", fileCompileClient);
}
if (hasServer) {
if (!isCompiledServer) {
File file = new File(fileUrlServer);
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(fileCodeServer);
bw.close();
fileCompileServer = Utils.compileFile(dirServer, fileNameServer);
fileDateServer = Utils.getDate();
fileTimeServer = Utils.getTime();
if (Utils.stringIsEmpty(fileCompileServer)) {
isCompiledServer = true;
Utils.setText(xmlUrl, "server", "compile", "status", "true");
} else {
isCompiledServer = false;
isCompiled = false;
}
Utils.setText(xmlUrl, "server", "compile", "date", fileDateServer);
Utils.setText(xmlUrl, "server", "compile", "time", fileTimeServer);
Utils.setText(xmlUrl, "server", "compile", "output", fileCompileServer);
}
}
if (isCompiled) {
Utils.updateReady("tasks", fileId, "YES");
}
destroyFile();
response.sendRedirect(response.encodeRedirectURL(SERVER_URL + "/main/view.jsp?id=" + fileId));
} catch (InterruptedException | JDOMException | ClassNotFoundException | SQLException ex) {
Logger.getLogger(Edit.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void initFile() throws ClassNotFoundException, SQLException {
userDir = DB_DIR + "/" + userName;
fileDir = userDir + "/sensing/" + fileId;
xmlUrl = fileDir + "/" + fileId + ".xml";
dirClient = fileDir + "/client";
fileUrlClient = dirClient + "/" + fileNameClient;
dirServer = fileDir + "/server";
fileUrlServer = dirServer + "/" + fileNameServer;
}
private void destroyFile() {
isCompiled = true;
hasServer = false;
fileNameServer = "";
fileCodeServer = "";
isCompiledServer = false;
fileNameServer = "";
fileCodeServer = "";
isCompiledClient = false;
}
}

View File

@ -0,0 +1,57 @@
package com.www.server;
import java.io.IOException;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.jdom.JDOMException;
public class EditProp extends HttpServlet {
private String CONSOLE_CMD, DB_DIR, LIB_URL, JAVAC_CMD, DX_CMD, SERVER_URL, DB_SERVER, DB_USERNAME, DB_PASSWORD;
private boolean isMultipart;
String userName, jspName, fileId;
String mapCheckBox, sw_lat, sw_lng, ne_lat, ne_lng;
String timeCheckBox, timeFrom, timeTo;
@Override
public void init() {
SERVER_URL = Globals.server_url;
DB_DIR = Globals.db_dir;
CONSOLE_CMD = Globals.console_cmd;
LIB_URL = Globals.lib_url;
JAVAC_CMD = Globals.javac_cmd;
DX_CMD = Globals.dx_cmd;
DB_USERNAME = Globals.db_username;
DB_PASSWORD = Globals.db_password;
DB_SERVER = Globals.db_server;
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(true);
userName = (String) session.getAttribute("username");
fileId = (String) request.getParameter("file_id");
String fileDir = "";
String app = "privacy";
fileDir = Utils.getDir(app, fileId);
String xmlUrl = fileDir + "/" + fileId + ".xml";
if ("on".equals(Utils.getText(xmlUrl, "client", "map", "status"))) {
Utils.setText(xmlUrl, "client", "map", "sw_lat", (String) request.getParameter("view_map_sw_lat"));
Utils.setText(xmlUrl, "client", "map", "sw_lng", (String) request.getParameter("view_map_sw_lng"));
Utils.setText(xmlUrl, "client", "map", "ne_lat", (String) request.getParameter("view_map_ne_lat"));
Utils.setText(xmlUrl, "client", "map", "ne_lng", (String) request.getParameter("view_map_ne_lng"));
}
if ("on".equals(Utils.getText(xmlUrl, "client", "time", "status"))) {
Utils.setText(xmlUrl, "client", "time", "from", (String) request.getParameter("view_time_selection_from"));
Utils.setText(xmlUrl, "client", "time", "to", (String) request.getParameter("view_time_selection_to"));
}
response.sendRedirect(response.encodeRedirectURL("./main/view.jsp?id=" + fileId));
}
}

View File

@ -0,0 +1,53 @@
package com.www.server;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class EditStatus extends HttpServlet {
private String CONSOLE_CMD, DB_DIR, LIB_URL, JAVAC_CMD, DX_CMD, SERVER_URL, DB_SERVER, DB_USERNAME, DB_PASSWORD;
private boolean isMultipart;
String userName, jspName, fileId;
@Override
public void init() {
SERVER_URL = Globals.server_url;
DB_DIR = Globals.db_dir;
CONSOLE_CMD = Globals.console_cmd;
LIB_URL = Globals.lib_url;
JAVAC_CMD = Globals.javac_cmd;
DX_CMD = Globals.dx_cmd;
DB_USERNAME = Globals.db_username;
DB_PASSWORD = Globals.db_password;
DB_SERVER = Globals.db_server;
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(true);
userName = (String) session.getAttribute("username");
jspName = (String) request.getParameter("jsp_name");
fileId = (String) request.getParameter("view_file_id");
String fileDir = "";
fileDir = Utils.getDir("sensing", fileId);
String xmlUrl = fileDir + "/" + fileId + ".xml";
String status = (String) request.getParameter("view_status_button");
if ("START".equals(status)) {
Utils.setText(xmlUrl, "status", "start");
} else if ("PAUSE".equals(status)) {
Utils.setText(xmlUrl, "status", "pause");
} else {
Utils.setText(xmlUrl, "status", "stop");
Utils.updateReady("tasks", fileId, "NO");
}
if ("edit".equals(jspName)) {
response.sendRedirect(response.encodeRedirectURL("./main/edit.jsp?id=" + fileId));
} else {
response.sendRedirect(response.encodeRedirectURL("./main/view.jsp?id=" + fileId));
}
}
}

View File

@ -0,0 +1,76 @@
package com.www.server;
import static java.lang.Boolean.*;
/*
* Description:
* Paths and variables.
*
* Changelog:
* 150523 - Miscellaneous path changes.
*/
public class Globals {
/*
public static String logo = "&pi;pc";
public static String h1 = "&pi;ing - pong computing";
public static String p = "Execute code on mobile devices through the web.";
/**/
public static String logo = "EasyHarvest";
public static String h1 = "EasyHarvest";
public static String p = "Supporting the Deployment and Management of Sensing Applications on Smartphones.";/**/
public static Boolean DBG = FALSE;
// public static Boolean DBG = TRUE;
/*
* PC values.
*/
/**/
public static String db_dir = "C:/EasyHarvest";
public static String db_server = "jdbc:mysql://localhost:3306/server";
public static String db_username = "root";
public static String db_password = "root";
public static String server_url = "http://localhost:8084/Server";
public static String console_cmd = "cmd";
public static String javac_cmd = "C:/Program Files/Java/jdk1.8.0_25/bin/javac";
public static String lib_url = "C:/Program Files (x86)/Android/android-sdk/platforms/android-23/android.jar";
public static String dx_cmd = "C:/Program Files (x86)/Android/android-sdk/build-tools/23.0.1/dx";
public static String zip_cmd = "C:/Program Files/7-Zip/7z";
public static String zip_args = "a";
/**/
/*
* MAC values.
*/
/*
public static String db_dir = "/Users/emkatsom/EasyHarvest";
public static String db_server = "jdbc:mysql://localhost:3306/server";
public static String db_username = "root";
public static String db_password = "root";
public static String server_url = "http://localhost:8084/Server";
public static String console_cmd = "sh";
public static String javac_cmd = "javac";
public static String lib_url = "/Users/emkatsom/Library/Android/sdk/platforms/android-22/android.jar";
public static String dx_cmd = "/Users/emkatsom/Library/Android/sdk/build-tools/22.0.1/dx";
public static String zip_cmd = "zip";
public static String zip_args = "";
/**/
/*
* HOST values.
*/
/*
public static String db_dir = "/var/lib/tomcat6/webapps/db";
public static String db_server = "jdbc:mysql://localhost:3306/server";
public static String db_username = "root";
public static String db_password = "root";
public static String server_url = "";
public static String console_cmd = "sh";
public static String javac_cmd = "javac";
public static String lib_url = "/opt/android/android.jar";
public static String dx_cmd = "/opt/android/dx";
public static String zip_cmd = "zip";
public static String zip_args = "";
/**/
}

View File

@ -0,0 +1,66 @@
package com.www.server;
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Signin extends HttpServlet {
//private ServletConfig config;
private String DB_USERNAME;
private String DB_PASSWORD;
private String DB_SERVER;
@Override
public void init() throws ServletException {
DB_USERNAME = Globals.db_username;
DB_PASSWORD = Globals.db_password;
DB_SERVER = Globals.db_server;
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session;
PrintWriter out = response.getWriter();
Connection connection;
ResultSet rs;
Statement s;
String username = request.getParameter("username");
String password = request.getParameter("password");
String message = "";
Boolean error = true;
response.setContentType("text/html");
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(DB_SERVER, DB_USERNAME, DB_PASSWORD);
String sql = "SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'";
s = connection.createStatement();
s.executeQuery(sql);
rs = s.getResultSet();
if (rs.next()) {
error = false;
}
rs.close();
s.close();
connection.close();
if (!error) {
session = request.getSession(true);
session.setAttribute("username", username);
response.sendRedirect(response.encodeRedirectURL("./main/home.jsp"));
} else {
message = "The username or password you entered is incorrect.";
request.setAttribute("errorMessage", message);
RequestDispatcher view = request.getRequestDispatcher("/signin.jsp");
view.forward(request, response);
}
} catch (Exception e) {
System.out.println("Exception: " + e);
}
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.sendRedirect(response.encodeRedirectURL("signin.jsp"));
}
}

View File

@ -0,0 +1,33 @@
package com.www.server;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class SigninFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) {}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession();
//System.out.println("filter: " + (String) session.getAttribute("username"));
if (session == null || session.getAttribute("username") == null) {
// No logged-in user found, so redirect to login page.
response.sendRedirect(Globals.server_url + "/signin.jsp");
} else {
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(req, res);
}
}
@Override
public void destroy() {}
}

View File

@ -0,0 +1,15 @@
package com.www.server;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Signout extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setHeader("Cache-Control", "no-cache, no-store");
response.setHeader("Pragma", "no-cache");
request.getSession().invalidate();
response.sendRedirect(request.getContextPath() + "/signin.jsp");
}
}

View File

@ -0,0 +1,111 @@
package com.www.server;
import java.io.*;
import java.io.File;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class Signup extends HttpServlet {
private String DB_DIR;
private String DB_SERVER;
private String DB_USERNAME;
private String DB_PASSWORD;
@Override
public void init() {
DB_DIR = Globals.db_dir;
DB_SERVER = Globals.db_server;
DB_USERNAME = Globals.db_username;
DB_PASSWORD = Globals.db_password;
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
HttpSession session;
ResultSet rs;
Statement s;
String email = request.getParameter("email");
String username = request.getParameter("username");
String password = request.getParameter("password");
response.setContentType("text/html");
String remoteAddr = "";
Boolean error = false;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(DB_SERVER, DB_USERNAME, DB_PASSWORD);
s = connection.createStatement();
s.executeQuery("SELECT * FROM users WHERE email='" + email + "'");
rs = s.getResultSet();
if (rs.next()) {
String message = "Email \"" + email + "\" is already in use.";
request.setAttribute("errorMessageEmail", message);
System.out.println("Signup: " + message);
error = true;
}
s = connection.createStatement();
s.executeQuery("SELECT * FROM users WHERE username='" + username + "'");
rs = s.getResultSet();
if (rs.next()) {
String message = "Username \"" + username + "\" is already in use.";
request.setAttribute("errorMessageUsername", message);
System.out.println("Signup: " + message);
error = true;
}
remoteAddr = request.getRemoteAddr();
//ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
//reCaptcha.setPrivateKey("6LezstoSAAAAAEE9lfB6TR2kEX81_peDt4n03K4l");
//String challenge = request.getParameter("recaptcha_challenge_field");
//String uresponse = request.getParameter("recaptcha_response_field");
//ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remoteAddr, challenge, uresponse);
/*if (!reCaptchaResponse.isValid()) {
print_wrong_once(error);
out.print("<h2 align=\"center\">Validation code is wrong.</h2>");
error = 1;
}*/
if (error) {
rs.close();
s.close();
connection.close();
request.setCharacterEncoding("UTF-8");
RequestDispatcher rd = request.getRequestDispatcher(response.encodeURL("signup.jsp"));
rd.forward(request, response);
} else {
s.executeUpdate("INSERT INTO users (`username`, `password`, `email`) VALUES ('" + username + "', '" + password + "', '" + email + "')");
rs.close();
s.close();
connection.close();
// User directory
File dir = new File(DB_DIR + "/" + username);
dir.mkdir();
System.out.println("Signup: " + "Created directory at " + dir.getPath());
// Sensing tasks directory
dir = new File(DB_DIR + "/" + username + "/sensing");
dir.mkdir();
System.out.println("Signup: " + "Created directory at " + dir.getPath());
// Privacy mechanisms directory
dir = new File(DB_DIR + "/" + username + "/privacy");
dir.mkdir();
System.out.println("Signup: " + "Created directory at " + dir.getPath());
session = request.getSession(true);
session.setAttribute("username", request.getParameter("username"));
response.sendRedirect(response.encodeRedirectURL("./main/home.jsp"));
}
} catch (Exception e) {
System.out.println("Exception: " + e);
}
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.sendRedirect(response.encodeRedirectURL("signup.jsp"));
}
}

View File

@ -0,0 +1,39 @@
package com.www.server;
import javax.xml.bind.annotation.XmlRootElement;
import org.apache.commons.io.FilenameUtils;
@XmlRootElement
public class Task {
public String taskID, taskName, taskSize, taskStatus, className;
public String timeStatus, timeFrom, timeTo;
public String locStatus, locSWlat, locSWlng, locNElat, locNElng;
public Task(String xmlUrl) {
try {
this.taskID = Utils.getText(xmlUrl, "id");
this.taskName = Utils.getText(xmlUrl, "client", "name");
this.taskSize = Utils.getText(xmlUrl, "client", "zip_size");
this.taskStatus = Utils.getText(xmlUrl, "status");
this.className = FilenameUtils.removeExtension(taskName);
this.timeStatus = Utils.getText(xmlUrl, "client", "time", "status");
if (!this.timeStatus.isEmpty()) {
this.timeFrom = Utils.getText(xmlUrl, "client", "time", "from");
this.timeTo = Utils.getText(xmlUrl, "client", "time", "to");
}
this.locStatus = Utils.getText(xmlUrl, "client", "map", "status");
if (!this.locStatus.isEmpty()) {
this.locSWlat = Utils.getText(xmlUrl, "client", "map", "sw_lat");
this.locSWlng = Utils.getText(xmlUrl, "client", "map", "sw_lng");
this.locNElat = Utils.getText(xmlUrl, "client", "map", "ne_lat");
this.locNElng = Utils.getText(xmlUrl, "client", "map", "ne_lng");
}
} catch (Exception ex) {
//Logger.getLogger(Task.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

View File

@ -0,0 +1,676 @@
package com.www.server;
import java.io.*;
import java.lang.reflect.*;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import java.util.logging.*;
import java.util.zip.*;
import javax.ws.rs.*;
import javax.ws.rs.core.*;
import javax.ws.rs.core.Response.*;
import org.apache.commons.io.*;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
@Path("tasks")
public class TaskService {
String app = "sensing";
@Context
private UriInfo context;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String respondAsReady() {
return "TaskService is ready.";
}
@GET
@Path("test/{param}")
@Produces(MediaType.TEXT_PLAIN)
public String test(@PathParam("param") String id) {
return id;
}
@GET
@Path("gettaskinfo_test/{deviceID}")
@Produces(MediaType.APPLICATION_JSON)
public Task getTaskInfo_test(@PathParam("deviceID") String deviceID) throws Exception {
String taskID = getReadyTask();
String taskDir = "";
String xmlUrl = "";
Task task = null;
if (!taskID.isEmpty()) {
System.out.println("TaskService/getTaskInfo: Returning task info with id " + taskID + " ...");
taskDir = Utils.getDir(app, taskID);
updateDownloaded(taskID);
xmlUrl = taskDir + "/" + taskID + ".xml";
if (Utils.getText(xmlUrl, "status").isEmpty()) {
Utils.setText(xmlUrl, "status", "start");
}
task = new Task(taskDir + "/" + taskID + ".xml");
}
Utils.updateDeviceActivity(deviceID);
return task;
}
@GET
@Path("gettaskinfo/{deviceID}")
@Produces(MediaType.APPLICATION_JSON)
public Task getTaskInfo(@PathParam("deviceID") String deviceID) throws Exception {
String taskID = getReadyTask();
String taskDir = "";
String xmlUrl = "";
Task task = null;
if (!taskID.isEmpty()) {
System.out.println("TaskService/getTaskInfo: Returning task info with id " + taskID + " ...");
taskDir = Utils.getDir(app, taskID);
updateDownloaded(taskID);
xmlUrl = taskDir + "/" + taskID + ".xml";
if (Utils.getText(xmlUrl, "status").isEmpty()) {
Utils.setText(xmlUrl, "status", "start");
}
task = new Task(taskDir + "/" + taskID + ".xml");
}
Utils.updateDeviceActivity(deviceID);
return task;
}
@GET
@Path("{taskID}/getbin/{deviceID}")
public Response getBin(
@PathParam("taskID") String taskID,
@PathParam("deviceID") String deviceID) throws Exception {
String taskDir = Utils.getDir(app, taskID);
String clientDir = taskDir + "/client";
ResponseBuilder response = Response.ok(null);
if (clientDir != null && !clientDir.isEmpty()) {
File bin = Utils.returnFileFrom(clientDir, ".zip");
System.out.println("TaskService/getBin: Returning " + bin.getPath() + " ...");
response = Response.ok((Object) bin);
}
Utils.updateDeviceActivity(deviceID);
return response.build();
}
@GET
@Path("{taskID}/getbin/{length}/{deviceID}")
public Response getBin(
@PathParam("taskID") String taskID,
@PathParam("length") final Long length,
@PathParam("deviceID") String deviceID) throws Exception {
String result = "Oops!";
String taskDir = Utils.getDir(app, taskID);
String clientDir = taskDir + "/client";
final String binUrl = clientDir + "/" + taskID + ".zip";
Utils.updateDeviceActivity(deviceID);
if (clientDir != null && !clientDir.isEmpty() && new File(binUrl).length() > length) {
if (Utils.deviceExists(deviceID)) {
StreamingOutput stream = new StreamingOutput() {
@Override
public void write(OutputStream os) throws IOException, WebApplicationException {
Utils.returnPart(new RandomAccessFile(new File(binUrl), "r"), os, length);
}
};
System.out.println("TaskService/getBin: Returning part of " + binUrl + " from " + length + " to " + deviceID + "...");
return Response.ok("OK").entity(stream).build();
} else {
return Response.ok("Device not found").build();
}
} else {
return Response.ok(result).build();
}
}
@POST
@Path("{taskID}/putdata/{dataName}/{deviceID}")
public Response putData(
InputStream is,
@PathParam("dataName") String dataName,
@PathParam("taskID") String taskID,
@PathParam("deviceID") String deviceID) throws Exception {
String url = Utils.getDir(app, taskID) + "/client/" + dataName + "@" + deviceID + ".dat";
System.out.println("TaskService/putData: Writing to " + url);
//
// Utils.writeToFile(data, url);
//
// ObjectInputStream ois = new ObjectInputStream(is);
// List<Object> data = (List) ois.readObject();
// saveDataToFile(data, url);
//
Utils.writeToFile(is, url);
Utils.updateDeviceActivity(deviceID);
return Response.ok().entity("OK").build();
}
@GET
@Path("{taskID}/checkdata/{dataName}_{dataSize}/{deviceID}")
@Produces(MediaType.APPLICATION_JSON)
public Response checkData(
@PathParam("taskID") String taskID,
@PathParam("dataName") String dataName,
@PathParam("dataSize") long dataSize,
@PathParam("deviceID") String deviceID) throws JSONException {
String TAG = getClass().getName() + "@checkData: ";
JSONObject response = new JSONObject();
response.append("response", "oops");
String taskDir = Utils.getDir(app, taskID);
String clientDir = taskDir + "/client";
String serverDir = taskDir + "/server";
String dataUrl = clientDir + "/" + taskID + ".dat";
String newDataUrl = clientDir + "/" + dataName + "@" + deviceID + ".dat";
System.out.println(TAG + "Checking data " + newDataUrl + " | " + new File(newDataUrl).length() + "/" + dataSize);
if (Utils.seekFile(newDataUrl)) {
String compareResult = Utils.compareFiles(newDataUrl, dataSize);
if ("equal".equals(compareResult)) {
File file = Utils.returnFileFrom(taskDir, ".xml");
String fileName = FilenameUtils.removeExtension(file.getName());
String xmlUrl = taskDir + "/" + fileName + ".xml";
Utils.setText(xmlUrl, "new", "yes");
Utils.setText(xmlUrl, "counter", String.valueOf(Integer.valueOf(Utils.getText(xmlUrl, "counter")) + 1));
addLog(xmlUrl, dataName, deviceID);
//
// mergeData(dataUrl, newDataUrl);
//
try {
FileInputStream fis = new FileInputStream(newDataUrl);
ObjectInputStream ois = new ObjectInputStream(fis);
List<Object> newData = (List) ois.readObject();
saveDataToFile(newData, dataUrl);
close(ois);
close(fis);
System.gc();
File newDataFile = new File(newDataUrl);
if (newDataFile.delete()) {
System.out.println(TAG + "Deleted " + newDataUrl);
} else {
System.out.println(TAG + "Error deleting " + newDataUrl);
}
} catch (IOException | ClassNotFoundException ex) {
System.out.println(TAG + ex.getMessage());
}
/*if (Utils.getText(xmlUrl, "server") != null) {
FileInputStream fis;
ObjectInputStream in;
fis = new FileInputStream(newDataUrl);
in = new ObjectInputStream(fis);
Object object = (Object) in.readObject();
String serverFileName = Utils.getText(xmlUrl, "server", "name");
String serverClassName = serverFileName.substring(0, serverFileName.indexOf("."));
loadClass(serverDir, serverClassName, object);
}/**/
response.put("response", "OK");
} else if ("larger".equals(compareResult)) {
response.put("response", "put");
response.append("checked", String.valueOf(Utils.getFileSize(newDataUrl)));
} else {
new File(newDataUrl).delete();
}
}
Utils.updateDeviceActivity(deviceID);
System.out.println(TAG + response.toString());
return Response.ok().entity(response.toString()).build();
}
@GET
@Path("{taskID}/getprop/{deviceID}")
@Produces(MediaType.APPLICATION_JSON)
public Task getProp(
@PathParam("taskID") String taskID,
@PathParam("deviceID") String deviceID) throws Exception {
String taskDir = Utils.getDir(app, taskID);
String xmlUrl = taskDir + "/" + taskID + ".xml";
Task task = null;
//System.out.println("TaskService/getProp: Returning task prop with id " + taskID + " ...");
taskDir = Utils.getDir(app, taskID);
xmlUrl = taskDir + "/" + taskID + ".xml";
task = new Task(xmlUrl);
Utils.updateDeviceActivity(deviceID);
return task;
}
/*
* Description: Return the source code of a task.
* Parameters : - The task ID.
* Returns : - The task source code.
* Changelog : - .
*/
@GET
@Path("{taskID}/getsrc/")
@Produces(MediaType.APPLICATION_JSON)
public Object getSrc(@PathParam("taskID") String taskID) {
String TAG = TaskService.class.getName() + "@getSrc: ";
String taskDir = Utils.getDir(app, taskID);
String xmlUrl = taskDir + "/" + taskID + ".xml";
String taskName = Utils.getText(xmlUrl, "name");
String srcUrl = taskDir + "/client/" + taskName;
System.out.println(TAG + "Returning task source with id " + taskID + " from " + taskName + "...");
FileInputStream fis = null;
String src = "/*\n";
src += " * " + Utils.getText(xmlUrl, "name") + "\n";
src += " * " + Utils.getText(xmlUrl, "comment") + "\n";
src += " * " + "assigned id " + Utils.getText(xmlUrl, "id") + "\n";
src += " * " + "submitted by " + Utils.getText(xmlUrl, "username") + "\n";
src += " * " + "on " + Utils.getText(xmlUrl, "date") + " at " + Utils.getText(xmlUrl, "time") + "\n";
src += " */\n\n";
try {
fis = new FileInputStream(srcUrl);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
while (dis.available() != 0) {
src += (dis.readLine()) + "\n";
}
close(dis);
close(bis);
close(fis);
} catch (IOException ex) {
System.out.println(TAG + ex.getMessage());
}
return src;
}
/*
* Description: Return the source code of a task.
* Parameters : - The task ID.
* Returns : - The task source code.
* Changelog : - .
*/
@GET
@Path("getlist/")
@Produces(MediaType.TEXT_HTML)
public InputStream getList() {
String TAG = TaskService.class.getName() + "@getList: ";
String html = "<h1>List of submitted Sensing Tasks</h1>";
try {
Class.forName("com.mysql.jdbc.Driver");
try (Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password)) {
ResultSet rs;
try (Statement s = c.createStatement()) {
rs = s.executeQuery("SELECT * FROM tasks WHERE ready='YES'");
html += "<ol type=\"1\">";
while (rs.next()) {
String id = rs.getString("id");
String dir = Utils.getDir(app, id);
String xml = dir + "/" + id + ".xml";
html += "<li value =\"" + Utils.getText(xml, "id") + "\"><a href=" + Globals.server_url + "/webresources/tasks/" + id + "/getsrc>"
+ Utils.getText(xml, "name") + ""
+ ": " + Utils.getText(xml, "comment") + ""
+ " submitted by " + Utils.getText(xml, "username") + ""
+ " on " + Utils.getText(xml, "date") + " at " + Utils.getText(xml, "time")
+ "</a></li>";
}
html += "</ol>";
}
rs.close();
c.close();
}
} catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(TaskService.class.getName()).log(Level.SEVERE, null, ex);
}
InputStream is = new ByteArrayInputStream(html.getBytes(StandardCharsets.UTF_8));
return is;
}
/*
* Data
*/
@GET
@Path("{taskID}/getdata")
@Produces(MediaType.MULTIPART_FORM_DATA)
public Object getData(@PathParam("taskID") String taskID) throws Exception {
String TAG = getClass().getName() + "@getData: ";
String taskDir = Utils.getDir(app, taskID);
String clientDir = taskDir + "/client";
String dataUrl = clientDir + "/" + taskID + ".dat";
File data = new File(dataUrl);
// File data = new File(Globals.db_dir + "/data");
if (data.exists()) {
System.out.println(TAG + "Returning data " + dataUrl);
//data.delete();
return Response.ok("OK").header("Content-Disposition", "attachment; filename=\"" + taskID + ".dat\"").entity(data).build();
} else {
System.out.println(TAG + "No data found " + dataUrl);
return Response.ok("OK").header("Content-Disposition", "attachment; filename=\"" + taskID + ".dat\"").entity(null).build();
}
}
@GET
@Path("{taskID}/getdataOLD")
@Produces(MediaType.MULTIPART_FORM_DATA)
public Object getDataOLD(@PathParam("taskID") String taskID) throws Exception {
String taskDir = Utils.getDir(app, taskID);
String clientDir = taskDir + "/client";
String dataUrl = clientDir + "/" + taskID + ".dat";
final File data = new File(dataUrl);
if (data.exists()) {
String response = FileUtils.readFileToString(data);
//data.delete();
return Response.ok("OK").header("Content-Disposition", "attachment; filename=\"" + taskID + ".dat\"").entity(response).build();
} else {
return "Empty.";
}
}
@GET
@Path("{taskID}/deletedata")
public void deleteData(@PathParam("taskID") String taskID) throws Exception {
String taskDir = Utils.getDir(app, taskID);
String clientDir = taskDir + "/client";
String dataUrl = clientDir + "/" + taskID + ".dat";
String xmlUrl = taskDir + "/" + taskID + ".xml";
System.out.println("TaskService/deleteData: " + "Deleting data " + dataUrl);
File data = new File(dataUrl);
if (data.exists()) {
File dir = new File(clientDir);
for (File f : dir.listFiles()) {
if (f.getName().endsWith(".dat")) {
f.delete();
}
}
rmvLog(xmlUrl);
}
}
@GET
@Path("{taskID}/getdata/delete")
@Produces(MediaType.MULTIPART_FORM_DATA)
public Object downdelData(@PathParam("taskID") String taskID) throws Exception {
String taskDir = Utils.getDir(app, taskID);
String clientDir = taskDir + "/client";
String dataUrl = clientDir + "/" + taskID + ".dat";
String xmlUrl = taskDir + "/" + taskID + ".xml";
final File data = new File(dataUrl);
if (data.exists()) {
String response = FileUtils.readFileToString(data);
data.delete();
rmvLog(xmlUrl);
return Response.ok("OK").header("Content-Disposition", "attachment; filename=\"" + taskID + ".dat\"").entity(response).build();
} else {
return Response.serverError().build();
}
}
/*
*/
@GET
@Path("{taskID}/getdata/{dataName}")
@Produces(MediaType.MULTIPART_FORM_DATA)
public Object getData(
@PathParam("taskID") String taskID,
@PathParam("dataName") String dataName) throws Exception {
ResponseBuilder response = Response.ok("ERROR");
String taskDir = Utils.getDir(app, taskID);
String clientDir = taskDir + "/client";
String serverDir = taskDir + "/server";
String dataUrl = clientDir + "/" + dataName;
System.out.println("TaskService/getdata: " + "Returning data " + dataUrl);
File data = new File(dataUrl);
if (data.exists()) {
return data;
} else {
return null;
}
}
@GET
@Path("{taskID}/getdata/dat.zip")
@Produces(MediaType.MULTIPART_FORM_DATA)
public Object getDataZip(@PathParam("taskID") String taskID) throws Exception {
ResponseBuilder response = Response.ok("ERROR");
String taskDir = Utils.getDir(app, taskID);
String clientDir = taskDir + "/client";
System.out.println("TaskService/getdata: " + "Returning all data from " + clientDir);
byte[] buffer = new byte[1024];
FileOutputStream fos = new FileOutputStream(clientDir + "/" + "dat.zip");
ZipOutputStream zos = new ZipOutputStream(fos);
File[] list = new File(clientDir).listFiles();
for (File file : list) {
if ("dat".equals(FilenameUtils.getExtension(file.getName()))) {
String name = file.getAbsoluteFile().toString().substring(clientDir.length() + 1, file.getAbsoluteFile().toString().length());
ZipEntry ze = new ZipEntry(name);
zos.putNextEntry(ze);
FileInputStream in = new FileInputStream(clientDir + File.separator + name);
int len;
while ((len = in.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
close(in);
}
}
close(zos);
close(fos);
return new File(clientDir + "/" + "dat.zip");
}
@GET
@Path("{taskID}/deletedata/{dataName}")
public void deleteData(
@PathParam("taskID") String taskID,
@PathParam("dataName") String dataName) throws Exception {
//ResponseBuilder response = Response.ok("ERROR");
String taskDir = Utils.getDir(app, taskID);
String clientDir = taskDir + "/client";
String serverDir = taskDir + "/server";
String dataUrl = clientDir + "/" + dataName;
System.out.println("TaskService/deletedata: " + "Deleting data " + dataUrl);
rmvLog(taskDir + "/" + taskID + ".xml", dataName.substring(0, dataName.indexOf('@')));
File data = new File(dataUrl);
if (data.exists()) {
data.delete();
}
}
private void mergeData(String dataUrl, String newDataUrl) {
FileWriter fw = null;
try {
fw = new FileWriter(new File(dataUrl), true);
fw.write(FileUtils.readFileToString(new File(newDataUrl)));
} catch (IOException ex) {
Logger.getLogger(TaskService.class.getName()).log(Level.SEVERE, null, ex);
} finally {
Utils.close(fw);
}
}
/*
* Log
*/
private void addLog(String url, String dataName, String deviceID) {
String TAG = getClass().getName() + "@addLog: ";
SAXBuilder builder = new SAXBuilder();
File xml = new File(url);
try {
Document doc = (Document) builder.build(xml);
Element root = doc.getRootElement().getChild("client").getChild("log");
Element data = new Element("data");
root.addContent(data);
data.setAttribute("id", dataName);
data.addContent(new Element("date").setText(Utils.getDate()));
data.addContent(new Element("time").setText(Utils.getTime()));
data.addContent(new Element("device").setText(deviceID));
XMLOutputter xmlOutputter = new XMLOutputter();
xmlOutputter.setFormat(Format.getPrettyFormat());
xmlOutputter.output(doc, new FileWriter(url));
} catch (JDOMException | IOException ex) {
System.out.println(TAG + ex.getMessage());
}
}
private void rmvLog(String url, String dataName) throws Exception {
SAXBuilder builder = new SAXBuilder();
File xml = new File(url);
Document doc = (Document) builder.build(xml);
Element root = doc.getRootElement().getChild("client").getChild("log");
List list = root.getChildren("data");
for (int i = 0; i < list.size(); i++) {
Element element = (Element) list.get(i);
if (dataName.equals(element.getAttributeValue("id").toString())) {
element.getParent().removeContent(element);
}
}
XMLOutputter xmlOutputter = new XMLOutputter();
xmlOutputter.setFormat(Format.getPrettyFormat());
xmlOutputter.output(doc, new FileWriter(url));
}
private void rmvLog(String url) throws Exception {
SAXBuilder builder = new SAXBuilder();
File xml = new File(url);
Document doc = (Document) builder.build(xml);
Element root = doc.getRootElement().getChild("client").getChild("log");
root.removeContent();
XMLOutputter xmlOutputter = new XMLOutputter();
xmlOutputter.setFormat(Format.getPrettyFormat());
xmlOutputter.output(doc, new FileWriter(url));
}
/*
* Data
*/
boolean saveDataToFile(List data, String url) {
String TAG = getClass().getName() + "@saveData: ";
try {
System.out.println(TAG + "Saving data to " + url);
List<Object> oldData = getDataFromFile(url);
if (!oldData.isEmpty()) {
oldData.addAll(data);
data = oldData;
}
FileOutputStream fos = new FileOutputStream(url);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(data);
close(oos);
close(fos);
System.gc();
} catch (Exception ex) {
System.out.println(TAG + ex.getMessage());
return false;
}
System.out.println(TAG + "OK");
return true;
}
List getDataFromFile(String url) {
String TAG = getClass().getName() + "@getDataFromFile: ";
FileInputStream fis;
ObjectInputStream ois;
List<Object> data = new ArrayList<>();
try {
System.out.println(TAG + "Returning data from " + url);
if (new File(url).exists()) {
fis = new FileInputStream(url);
ois = new ObjectInputStream(fis);
data = (List) ois.readObject();
close(ois);
close(fis);
} else {
System.out.println(TAG + "File does not exist");
}
} catch (IOException | ClassNotFoundException ex) {
System.out.println(TAG + ex.getMessage());
}
System.out.println(TAG + "OK");
return data;
}
/*
* Misc
*/
private void loadClass(String dir, String className, Object object) throws MalformedURLException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, NoClassDefFoundError, IllegalArgumentException, InvocationTargetException {
URL url = new File(dir).toURI().toURL();
ClassLoader cl = new URLClassLoader(new URL[]{url}, getClass().getClassLoader());
Class clss = cl.loadClass(className);
Object instance = clss.newInstance();
Method method = clss.getMethod("main", new Class[]{Object.class
}
);
method.invoke(instance, new Object[]{object});
}
private String getReadyTask() throws ClassNotFoundException, SQLException {
String id = "";
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password);
Statement s = c.createStatement();
/*rs = s.executeQuery("SELECT * FROM tasks WHERE compiled='YES' AND downloaded=0");
if (rs.next()) {
id = rs.getString("id");
}/**/
ResultSet rs = s.executeQuery("SELECT * FROM tasks WHERE ready='YES'");
int min;
if (rs.next()) {
min = rs.getInt("downloaded");
id = rs.getString("id");
while (rs.next()) {
if (rs.getInt("downloaded") < min) {
min = rs.getInt("downloaded");
id = rs.getString("id");
}
}
}
rs.close();
s.close();
c.close();
return id;
}
private void updateDownloaded(String id) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password);
Statement s = c.createStatement();
s.executeUpdate("UPDATE tasks SET downloaded=downloaded+1 WHERE id='" + id + "'");
s = c.createStatement();
ResultSet rs = s.executeQuery("SELECT * FROM tasks WHERE id='" + id + "'");
rs.next();
Utils.setText(Utils.getDir(app, id) + "/" + id + ".xml", "client", "downloaded", "counter", rs.getString("downloaded"));
rs.close();
s.close();
c.close();
}
public static void close(Closeable resource) {
if (resource != null) {
try {
resource.close();
} catch (IOException ignore) {
}
}
}
}

View File

@ -0,0 +1,425 @@
package com.www.server;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
public class Upload extends HttpServlet {
private String CONSOLE_CMD, DB_DIR, SERVER_URL, LIB_URL, JAVAC_CMD, DX_CMD, DB_SERVER, DB_USERNAME, DB_PASSWORD;
private String userName;
private String errorMessage = "";
private boolean hasFileClient = false;
private boolean isCompiledClient = false;
private boolean hasFileServer = false;
private boolean hasLibServer = false;
private boolean isCompiledServer = false;
Boolean fileCompiled = false;
private String fileId, fileComment, fileDate, fileTime, userDir, fileDir,
dirClient, fileUrlClient, fileNameClient, fileSizeClient, fileSizeZipClient, fileCompileClient, fileTimeClient, fileDateClient,
dirServer, fileUrlServer, fileNameServer, fileSizeServer, fileCompileServer, fileTimeServer, fileDateServer,
zipFileNameServer, libUrlServer, libNameServer, libSizeServer;
private FileItem fileContentClient, fileContentServer, libContentServer;
private String timeCheckbox, timeFrom, timeTo;
private String mapCheckbox, sw_lat, sw_lng, ne_lat, ne_lng;
private String libCheckboxServer;
@Override
public void init() {
SERVER_URL = Globals.server_url;
DB_DIR = Globals.db_dir;
CONSOLE_CMD = Globals.console_cmd;
LIB_URL = Globals.lib_url;
JAVAC_CMD = Globals.javac_cmd;
DX_CMD = Globals.dx_cmd;
DB_USERNAME = Globals.db_username;
DB_PASSWORD = Globals.db_password;
DB_SERVER = Globals.db_server;
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, FileNotFoundException {
HttpSession session = request.getSession(true);
userName = (String) session.getAttribute("username");
try {
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
String fieldName = item.getFieldName();
if (item.isFormField()) {
String fieldValue = item.getString();
if ("upload_comment_value".equals(fieldName)) {
fileComment = "(no comment)";
if (!Utils.stringIsEmpty(fieldValue)) {
fileComment = item.getString();
}
}
if ("upload_time_checkbox".equals(fieldName)) {
timeCheckbox = fieldValue;
}
if ("on".equals(timeCheckbox)) {
if ("upload_time_selection_from".equals(fieldName)) {
timeFrom = fieldValue;
}
if ("upload_time_selection_to".equals(fieldName)) {
timeTo = fieldValue;
}
}
if ("upload_map_checkbox".equals(fieldName)) {
mapCheckbox = fieldValue;
}
if ("on".equals(mapCheckbox)) {
if ("upload_map_sw_lat".equals(fieldName)) {
sw_lat = fieldValue;
}
if ("upload_map_sw_lng".equals(fieldName)) {
sw_lng = fieldValue;
}
if ("upload_map_ne_lat".equals(fieldName)) {
ne_lat = fieldValue;
}
if ("upload_map_ne_lng".equals(fieldName)) {
ne_lng = fieldValue;
}
}
//if ("upload_lib_server_checkbox".equals(fieldName)) {
//libCheckboxServer = fieldValue;
//}
} else {
String fileName = FilenameUtils.getName(item.getName());
FileItem file = item;
if ("upload_code_client_value".equals(fieldName)) {
if (Utils.stringIsEmpty(fileName)) {
errorMessage += "No client part file chosen<br/>";
} else {
if (fileName.substring(fileName.lastIndexOf(".") + 1).equalsIgnoreCase("java")) {
hasFileClient = true;
fileNameClient = fileName;
fileContentClient = file;
} else {
errorMessage += "Client part must be a .java file<br/>";
}
}
} else if ("upload_code_server_value".equals(fieldName) && !Utils.stringIsEmpty(fileName)) {
if (fileName.substring(fileName.lastIndexOf(".") + 1).equalsIgnoreCase("zip")) {
hasFileServer = true;
zipFileNameServer = fileName;
fileContentServer = file;
} else {
errorMessage += "Server part must be a .zip file<br/>";
}
}
//if ("upload_lib_server_value".equals(fieldName) && fileServer && "on".equals(libCheckboxServer)) {
//if (fileName.substring(fileName.lastIndexOf(".") + 1).equalsIgnoreCase("jar")) {
//libServer = true;
//libNameServer = fileName;
//libContentServer = file;
//} else {
//errorMessage += "Server library must be a .jar file<br/>";
//}
//}
}
}
} catch (FileUploadException e) {
throw new ServletException("Cannot parse multipart request.", e);
}/**/
if (!Utils.stringIsEmpty(errorMessage)) {
request.setAttribute("errorMessage", errorMessage);
errorMessage = "";
destroyFile();
request.getRequestDispatcher("main/upload.jsp").forward(request, response);
} else {
try {
fileId = String.valueOf(getNewTaskId());
insertTask(fileId, fileNameClient, userName);
initFile();
fileSizeClient = Utils.writeToFile(fileContentClient, fileUrlClient);
fileCompileClient = Utils.compileAndroidFile(dirClient, fileNameClient);
fileCompileClient += "\n" + Utils.compileDex(dirClient, fileNameClient);
fileDateClient = Utils.getDate();
fileTimeClient = Utils.getTime();
if (hasFileServer) {
Utils.writeToFile(fileContentServer, dirServer + "/" + zipFileNameServer);
fileDateServer = Utils.getDate();
fileTimeServer = Utils.getTime();
//if (libServer) {
//libSizeServer = writeToFile(libContentServer, libUrlServer);
//fileCompileServer = compileFile(dirServer, fileNameServer, libNameServer);
//} else {
Utils.unZip(dirServer, zipFileNameServer);
fileNameServer = Utils.returnFileFrom(dirServer, ".java").getName();
if (Utils.returnFileFrom(dirServer, ".jar") != null) {
hasLibServer = true;
}
fileCompileServer = Utils.compileFile(dirServer, fileNameServer);
}
composeXml();
if (isCompiledClient) {
fileSizeZipClient = Utils.zipDex(dirClient, fileId);
Utils.setText(fileDir + "/" + fileId + ".xml", "client", "zip_size", fileSizeZipClient);
}
if (fileCompiled) {
Utils.updateReady("tasks", fileId, "YES");
}
} catch (ClassNotFoundException | SQLException | IOException | InterruptedException | JDOMException ex) {
Logger.getLogger(Upload.class.getName()).log(Level.SEVERE, null, ex);
}
systemOut();
destroyFile();
response.sendRedirect(response.encodeRedirectURL("/Server/main/view.jsp?id=" + fileId));
}/**/
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
response.sendRedirect(response.encodeRedirectURL("/Server/main/upload.jsp"));
}
private void systemOut() {
System.out.println(
"\n/********** Upload **********/\n"
+ "\nUser: " + userName
+ "\nComment: " + fileComment
+ "\nId: " + fileId
+ "\nDate: " + fileDate
+ "\nTime: " + fileTime
);
if (hasFileClient) {
System.out.println(
"\nClient: " + fileNameClient
+ "\n Size: " + fileSizeClient
+ "\n Time: " + timeCheckbox
);
if ("on".equals(timeCheckbox)) {
System.out.println(
" From: " + timeFrom
+ "\n To: " + timeTo
);
}
System.out.println(" Location: " + mapCheckbox);
if ("on".equals(mapCheckbox)) {
System.out.println(
" sw_lat: " + sw_lat
+ "\n sw_lng: " + sw_lng
+ "\n ne_lat: " + ne_lat
+ "\n ne_lng: " + ne_lng
);
}
}
if (hasFileServer) {
System.out.println(
"\nServer: " + fileNameServer
+ "\n Size: " + fileSizeServer
);
if (hasLibServer) {
System.out.println(" Library: " + libNameServer);
}
}
System.out.println("\n/****************************/\n");
}
private void insertTask(String fileId, String fileName, String userName) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection(DB_SERVER, DB_USERNAME, DB_PASSWORD);
Statement s = c.createStatement();
String sql = "INSERT INTO tasks (`id`, `filename`, `username`, `ready`, `downloaded`) VALUES ('"
+ fileId + "', '" + fileName + "', '" + userName + "', '" + "NO" + "', '" + "0" + "')";
s.executeUpdate(sql);
s.close();
c.close();
}
private int getNewTaskId() throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection(DB_SERVER, DB_USERNAME, DB_PASSWORD);
Statement s;
s = c.createStatement();
s.executeQuery("SELECT COUNT(*) FROM tasks");
ResultSet rs = s.getResultSet();
rs.next();
int id = rs.getInt(1);
rs.close();
s.close();
c.close();
return ++id;
}
private void initFile() throws ClassNotFoundException, SQLException {
fileDate = Utils.getDate();
fileTime = Utils.getTime();
userDir = DB_DIR + "/" + userName;
fileDir = userDir + "/sensing/" + fileId;
new File(fileDir).mkdir();
dirClient = fileDir + "/client";
fileUrlClient = dirClient + "/" + fileNameClient;
new File(dirClient).mkdir();
if (hasFileServer) {
dirServer = fileDir + "/server";
new File(dirServer).mkdir();
//fileUrlServer = dirServer + "/" + fileNameServer;
//if (libServer) {
//libUrlServer = dirServer + "/" + libNameServer;
//}
}
}
private void destroyFile() {
hasFileServer = false;
fileNameServer = "";
fileContentServer = null;
hasLibServer = false;
libNameServer = "";
libContentServer = null;
isCompiledServer = false;
hasFileClient = false;
fileNameClient = "";
fileContentClient = null;
isCompiledClient = false;
fileCompiled = false;
}
private void composeXml() {
try {
Element root = new Element("file");
Document doc = new Document(root);
doc.setRootElement(root);
root.addContent(new Element("username").setText(userName));
root.addContent(new Element("name").setText(fileNameClient));
root.addContent(new Element("id").setText(fileId));
root.addContent(new Element("comment").setText(fileComment));
root.addContent(new Element("date").setText(fileDate));
root.addContent(new Element("time").setText(fileTime));
root.addContent(new Element("status").setText(""));
root.addContent(new Element("new").setText("no"));
root.addContent(new Element("counter").setText("0"));
Element client = new Element("client");
root.addContent(client);
client.addContent(new Element("name").setText(fileNameClient));
client.addContent(new Element("size").setText(fileSizeClient));
client.addContent(new Element("zip_size").setText("0"));
Element downloaded = new Element("downloaded");
client.addContent(downloaded);
downloaded.addContent(new Element("counter").setText("0"));
downloaded.addContent(new Element("devices").setText(""));
Element time = new Element("time");
client.addContent(time);
time.addContent(new Element("status").setText(timeCheckbox));
if ("on".equals(timeCheckbox)) {
time.addContent(new Element("from").setText(timeFrom));
time.addContent(new Element("to").setText(timeTo));
}
Element map = new Element("map");
client.addContent(map);
map.addContent(new Element("status").setText(mapCheckbox));
if ("on".equals(mapCheckbox)) {
map.addContent(new Element("sw_lat").setText(sw_lat));
map.addContent(new Element("sw_lng").setText(sw_lng));
map.addContent(new Element("ne_lat").setText(ne_lat));
map.addContent(new Element("ne_lng").setText(ne_lng));
}
Element compileClient = new Element("compile");
client.addContent(compileClient);
if (Utils.stringIsEmpty(fileCompileClient)) {
compileClient.addContent(new Element("status").setText("true"));
isCompiledClient = true;
fileCompiled = true;
} else {
compileClient.addContent(new Element("status").setText("false"));
isCompiledClient = false;
fileCompiled = false;
}
compileClient.addContent(new Element("date").setText(fileDateClient));
compileClient.addContent(new Element("time").setText(fileTimeClient));
compileClient.addContent(new Element("output").setText(fileCompileClient));
client.addContent(new Element("log"));
if (hasFileServer) {
Element server = new Element("server");
root.addContent(server);
server.addContent(new Element("name").setText(fileNameServer));
server.addContent(new Element("size").setText(fileSizeServer));
if (hasLibServer) {
Element libs = new Element("libraries");
server.addContent(libs);
File folder = new File(dirServer);
String fileName;
File file = null;
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
fileName = listOfFiles[i].getName();
if (fileName.endsWith(".jar")) {
file = new File(dirServer + "/" + fileName);
Element lib = new Element("library");
libs.addContent(lib);
lib.addContent(new Element("name").setText(file.getName()));
lib.addContent(new Element("size").setText(Long.toString(file.length())));
}
}
}
}
Element compileServer = new Element("compile");
server.addContent(compileServer);
if (Utils.stringIsEmpty(fileCompileServer)) {
compileServer.addContent(new Element("status").setText("true"));
isCompiledServer = true;
} else {
compileServer.addContent(new Element("status").setText("false"));
isCompiledServer = false;
fileCompiled = false;
}
compileServer.addContent(new Element("date").setText(fileDateServer));
compileServer.addContent(new Element("time").setText(fileTimeServer));
compileServer.addContent(new Element("output").setText(fileCompileServer));
}
XMLOutputter xmlOutputter = new XMLOutputter();
xmlOutputter.setFormat(Format.getPrettyFormat());
xmlOutputter.output(doc, new FileWriter(fileDir + "/" + fileId + ".xml"));
} catch (IOException ex) {
Logger.getLogger(Upload.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

View File

@ -0,0 +1,76 @@
package com.www.server;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
@Path("/user")
public class UserService {
String DEVICES_INFO = "jdbc:mysql://localhost:3306/devices_info";
String USERNAME = Globals.db_username;
String PASSWORD = Globals.db_password;
@Context
UriInfo uriInfo;
@Context
Request request;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String respondAsReady() {
return "User service is ready.";
}
@GET
@Path("register_device/{username}_{model}_{os}")
public Response registerDevice(@PathParam("username") String username, @PathParam("model") String model, @PathParam("os") String os) throws ClassNotFoundException, SQLException {
int id = getNewId();
registerNewDevice(id, username, model, os);
return Response.ok().entity(String.valueOf(id)).build();
}
private int getNewId() throws ClassNotFoundException, SQLException {
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver);
Connection conn = DriverManager.getConnection(DEVICES_INFO, USERNAME, PASSWORD);
ResultSet rs;
Statement s = conn.createStatement();
String sql = "SELECT id FROM counter";
rs = s.executeQuery(sql);
rs.next();
int id = Integer.parseInt(rs.getString("id"));
s.executeUpdate("UPDATE counter SET id = (id + 1)");
s.close();
rs.close();
conn.close();
return id;
}
private void registerNewDevice(int id, String username, String model, String os) throws ClassNotFoundException, SQLException {
System.out.println("id: " + id);
System.out.println("username: " + username);
System.out.println("model: " + model);
System.out.println("os: " + os);
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver);
Connection conn = DriverManager.getConnection(DEVICES_INFO, USERNAME, PASSWORD);
Statement s = conn.createStatement();
String sql = "INSERT INTO devices_info.devices (`id`, `username`, `model`, `os`) VALUES ('" + id + "', '" + username + "', '" + model + "', '" + os + "')";
s.executeUpdate(sql);
s.close();
conn.close();
}
}

View File

@ -0,0 +1,806 @@
package com.www.server;
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.io.FilenameUtils;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
public class Utils {
/* XML utilities */
/*
* Description: Return from the url xml file the content of node.
* Parameters : - .
* Returns : - .
* Changelog : 150523 - Added console output.
*/
public static String getText(String url, String node) {
if (Globals.DBG) {
System.out.println("Utils.getText1: " + url + " " + node);
}
String text = "";
SAXBuilder builder = new SAXBuilder();
File xmlFile = new File(url);
try {
Document document = (Document) builder.build(xmlFile);
Element root = document.getRootElement();
text = root.getChildText(node);
} catch (JDOMException | IOException e) {
if (Globals.DBG) {
System.out.println("Utils.getText1: " + e.getMessage());
}
return text;
}
if (Globals.DBG) {
System.out.println("Utils.getText1: " + text);
}
return text;
}
public static String getText(String url, String node1, String node2) {
if (Globals.DBG) {
System.out.println("Utils.getText2: " + url + " " + node1 + " > " + node2);
}
String text = "";
SAXBuilder builder = new SAXBuilder();
File xmlFile = new File(url);
try {
Document document = (Document) builder.build(xmlFile);
Element root = document.getRootElement();
Element child = root.getChild(node1);
text = child.getChildText(node2);
} catch (JDOMException | IOException e) {
if (Globals.DBG) {
System.out.println("Utils.getText2: " + e.getMessage());
}
return " ";
}
if (Globals.DBG) {
System.out.println("Utils.getText2: " + text);
}
return text;
}
public static String getText(String url, String node1, String node2, String node3) {
if (Globals.DBG) {
System.out.println("Utils.getText3: " + url + " " + node1 + " > " + node2 + " > " + node3);
}
String text = "";
SAXBuilder builder = new SAXBuilder();
File xmlFile = new File(url);
try {
Document document = (Document) builder.build(xmlFile);
Element root = document.getRootElement();
Element child1 = root.getChild(node1);
Element child2 = child1.getChild(node2);
text = child2.getChildText(node3);
} catch (JDOMException | IOException e) {
if (Globals.DBG) {
System.out.println("Utils.getText3: " + e.getMessage());
}
return text;
}
if (Globals.DBG) {
System.out.println("Utils.getText3: " + text);
}
return text;
}
/*
* Description: Set in url xml file the content of node to string.
* Parameters : - .
* Returns : - .
* Changelog : 150523 - Commented out errors and added console output.
*/
public static void setText(String url, String node, String string) {
if (Globals.DBG) {
System.out.println("Utils.setText1: " + url + " " + node + " > " + string);
}
SAXBuilder builder = new SAXBuilder();
File xmlFile = new File(url);
try {
Document document = (Document) builder.build(xmlFile);
Element root = document.getRootElement();
root.getChild(node).setText(string);
XMLOutputter xmlOutputter = new XMLOutputter();
xmlOutputter.setFormat(Format.getPrettyFormat());
xmlOutputter.output(document, new FileWriter(url));
} catch (JDOMException | IOException e) {
if (Globals.DBG) {
System.out.println("Utils.setText1: " + e.getMessage());
}
}
}
public static void setText(String url, String child1, String child2, String string) {
if (Globals.DBG) {
System.out.println("Utils.setText2: " + url + " " + child1 + " > " + child2 + " > " + string);
}
SAXBuilder builder = new SAXBuilder();
File xmlFile = new File(url);
try {
Document document = (Document) builder.build(xmlFile);
Element root = document.getRootElement();
Element node1 = root.getChild(child1);
Element node2 = node1.getChild(child2);
node2.setText(string);
XMLOutputter xmlOutputter = new XMLOutputter();
xmlOutputter.setFormat(Format.getPrettyFormat());
xmlOutputter.output(document, new FileWriter(url));
} catch (JDOMException | IOException e) {
if (Globals.DBG) {
System.out.println("Utils.setText2: " + e.getMessage());
}
}
}
public static void setText(String url, String child1, String child2, String child3, String string) {
if (Globals.DBG) {
System.out.println("Utils.setText3: " + url + " " + child1 + " > " + child2 + " > " + child3 + " > " + string);
}
SAXBuilder builder = new SAXBuilder();
File xmlFile = new File(url);
try {
Document document = (Document) builder.build(xmlFile);
Element root = document.getRootElement();
Element node1 = root.getChild(child1);
Element node2 = node1.getChild(child2);
Element node3 = node2.getChild(child3);
node3.setText(string);
XMLOutputter xmlOutputter = new XMLOutputter();
xmlOutputter.setFormat(Format.getPrettyFormat());
xmlOutputter.output(document, new FileWriter(url));
} catch (JDOMException | IOException e) {
if (Globals.DBG) {
System.out.println("Utils.setText3: " + e.getMessage());
}
}
}
public static void addText(String url, String node1, String node2, String string) throws JDOMException, IOException {
SAXBuilder builder = new SAXBuilder();
File xmlFile = new File(url);
Document document = (Document) builder.build(xmlFile);
Element root = document.getRootElement();
root.getChild(node1).getChild(node2).addContent(string);
XMLOutputter xmlOutputter = new XMLOutputter();
xmlOutputter.setFormat(Format.getPrettyFormat());
xmlOutputter.output(document, new FileWriter(url));
}
public static List getNodeList(String url, String element1, String element2, String label) throws JDOMException, IOException {
SAXBuilder builder = new SAXBuilder();
File xml = new File(url);
Document doc = (Document) builder.build(xml);
Element root = doc.getRootElement().getChild(element1).getChild(element2);
return root.getChildren(label);
}
public static void appendNode(String url, String node, String child, String label, String text) throws JDOMException, IOException {
}
/* */
/* Misc utilities */
public static String getTime() {
Calendar calen = Calendar.getInstance();
DateFormat df = new SimpleDateFormat("HH:mm:ss");
return df.format(calen.getTime());
}
public static String getTime(String format) {
Calendar calen = Calendar.getInstance();
DateFormat df = new SimpleDateFormat(format);
return df.format(calen.getTime());
}
public static String getDate() {
Calendar calen = Calendar.getInstance();
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
return df.format(calen.getTime());
}
public static Boolean isDateRecent(String date, int months, int days, int years) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Calendar calPrev = Calendar.getInstance();
Date datePrev = sdf.parse(date);
calPrev.setTime(datePrev);
Calendar calCurr = Calendar.getInstance();
Date dateCurr = sdf.parse(sdf.format(calCurr.getTime()));
calCurr.setTime(dateCurr);
calCurr.add(Calendar.MONTH, -months);
calCurr.add(Calendar.DAY_OF_MONTH, -days);
calCurr.add(Calendar.YEAR, -years);
/*System.out.println("calCurr: " + calCurr.getTime());
System.out.println("calPrev: " + calPrev.getTime());
System.out.println("calPrev after calCurr: " + calPrev.after(calCurr));/**/
return calPrev.after(calCurr);
}
public static Boolean isTimeRecent(String time, int hours, int minutes, int seconds) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
Calendar calPrev = Calendar.getInstance();
Date datePrev = sdf.parse(time);
calPrev.setTime(datePrev);
Calendar calCurr = Calendar.getInstance();
Date dateCurr = sdf.parse(sdf.format(calCurr.getTime()));
calCurr.setTime(dateCurr);
calCurr.add(Calendar.HOUR, -hours);
calCurr.add(Calendar.MINUTE, -minutes);
calCurr.add(Calendar.SECOND, -seconds);
/*System.out.println("calCurr: " + sdf.format(calCurr.getTime()));
System.out.println("calPrev: " + sdf.format(calPrev.getTime()));
System.out.println("calPrev after calCurr: " + calPrev.after(calCurr));/**/
return calPrev.after(calCurr);
}
public static Boolean stringIsEmpty(String string) {
if (string == null) {
return true;
} else if (string.isEmpty()) {
return true;
} else if ("".equals(string)) {
return true;
} else if (string.trim().length() <= 0) {
return true;
} else {
return false;
}
}
/*
* Description: Checks if a device is registered.
* Parameters : - The device id to be checked.
* Returns : - false/ture accordingly.
* Changelog : - .
*/
public static Boolean deviceExists(String id) {
Boolean exists = false;
try {
Class.forName("com.mysql.jdbc.Driver");
try (Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password);
Statement s = c.createStatement()) {
s.executeQuery("SELECT * FROM devices WHERE id='" + id + "'");
try (ResultSet rs = s.getResultSet()) {
if (rs.next()) {
exists = true;
}
}
}
} catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
}
return exists;
}
public static String getDeviceInfo(String id, String request) {
String TAG = "Utils@getDeviceInfo: ";
String info = "Oops!";
String connectionURL = "jdbc:mysql://localhost:3306/server";
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException ex) {
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
}
Connection connection;
try {
connection = DriverManager.getConnection(connectionURL, Globals.db_username, Globals.db_password);
ResultSet rs;
Statement s = connection.createStatement();
String sql = "SELECT " + request + " FROM devices WHERE id='" + id + "'";
rs = s.executeQuery(sql);
if (rs.next()) {
// System.out.println(TAG + rs.toString());
info = rs.getString(request);
}
rs.close();
s.close();
connection.close();
} catch (SQLException ex) {
System.out.println(TAG + ex.getMessage());
}
return info;
}
public static void updateDeviceActivity(String id) {
String TAG = "Utils@updateDeviceActivity: ";
String date = Utils.getDate();
String time = Utils.getTime();
String driver = "com.mysql.jdbc.Driver";
try {
Class.forName(driver);
try (
Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password);
Statement s = c.createStatement()) {
s.executeUpdate("UPDATE devices SET last_date='" + date + "', last_time='" + time + "' WHERE id='" + id + "'");
}
} catch (ClassNotFoundException | SQLException ex) {
System.out.println(TAG + ex.getMessage());
}
/**/
/**/
}
/* */
/* File utilities */
/*
* Description: Saves a file item to a selected destination.
* Parameters : - The file item.
* - The url to save the file.
* Returns : - The size of the file.
* Changelog : 150523 - Commented out errors and added console output.
*/
public static String writeToFile(FileItem fi, String url) {
File file = new File(url);
try {
fi.write(file);
} catch (Exception ex) {
System.out.println(Utils.class.getName() + "@writeToFile:" + ex.getMessage());
}
long size = file.length();
return Long.toString(size);
}
public static void writeToNewFile(InputStream input, String url) throws IOException {
OutputStream output = new FileOutputStream(new File(url));
int read;
byte[] buffer = new byte[1024];
while ((read = input.read(buffer)) > 0) {
output.write(buffer, 0, read);
}
close(output);
close(input);
}
public static void writeToFile(InputStream input, String url) {
File file = new File(url);
long seek = file.length();
RandomAccessFile output = null;
try {
output = new RandomAccessFile(file, "rw");
output.seek(seek);
int read;
byte[] buffer = new byte[1024];
while ((read = input.read(buffer)) > 0) {
output.write(buffer, 0, read);
}
} catch (Exception ex) {
//Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
}
close(input);
close(output);
}
public static File returnFileFrom(String url, String type) {
File folder = new File(url);
String fileName;
File file = null;
File[] listOfFiles = folder.listFiles();
for (File listOfFile : listOfFiles) {
if (listOfFile.isFile()) {
fileName = listOfFile.getName();
if (fileName.endsWith(type)) {
file = new File(url + "/" + fileName);
break;
}
}
}
return file;
}
/*
* Description: Return the directory of the task id.
* Parameters : - sensing/privacy.
* - The file id.
* Returns : - The file url.
* Changelog : 150529 - Rename from getFileDir to getTaskDir and remove
* throws clauses.
* 150608 - Add privacy support.
*/
public static String getDir(String app, String id) {
String url = "Oops!";
String table = "";
if ("sensing".equals(app)) {
table = "tasks";
} else if ("privacy".equals(app)) {
table = "pms";
} else {
return "Oops!";
}
try {
Class.forName("com.mysql.jdbc.Driver");
try (Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password)) {
ResultSet rs;
try (Statement s = c.createStatement()) {
rs = s.executeQuery("SELECT * FROM " + table + " WHERE id='" + id + "'");
if (rs.next()) {
url = Globals.db_dir + "/" + rs.getString("username") + "/" + app + "/" + id;
}
}
rs.close();
}
} catch (ClassNotFoundException | SQLException e) {
System.out.println("Utils.getTaskDir: " + e.getMessage());
}
if (Globals.DBG) {
System.out.println("Utils.getTaskDir: " + url);
}
return url;
}
public static boolean seekFile(String url) {
File file = new File(url);
if (file.exists()) {
return true;
} else {
return false;
}
}
public static long getFileSize(String url) {
File file = new File(url);
if (file.exists()) {
return file.length();
} else {
return 0;
}
}
public static String compareFiles(String url, Long size) {
String response = "Oops!";
File file = new File(url);
if (size == file.length()) {
response = "equal";
} else if (size < file.length()) {
response = "smaller";
} else if (size > file.length()) {
response = "larger";
}
return response;
}
public static File returnPart(String deviceID, String url, long start) throws IOException {
File file = new File(url);
OutputStream output = new FileOutputStream(url + "@" + deviceID + ".tmp");
int read;
byte[] buffer = new byte[1024];
RandomAccessFile input;
input = new RandomAccessFile(file, "r");
input.seek(start);
while ((read = input.read(buffer)) > 0) {
output.write(buffer, 0, read);
}
close(output);
close(input);
File part = new File(url + "@" + deviceID + ".tmp");
return part;
}
public static void copyFileOLD(RandomAccessFile input, OutputStream output, long start, long length) throws IOException {
byte[] buffer = new byte[1024];
int read;
if (input.length() == length) {
while ((read = input.read(buffer)) > 0) {
output.write(buffer, 0, read);
}
} else {
input.seek(start);
long toRead = length;
while ((read = input.read(buffer)) > 0) {
if ((toRead -= read) > 0) {
output.write(buffer, 0, read);
} else {
output.write(buffer, 0, (int) toRead + read);
break;
}
}
}
}
public static void returnPart(RandomAccessFile input, OutputStream output, long start) throws IOException {
int read;
byte[] buffer = new byte[1024];
input.seek(start);
while ((read = input.read(buffer)) > 0) {
output.write(buffer, 0, read);
}
close(output);
close(input);
}
public static void close(Closeable resource) {
if (resource != null) {
try {
resource.close();
} catch (IOException ignore) {
}
}
}
/* */
/* Compilation utilities */
public static String compileFile(String dir, String fileName) throws IOException, InterruptedException, JDOMException, ClassNotFoundException, SQLException {
String result = "";
String javac_cmd = "\"" + Globals.javac_cmd + "\"" + " -cp " + dir + "/\\* " + dir + "/" + fileName;
System.out.println("Utils.compileFile: " + javac_cmd);
Process p = Runtime.getRuntime().exec(Globals.console_cmd);
OutputStream os = p.getOutputStream();
os.write((javac_cmd + "\n").getBytes());
os.flush();
os.close();
p.waitFor();
BufferedReader bf = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line = bf.readLine();
while (line != null) {
result = result + line + "\n";
line = bf.readLine();
}
close(bf);
close(os);
return result;
}
public static boolean findMethod(String method, File file) {
Pattern p = Pattern.compile("\\b" + method + "\\b");
BufferedReader bf = null;
try {
bf = new BufferedReader(new FileReader(file.getPath()));
String line = "";
while ((line = bf.readLine()) != null) {
Matcher m = p.matcher(line);
if (m.find()) {
return true;
}
}
} catch (Exception ex) {
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
}
return false;
}
/*
* Description: Compiles the source code of the sensing task.
* Parameters : - The source code file.
* Returns : - The compilation log.
* Changelog : 150523 - Paths with spaces and console output.
* 150607 - Remove throws clauses.
*/
public static String compileAndroidFile(String dir, String fileName) {
String result = "";
try {
String javac_cmd = "\"" + Globals.javac_cmd + "\"" + " -cp " + "\"" + Globals.lib_url + "\"" + " " + "\"" + dir + "/" + fileName + "\"";
System.out.println("Utils.compileAndroidFile: " + javac_cmd);
Process p = Runtime.getRuntime().exec(Globals.console_cmd);
OutputStream os = p.getOutputStream();
os.write((javac_cmd + "\n").getBytes());
close(os);
p.waitFor();
BufferedReader bf = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line = bf.readLine();
while (line != null) {
result = result + line + "\n";
line = bf.readLine();
}
close(bf);
if (!findMethod("public void onStart", new File(dir + "/" + fileName))) {
result += "'public void onStart(Context, ObjectInputStream)' method not found.\n";
System.out.println("'public void onStart (Context, ObjectInputStream)' method not found.");
}
if (!findMethod("public void onStop", new File(dir + "/" + fileName))) {
result += "'public void onStop()' method not found.\n";
System.out.println("'public void onStop()' method not found.");
}
/*
if (!findMethod("public ArrayList<String> getData()", new File(dir + "/" + fileName))) {
result += "'public ArrayList<String> getData()' method not found.\n";
System.out.println("'public ArrayList<String> getData()' method not found.");
}
*/
/*
if (!findMethod("public boolean saveData", new File(dir + "/" + fileName))) {
result += "'public boolean saveData(ObjectOutputStream)' method not found.\n";
System.out.println("'public boolean saveData(ObjectOutputStream)' method not found.");
}
*/
if (!findMethod("public List<Object> getData", new File(dir + "/" + fileName))) {
result += "'public List<Object> getData()' method not found.\n";
System.out.println("'public List<Object> getData()' method not found.");
}
if (!findMethod("public boolean saveState", new File(dir + "/" + fileName))) {
result += "'public boolean saveState(ObjectOutputStream)' method not found.\n";
System.out.println("'public boolean saveState(ObjectOutputStream)' method not found.");
}
System.out.println("Utils.compileAndroidFile: " + result);
} catch (IOException | InterruptedException ex) {
System.out.println(Utils.class.getName() + "@compileAndroidFile: " + ex.getMessage());
}
return result;
}
/*
* Description: Compiles the source code of the PM.
* Parameters : - The source code file.
* Returns : - The compilation log.
* Changelog : - .
*/
public static String compilePM(String dir, String fileName) {
String TAG = Utils.class.getName() + "@compilePM: ";
String result = "";
try {
String javac_cmd = "\"" + Globals.javac_cmd + "\"" + " -cp " + "\"" + Globals.lib_url + "\"" + " " + "\"" + dir + "/" + fileName + "\"";
System.out.println(TAG + javac_cmd);
Process p = Runtime.getRuntime().exec(Globals.console_cmd);
try (OutputStream os = p.getOutputStream()) {
os.write((javac_cmd + "\n").getBytes());
close(os);
}
p.waitFor();
try (BufferedReader bf = new BufferedReader(new InputStreamReader(p.getErrorStream()))) {
String line = bf.readLine();
while (line != null) {
result = result + line + "\n";
line = bf.readLine();
}
}
if (!findMethod("public void onStart", new File(dir + "/" + fileName))) {
result += "'public void onStart (Context, int, ObjectInputStream)' method not found.\n";
System.out.println("'public void onStart (Context, int, ObjectInputStream)' method not found.");
}
if (!findMethod("public void onStop", new File(dir + "/" + fileName))) {
result += "'public void onStop ()' method not found.\n";
System.out.println("'public void onStop ()' method not found.");
}
if (!findMethod("public void onPreferenceChanged", new File(dir + "/" + fileName))) {
result += "'public void onPreferenceChanged (int)' method not found.\n";
System.out.println("'public void onPreferenceChanged (int)' method not found.");
}
if (!findMethod("public boolean saveState", new File(dir + "/" + fileName))) {
result += "'public boolean saveState (ObjectOutputStream)' method not found.\n";
System.out.println("'public boolean saveState (ObjectOutputStream)' method not found.");
}
if (!findMethod("public int processData", new File(dir + "/" + fileName))) {
result += "'public int processData (ObjectInputStream, ObjectOutputStream)' method not found.\n";
System.out.println("'public int processData (ObjectInputStream, ObjectOutputStream)' method not found.");
}
/**/
System.out.println(TAG + result);
} catch (IOException | InterruptedException ex) {
System.out.println(TAG + ex.getMessage());
}
return result;
}
/*
* Description: Compiles the java classes and creates the .dex file.
* Parameters : - The directory of the code file.
* - The URL of the code file.
* Returns : - The compilation log.
* Changelog : 150523 - Paths with spaces and console output.
* 150607 - Remove throws clauses.
*/
public static String compileDex(String dir, String fileName) {
String TAG = Utils.class.getName() + "@compileDex: ";
String result = "";
try {
String name = FilenameUtils.removeExtension(fileName);
String dx_cmd;
dx_cmd = "\"" + Globals.dx_cmd + "\"" + " --dex --no-strict --output=" + "\"" + dir + "/classes.dex" + "\"" + " " + "\"" + dir + "/" + "\"" + "*" + ".class";
System.out.println("Utils.compileDex: " + dx_cmd);
Process p = Runtime.getRuntime().exec(Globals.console_cmd);
try (OutputStream os = p.getOutputStream()) {
os.write((dx_cmd + "\n").getBytes());
close(os);
}
try (BufferedReader bf = new BufferedReader(new InputStreamReader(p.getErrorStream()))) {
String line = bf.readLine();
while (line != null) {
result = result + line + "\n";
line = bf.readLine();
}
}
System.out.println(TAG + result);
} catch (IOException ex) {
System.out.println(TAG + ex.getMessage());
}
return result;
}
public static void unZip(String dir, String fileName) throws IOException, InterruptedException {
Process p = Runtime.getRuntime().exec(Globals.console_cmd);
OutputStream os = p.getOutputStream();
os.write(("cd " + dir + "\n").getBytes());
os.write(("unzip " + dir + "/" + fileName + "\n").getBytes());
close(os);
p.waitFor();
}
/*
* Description: Generates fileId.zip from classes.dex inside dir.
* Parameters : - The directory where the zip is saved.
* - The fileId.
* Returns : - The zip size.
* Changelog : 150523 - Paths with spaces and console output.
*/
public static String zipDex(String dir, String fileId) {
String TAG = Utils.class.getName() + "@zipDex: ";
String result = "0";
try {
Process p = Runtime.getRuntime().exec(Globals.console_cmd);
try (OutputStream os = p.getOutputStream()) {
os.write(("cd " + "\"" + dir + "\"" + "\n").getBytes());
os.write(("\"" + Globals.zip_cmd + "\"" + " " + Globals.zip_args + " " + fileId + ".zip " + "classes.dex" + "\n").getBytes());
close(os);
}
p.waitFor();
System.out.println(TAG + dir + "/" + fileId + ".zip");
File file = new File(dir + "/" + fileId + ".zip");
System.out.println(TAG + Long.toString(file.length()));
result = Long.toString(file.length());
} catch (IOException | InterruptedException ex) {
System.out.println(TAG + ex.getMessage());
}
return result;
}
/*
* Description: Update the ready status.
* Parameters : - The table.
* - The fileId.
* Returns : - The new status.
* Changelog : 150607 - Added PM support.
*/
public static void updateReady(String table, String id, String status) {
try {
Class.forName("com.mysql.jdbc.Driver");
try (Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password);
Statement s = c.createStatement()) {
s.executeUpdate("UPDATE " + table + " SET ready='" + status + "' WHERE id='" + id + "'");
}
} catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
}
}
/* */
}

View File

@ -0,0 +1,145 @@
package com.www.server.privacy;
import com.www.server.Globals;
import com.www.server.Utils;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class Edit extends HttpServlet {
String app = "privacy";
/*
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String TAG = Edit.class.getName() + "@doPost: ";
HttpSession session = request.getSession(true);
String userName = (String) session.getAttribute("username");
String userDir = Globals.db_dir + "/" + userName;
String date = Utils.getDate();
String time = Utils.getTime();
System.out.println(TAG + "User\t\t: " + userName);
String pmId = "0";
String pmName = "";
String pmDesc = "";
String sensing = "";
String pmSource = "";
try {
/*
* Get PM details.
*/
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
String fieldName = item.getFieldName();
if (item.isFormField()) {
/*
* Get title and description.
*/
if ("pm_id".equals(fieldName)) {
pmId = item.getString();
System.out.println(TAG + "Id\t\t: " + pmId);
}
if ("name".equals(fieldName)) {
pmName = item.getString();
System.out.println(TAG + "Name\t\t: " + pmName);
}
if ("description".equals(fieldName)) {
pmDesc = item.getString();
System.out.println(TAG + "Description\t: " + pmDesc);
}
if ("sensing_task".equals(fieldName)) {
sensing = item.getString();
System.out.println(TAG + "Sensing\t: " + sensing);
}
if ("code".equals(fieldName)) {
pmSource = item.getString();
System.out.println(TAG + "Source\t\t: " + pmSource);
}
}
}
} catch (FileUploadException ex) {
System.out.println(TAG + ex.getMessage());
}
String fileDir = userDir + "/" + app + "/" + pmId;
String xmlUrl = fileDir + "/" + pmId + ".xml";
String fileName = Utils.getText(xmlUrl, "source", "name");
String fileUrl = fileDir + "/" + fileName;
File file = new File(fileUrl);
FileWriter fw = new FileWriter(file.getAbsoluteFile());
try (BufferedWriter bw = new BufferedWriter(fw)) {
bw.write(pmSource);
}
String fileSize = Long.toString((new File(fileUrl)).length());
Utils.setText(xmlUrl, "source", "size", fileSize);
String compLog = Utils.compilePM(fileDir, fileName);
Utils.setText(xmlUrl, "source", "compile", "date", Utils.getDate());
Utils.setText(xmlUrl, "source", "compile", "time", Utils.getTime());
if (Utils.stringIsEmpty(compLog)) {
compLog += "\n" + Utils.compileDex(fileDir, fileName);
if (Utils.stringIsEmpty(compLog)) {
String binSize = Utils.zipDex(fileDir, pmId);
Utils.setText(xmlUrl, "size", binSize);
Utils.updateReady("pms", pmId, "YES");
String v = Utils.getText(xmlUrl, "version");
Utils.setText(xmlUrl, "version", Integer.toString(Integer.parseInt(v) + 1));
Utils.setText(xmlUrl, "status", "start");
Utils.setText(xmlUrl, "date", Utils.getDate());
Utils.setText(xmlUrl, "time", Utils.getTime());
}
}
Utils.setText(xmlUrl, "source", "compile", "log", compLog);
if (!Utils.stringIsEmpty(pmName)) {
Utils.setText(xmlUrl, "name", pmName);
}
if (!Utils.stringIsEmpty(pmDesc)) {
Utils.setText(xmlUrl, "description", pmDesc);
}
Utils.setText(xmlUrl, "sensing", sensing);
try {
Class.forName("com.mysql.jdbc.Driver");
try (Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password);
Statement s = c.createStatement()) {
s.executeUpdate("UPDATE " + "pms" + " SET sensing='" + sensing + "' WHERE id='" + pmId + "'");
}
} catch (ClassNotFoundException | SQLException ex) {
System.out.println(TAG + ex.getMessage());
}
// request.getRequestDispatcher("/Server/" + app + "/home.jsp").forward(request, response);
response.sendRedirect(response.encodeRedirectURL("/Server/" + app + "/view.jsp?id=" + pmId));
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}
}

View File

@ -0,0 +1,72 @@
package com.www.server.privacy;
import com.www.server.Utils;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet(name = "EditStatusPM", urlPatterns = {"/privacy/editstatus"})
public class EditStatus extends HttpServlet {
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(true);
String jspName = (String) request.getParameter("jsp_name");
String fileId = (String) request.getParameter("pm_id");
String app = "privacy";
String fileDir = "";
fileDir = Utils.getDir(app, fileId);
String xmlUrl = fileDir + "/" + fileId + ".xml";
String status = (String) request.getParameter("view_status_button");
if ("START".equals(status)) {
Utils.setText(xmlUrl, "status", "start");
} else if ("PAUSE".equals(status)) {
Utils.setText(xmlUrl, "status", "pause");
} else {
Utils.setText(xmlUrl, "status", "stop");
Utils.updateReady("pms", fileId, "NO");
}
if ("edit".equals(jspName)) {
response.sendRedirect(response.encodeRedirectURL("/Server/" + app + "/edit.jsp?id=" + fileId));
} else {
response.sendRedirect(response.encodeRedirectURL("/Server/" + app + "/view.jsp?id=" + fileId));
}
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}

View File

@ -0,0 +1,419 @@
package com.www.server.privacy;
import com.www.server.Globals;
import com.www.server.Utils;
import java.io.*;
import java.lang.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ws.rs.*;
import javax.ws.rs.core.*;
import org.codehaus.jackson.map.*;
import org.codehaus.jettison.json.*;
@Path("pms")
public class PrivacyService {
String app = "privacy";
@Context
private UriInfo context;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String respondAsReady() {
String TAG = PrivacyService.class.getName() + "@respondAsReady: ";
return TAG + "OK!";
}
/*
* Description: Used for testing purposes only.
* Parameters : - .
* Returns : - .
* Changelog : - .
*/
@GET
@Path("demo_filter/{param}")
public String demoFilter(
@PathParam("param") String param
) {
String TAG = getClass().getName() + "@test: ";
int pref = Integer.valueOf(param);
String url = Globals.db_dir + "/emkatsom/sensing/5/client/5.dat";
List<Object> list = getData(url);
System.out.println("1111111111");
//
printData(list);
// edit each entry of the input
for (Object o : list) {
Map data = (Map) o;
data.put("device", data.get("device"));
data.put("task", data.get("task"));
data.put("sensor", data.get("sensor"));
data.put("timestamp", (Long) data.get("timestamp") + (pref / 10) * 3600000000000L);
data.put("values", data.get("values"));
}
System.out.println("2222222222");
printData(list);
return "OK";
}
boolean checkDataKeys(List data) {
String TAG = getClass().getName() + "@checkDataKeys: ";
for (Object o : data) {
Map m = (Map) o;
for (Object key : m.keySet()) {
try {
if ("sensor".equals((String) key)
|| "timestamp".equals((String) key)
|| "values".equals((String) key)) {
System.out.println(TAG + key + " key" + " OK");
} else {
System.out.println(TAG + key + " key" + " ERROR");
return false;
}
} catch (Exception e) {
System.out.println(TAG + key + " key " + e.getMessage());
return false;
}
}
}
return true;
}
boolean checkDataValues(List data) {
String TAG = getClass().getName() + "@checkDataValues: ";
for (Object o : data) {
Map m = (Map) o;
for (Object key : m.keySet()) {
if ("sensor".equals(key)) {
try {
int i = (int) m.get(key);
System.out.println(TAG + key + " value " + "OK");
} catch (Exception e) {
System.out.println(TAG + key + " value " + e.getMessage());
return false;
}
} else if ("timestamp".equals(key)) {
try {
long l = (long) m.get(key);
System.out.println(TAG + key + " value " + "OK");
} catch (Exception e) {
System.out.println(TAG + key + " value " + e.getMessage());
return false;
}
} else if ("values".equals(key)) {
try {
double[] d = (double[]) m.get(key);
System.out.println(TAG + key + " value " + "OK");
} catch (Exception e) {
System.out.println(TAG + key + " value " + e.getMessage());
return false;
}
}
}
}
return true;
}
boolean saveData(List data, String url) {
String TAG = getClass().getName() + "@saveData: ";
FileOutputStream fos;
ObjectOutputStream oos;
try {
System.out.println(TAG + "Saving data to " + url);
List<Object> oldData = getData(url);
if (!oldData.isEmpty()) {
oldData.addAll(data);
data = oldData;
}
fos = new FileOutputStream(url);
oos = new ObjectOutputStream(fos);
oos.writeObject(data);
close(oos);
close(fos);
} catch (Exception ex) {
System.out.println(TAG + ex.getMessage());
return false;
}
System.out.println(TAG + "OK");
return true;
}
void printData(List data) {
String html = "";
for (Object o : data) {
Map m = (Map) o;
html += ""
+ new Date((Long) m.get("timestamp") / 1000000L).toString() + ""
+ " task[" + m.get("task") + "]"
+ "@" + m.get("device") + ":"
+ " " + m.get("sensor") + ""
+ "" + Arrays.toString((double[]) m.get("values")) + ""
+ "\n";
}
System.out.println(html);
}
List getData(String url) {
String TAG = getClass().getName() + "@getData: ";
FileInputStream fis;
ObjectInputStream ois;
List<Object> data = new ArrayList<>();
try {
System.out.println(TAG + "Returning data from " + url);
if (new File(url).exists()) {
fis = new FileInputStream(url);
ois = new ObjectInputStream(fis);
data = (List) ois.readObject();
close(ois);
close(fis);
} else {
System.out.println(TAG + "File does not exist");
}
} catch (Exception ex) {
System.out.println(TAG + ex.getMessage());
}
System.out.println(TAG + "OK");
return data;
}
/*
* Description: Return the list of available privacy mechanisms.
* Parameters : - The device id.
* Returns : - The list of pms.
* Changelog : - .
*/
@GET
@Path("getlist/{deviceID}")
@Produces(MediaType.APPLICATION_JSON)
public List<String> getList(@PathParam("deviceID") String deviceID) {
String TAG = PrivacyService.class.getName() + "@get_list: ";
List<String> l = new ArrayList<>();
if (Utils.deviceExists(deviceID)) {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password);
Statement s = c.createStatement();
s.executeQuery("SELECT * FROM pms WHERE ready='YES'");
ResultSet rs = s.getResultSet();
while (rs.next()) {
l.add(getInfo(rs.getString("id")));
}
rs.close();
s.close();
c.close();
} catch (ClassNotFoundException | SQLException ex) {
System.out.println(TAG + ex.getMessage());
}
} else {
try {
JSONObject o = new JSONObject();
o.append("Error", "Device not found");
l.add(o.toString());
System.out.println(TAG + o.toString());
} catch (JSONException ex) {
System.out.println(TAG + ex.getMessage());
}
}
return l;
}
/*
* Description: Return the list of available privacy mechanisms for a
* specific Sensing Task.
* Parameters : - The Sensing Task id.
* - The device id.
* Returns : - The list of pms.
* Changelog : - .
*/
@GET
@Path("getlist/{stID}/{deviceID}")
@Produces(MediaType.APPLICATION_JSON)
public List<String> getList(
@PathParam("stID") String stID,
@PathParam("deviceID") String deviceID) {
String TAG = PrivacyService.class
.getName() + "@get_list: ";
List<String> l = new ArrayList<>();
if (Utils.deviceExists(deviceID)) {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password);
Statement s = c.createStatement();
s.executeQuery("SELECT * FROM pms WHERE sensing='" + stID + "' AND ready='YES'");
ResultSet rs = s.getResultSet();
while (rs.next()) {
l.add(getInfo(rs.getString("id")));
}
rs.close();
s.close();
c.close();
} catch (ClassNotFoundException | SQLException ex) {
System.out.println(TAG + ex.getMessage());
}
} else {
try {
JSONObject o = new JSONObject();
o.append("Error", "Device not found");
l.add(o.toString());
System.out.println(TAG + o.toString());
} catch (JSONException ex) {
System.out.println(TAG + ex.getMessage());
}
}
JSONArray json = new JSONArray(l);
// System.out.println(TAG + json.toString());
try {
JSONArray jsonArray = new JSONArray(json.toString());
List<String> list = new ArrayList<String>();
for (int i = 0; i < jsonArray.length(); i++) {
list.add(jsonArray.getString(i));
}
JSONObject o = new JSONObject(list.get(0));
System.out.println(TAG + o.getJSONArray("name").getString(0));
} catch (Exception ex) {
System.out.println(TAG + ex.getMessage());
}
return l;
}
/*
* Description: Returns information for a particular mechanism.
* Parameters : - The pm id.
* - The device id.
* Returns : - The info.
* Changelog : - .
*/
@GET
@Path("{pmID}/getinfo/{deviceID}")
@Produces(MediaType.APPLICATION_JSON)
public String getInfo(
@PathParam("pmID") String pmID,
@PathParam("deviceID") String deviceID) {
String TAG = PrivacyService.class
.getName() + "@get_info: ";
String info = "Oops!";
if (Utils.deviceExists(deviceID)) {
info = getInfo(pmID);
} else {
info = "Device not found.";
}
System.out.println(TAG
+ info);
return info;
}
/*
* Description: Returns the binary file of a particular mechanism.
* Parameters : - The pm id.
* - The device id.
* Returns : - The pm binary file.
* Changelog : - .
*/
@GET
@Path("{pmID}/getbin/{deviceID}")
public Response getBin(
@PathParam("pmID") String pmID,
@PathParam("deviceID") String deviceID) {
String TAG = PrivacyService.class
.getName() + "@get_bin: ";
Response.ResponseBuilder response;
if (Utils.deviceExists(deviceID)) {
String dir = Utils.getDir(app, pmID);
if (dir != null && !"Oops!".equals(dir)) {
File bin = Utils.returnFileFrom(dir, ".zip");
response = Response.ok((Object) bin);
} else {
response = Response.ok("Invalid privacy mechanism ID.");
}
} else {
response = Response.ok("Device not found.");
}
System.out.println(TAG
+ response.toString());
return response.build();
}
/*
* Description: Returns information for a particular mechanism.
* Parameters : - The device id.
* Returns : - The info.
* Changelog : - .
*/
private String
getInfo(String id) {
String TAG = PrivacyService.class
.getName() + "@getInfo: ";
String info = "Oops!";
try {
String dir = Utils.getDir(app, id);
if (!"Oops!".equals(dir)) {
String xmlUrl = dir + "/" + id + ".xml";
JSONObject o = new JSONObject();
o.append("id", Utils.getText(xmlUrl, "id"));
o.append("name", Utils.getText(xmlUrl, "name"));
// class name
o.append("class", Utils.getText(xmlUrl, "source", "class"));
//
o.append("version", Utils.getText(xmlUrl, "version"));
o.append("description", Utils.getText(xmlUrl, "description"));
o.append("user", Utils.getText(xmlUrl, "user"));
o.append("date", Utils.getText(xmlUrl, "date"));
o.append("time", Utils.getText(xmlUrl, "time"));
o.append("size", Utils.getText(xmlUrl, "size"));
info = o.toString();
} else {
info = "Invalid privacy mechanism ID.";
}
} catch (JSONException ex) {
System.out.println(TAG + ex.getMessage());
}
return info;
}
public static void close(Closeable resource) {
if (resource != null) {
try {
resource.close();
} catch (IOException ignore) {
}
}
}
}

View File

@ -0,0 +1,245 @@
package com.www.server.privacy;
import com.www.server.Globals;
import com.www.server.Utils;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
public class Upload extends HttpServlet {
String app = "privacy",
userName,
userDir,
date,
time,
pmName,
pmDesc = "",
sensing,
fileName = "",
fileDir,
fileUrl,
fileSize,
className,
compLog = "",
errorMsg = "",
binSize = "0";
FileItem pmFile = null;
Integer pmId;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect(response.encodeRedirectURL("/Server/privacy/upload.jsp"));
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String TAG = Upload.class.getName() + "@doPost: ";
HttpSession session = request.getSession(true);
userName = (String) session.getAttribute("username");
userDir = Globals.db_dir + "/" + userName;
date = Utils.getDate();
time = Utils.getTime();
System.out.println(TAG + "User\t\t: " + userName);
try {
/*
* Get PM details.
*/
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
String fieldName = item.getFieldName();
if (item.isFormField()) {
/*
* Get the title.
*/
if ("name".equals(fieldName)) {
pmName = item.getString();
if (!Utils.stringIsEmpty(pmName)) {
System.out.println(TAG + "Name\t\t: " + pmName);
} else {
errorMsg += "Please enter a name<br/>";
}
}
/*
* Get the description.
*/
if ("description".equals(fieldName)) {
pmDesc = item.getString();
if (!Utils.stringIsEmpty(pmDesc)) {
System.out.println(TAG + "Dscription\t: " + pmDesc);
} else {
errorMsg += "Please enter a description<br/>";
}
}
/*
* Get the sensing task.
*/
if ("sensing_task".equals(fieldName)) {
sensing = item.getString();
if (!Utils.stringIsEmpty(sensing)) {
System.out.println(TAG + "Sensing\t: " + sensing);
} else {
errorMsg += "Please select a target Sensing Task<br/>";
}
}
} else {
/*
* Get the code.
*/
fileName = FilenameUtils.getName(item.getName());
// class name
className = FilenameUtils.removeExtension(fileName);
//
FileItem fileItem = item;
if ("code".equals(fieldName)) {
if (fileName.substring(fileName.lastIndexOf(".") + 1).equalsIgnoreCase("java")) {
pmFile = fileItem;
System.out.println(TAG + "Filename\t\t: " + fileName);
} else {
errorMsg += "Privacy mechanism must be a .java file<br/>";
}
}
}
}
} catch (FileUploadException ex) {
System.out.println(TAG + ex.getMessage());
}
if (!Utils.stringIsEmpty(errorMsg)) {
/*
* Something's wrong, re-upload.
*/
System.out.println(Upload.class.getName() + "@doPost: " + errorMsg);
request.setAttribute("errorMessage", errorMsg);
request.getRequestDispatcher("/" + app + "/upload.jsp").forward(request, response);
} else {
/*
* Everything's OK, save the PM.
*/
pmId = addNew(fileName, userName, sensing);
fileDir = userDir + "/" + app + "/" + pmId;
new File(fileDir).mkdir();
fileUrl = fileDir + "/" + fileName;
fileSize = Utils.writeToFile(pmFile, fileUrl);
compLog = Utils.compilePM(fileDir, fileName);
if (Utils.stringIsEmpty(compLog)) {
compLog += "\n" + Utils.compileDex(fileDir, fileName);
if (Utils.stringIsEmpty(compLog)) {
binSize = Utils.zipDex(fileDir, pmId.toString());
Utils.updateReady("pms", pmId.toString(), "YES");
}
}
composeXml();
// request.getRequestDispatcher("/privacy/home.jsp").forward(request, response);
if (Utils.stringIsEmpty(compLog)) {
response.sendRedirect(response.encodeRedirectURL("/Server/" + app + "/view.jsp?id=" + pmId));
} else {
response.sendRedirect(response.encodeRedirectURL("/Server/" + app + "/edit.jsp?id=" + pmId));
}
}
}
/*
* Description: Inserts a new PM to the table.
* Parameters : - The file name.
* - The user name.
* Returns : - The new PM id.
* ChangeLog : - .
*/
private int addNew(String fName, String uName, String sName) {
int id = 0;
try {
Class.forName("com.mysql.jdbc.Driver");
try (Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password);
Statement s = c.createStatement()) {
s.executeQuery("SELECT COUNT(*) FROM pms");
try (ResultSet rs = s.getResultSet()) {
rs.next();
id = rs.getInt(1) + 1;
}
s.executeUpdate("INSERT INTO pms (`id`, `filename`, `username`, `sensing`, `ready`) VALUES ('"
+ id + "', '" + fName + "', '" + uName + "', '" + sName + "', '" + "NO" + "')");
}
} catch (ClassNotFoundException | SQLException ex) {
System.out.println(Upload.class.getName() + "@addNew: " + ex.getMessage());
}
if (Globals.DBG) {
System.out.println(Upload.class.getName() + "@addNew: " + "Id\t\t: " + id);
}
return id;
}
/*
* Description: Composes the XML file.
* Parameters : - .
* Returns : - .
* ChangeLog : - .
*/
private void composeXml() {
String TAG = Utils.class.getName() + "@composeXml: ";
try {
Element root = new Element("pm");
Document doc = new Document(root);
doc.setRootElement(root);
root.addContent(new Element("user").setText(userName));
root.addContent(new Element("name").setText(pmName));
root.addContent(new Element("version").setText("0"));
root.addContent(new Element("status").setText(""));
root.addContent(new Element("id").setText(pmId.toString()));
root.addContent(new Element("size").setText(binSize));
root.addContent(new Element("date").setText(date));
root.addContent(new Element("time").setText(time));
root.addContent(new Element("description").setText(pmDesc));
root.addContent(new Element("sensing").setText(sensing));
Element file = new Element("source");
root.addContent(file);
file.addContent(new Element("name").setText(fileName));
file.addContent(new Element("size").setText(fileSize));
// class name
file.addContent(new Element("class").setText(className));
//
Element compile = new Element("compile");
file.addContent(compile);
if (Utils.stringIsEmpty(compLog)) {
root.getChild("version").setText("1");
root.getChild("status").setText("start");
}
compile.addContent(new Element("date").setText(date));
compile.addContent(new Element("time").setText(time));
compile.addContent(new Element("log").setText(compLog));
XMLOutputter xmlOutputter = new XMLOutputter();
xmlOutputter.setFormat(Format.getPrettyFormat());
xmlOutputter.output(doc, new FileWriter(fileDir + "/" + pmId + ".xml"));
} catch (IOException ex) {
System.out.println(TAG + ex.getMessage());
}
}
@Override
public String getServletInfo() {
return "Upload a new privacy mechanism";
}
}

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/Server"/>

View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<filter>
<filter-name>SigninFilter</filter-name>
<filter-class>com.www.server.SigninFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SigninFilter</filter-name>
<url-pattern>/main/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SigninFilter</filter-name>
<url-pattern>/privacy/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>ServletAdaptor</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Signin</servlet-name>
<servlet-class>com.www.server.Signin</servlet-class>
</servlet>
<servlet>
<servlet-name>Signup</servlet-name>
<servlet-class>com.www.server.Signup</servlet-class>
</servlet>
<servlet>
<servlet-name>Signout</servlet-name>
<servlet-class>com.www.server.Signout</servlet-class>
</servlet>
<servlet>
<servlet-name>Upload</servlet-name>
<servlet-class>com.www.server.Upload</servlet-class>
</servlet>
<servlet>
<servlet-name>Edit</servlet-name>
<servlet-class>com.www.server.Edit</servlet-class>
</servlet>
<servlet>
<servlet-name>EditStatus</servlet-name>
<servlet-class>com.www.server.EditStatus</servlet-class>
</servlet>
<servlet>
<servlet-name>EditProp</servlet-name>
<servlet-class>com.www.server.EditProp</servlet-class>
</servlet>
<servlet>
<servlet-name>UploadPM</servlet-name>
<servlet-class>com.www.server.privacy.Upload</servlet-class>
</servlet>
<servlet>
<servlet-name>EditPM</servlet-name>
<servlet-class>com.www.server.privacy.Edit</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletAdaptor</servlet-name>
<url-pattern>/webresources/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Signin</servlet-name>
<url-pattern>/signin</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Signup</servlet-name>
<url-pattern>/signup</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Signout</servlet-name>
<url-pattern>/signout</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Upload</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Edit</servlet-name>
<url-pattern>/edit</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>EditStatus</servlet-name>
<url-pattern>/editstatus</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>EditProp</servlet-name>
<url-pattern>/editprop</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UploadPM</servlet-name>
<url-pattern>/privacy/upload</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>EditPM</servlet-name>
<url-pattern>/privacy/edit</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>1000</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>main/home.jsp</welcome-file>
</welcome-file-list>
</web-app>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -0,0 +1,391 @@
<%@page import="com.www.server.Globals"%>
<%@page import="java.util.Calendar"%>
<%@page import="com.www.server.Utils"%>
<%@page import="org.apache.commons.io.FileUtils"%>
<%@page import="java.io.DataInputStream"%>
<%@page import="java.io.BufferedInputStream"%>
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.text.DateFormat"%>
<%@page import="java.io.InputStream"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="org.w3c.dom.*, javax.xml.parsers.*" %>
<%@page import="java.io.File"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page language="java" %>
<%@page import="org.jdom.Document" %>
<%@page import="org.jdom.Element" %>
<%@page import="org.jdom.JDOMException" %>
<%@page import="org.jdom.input.SAXBuilder" %>
<%@page import="java.io.IOException" %>
<%@page import="java.lang.*" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<%
String serverUrl = Globals.server_url;
String dbDir = Globals.db_dir;
String username = (String) session.getAttribute("username");
String app = "sensing";
String fileId = request.getParameter("id");
String fileNameClient = "", fileCodeClient = "", clientLog = "";
String fileNameServer = "", fileCodeServer = "", libNameServer = "";
Boolean isCompiled = false;
Boolean isCompiledClient = false;
Boolean isCompiledServer = false;
Boolean hasMap = false;
Boolean hasLog = false;
Boolean hasLibServer = false;
double sw_lat = 0, sw_lng = 0, ne_lat = 0, ne_lng = 0;
Boolean hasServer = false;
String compileDate = "";
String xmlUrl = dbDir + "/" + username + "/sensing/" + fileId + "/" + fileId + ".xml";
Utils.setText(xmlUrl, "new", "no");
File xmlFile = new File(xmlUrl);
fileNameClient = Utils.getText(xmlUrl, "client", "name");
if ("on".equals(Utils.getText(xmlUrl, "client", "map", "status"))) {
hasMap = true;
sw_lat = Double.parseDouble(Utils.getText(xmlUrl, "client", "map", "sw_lat"));
sw_lng = Double.parseDouble(Utils.getText(xmlUrl, "client", "map", "sw_lng"));
ne_lat = Double.parseDouble(Utils.getText(xmlUrl, "client", "map", "ne_lat"));
ne_lng = Double.parseDouble(Utils.getText(xmlUrl, "client", "map", "ne_lng"));
}
File fileUrlClient = new File(dbDir + "/" + username + "/sensing/" + fileId + "/client/" + fileNameClient);
File fileDirServer = new File(dbDir + "/" + username + "/sensing/" + fileId + "/server");
File fileUrlServer;
FileInputStream fis = null;
BufferedInputStream bis = null;
DataInputStream dis = null;
if (fileDirServer.exists()) {
hasServer = true;
fileNameServer = Utils.getText(xmlUrl, "server", "name");
fileUrlServer = new File(dbDir + "/" + username + "/sensing/" + fileId + "/server/" + fileNameServer);
fis = new FileInputStream(fileUrlServer);
bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
while (dis.available() != 0) {
fileCodeServer += (dis.readLine()) + "\n";
}
} else {
hasServer = false;
}
fis = new FileInputStream(fileUrlClient);
bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
while (dis.available() != 0) {
fileCodeClient += (dis.readLine()) + "\n";
}
Utils.close(dis);
Utils.close(bis);
Utils.close(fis);
File dir = new File(dbDir + "/" + username + "/sensing/" + fileId);
File[] listOfFiles = dir.listFiles();
if ("true".equals(Utils.getText(xmlUrl, "client", "compile", "status"))) {
isCompiledClient = true;
isCompiled = true;
} else {
isCompiledClient = false;
isCompiled = false;
}
if (hasServer) {
if ("true".equals(Utils.getText(xmlUrl, "server", "compile", "status"))) {
isCompiledServer = true;
} else {
isCompiledServer = false;
isCompiled = false;
}
}
%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" href="<%=serverUrl + "/ppc.ico"%>" />
<link rel="stylesheet" href="<%=serverUrl + "/style.css"%>" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<title><%=fileNameClient%> - <%=session.getAttribute("username")%> - <%=Globals.logo + ": " + app%></title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
refresh();
});
function refresh() {
setTimeout(function() {
var id = getRequestParameter('id');
$('#top').load('edit.jsp?id=' + id + ' #top');
$('#view_client_label').load('edit.jsp?id=' + id + ' #view_client_label');
$('#view_client_log').load('edit.jsp?id=' + id + ' #view_client_log_data');
refresh();
}, 3000);
}
function getRequestParameter(sParam) {
var sPageURL = window.location.search.substring(1);
var sURLVariables = sPageURL.split('&');
for (var i = 0; i < sURLVariables.length; i++)
{
var sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] == sParam)
{
return sParameterName[1];
}
}
}
</script>
</head>
<body id="edit">
<div id="header">
<a id="logo" href="<%=serverUrl + "/main/home.jsp"%>"><%=Globals.logo%></a>
<!--
<div id="user_menu">
<div id="user_menu_username" name="user_menu_username">
<a>
<value><%=username%></value>
</a>
</div>
<div id="user_menu_signout" name="user_menu_signout">
<a href="<%=serverUrl + "/signout"%>">
<value>Sign out</value>
</a>
</div>
</div>
-->
<div id="user_menu">
<ul>
<li class="top" title="User menu"><%=username%></li>
<li class="item"><a href="<%=serverUrl + "/signout"%>">Sign out</a></li>
</ul>
</div>
<div id="user_apps">
<ul>
<li class="top" title="Apps"><img src="../img/apps.png"></li>
<li class="item"><a href="<%=serverUrl + "/main/home.jsp"%>">Sensing</a></li>
<li class="item"><a href="<%=serverUrl + "/privacy/home.jsp"%>">Privacy</a></li>
</ul>
</div>
</div>
<div id="top">
<div id="app">Sensing</div>
<% if (isCompiled) {%>
<form id="view_edit_status" action="<%=serverUrl + "/editstatus"%>" method="post">
<input type="hidden" id="jsp_name" name="jsp_name" value="edit">
<input type="hidden" id="view_file_id" name="view_file_id" value=<%=fileId%>>
<% if ("pause".equals(Utils.getText(xmlUrl, "status"))) {%>
<input type="submit" id="view_start_button" name="view_status_button" value="START">
<input type="submit" id="view_stop_button" name="view_status_button" value="STOP">
<% } else if ("start".equals(Utils.getText(xmlUrl, "status"))) {%>
<input type="submit" id="view_pause_button" name="view_status_button" value="PAUSE">
<input type="submit" id="view_stop_button" name="view_status_button" value="STOP">
<% } else if ("stop".equals(Utils.getText(xmlUrl, "status"))) {%>
<p id="top_status">Stopped.</p>
<% } else {%>
<p id="top_status">Pending...
<input type="hidden" name="view_status_button" value="STOP">
<a onclick="document.getElementById('view_edit_status').submit()">Cancel</a>.
</p>
<% }%>
</form>
<% }%>
<button id="edit_cancel_button" onclick="location.href = '<%=serverUrl + "/main/view.jsp?id=" + fileId%>'">CANCEL</button>
</div>
<div id="left">
<form action="<%=serverUrl + "/upload"%>">
<input type="submit" id="view_new_button" value="NEW">
</form>
</div>
<div id="view_file">
<div id="view_file_attributes">
<div id="view_file_details">
<label id="view_filename_label" name="view_filename_label">Filename</label>
<value id="view_filename_value" name="view_filename_value"><%=Utils.getText(xmlUrl, "name")%></value>
<label id="view_comment_label" name="view_comment_label">Comment</label>
<value id="view_comment_value" name="view_comment_value"><%=Utils.getText(xmlUrl, "comment")%></value>
<label id="view_size_label" name="view_size_label">Size</label>
<value id="view_size_value" name="view_size_value"><%=Utils.getText(xmlUrl, "size")%> </value>
</div>
<div id="view_file_date" name="view_date">
<label id="view_date_label" name="view_date_label">Date</label>
<value id="view_date_value" name="view_date_value"><%=Utils.getText(xmlUrl, "date")%></value>
<label id="view_time_label" name="view_time_label">Time</label>
<value id="view_time_value" name="view_time_value"><%=Utils.getText(xmlUrl, "time")%></value>
</div>
</div>
<div id="view_file_code">
<form action="../editprop" method="post">
<input hidden id="user_name" name="user_name" value=<%=username%>>
<input hidden id="file_id" name="file_id" value=<%=fileId%>>
<input hidden id="client_name" name="client_name" value=<%=fileNameClient%>>
<input hidden id="server_name" name="server_name" value=<%=fileNameServer%>>
<input hidden id="client_compiled" name="client_compiled" value=<%=isCompiledClient%>>
<input hidden id="server_compiled" name="server_compiled" value=<%=isCompiledServer%>>
<div id="view_file_client">
<div id="view_client_code">
<label id="view_client_label">
Client
<% if (!Utils.getText(xmlUrl, "status").isEmpty()) {%>
<span id="view_client_devices">downloaded by <%=Utils.getText(xmlUrl, "client", "downloaded", "counter")%> device(s)</span>
<% }%>
</label>
<input id="view_client_checkbox" name="view_client_checkbox" type="checkbox">
<p id="view_client_checkbox_label">Source</p>
<value id="view_client_value" name="view_client_value">
<textarea code readonly><%=fileCodeClient%></textarea>
</value>
</div>
<% if ("on".equals(Utils.getText(xmlUrl, "client", "time", "status"))) {%>
<div id="view_time">
<input type="hidden" id="view_time_on" name="view_time_on" checked>
<input type="checkbox" id="view_time_checkbox" name="view_time_checkbox" checked disabled>
<p id="view_time_checkbox_label">Time</p>
<div id="view_time_selection">
<select id="view_time_selection_from" name="view_time_selection_from">
<%
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse("00:00"));
do {
if (sdf.format(cal.getTime()).equals(Utils.getText(xmlUrl, "client", "time", "from"))) {
out.println("<option value='" + sdf.format(cal.getTime()) + "' selected>" + sdf.format(cal.getTime()) + "</option>");
} else {
out.println("<option value='" + sdf.format(cal.getTime()) + "'>" + sdf.format(cal.getTime()) + "</option>");
}
cal.add(Calendar.MINUTE, 30);
} while (!sdf.format(cal.getTime()).equals("00:00"));
/**/
%>
</select>
-
<select id="view_time_selection_to" name="view_time_selection_to">
<%
do {
if (sdf.format(cal.getTime()).equals(Utils.getText(xmlUrl, "client", "time", "to"))) {
out.println("<option value='" + sdf.format(cal.getTime()) + "' selected>" + sdf.format(cal.getTime()) + "</option>");
} else {
out.println("<option value='" + sdf.format(cal.getTime()) + "'>" + sdf.format(cal.getTime()) + "</option>");
}
cal.add(Calendar.MINUTE, 30);
} while (!sdf.format(cal.getTime()).equals("00:00"));
%>
</select>
</div>
</div>
<% }%>
<% if ("on".equals(Utils.getText(xmlUrl, "client", "map", "status"))) {%>
<div id="view_map">
<input type="hidden" id="view_map_on" name="view_map_on" checked>
<input type="checkbox" id="view_map_checkbox" name="view_map_checkbox" checked disabled>
<p id="view_map_checkbox_label">Location</p>
<div id="view_map_canvas"></div>
<script type="text/javascript">
var cntr = new google.maps.LatLng(0, 0);
var sw = new google.maps.LatLng(<%=sw_lat%>, <%=sw_lng%>);
var ne = new google.maps.LatLng(<%=ne_lat%>, <%=ne_lng%>);
//var bounds = new google.maps.LatLngBounds();
//bounds.extend(sw);
//bounds.extend(ne);
var angle = <%=ne_lng%> - <%=sw_lng%>;
if (angle < 0) {
angle += 360;
}
var zoom = Math.round(Math.log(360 * 360 / angle / 256) / Math.LN2);
var bounds = new google.maps.LatLngBounds(sw, ne);
var canvas = document.getElementById('view_map_canvas');
var options = {
disableDefaultUI: true,
navigationControl: false,
mapTypeControl: false,
scaleControl: false,
draggable: true,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(canvas, options);
map.fitBounds(bounds);
var i = 0;
google.maps.event.addDomListener(map, 'idle', function() {
if (i++ === 0) {
map.setZoom(zoom);
}
});
google.maps.event.addDomListener(map, 'dragend', function() {
var bounds = map.getBounds();
document.getElementById('view_map_sw_lat').value = bounds.getSouthWest().lat();
document.getElementById('view_map_sw_lng').value = bounds.getSouthWest().lng();
document.getElementById('view_map_ne_lat').value = bounds.getNorthEast().lat();
document.getElementById('view_map_ne_lng').value = bounds.getNorthEast().lng();
});
</script>
<label hidden for="view_map_sw_lat"></label>
<input hidden id="view_map_sw_lat" name="view_map_sw_lat" type="text" value='<%=sw_lat%>' />
<label hidden for="view_map_sw_lng"></label>
<input hidden id="view_map_sw_lng" name="view_map_sw_lng" type="text" value='<%=sw_lng%>' />
<label hidden for="view_map_ne_lat"></label>
<input hidden id="view_map_ne_lat" name="view_map_ne_lat" type="text" value='<%=ne_lat%>' />
<label hidden for="view_map_ne_lng"></label>
<input hidden id="view_map_ne_lng" name="view_map_ne_lng" type="text" value='<%=ne_lng%>' />
</div>
<% }%>
<%if (isCompiled) { %>
<div id="view_log">
<input type="checkbox" id="view_client_log_checkbox" name="view_client_log_checkbox">
<label id="view_client_log_label" name=="view_client_log_label">Log</label>
<div id="view_client_log">
<div id="view_client_log_data">
<%if (!Utils.getText(xmlUrl, "client", "log").isEmpty()) {%>
<div id="view_client_log_options">
:
<a id="view_client_log_download" href='<%=serverUrl + "/webresources/tasks/" + fileId + "/getdata"%>'>Download</a> |
<a id="view_client_log_delete" href='<%=serverUrl + "/webresources/tasks/" + fileId + "/deletedata"%>'>Delete</a> |
<a id="view_client_log_downdel" href='<%=serverUrl + "/webresources/tasks/" + fileId + "/getdata/delete"%>'>Download & Delete</a>
</div>
<%
List list = Utils.getNodeList(xmlUrl, "client", "log", "data");
for (int i = 0; i < list.size(); i++) {
Element element = (Element) list.get(i);
%>
<div id="view_client_log_element">
<div id="view_client_log_value">
<%="[" + element.getChildText("date") + " " + element.getChildText("time") + "]" + " @ "%>
<span title='<%="Model: " + Utils.getDeviceInfo(element.getChildText("device"), "model") + "\nOS: " + Utils.getDeviceInfo(element.getChildText("device"), "os")%>'>
<%=element.getChildText("device")%>
</span>
</div>
</div>
<% } %>
<% } else { %>
<div>Empty.</div>
<% } %>
</div>
</div>
</div>
<% } %>
</div>
<% if (hasServer) {%>
<div id="view_file_server">
<% if (isCompiledServer) {%>
<div id="view_server_code">
<label id="view_server_label">Server</label>
<input id="view_server_checkbox" name="view_server_checkbox" type="checkbox">
<p id="view_server_checkbox_label">Source</p>
<value id="view_server_value" name="view_server_code_value">
<% if (hasLibServer) {%>
<div id="view_server_lib">
<label id="view_server_lib_label">Library:</label>
<value id="view_server_lib_value"><%=libNameServer%></value>
</div>
<% }%>
<textarea code readonly><%=fileCodeServer%></textarea>
</value>
</div>
<% }%>
</div>
<% }%>
<input type="submit" id="edit_ok_button" name="edit_ok_button" value="OK" />
</form>
<div id="footer" style="margin-top: 0px; border: none">&#169; 20[0-9]{2} <a href="http://linkedin.com/in/emkatsom" target="_blank">emkatsom</a>. All Rights and Lefts reserved.</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,150 @@
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="com.www.server.Globals"%>
<%@page import="com.www.server.Utils"%>
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.text.DateFormat"%>
<%@page import="org.jdom.input.SAXBuilder"%>
<%@page import="org.jdom.Element"%>
<%@page import="org.jdom.Document"%>
<%@page import="java.util.Comparator"%>
<%@page import="java.util.Arrays"%>
<%@page import="java.io.File"%>
<!DOCTYPE html>
<html>
<head>
<%
String serverUrl = Globals.server_url;
String dbDir = Globals.db_dir;
String username = (String) session.getAttribute("username");
String app = "sensing";
/*
* Get the sorted list of sensing tasks.
*/
File appDir = new File(dbDir + "/" + username + "/" + app);
File[] listOfFiles = null;
if (appDir.exists()) {
listOfFiles = appDir.listFiles();
Arrays.sort(listOfFiles, new Comparator<File>() {
public int compare(File f1, File f2) {
return Integer.valueOf(f1.getName()).compareTo(Integer.valueOf(f2.getName()));
}
});
}
%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" href="<%=serverUrl + "/ppc.ico"%>" />
<link rel="stylesheet" href="<%=serverUrl + "/style.css"%>" />
<title><%="Home - " + username + " - " + Globals.logo + ": " + app%></title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<% if (!Globals.DBG) {%>
<!-- Refresh -->
<script type="text/javascript">
$(document).ready(function () {
refresh();
});
function refresh() {
setTimeout(function () {
$('#home').load('home.jsp #home_content');
refresh();
}, 3000);
}
</script>
<% }%>
</head>
<body>
<div id="header">
<a id="logo" href="<%=serverUrl + "/main/home.jsp"%>"><%=Globals.logo%></a>
<div id="user_menu">
<ul>
<li class="top" title="User menu"><%=username%></li>
<li class="item"><a href="<%=serverUrl + "/signout"%>">Sign out</a></li>
</ul>
<!--
<div id="user_menu_username" name="user_menu_username">
<a>
<value><%=username%></value>
</a>
</div>
<div id="user_menu_signout" name="user_menu_signout">
<a href="<%=serverUrl + "/signout"%>">
<value>Sign out</value>
</a>
</div>
-->
</div>
<div id="user_apps">
<ul>
<li class="top" title="Apps"><img src="../img/apps.png"></li>
<li class="item"><a href="<%=serverUrl + "/main/home.jsp"%>">Sensing</a></li>
<li class="item"><a href="<%=serverUrl + "/privacy/home.jsp"%>">Privacy</a></li>
</ul>
</div>
</div>
<div id="top">
<div id="app">Sensing</div>
</div>
<div id="left">
<form action="<%=serverUrl + "/upload"%>">
<input type="submit" id="home_new_button" value="NEW">
</form>
</div>
<div id="home">
<div id="home_content">
<%
if (listOfFiles != null && listOfFiles.length > 0) {
for (File file : listOfFiles) {
if (file.isDirectory()) {
String id = file.getName();
String xmlFile = appDir + "/" + id + "/" + id + ".xml";
String name = Utils.getText(xmlFile, "name");
String hasNew = Utils.getText(xmlFile, "new");
String counter = Utils.getText(xmlFile, "counter");
String comment = Utils.getText(xmlFile, "comment");
String date;
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
if ((Utils.getText(xmlFile, "date")).equals(dateFormat.format(new Date()))) {
date = Utils.getText(xmlFile, "time");
} else {
date = Utils.getText(xmlFile, "date");
}
%>
<% if ("yes".equals(hasNew)) {%>
<a id="home_task" style="background-color: white;" href="<%=serverUrl + "/main/view.jsp?id=" + id%>">
<div id="home_task_name">
<%
if (Integer.valueOf(counter) > 0) {
out.print(name + "(" + counter + ")");
} else {
out.print(name);
}
%>
</div>
<div id="home_task_comment"><%=comment%></div>
<div id="home_task_date"><%=date%></div>
</a>
<% } else {%>
<a id="home_task" href="<%=serverUrl + "/main/view.jsp?id=" + id%>">
<div id="home_task_name">
<%
if (Integer.valueOf(counter) > 0) {
out.print(name + "(" + counter + ")");
} else {
out.print(name);
}
%>
</div>
<div id="home_task_comment"><%=comment%></div>
<div id="home_task_date"><%=date%></div>
</a>
<%}
}
}
} else {%>
<div id="home_empty">No tasks to view. Click on <a href="<%=serverUrl + "/upload"%>">NEW</a> to begin...</div>
<%}%>
<div id="footer" style="border: none; margin: 0px;">&#169; 20[0-9]{2} <a href="http://linkedin.com/in/emkatsom" target="_blank">emkatsom</a>. All Rights and Lefts reserved.</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,195 @@
<%@page import="com.www.server.Globals"%>
<%@page import="java.util.Calendar"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<%
String serverUrl = Globals.server_url;
String app = "sensing";
%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" href="<%=serverUrl + "/ppc.ico"%>" />
<link rel="stylesheet" href="<%=serverUrl + "/style.css"%>" />
<title>Upload - <%=session.getAttribute("username")%> - <%=Globals.logo + ": " + app%></title>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js"></script>
<%
Boolean error = false;
String errorMessage = (String) request.getAttribute("errorMessage");
if (errorMessage == null) {
error = false;
} else {
error = true;
}
%>
</head>
<body>
<div id="header">
<a id="logo" href="<%=serverUrl + "/main/home.jsp"%>"><%=Globals.logo%></a>
<!--
<div id="user_menu">
<div id="user_menu_username" name="user_menu_username">
<a>
<value><%=session.getAttribute("username")%></value>
</a>
</div>
<div id="user_menu_signout" name="user_menu_signout">
<a href="<%=serverUrl + "/signout"%>">
<value>Sign out</value>
</a>
</div>
</div>
-->
<div id="user_menu">
<ul>
<li class="top" title="User menu"><%=session.getAttribute("username")%></li>
<li class="item"><a href="<%=serverUrl + "/signout"%>">Sign out</a></li>
</ul>
</div>
<div id="user_apps">
<ul>
<li class="top" title="Apps"><img src="../img/apps.png"></li>
<li class="item"><a href="<%=serverUrl + "/main/home.jsp"%>">Sensing</a></li>
<li class="item"><a href="<%=serverUrl + "/privacy/home.jsp"%>">Privacy</a></li>
</ul>
</div>
</div>
<div id="top">
<div id="app">Sensing</div>
</div>
<div id="left">
<form action="<%=serverUrl + "/upload"%>">
<input type="submit" id="upload_new_button" value="NEW">
</form>
</div>
<div id="upload_file">
<form id="upload_file_form" action="<%=serverUrl + "/upload"%>" method="post" enctype="multipart/form-data">
<% if (error) {%>
<div id="upload_message">
<value id="upload_message_value"><%=errorMessage%></value>
</div>
<% }%>
<div id="upload_comment" >
<label id="upload_comment_label">Comment</label>
<input type="text" id="upload_comment_value" name="upload_comment_value" placeholder="Comment">
</div>
<div id="upload_code">
<div id="upload_client">
<div id="upload_code_client" name="upload_code_client">
<label id="upload_code_client_label" name="upload_code_client_label">Client</label>
<input type="file" accept=".java" id="upload_code_client_value" name="upload_code_client_value" required/>
<div id="upload_time">
<input type="hidden" id="upload_time_checkbox_off" name="upload_time_checkbox" value="off">
<input type="checkbox" id="upload_time_checkbox" name="upload_time_checkbox" label="Time">
<p id="upload_time_checkbox_label">Time</p>
<div id="upload_time_selection">
<select id="upload_time_selection_from" name="upload_time_selection_from">
<%
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse("00:00"));
do {
out.println("<option value='" + sdf.format(cal.getTime()) + "'>" + sdf.format(cal.getTime()) + "</option>");
cal.add(Calendar.MINUTE, 30);
} while (!sdf.format(cal.getTime()).equals("00:00"));
/**/
%>
</select>
-
<select id="upload_time_selection_to" name="upload_time_selection_to">
<%
do {
out.println("<option value='" + sdf.format(cal.getTime()) + "'>" + sdf.format(cal.getTime()) + "</option>");
cal.add(Calendar.MINUTE, 30);
} while (!sdf.format(cal.getTime()).equals("00:00"));
/**/
%>
</select>
</div>
</div>
<div id="upload_map">
<input type="hidden" id="upload_map_checkbox_off" name="upload_map_checkbox" value="off">
<input type="checkbox" id="upload_map_checkbox" name="upload_map_checkbox" label="Map">
<p id="upload_map_checkbox_label">Location</p>
<div id="upload_map_canvas"></div>
<br />
<div id ="upload_map_details" name="map_details">
<!--
Erase "hidden" to debug the coordinates
-->
<label type="hidden" for="upload_latitude"></label>
<input type="hidden" id="upload_map_latitude" type="text" value="" />
<label type="hidden" for="longitude"></label>
<input type="hidden" id="upload_map_longitude" type="text" value="" />
<label type="hidden" for="upload_map_sw_lat"></label>
<input type="hidden" id="upload_map_sw_lat" name="upload_map_sw_lat" type="text" value="" />
<label type="hidden" for="upload_map_sw_lng"></label>
<input type="hidden" id="upload_map_sw_lng" name="upload_map_sw_lng" type="text" value="" />
<label type="hidden" for="upload_map_ne_lat"></label>
<input type="hidden" id="upload_map_ne_lat" name="upload_map_ne_lat" type="text" value="" />
<label type="hidden" for="upload_map_ne_lng"></label>
<input type="hidden" id="upload_map_ne_lng" name="upload_map_ne_lng" type="text" value="" />
<script type="text/javascript">
var latlng = new google.maps.LatLng(0, 0);
var options = {
center: latlng,
disableDefaultUI: true,
draggable: true,
mapTypeId: google.maps.MapTypeId.ROADMAP,
//minZoom: 1,
//panControl: true,
//rotateControl: true,
zoom: 1
//zoomControl: true
};
var canvas = document.getElementById('upload_map_canvas');
var map = new google.maps.Map(canvas, options);
google.maps.event.addDomListener(map, 'idle', function() {
var bounds = map.getBounds();
document.getElementById('upload_map_sw_lat').value = bounds.getSouthWest().lat();
document.getElementById('upload_map_sw_lng').value = bounds.getSouthWest().lng();
document.getElementById('upload_map_ne_lat').value = bounds.getNorthEast().lat();
document.getElementById('upload_map_ne_lng').value = bounds.getNorthEast().lng();
});
document.getElementById("upload_map_checkbox").onclick = function() {
if (this.checked) {
latlng = map.getCenter();
google.maps.event.trigger(map, 'resize');
map.setCenter(latlng);
}
};
var marker = new google.maps.Marker({
position: new google.maps.LatLng(0, 0),
draggable: true
});
google.maps.event.addListener(marker, 'dragend', function(evt) {
document.getElementById('upload_map_latitude').value = evt.latLng.lat().toFixed(6);
document.getElementById('upload_map_longitude').value = evt.latLng.lng().toFixed(6);
});
//marker.setMap(map);
</script>
</div>
</div>
</div>
</div>
<!-- Deprecated -->
<div id="upload_server" type="hidden">
<div id="upload_code_server">
<label id="upload_code_server_label" name="upload_code_server_label">Server</label>
<input type="file" accept=".zip" id="upload_code_server_value" name="upload_code_server_value"/>
</div>
</div>
<!-- Deprecated -->
</div>
<input id="upload_ok_button" type="submit" value="OK"/>
</form>
<div id="footer" style="border: none; margin: 0px;">&#169; 20[0-9]{2} <a href="http://linkedin.com/in/emkatsom" target="_blank">emkatsom</a>. All Rights and Lefts reserved.</div>
<form action="<%=serverUrl + "/main/home.jsp"%>">
<input id="upload_cancel_button" type="submit" value="CANCEL"/>
</form>
</div>
</body>
</html>

View File

@ -0,0 +1,423 @@
<%@page language="java" %>
<%@page import="com.www.server.Globals"%>
<%@page import="com.www.server.Utils"%>
<%@page import="org.apache.commons.io.FileUtils"%>
<%@page import="java.io.DataInputStream"%>
<%@page import="java.io.BufferedInputStream"%>
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.text.DateFormat"%>
<%@page import="java.io.InputStream"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="org.w3c.dom.*, javax.xml.parsers.*" %>
<%@page import="java.io.File"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="org.jdom.Document" %>
<%@page import="org.jdom.Element" %>
<%@page import="org.jdom.JDOMException" %>
<%@page import="org.jdom.input.SAXBuilder" %>
<%@page import="java.io.IOException" %>
<%@page import="java.lang.*" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<%
String serverUrl = Globals.server_url;
String dbDir = Globals.db_dir;
String username = (String) session.getAttribute("username");
String app = "sensing";
String fileId = request.getParameter("id");
String fileNameClient = "", fileCodeClient = "", clientLog = "";
String fileNameServer = "", fileCodeServer = "", libNameServer = "";
Boolean isCompiled = false;
Boolean isCompiledClient = false;
Boolean isCompiledServer = false;
Boolean hasMap = false;
Boolean hasLog = false;
Boolean hasLibServer = false;
double sw_lat = 0, sw_lng = 0, ne_lat = 0, ne_lng = 0;
Boolean hasServer = false;
String compileDate = "";
String xmlUrl = dbDir + "/" + username + "/sensing/" + fileId + "/" + fileId + ".xml";
Utils.setText(xmlUrl, "new", "no");
File xmlFile = new File(xmlUrl);
fileNameClient = Utils.getText(xmlUrl, "client", "name");
if ("on".equals(Utils.getText(xmlUrl, "client", "map", "status"))) {
hasMap = true;
sw_lat = Double.parseDouble(Utils.getText(xmlUrl, "client", "map", "sw_lat"));
sw_lng = Double.parseDouble(Utils.getText(xmlUrl, "client", "map", "sw_lng"));
ne_lat = Double.parseDouble(Utils.getText(xmlUrl, "client", "map", "ne_lat"));
ne_lng = Double.parseDouble(Utils.getText(xmlUrl, "client", "map", "ne_lng"));
}
File fileUrlClient = new File(dbDir + "/" + username + "/sensing/" + fileId + "/client/" + fileNameClient);
File fileDirServer = new File(dbDir + "/" + username + "/sensing/" + fileId + "/server");
File fileUrlServer;
FileInputStream fis = null;
BufferedInputStream bis = null;
DataInputStream dis = null;
try {
if (fileDirServer.exists()) {
hasServer = true;
fileNameServer = Utils.getText(xmlUrl, "server", "name");
fileUrlServer = new File(dbDir + "/" + username + "/sensing/" + fileId + "/server/" + fileNameServer);
fis = new FileInputStream(fileUrlServer);
bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
// dis = new DataInputStream(new BufferedInputStream(new FileInputStream(fileUrlServer)));
while (dis.available() != 0) {
fileCodeServer += (dis.readLine()) + "\n";
}
Utils.close(dis);
Utils.close(bis);
Utils.close(fis);
} else {
hasServer = false;
}
} catch (IOException e) {
}
try {
fis = new FileInputStream(fileUrlClient);
bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
// dis = new DataInputStream(new BufferedInputStream(new FileInputStream(fileUrlClient)));
while (dis.available() != 0) {
fileCodeClient += (dis.readLine()) + "\n";
}
Utils.close(dis);
Utils.close(bis);
Utils.close(fis);
} catch (IOException e) {
}
File dir = new File(dbDir + "/" + username + "/sensing/" + fileId);
File[] listOfFiles = dir.listFiles();
if ("true".equals(Utils.getText(xmlUrl, "client", "compile", "status"))) {
isCompiledClient = true;
isCompiled = true;
} else {
isCompiledClient = false;
isCompiled = false;
}
if (hasServer) {
if ("true".equals(Utils.getText(xmlUrl, "server", "compile", "status"))) {
isCompiledServer = true;
} else {
isCompiledServer = false;
isCompiled = false;
}
}
%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" href="<%=serverUrl + "/ppc.ico"%>" />
<link rel="stylesheet" href="<%=serverUrl + "/style.css"%>" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<title><%=fileNameClient%> - <%=session.getAttribute("username")%> - <%=Globals.logo + ": " + app%></title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<% if (!Globals.DBG) {%>
<script type="text/javascript">
$(document).ready(function () {
refresh();
});
function refresh() {
setTimeout(function () {
var id = getRequestParameter('id');
$('#top').load('view.jsp?id=' + id + ' #top');
$('#view_client_label').load('view.jsp?id=' + id + ' #view_client_label');
$('#view_client_log').load('view.jsp?id=' + id + ' #view_client_log_data');
refresh();
}, 3000);
}
function getRequestParameter(sParam) {
var sPageURL = window.location.search.substring(1);
var sURLVariables = sPageURL.split('&');
for (var i = 0; i < sURLVariables.length; i++)
{
var sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] == sParam)
{
return sParameterName[1];
}
}
}
</script>
<% }%>
</head>
<body id="view">
<div id="header">
<a id="logo" href="<%=serverUrl + "/main/home.jsp"%>"><%=Globals.logo%></a>
<!--
<div id="user_menu">
<div id="user_menu_username" name="user_menu_username">
<a>
<value><%=username%></value>
</a>
</div>
<div id="user_menu_signout" name="user_menu_signout">
<a href="<%=serverUrl + "/signout"%>">
<value>Sign out</value>
</a>
</div>
</div>
-->
<div id="user_menu">
<ul>
<li class="top" title="User menu"><%=username%></li>
<li class="item"><a href="<%=serverUrl + "/signout"%>">Sign out</a></li>
</ul>
</div>
<div id="user_apps">
<ul>
<li class="top" title="Apps"><img src="../img/apps.png"></li>
<li class="item"><a href="<%=serverUrl + "/main/home.jsp"%>">Sensing</a></li>
<li class="item"><a href="<%=serverUrl + "/privacy/home.jsp"%>">Privacy</a></li>
</ul>
</div>
</div>
<div id="top">
<div id="app">Sensing</div>
<% if (isCompiled) {%>
<form id="view_edit_status" action="<%=serverUrl + "/editstatus"%>" method="post">
<input type="hidden" id="jsp_name" name="jsp_name" value="view">
<input type="hidden" id="view_file_id" name="view_file_id" value=<%=fileId%>>
<% if ("pause".equals(Utils.getText(xmlUrl, "status"))) {%>
<input type="submit" id="view_start_button" name="view_status_button" value="START">
<input type="submit" id="view_stop_button" name="view_status_button" value="STOP">
<% } else if ("start".equals(Utils.getText(xmlUrl, "status"))) {%>
<input type="submit" id="view_pause_button" name="view_status_button" value="PAUSE">
<input type="submit" id="view_stop_button" name="view_status_button" value="STOP">
<% } else if ("stop".equals(Utils.getText(xmlUrl, "status"))) {%>
<p id="top_status">Stopped.</p>
<% } else {%>
<p id="top_status">Sending to device(s)...
<input type="hidden" name="view_status_button" value="STOP">
<a onclick="document.getElementById('view_edit_status').submit()">Cancel</a>.
</p>
<% }%>
</form>
<%if (!"stop".equals(Utils.getText(xmlUrl, "status"))) {%>
<button id="view_edit_button" onclick="location.href = '<%=serverUrl + "/main/edit.jsp?id=" + fileId%>'">EDIT</button>
<% }%>
<% }%>
</div>
<div id="left">
<form action="<%=serverUrl + "/upload"%>">
<% if (isCompiled) {%>
<input id="view_file_on" type="checkbox" hidden checked>
<% }%>
<input type="submit" id="view_new_button" value="NEW">
</form>
</div>
<div id="view_file">
<div id="view_file_attributes">
<div id="view_file_details">
<label id="view_filename_label" name="view_filename_label">Filename</label>
<a href="<%=serverUrl + "/webresources/tasks/" + fileId + "/getsrc"%>" title="Get task source code">
<value id="view_filename_value" name="view_filename_value">
<%=Utils.getText(xmlUrl, "name")%>
</value>
</a>
<label id="view_comment_label" name="view_comment_label">Comment</label>
<value id="view_comment_value" name="view_comment_value"><%=Utils.getText(xmlUrl, "comment")%></value>
<label id="view_size_label" name="view_size_label">Size</label>
<value id="view_size_value" name="view_size_value"><%=Utils.getText(xmlUrl, "client", "size")%> </value>
</div>
<div id="view_file_date" name="view_date">
<label id="view_date_label" name="view_date_label">Date</label>
<value id="view_date_value" name="view_date_value"><%=Utils.getText(xmlUrl, "date")%></value>
<label id="view_time_label" name="view_time_label">Time</label>
<value id="view_time_value" name="view_time_value"><%=Utils.getText(xmlUrl, "time")%></value>
</div>
</div>
<div id="view_file_code">
<form action="../edit" method="post" enctype="multipart/form-data">
<input id="file_id" name="file_id" hidden value=<%=fileId%>>
<input id="client_name" name="client_name" hidden value=<%=fileNameClient%>>
<input id="server_name" name="server_name" hidden value=<%=fileNameServer%>>
<input id="client_compiled" name="client_compiled" hidden value=<%=isCompiledClient%>>
<input id="server_compiled" name="server_compiled" hidden value=<%=isCompiledServer%>>
<div id="view_file_client">
<% if (isCompiledClient) {%>
<div id="view_client_code">
<label id="view_client_label">
Client
<% if (!Utils.getText(xmlUrl, "status").isEmpty()) {%>
<span id="view_client_devices">downloaded by <%=Utils.getText(xmlUrl, "client", "downloaded", "counter")%> device(s)</span>
<% }%>
</label>
<input id="view_client_checkbox" name="view_client_checkbox" type="checkbox">
<p id="view_client_checkbox_label">Source</p>
<value id="view_client_value" name="view_client_value">
<textarea code readonly><%=fileCodeClient%></textarea>
</value>
</div>
<% if ("on".equals(Utils.getText(xmlUrl, "client", "time", "status"))) {%>
<div id="view_time">
<input type="hidden" id="view_time_on" name="view_time_on" checked>
<input type="checkbox" id="view_time_checkbox" name="view_time_checkbox">
<p id="view_time_checkbox_label">Time</p>
<div id="view_time_selection"><%=Utils.getText(xmlUrl, "client", "time", "from")%> - <%=Utils.getText(xmlUrl, "client", "time", "to")%></div>
</div>
<% }%>
<% if (hasMap) {%>
<div id="view_map">
<input type="hidden" id="view_map_on" name="view_map_on" checked>
<input type="checkbox" id="view_map_checkbox" name="view_map_checkbox">
<p id="view_map_checkbox_label">Location</p>
<div id="view_map_canvas"></div>
<script type="text/javascript">
var cntr = new google.maps.LatLng(0, 0);
var sw = new google.maps.LatLng(<%=sw_lat%>, <%=sw_lng%>);
var ne = new google.maps.LatLng(<%=ne_lat%>, <%=ne_lng%>);
var angle = <%=ne_lng%> - <%=sw_lng%>;
if (angle < 0) {
angle += 360;
}
var zoom = Math.round(Math.log(360 * 360 / angle / 256) / Math.LN2);
var bounds = new google.maps.LatLngBounds(sw, ne);
var options = {
disableDefaultUI: true,
disableDoubleClickZoom: true,
scrollwheel: false,
navigationControl: false,
mapTypeControl: false,
scaleControl: false,
draggable: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var canvas = document.getElementById('view_map_canvas');
var map = new google.maps.Map(canvas, options);
map.fitBounds(bounds);
google.maps.event.addDomListener(map, 'idle', function () {
map.setZoom(zoom);
});
document.getElementById("view_map_checkbox").onclick = function () {
if (this.checked) {
cntr = map.getCenter();
google.maps.event.trigger(map, 'resize');
map.setCenter(cntr);
}
};
</script>
</div>
<% }%>
<% } else {%>
<div id="view_client_code">
<label id="view_client_label">Client</label>
<input id="view_client_checkbox" name="view_client_checkbox" type="checkbox" hidden checked>
<value id="view_client_value" name="view_client_value">
<textarea id="client_code" name="client_code" code><%=fileCodeClient%></textarea>
</value>
</div>
<div id="view_client_compile" name="view_client_compile">
<label id="view_client_compile_label" name="view_compile_label">Compilation error:</label>
<value id="view_client_compile_value" name="view_compile_value">
<textarea readonly><%=Utils.getText(xmlUrl, "client", "compile", "output")%></textarea>
</value>
</div>
<% }%>
<%if (isCompiled) { %>
<div id="view_log">
<input type="checkbox" id="view_client_log_checkbox" name="view_client_log_checkbox">
<label id="view_client_log_label" name=="view_client_log_label">Log</label>
<div id="view_client_log">
<div id="view_client_log_data">
<%if (!Utils.getText(xmlUrl, "client", "log").isEmpty()) {%>
<div id="view_client_log_options">
:
<a id="view_client_log_download" href='<%=serverUrl + "/webresources/tasks/" + fileId + "/getdata"%>'>Download</a> |
<a id="view_client_log_delete" href='<%=serverUrl + "/webresources/tasks/" + fileId + "/deletedata"%>'>Delete</a> |
<a id="view_client_log_downdel" href='<%=serverUrl + "/webresources/tasks/" + fileId + "/getdata/delete"%>'>Download & Delete</a>
</div>
<%
try {
List list = Utils.getNodeList(xmlUrl, "client", "log", "data");
for (int i = 0; i < list.size(); i++) {
Element element = (Element) list.get(i);
%>
<div id="view_client_log_element">
<div id="view_client_log_value">
<%="[" + element.getChildText("date") + " " + element.getChildText("time") + "]" + " @ "%>
<span title='<%="Model: " + Utils.getDeviceInfo(element.getChildText("device"), "model") + "\nOS: " + Utils.getDeviceInfo(element.getChildText("device"), "os")%>'>
<%=element.getChildText("device")%>
</span>
</div>
</div>
<%
}
} catch (Exception e) {
}
%>
<% } else { %>
<div>Empty.</div>
<% } %>
</div>
</div>
</div>
<% } %>
</div>
</div>
<% if (hasServer) {%>
<div id="view_file_server">
<% if (isCompiledServer) {%>
<div id="view_server_code">
<label id="view_server_label">Server</label>
<input id="view_server_checkbox" name="view_server_checkbox" type="checkbox">
<p id="view_server_checkbox_label">Source</p>
<value id="view_server_value" name="view_server_code_value">
<% if (hasLibServer) {%>
<div id="view_server_lib">
<label id="view_server_lib_label">Library:</label>
<value id="view_server_lib_value"><%=libNameServer%></value>
</div>
<% }%>
<textarea code readonly><%=fileCodeServer%></textarea>
</value>
</div>
<% } else {%>
<div id="view_server_code">
<label id="view_server_label">Server</label>
<input id="view_server_checkbox" name="view_server_checkbox" type="checkbox" hidden checked>
<% if (hasLibServer) {%>
<div id="view_server_lib">
<label id="view_server_lib_label">Library:</label>
<value id="view_server_lib_value"><%=libNameServer%></value>
</div>
<% }%>
<value id="view_server_value" name="view_server_value">
<textarea id="server_code" name="server_code" code><%=fileCodeServer%></textarea>
</value>
</div>
<div id="view_server_compile" name="view_compile">
<label id="view_server_compile_label" name="view_server_compile_label">Compilation error:</label>
<value id="view_server_compile_value" name="view_server_compile_value">
<textarea readonly><%=Utils.getText(xmlUrl, "server", "compile", "output")%></textarea>
</value>
</div>
<% }%>
</div>
<% }%>
<% if (!isCompiled) {%>
<input type="submit" id="view_ok_button" name="view_ok_button" value="OK" />
<% }%>
</form>
<% if (!isCompiled) {%>
<form action="<%=serverUrl + "/main/home.jsp"%>">
<input id="view_cancel_button" type="submit" value="CANCEL" />
</form>
<% }%>
<div id="footer" style="margin-top: 0px; border: none">&#169; 20[0-9]{2} <a href="http://linkedin.com/in/emkatsom" target="_blank">emkatsom</a>. All Rights and Lefts reserved.</div>
</div>
</div>
</body>
</html>

BIN
src/main/webapp/ppc.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,197 @@
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page language="java" %>
<%@page import="com.www.server.Globals"%>
<%@page import="com.www.server.Utils"%>
<%@page import="org.apache.commons.io.FileUtils"%>
<%@page import="java.io.DataInputStream"%>
<%@page import="java.io.BufferedInputStream"%>
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.text.DateFormat"%>
<%@page import="java.io.InputStream"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="org.w3c.dom.*, javax.xml.parsers.*" %>
<%@page import="java.io.File"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="org.jdom.Document" %>
<%@page import="org.jdom.Element" %>
<%@page import="org.jdom.JDOMException" %>
<%@page import="org.jdom.input.SAXBuilder" %>
<%@page import="java.io.IOException" %>
<%@page import="java.lang.*" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<%
String serverUrl = Globals.server_url;
String dbDir = Globals.db_dir;
String app = "privacy";
String username = (String) session.getAttribute("username");
Boolean error = false;
String errorMessage = (String) request.getAttribute("errorMessage");
if (errorMessage == null) {
error = false;
} else {
error = true;
}
String pmId = request.getParameter("id");
String xmlUrl = dbDir + "/" + username + "/" + app + "/" + pmId + "/" + pmId + ".xml";
String pmName = Utils.getText(xmlUrl, "name");
String pmVersion = Utils.getText(xmlUrl, "version");
String pmDate = Utils.getText(xmlUrl, "date");
String pmTime = Utils.getText(xmlUrl, "time");
String pmDesc = Utils.getText(xmlUrl, "description");
String stId = Utils.getText(xmlUrl, "sensing");
String stName = Utils.getText(Utils.getDir("sensing", stId) + "/" + stId + ".xml", "name");
String pmStatus = Utils.getText(xmlUrl, "status");
String srcName = Utils.getText(xmlUrl, "source", "name");
String compDate = Utils.getText(xmlUrl, "source", "compile", "date");
String compTime = Utils.getText(xmlUrl, "source", "compile", "time");
String compLog = Utils.getText(xmlUrl, "source", "compile", "log");
/*
* Get the source code.
*/
File srcUrl = new File(dbDir + "/" + username + "/" + app + "/" + pmId + "/" + srcName);
FileInputStream fis = new FileInputStream(srcUrl);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
String srcCode = "";
while (dis.available() != 0) {
srcCode += (dis.readLine()) + "\n";
}
Utils.close(dis);
Utils.close(bis);
Utils.close(fis);
%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" href="<%=serverUrl + "/ppc.ico"%>" />
<link rel="stylesheet" href="<%=serverUrl + "/style.css"%>" />
<title><%=pmName%> - <%=username%> - <%=Globals.logo + ": " + app%></title>
</head>
<body id="view">
<div id="header">
<a id="logo" href="<%=serverUrl + "/" + app + "/home.jsp"%>"><%=Globals.logo%></a>
<div id="user_menu">
<ul>
<li class="top" title="User menu"><%=username%></li>
<li class="item"><a href="<%=serverUrl + "/signout"%>">Sign out</a></li>
</ul>
</div>
<div id="user_apps">
<ul>
<li class="top" title="Apps"><img src="../img/apps.png"></li>
<li class="item"><a href="<%=serverUrl + "/main/home.jsp"%>">Sensing</a></li>
<li class="item"><a href="<%=serverUrl + "/privacy/home.jsp"%>">Privacy</a></li>
</ul>
</div>
</div>
<div id="top">
<div id="app"><%=app%></div>
<%if (Utils.stringIsEmpty(compLog)) {%>
<form id="view_edit_status" action="<%=serverUrl + "/" + app + "/" + "editstatus"%>" method="post">
<input type="hidden" name="jsp_name" value="edit">
<input type="hidden" name="pm_id" value=<%=pmId%>>
<%if ("pause".equals(pmStatus)) {%>
<input type="submit" id="view_start_button" name="view_status_button" value="START">
<input type="submit" id="view_stop_button" name="view_status_button" value="STOP">
<%} else if ("start".equals(pmStatus)) {%>
<input type="submit" id="view_pause_button" name="view_status_button" value="PAUSE">
<input type="submit" id="view_stop_button" name="view_status_button" value="STOP">
<%} else if ("stop".equals(pmStatus)) {%>
<p id="top_status">Stopped.</p>
<%} else {%>
<p id="top_status">Something went wrong...</p>
<%}%>
</form>
<%if (!"stop".equals(pmStatus)) {%>
<button id="view_edit_button" onclick="location.href = '<%=serverUrl + "/" + app + "/edit.jsp?id=" + pmId%>'">EDIT</button>
<%}%>
<%} else {%>
<p id="top_status">Something went wrong...</p>
<%}%>
<button id="edit_cancel_button" onclick="location.href = '<%=serverUrl + "/" + app + "/view.jsp?id=" + pmId%>'">CANCEL</button>
</div>
<div id="left">
<form action="<%=serverUrl + "/" + app + "/" + "upload"%>">
<%if (Utils.stringIsEmpty(compLog)) {%>
<input id="view_file_on" type="checkbox" hidden checked>
<%}%>
<input type="submit" id="view_new_button" value="NEW">
</form>
</div>
<div id="edit_pm">
<form action="<%=serverUrl + "/" + app + "/edit"%>" method="post" enctype="multipart/form-data">
<input type="hidden" name="pm_id" value=<%=pmId%>>
<% if (error) {%>
<div id="upload_message">
<value id="upload_message_value"><%=errorMessage%></value>
</div>
<% }%>
<input class="name" name="name" type="text" placeholder="Name" required value="<%=pmName%>">
<textarea class="description" name="description" required><%=pmDesc%></textarea>
<div class="sensing_task">
<select class="id" name="sensing_task" title="Select the target Sensing Task" onchange="select(this)" required>
<option value="" disabled>Select the target Sensing Task</option>
<%
try {
Class.forName("com.mysql.jdbc.Driver");
try (Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password)) {
ResultSet rs;
try (Statement s = c.createStatement()) {
rs = s.executeQuery("SELECT * FROM tasks WHERE ready='YES'");
while (rs.next()) {
String id = rs.getString("id");
String dir = Utils.getDir("sensing", id);
String stXml = dir + "/" + id + ".xml";
String option = "<option value=\"" + Utils.getText(stXml, "id") + "\"";
if (stId.equals(id)) {
option += " selected";
}
option += ">" + Utils.getText(stXml, "id") + ". "
+ Utils.getText(stXml, "name") + ": "
+ Utils.getText(stXml, "comment") + ""
+ " submitted by " + Utils.getText(stXml, "username") + ""
+ " on " + Utils.getText(stXml, "date") + " at " + Utils.getText(stXml, "time")
+ "</option>";
System.out.println(option);
out.println(option);
}
}
rs.close();
}
} catch (ClassNotFoundException | SQLException ex) {
System.out.println(app + "/edit: " + ex.getMessage());
}
%>
</select>
<script>
function select(sensing_task) {
// alert(sensing_task.options[sensing_task.selectedIndex].value);
document.getElementById("sensing_task_info").href = '<%=Globals.server_url%>' + "/webresources/tasks/" + sensing_task.options[sensing_task.selectedIndex].value + "/getsrc";
}
</script>
<a id="sensing_task_info" href="<%=Globals.server_url + "/webresources/tasks/" + stId + "/getsrc"%>" title="View more information about the Sensing Tasks">More info</a>
</div>
<div class="source">
<textarea class="code" name="code" code><%=srcCode%></textarea>
<%if (!Utils.stringIsEmpty(compLog)) {%>
<textarea class="error" readonly><%=compDate + " " + compTime + " compilation error:\n" + compLog%></textarea>
<%}%>
</div>
<input type="submit" id="edit_ok_button" name="edit_ok_button" value="OK" />
</form>
<div id="footer" style="margin-top: 0px; border: none">&#169; 20[0-9]{2} <a href="http://linkedin.com/in/emkatsom" target="_blank">emkatsom</a>. All Rights and Lefts reserved.</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,106 @@
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="com.www.server.Globals"%>
<%@page import="com.www.server.Utils"%>
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.text.DateFormat"%>
<%@page import="org.jdom.input.SAXBuilder"%>
<%@page import="org.jdom.Element"%>
<%@page import="org.jdom.Document"%>
<%@page import="java.util.Comparator"%>
<%@page import="java.util.Arrays"%>
<%@page import="java.io.File"%>
<!DOCTYPE html>
<html>
<head>
<%
String serverUrl = Globals.server_url;
String dbDir = Globals.db_dir;
String username = (String) session.getAttribute("username");
String app = "privacy";
/*
* Get the sorted list of privacy mechanisms.
*/
File appDir = new File(dbDir + "/" + username + "/" + app);
File[] listOfFiles = null;
if (appDir.exists()) {
listOfFiles = appDir.listFiles();
Arrays.sort(listOfFiles, new Comparator<File>() {
public int compare(File f1, File f2) {
return Integer.valueOf(f1.getName()).compareTo(Integer.valueOf(f2.getName()));
}
});
}
%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" href="<%=serverUrl + "/ppc.ico"%>" />
<link rel="stylesheet" href="<%=serverUrl + "/style.css"%>" />
<title><%="Home - " + username + " - " + Globals.logo + ": " + app%></title>
</head>
<body>
<div id="header">
<a id="logo" href="<%=serverUrl + "/" + app + "/home.jsp"%>"><%=Globals.logo%></a>
<div id="user_menu">
<ul>
<li class="top" title="User menu"><%=username%></li>
<li class="item"><a href="<%=serverUrl + "/signout"%>">Sign out</a></li>
</ul>
</div>
<div id="user_apps">
<ul>
<li class="top" title="Apps"><img src="../img/apps.png"></li>
<li class="item"><a href="<%=serverUrl + "/main/home.jsp"%>">Sensing</a></li>
<li class="item"><a href="<%=serverUrl + "/privacy/home.jsp"%>">Privacy</a></li>
</ul>
</div>
</div>
<div id="top">
<div id="app">Privacy</div>
</div>
<div id="left">
<form action="<%=serverUrl + "/" + app + "/upload"%>">
<input type="submit" id="home_new_button" value="NEW">
</form>
</div>
<div id="home_pm">
<div class="content">
<%
// listOfFiles = null;
if (listOfFiles != null && listOfFiles.length > 0) {
for (File file : listOfFiles) {
if (file.isDirectory()) {
String id = file.getName();
String xmlFile = appDir + "/" + id + "/" + id + ".xml";
String pmName = Utils.getText(xmlFile, "name");
String version = Utils.getText(xmlFile, "version");
String description = Utils.getText(xmlFile, "description");
// int n = 40;
// if (description.length() > n) {
// description = description.substring(0, n) + "...";
// }
String date;
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
if ((Utils.getText(xmlFile, "date")).equals(dateFormat.format(new Date()))) {
date = Utils.getText(xmlFile, "time");
} else {
date = Utils.getText(xmlFile, "date");
}
String stId = Utils.getText(xmlFile, "sensing");
String stName = Utils.getText(Utils.getDir("sensing", stId) + "/" + stId + ".xml", "name");
String name = pmName + " v" + version + ".0" + " for " + stName + " (" + stId + ")";
%>
<a class="item" href="<%=serverUrl + "/" + app + "/view.jsp?id=" + id%>" title="<%=name%>">
<div class="name"><%=name%></div>
<div class="description"><%=description%></div>
<div class="date"><%=date%></div>
</a>
<%}%>
<%}%>
<%} else {%>
<div id="home_empty">No mechanisms to view. Click on <a href="<%=serverUrl + "/" + app + "/upload"%>">NEW</a> to begin...</div>
<%}%>
<div id="footer">&#169; 20[0-9]{2} <a href="http://linkedin.com/in/emkatsom" target="_blank">emkatsom</a>. All Rights and Lefts reserved.</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,114 @@
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page import="com.www.server.Globals"%>
<%@page import="com.www.server.Utils"%>
<%@page import="java.util.Calendar"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<%
String serverUrl = Globals.server_url;
String app = "privacy";
Boolean error = false;
String errorMessage = (String) request.getAttribute("errorMessage");
if (errorMessage == null) {
error = false;
} else {
error = true;
}
%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" href="<%=serverUrl + "/ppc.ico"%>" />
<link rel="stylesheet" href="<%=serverUrl + "/style.css"%>" />
<title>Upload - <%=session.getAttribute("username")%> - <%=Globals.logo + ": " + app%></title>
</head>
<body>
<div id="header">
<a id="logo" href="<%=serverUrl + "/privacy/home.jsp"%>"><%=Globals.logo%></a>
<div id="user_menu">
<ul>
<li class="top" title="User menu"><%=session.getAttribute("username")%></li>
<li class="item"><a href="<%=serverUrl + "/signout"%>">Sign out</a></li>
</ul>
</div>
<div id="user_apps">
<ul>
<li class="top" title="Apps"><img src="../img/apps.png"></li>
<li class="item"><a href="<%=serverUrl + "/main/home.jsp"%>">Sensing</a></li>
<li class="item"><a href="<%=serverUrl + "/privacy/home.jsp"%>">Privacy</a></li>
</ul>
</div>
</div>
<div id="top">
<div id="app">Privacy</div>
</div>
<div id="left">
<form action="<%=serverUrl + "/" + app + "/upload"%>">
<input type="submit" id="upload_new_button" value="NEW">
</form>
</div>
<div id="upload_pm">
<form class="form" action="<%=serverUrl + "/" + app + "/upload"%>" method="post" enctype="multipart/form-data">
<% if (error) {%>
<div id="upload_message">
<value id="upload_message_value"><%=errorMessage%></value>
</div>
<% }%>
<input class="name" name="name" type="text" placeholder="Name" title="Enter a name" required>
<textarea class="description" name="description" placeholder="Description" title="Enter a description" required></textarea>
<div class="sensing_task">
<select class="id" name="sensing_task" title="Select the target Sensing Task" onchange="select(this)" required>
<option value="" disabled selected>Select the target Sensing Task</option>
<%
try {
Class.forName("com.mysql.jdbc.Driver");
try (Connection c = DriverManager.getConnection(Globals.db_server, Globals.db_username, Globals.db_password)) {
ResultSet rs;
try (Statement s = c.createStatement()) {
rs = s.executeQuery("SELECT * FROM tasks WHERE ready='YES'");
while (rs.next()) {
String id = rs.getString("id");
String dir = Utils.getDir("sensing", id);
String xml = dir + "/" + id + ".xml";
out.println(
"<option value=\"" + Utils.getText(xml, "id") + "\">"
+ Utils.getText(xml, "id") + ". "
+ Utils.getText(xml, "name") + ": "
+ Utils.getText(xml, "comment") + ""
+ " submitted by " + Utils.getText(xml, "username") + ""
+ " on " + Utils.getText(xml, "date") + " at " + Utils.getText(xml, "time")
+ "</option>"
);
}
}
rs.close();
}
} catch (ClassNotFoundException | SQLException ex) {
System.out.println(app + "/upload: " + ex.getMessage());
}
%>
</select>
<script>
function select(sensing_task) {
// alert(sensing_task.options[sensing_task.selectedIndex].value);
document.getElementById("sensing_task_info").href = '<%=Globals.server_url%>' + "/webresources/tasks/" + sensing_task.options[sensing_task.selectedIndex].value + "/getsrc";
}
</script>
<a id="sensing_task_info" href="<%=Globals.server_url + "/webresources/tasks/getlist"%>" title="View more information about the Sensing Tasks">More info</a>
</div>
<input class="code" name="code" type="file" accept=".java" title="Choose the source code file"required/>
<input id="upload_ok_button" type="submit" value="OK"/>
</form>
<div id="footer" style="border: none; margin: 0px;">&#169; 20[0-9]{2} <a href="http://linkedin.com/in/emkatsom" target="_blank">emkatsom</a>. All Rights and Lefts reserved.</div>
<form action="<%=serverUrl + "/privacy/home.jsp"%>">
<input id="upload_cancel_button" type="submit" value="CANCEL"/>
</form>
</div>
</body>
</html>

View File

@ -0,0 +1,156 @@
<%@page language="java" %>
<%@page import="com.www.server.Globals"%>
<%@page import="com.www.server.Utils"%>
<%@page import="org.apache.commons.io.FileUtils"%>
<%@page import="java.io.DataInputStream"%>
<%@page import="java.io.BufferedInputStream"%>
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.text.DateFormat"%>
<%@page import="java.io.InputStream"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="org.w3c.dom.*, javax.xml.parsers.*" %>
<%@page import="java.io.File"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="org.jdom.Document" %>
<%@page import="org.jdom.Element" %>
<%@page import="org.jdom.JDOMException" %>
<%@page import="org.jdom.input.SAXBuilder" %>
<%@page import="java.io.IOException" %>
<%@page import="java.lang.*" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<%
String serverUrl = Globals.server_url;
String dbDir = Globals.db_dir;
String app = "privacy";
String username = (String) session.getAttribute("username");
String pmId = request.getParameter("id");
String xmlUrl = dbDir + "/" + username + "/" + app + "/" + pmId + "/" + pmId + ".xml";
String pmName = Utils.getText(xmlUrl, "name");
String pmVersion = Utils.getText(xmlUrl, "version");
String pmDate = Utils.getText(xmlUrl, "date");
String pmTime = Utils.getText(xmlUrl, "time");
String pmDesc = Utils.getText(xmlUrl, "description");
String stId = Utils.getText(xmlUrl, "sensing");
String stName = Utils.getText(Utils.getDir("sensing", stId) + "/" + stId + ".xml", "name");
String pmStatus = Utils.getText(xmlUrl, "status");
String srcName = Utils.getText(xmlUrl, "source", "name");
String compDate = Utils.getText(xmlUrl, "source", "compile", "date");
String compTime = Utils.getText(xmlUrl, "source", "compile", "time");
String compLog = Utils.getText(xmlUrl, "source", "compile", "log");
// if (!Utils.stringIsEmpty(compLog)) {
// response.sendRedirect(response.encodeRedirectURL("/Server/" + app + "/edit.jsp?id=" + pmId));
// }
/*
* Get the source code.
*/
File srcUrl = new File(dbDir + "/" + username + "/" + app + "/" + pmId + "/" + srcName);
FileInputStream fis = new FileInputStream(srcUrl);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
String srcCode = "";
while (dis.available() != 0) {
srcCode += (dis.readLine()) + "\n";
}
Utils.close(dis);
Utils.close(bis);
Utils.close(fis);
%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" href="<%=serverUrl + "/ppc.ico"%>" />
<link rel="stylesheet" href="<%=serverUrl + "/style.css"%>" />
<title><%=pmName%> - <%=username%> - <%=Globals.logo + ": " + app%></title>
</head>
<body id="view_pm">
<div id="header">
<a id="logo" href="<%=serverUrl + "/" + app + "/home.jsp"%>"><%=Globals.logo%></a>
<div id="user_menu">
<ul>
<li class="top" title="User menu"><%=username%></li>
<li class="item"><a href="<%=serverUrl + "/signout"%>">Sign out</a></li>
</ul>
</div>
<div id="user_apps">
<ul>
<li class="top" title="Apps"><img src="../img/apps.png"></li>
<li class="item"><a href="<%=serverUrl + "/main/home.jsp"%>">Sensing</a></li>
<li class="item"><a href="<%=serverUrl + "/privacy/home.jsp"%>">Privacy</a></li>
</ul>
</div>
</div>
<div id="top">
<div id="app"><%=app%></div>
<%if (Utils.stringIsEmpty(compLog)) {%>
<form id="view_edit_status" action="<%=serverUrl + "/" + app + "/" + "editstatus"%>" method="post">
<input type="hidden" name="jsp_name" value="view">
<input type="hidden" name="pm_id" value=<%=pmId%>>
<%if ("pause".equals(pmStatus)) {%>
<input type="submit" id="view_start_button" name="view_status_button" value="START">
<input type="submit" id="view_stop_button" name="view_status_button" value="STOP">
<%} else if ("start".equals(pmStatus)) {%>
<input type="submit" id="view_pause_button" name="view_status_button" value="PAUSE">
<input type="submit" id="view_stop_button" name="view_status_button" value="STOP">
<%} else if ("stop".equals(pmStatus)) {%>
<p id="top_status">Stopped.</p>
<%} else {%>
<p id="top_status">Something went wrong...</p>
<%}%>
</form>
<%} else {%>
<p id="top_status">Something went wrong...</p>
<%}%>
<%if (!"stop".equals(pmStatus)) {%>
<button id="view_edit_button" onclick="location.href = '<%=serverUrl + "/" + app + "/edit.jsp?id=" + pmId%>'">EDIT</button>
<%}%>
</div>
<div id="left">
<form action="<%=serverUrl + "/" + app + "/" + "upload"%>">
<%if (Utils.stringIsEmpty(compLog)) {%>
<input id="view_file_on" type="checkbox" hidden checked>
<%}%>
<input type="submit" id="view_new_button" value="NEW">
</form>
</div>
<div class="pm">
<form action="<%=serverUrl + "/" + app + "/edit"%>" method="post" enctype="multipart/form-data">
<input type="hidden" name="pm_id" value=<%=pmId%>>
<div class="details">
<div class="info">
<div class="left">
<value class="name"><%=pmName%></value>
<div class="st">
for
<a href="<%=Globals.server_url + "/webresources/tasks/" + stId + "/getsrc"%>" title="View more information about the Sensing Task"><%=stName + " (" + stId + ")"%></a>
</div>
<%if (Integer.parseInt(pmVersion) == 0) {%>
<value class="version"><br></value>
<%} else {%>
<value class="version">version <%=pmVersion%>.0</value>
<%}%>
</div>
<div class="right">
<value class="date"><%=pmDate%></value>
<value class="time"><%=pmTime%></value>
</div>
</div>
<div class="description">
<value><%=pmDesc%></value>
</div>
</div>
<div class="source">
<textarea class="code" name="code" code readonly><%=srcCode%></textarea>
<%if (!Utils.stringIsEmpty(compLog)) {%>
<textarea class="error" readonly><%=compDate + " " + compTime + " compilation error:\n" + compLog%></textarea>
<%}%>
</div>
</form>
<div id="footer" style="margin-top: 0px; border: none">&#169; 20[0-9]{2} <a href="http://linkedin.com/in/emkatsom" target="_blank">emkatsom</a>. All Rights and Lefts reserved.</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,38 @@
<%@page import="com.www.server.Globals"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%String serverUrl = Globals.server_url;%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="ppc.ico" />
<link href="style.css" rel="stylesheet" type="text/css" />
<title><%=Globals.logo%>: Welcome!</title>
</head>
<body>
<div id="header" style="position: absolute">
<a id="logo" href="<%=serverUrl%>"><%=Globals.logo%></a>
<form id="signin_signup" action="<%=serverUrl + "/signup"%>">
<div id="signin_signup_label">New to <%=Globals.logo%>?</div>
<input id="signin_signup_button" type="submit" value="CREATE AN ACCOUNT">
</form>
</div>
<div id="signin">
<div id="signin_welcome_message">
<h1><%=Globals.h1%></h1>
<p><%=Globals.p%></p>
</div>
<form id="signin_form" action="<%=serverUrl + "/signin"%>" autocomplete="on" method="post">
<label id="signin_form_label">Sign in</label>
<label id="signin_username_label" for="signin_username_value">Username</label>
<input id="signin_username_value" name="username" required="required" type="text"/>
<label id="signin_password_label" for="signin_password_value">Password</label>
<input id="signin_password_value" name="password" required="required" type="password"/>
<% if ((String) request.getAttribute("errorMessage") != null) {%>
<error id="signin_error">${errorMessage}</error>
<% }%>
<input id="signin_button"type="submit" value="Sign in"/>
</form>
</div>
<div id="footer" style="min-width: 800px">&#169; 20[0-9]{2} <a href="http://linkedin.com/in/emkatsom" target="_blank">emkatsom</a>. All Rights and Lefts reserved.</div>
</body>
</html>

View File

@ -0,0 +1,68 @@
<%@page import="com.www.server.Globals"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%String serverUrl = Globals.server_url;%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="ppc.ico" />
<link href="style.css" rel="stylesheet" type="text/css" />
<title><%=Globals.logo%>: Create an account</title>
</head>
<body>
<script type="text/javascript">
var RecaptchaOptions = { theme : 'white' };
</script>
<div id="header" style="position: absolute">
<a id="logo" href="<%=serverUrl%>"><%=Globals.logo%></a>
<form id="signup_signin" action="<%=serverUrl + "/signin"%>"/>
<input id="signup_signin_button" type="submit" value="Sign in">
</form>
</div>
<div id="signup">
<div id="signup_welcome_message">
<h1><%=Globals.h1%></h1>
<p><%=Globals.p%></p>
</div>
<form id="signup_form" action="<%=serverUrl + "/signup"%>" method="post" autocomplete="off">
<label id="signup_form_label">Sign up</label><br/>
<label id="signup_username_label" for="signup_username_value">Choose your username</label>
<input id="signup_username_value" name="username" required="yes" type="text" autocomplete="on" pattern="[a-zA-Z0-9]{5,30}" title="Please use between 6 and 30 characters." />
<% if ((String) request.getAttribute("errorMessageUsername") != null) {%>
<error id="signup_error_username">${errorMessageUsername}</error>
<% }%>
<label id="signup_email_label" for="signup_email_value">Enter your email address</label>
<input id="signup_email_value" name="email" required="yes" type="email"/>
<% if ((String) request.getAttribute("errorMessageEmail") != null) {%>
<error id="signup_error_email">${errorMessageEmail}</error>
<% }%>
<label id="signup_password_label" for="signup_password_value">Create a password</label>
<input id="signup_password_value" name="password" required="yes" type="password" pattern=".{8,}" title="Short passwords are easy to guess. Try one with at least 8 characters."/><br/>
<label id="signup_password_confirm_label" for="signup_password_confirm_value">Confirm your password</label>
<input id="signup_password_confirm_value" name="password_confirm" required="yes" type="password" oninput="check(this)"/>
<script>
function check(input) {
if (input.value != document.getElementById('signup_password_value').value) {
input.setCustomValidity('These passwords do not match. Try again?');
} else {
// input is valid -- reset the error message
input.setCustomValidity('');
}
}
</script>
<!--
<label id="signup_recaptcha_label">Prove you're not a robot</label><br/>
<value id="signup_recaptcha_value">
<%
/*
ReCaptcha c = ReCaptchaFactory.newReCaptcha("6LeehNgSAAAAAHnQE0GJGjLn2w8Hbqx_1450PpkX", "6LeehNgSAAAAAP2nv9YmfNprFns5YX_6_rv-svzs ", false);
out.print(c.createRecaptchaHtml(null, null));
*/
%>
</value><br/>
-->
<input id="signup_button" type="submit" value="Sign up"/>
</form>
</div>
<div id="footer" style="min-width: 800px">&#169; 20[0-9]{2} <a href="http://linkedin.com/in/emkatsom" target="_blank">emkatsom</a>. All Rights and Lefts reserved.</div>
</body>
</html>

1268
src/main/webapp/style.css Normal file

File diff suppressed because it is too large Load Diff