Skip to content
Snippets Groups Projects
DBC.java 18.09 KiB
package db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;

import org.json.JSONArray;
import org.json.JSONException;

/**
 *
 * @author sqlitetutorial.net
 */
public class DBC {

	private static Connection connect() {
		// SQLite connection string
		String url = "jdbc:sqlite:../DBPissirDomain.db";
		Connection conn = null;
		try {
			conn = DriverManager.getConnection(url);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

	public static Dominio getDom(String dm) throws SQLException {
		// connect();
		// Statement statement =conn.createStatement();

		Connection conn = connect();
		if(conn == null)
			return null;
		try {
			// // db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);

			PreparedStatement prepared = conn.prepareStatement("SELECT * FROM Domini WHERE Domain = ?");
			prepared.setString(1, dm);
			ResultSet result = prepared.executeQuery();

			// String sql= "SELECT * FROM Domini WHERE Domain = ?";

			// ResultSet result =statement.executeQuery(sql);
			// Dominio res=new Dominio();

			if (result.next()) {
				String dom = result.getString("Domain");
				String desc = result.getString("Desc");

				// String users=result.getString("Users");
				// ArrayList<String> users = new
				// ArrayList<String>(Arrays.asList(result.getString("Users").split(",")));
				// ArrayList<String> reso = new
				// ArrayList<String>(Arrays.asList(result.getString("Resources").split(",")));
				// String reso=result.getString("Resources");

				Integer state = result.getInt("State");
				// ArrayList<String> serv = new
				// ArrayList<String>(Arrays.asList(result.getString("Services").split(",")));
				// String serv=result.getString("Services");
				Dominio d = new Dominio(dom, desc, state);// users, reso,, serv
				// res.add(d);
				return d;
			}
			// return null;

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
		return null;

	}

	public static void delDom(String dm) throws SQLException {

		Connection conn = connect();
		if(conn == null)
			return;
		try {
			// db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);

			PreparedStatement prepared = conn.prepareStatement("DELETE FROM Domini WHERE Domain = ?");
			prepared.setString(1, dm);
			prepared.executeUpdate();

			prepared = conn.prepareStatement("DELETE FROM Usa WHERE Domain = ?");
			prepared.setString(1, dm);
			prepared.executeUpdate();

			prepared = conn.prepareStatement("DELETE FROM Amministra WHERE Domain = ?");
			prepared.setString(1, dm);
			prepared.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
		// return false;

	}

	public static void insertDom(String j) throws SQLException, JSONException {
		// connect();
		// Statement statement =conn.createStatement();

		Connection conn = connect();
		if(conn == null)
			return;
		try {
			// // db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);

			PreparedStatement prepared = conn.prepareStatement("INSERT INTO Domini (Domain, State) VALUES (?1,?2)");
			prepared.setString(1, j);
			prepared.setInt(2, 0);
			prepared.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}

	}

	public static ArrayList<String> getDomainsAdmin(String user) throws SQLException, JSONException {
		// connect();
		// Statement statement =conn.createStatement();

		Connection conn = connect();
		if(conn == null)
			return null;
		try {
			// // db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);

			PreparedStatement prepared = conn.prepareStatement("SELECT * FROM Amministra WHERE User = ?");
			prepared.setString(1, user);
			ResultSet result = prepared.executeQuery();

			ArrayList<String> res = new ArrayList<String>();
			// JSONArray jsnarr=new JSONArray();
			while (result.next()) {
				String dom = result.getString("Domain");
				// String desc= result.getString("Desc");
				// Integer state = result.getInt("State");
				//
				// JSONObject j=new JSONObject("{"+dom+":"+state+"}");
				// jsnarr.put(j);
				//
				// Dominio d=new Dominio(dom,desc,state);
				res.add(dom);

			}
			// return jsnarr;
			return res;

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
		return null;

	}

	public static ArrayList<String> getDomainsUser(String user) throws SQLException, JSONException {
		Connection conn = connect();
		if(conn == null)
			return null;
		try {
			// // db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);

			PreparedStatement prepared = conn.prepareStatement("SELECT * FROM Usa WHERE User = ?");
			prepared.setString(1, user);
			ResultSet result = prepared.executeQuery();

			ArrayList<String> res = new ArrayList<String>();
			while (result.next()) {
				String dom = result.getString("Domain");
				res.add(dom);

			}
			// return jsnarr;
			return res;

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
		return null;

	}

	public static Dominio getDomain(String domain) throws SQLException, JSONException {
		// connect();
		// Statement statement =conn.createStatement();

		Connection conn = connect();
		if(conn == null)
			return null;
		try {
			// // db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);

			PreparedStatement prepared = conn.prepareStatement("SELECT * FROM Domini WHERE Domain = ?");
			prepared.setString(1, domain);
			ResultSet result = prepared.executeQuery();

			// ArrayList<String> res=new ArrayList<String>();
			// JSONArray jsnarr=new JSONArray();
			while (result.next()) {
				String dom = result.getString("Domain");
				String desc = result.getString("Desc");
				Integer state = result.getInt("State");
				//
				// JSONObject j=new JSONObject("{"+dom+":"+state+"}");
				// jsnarr.put(j);
				//
				Dominio d = new Dominio(dom, desc, state);
				// res.add(dom);
				return d;
			}
			// return jsnarr;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
		return null;

	}

	public static void fillModules(String a, String b, String c) throws SQLException, JSONException {
		// connect();
		// Statement statement =conn.createStatement();

		Connection conn = connect();
		if(conn == null)
			return;
		try {
			// db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);

			PreparedStatement prepared = conn
					.prepareStatement("INSERT INTO Moduli (Module, Requirements, Path) VALUES (?,?,?);");

			prepared.setString(1, a);
			prepared.setString(2, b);
			prepared.setString(3, c);
			prepared.executeUpdate();

		} catch (SQLException e) {
			if (!e.getMessage().contains("SQLITE_CONSTRAINT_PRIMARYKEY")) {
				e.printStackTrace();
			}
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
		// return null;

	}

	public static ArrayList<String> getModules() throws SQLException, JSONException {
		// connect();
		// Statement statement =conn.createStatement();

		Connection conn = connect();
		if(conn == null)
			return null;
		try {
			// // db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);

			PreparedStatement prepared = conn.prepareStatement("SELECT * FROM Moduli");
			// prepared.setString(1, user);
			ResultSet result = prepared.executeQuery();
			ArrayList<String> res = new ArrayList<String>();
			while (result.next()) {
				String mod = result.getString("Module");
				// String req= result.getString("Requirements");

				// Integer state = result.getInt("State");
				//
				// JSONObject j=new JSONObject("{"+dom+":"+state+"}");
				// jsnarr.put(j);
				//
				// Dominio d=new Dominio(dom,desc,state);
				res.add(mod);

			}
			// return jsnarr;
			return res;

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
		return null;

	}

	public static void insertAmministra(String user, String dom) throws SQLException, JSONException {
		// connect();
		// Statement statement =conn.createStatement();

		Connection conn = connect();
		if(conn == null)
			return;
		try {
			// // db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);
			PreparedStatement prepared = conn.prepareStatement("INSERT INTO Amministra (User, Domain) VALUES (?1,?2)");
			prepared.setString(1, user);
			prepared.setString(2, dom);
			// prepared.setString(6, j.getString("services").toString().trim());
			prepared.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
	}

	public static void insertUsa(String user, String dom) throws SQLException, JSONException {
		// connect();
		// Statement statement =conn.createStatement();

		Connection conn = connect();
		if(conn == null)
			return;
		try {
			// // db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);
			PreparedStatement prepared = conn.prepareStatement("INSERT INTO Usa (User, Domain) VALUES (?1,?2)");
			prepared.setString(1, user);
			prepared.setString(2, dom);
			// prepared.setString(6, j.getString("services").toString().trim());
			prepared.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
	}

	public static void insertService(String domain, String host, String module) throws JSONException {
		// connect();
		// Statement statement =conn.createStatement();

		Connection conn = connect();
		if(conn == null)
			return;
		try {
			// // db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);

			PreparedStatement prepared = conn
					.prepareStatement("INSERT INTO Servizi (Domain, Resource, Module) VALUES (?1,?2,?3)");

			prepared.setString(1, domain);
			prepared.setString(2, host);
			prepared.setString(3, module);

			prepared.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
		// return null;

	}

	/**
	 * finds the host from the database and calls insertService(domain,host,service)
	 * to insert the data into the database
	 */
	public static ArrayList<String> insertService(String domain, String module) throws JSONException {
		// find the host from the database
		Connection conn = connect();
		if(conn == null)
			return null;
		try {
			// db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);

			PreparedStatement first = conn.prepareStatement("SELECT Requirements FROM Moduli WHERE Module = ?1");
			first.setString(1, module);

			ResultSet res = first.executeQuery();

			ArrayList<String> requirements = new ArrayList<String>();
			while (res.next()) {
				String[] requirementsArr = res.getString("Requirements").split(",");// also works if there is only one
																					// host

				// add the requirementsArr to requirements
				requirements.addAll(Arrays.asList(requirementsArr));
			}

			ArrayList<String> hosts = new ArrayList<String>();
			for (String reqs : requirements) {
				PreparedStatement second = conn.prepareStatement("SELECT Host FROM Risorse WHERE Platform = ?1");// and
																													// Domain
																													// =
																													// ?2");
				second.setString(1, reqs);
				// second.setString(2, domain);

				ResultSet res2 = second.executeQuery();
				while (res2.next()) {
					hosts.add(res2.getString("Host"));
				}
			}
			conn.close();
			ArrayList<String> result = new ArrayList<String>();
			for (String host : hosts) {
				insertService(domain, host, module);
				result.add(module + "---" + host);
			}
			return result;

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
		return null;
	}

	public static JSONArray getServicesInUseByDomain(String domain) throws SQLException, JSONException {
		// connect();
		// Statement statement =conn.createStatement();

		Connection conn = connect();
		if(conn == null)
			return null;
		try {
			// db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);

			PreparedStatement prepared = conn.prepareStatement("SELECT Module FROM Servizi WHERE Domain = ?");
			prepared.setString(1, domain);
			ResultSet result = prepared.executeQuery();
			// ArrayList<String> res=new ArrayList<String>();
			// JSONArray jsnarr=new JSONArray();
			ArrayList<String> arr = new ArrayList<String>();// serve per il contains
			JSONArray res = new JSONArray();
			while (result.next()) {
				// JSONObject j= result;
				String module = result.getString("Module");
				if (!arr.contains(module)) {

					arr.add(module);
					res.put(module);
				}
				// String dom = result.getString("Domain");
				// String desc= result.getString("Desc");
				// Integer state = result.getInt("State");
				//
				// JSONObject j=new JSONObject("{"+dom+":"+state+"}");
				// jsnarr.put(j);
				//
				// Dominio d=new Dominio(dom,desc,state);
				// res.add(dom);

			}

			return res;

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
		return null;

	}

	public static JSONArray getAllServices() {

		Connection conn = connect();
		if(conn == null)
			return null;
		try {
			// // db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);

			Statement statement = conn.createStatement();
			ResultSet result = statement.executeQuery("SELECT Module FROM Moduli");

			// ArrayList<String> res=new ArrayList<String>();
			// JSONArray jsnarr=new JSONArray();
			ArrayList<String> arr = new ArrayList<String>();
			JSONArray res = new JSONArray();

			while (result.next()) {
				// JSONObject j= result;
				String resString = result.getString("Module");
				if (!arr.contains(resString)) {
					arr.add(resString);
					res.put(resString);
				}

				// String dom = result.getString("Domain");
				// String desc= result.getString("Desc");
				// Integer state = result.getInt("State");
				//
				// JSONObject j=new JSONObject("{"+dom+":"+state+"}");
				// jsnarr.put(j);
				//
				// Dominio d=new Dominio(dom,desc,state);
				// res.add(dom);

			}

			return res;

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
		return null;
	}

	public static void setStatoDomain(String domain, int stato) {
		Connection conn = connect();
		if(conn == null)
			return;
		try {
			// // db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);

			PreparedStatement prepared = conn.prepareStatement("UPDATE Domini SET State = ? WHERE Domain = ?");
			prepared.setInt(1, stato);
			prepared.setString(2, domain);

			prepared.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
	}

	public static String getURI(String module) {
		Connection conn = connect();
		if(conn == null)
			return null;
		try {
			// // db parameters
			// String url = "jdbc:sqlite:../DBPissirDomain.db";
			// // create a connection to the database
			// conn = DriverManager.getConnection(url);

			PreparedStatement prepared = conn.prepareStatement("SELECT Path FROM Moduli WHERE Module = ?");
			prepared.setString(1, module);
			ResultSet result = prepared.executeQuery();

			if (result.next()) {
				return "https://gitlab.di.unipmn.it/alfredo/iotlabgw.edu-al.unipmn.it/-/raw/main/" + result.getString("Path");
			}

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
		return null;
	}
}