Skip to content
This repository has been archived by the owner on May 9, 2020. It is now read-only.

aitorru/Administracion-de-Drones-Proyecto-universidad

Repository files navigation

Administracion-de-Drones-Proyecto-universidad


alt text GitHub All Releases GitHub last commit GitHub tag (latest SemVer)


Proyecto para administrar una red de drones de reparto a nivel de España.

Mapa (Parte izquierda)

Usando una imagen de OpenStreetMaps vamos a hacer una simulacion de donde estan los drones en este momento. Con un modelo de un dron basico lo moveremos por el mapa simulando el paso del tiempo

Administracion (Parte derecha)

En la parte derecha de la interfaz hay una serie de desplegables para establecer una ruta

Roadmap de proyecto

Manejo de BD

Aitor Ruiz

  • Creacion de tabla automatica si no existe
public BackEndAdmin() {
        PythonInterpreter pyInterp = new PythonInterpreter();
        pyInterp.exec("f = file('dronesDataBase.db', 'w')");
        pyInterp.close();
        try {
            ejecutarBD();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private void ejecutarBD() throws SQLException {
        String url = "jdbc:sqlite:dronesDataBase.db";
        connGlobal = DriverManager.getConnection(url);
        if (connGlobal != null) {
            metaGlobal = connGlobal.getMetaData();
            stmtGlobal = connGlobal.createStatement();
            System.out.println("The driver name is " + metaGlobal.getDriverName());
            System.out.println("A new database has been created.");
            String datosEntrada = "CREATE TABLE IF NOT EXISTS dron (\n" + "id INTEGER PRIMARY KEY NOT NULL, \n"
                    + "idUsuario INTEGER NOT NULL, \n " // ID de prpietario del DRON
                    + "coordenadasX INTEGER NOT NULL, \n" + "coordenadasY INTEGER NOT NULL, \n"
                    + "horaSalida INTEGER NOT NULL, \n" + "horaLlegada INTEGER NOT NULL, \n"
                    + "ciudadSalida text NOT NULL, \n" + "ciudadLlegada text NOT NULL, \n"
                    + "cargaDescripcion text\n" + ");";
            stmtGlobal.execute(datosEntrada);
            stmtGlobal.close();
            System.out.println("Created");
        }
    }

Uso de python rapido para crear el archivo si no existe.

Los elemetos que componen la tabla son id, idUsuario, coordenadasX, coordenadasY, horaSalida, horaLlegada, ciudadSalida, ciudadLlegada, cargaDescripcion

Aitor Ruiz

  • Lectura de BD
public ArrayList<HashMap<String,String>> leerBD() {
        String sql = "SELECT id, idUsuario, coordenadasX, coordenadasY, horaSalida, horaLlegada, ciudadSalida, ciudadLlegada, cargaDescripcion FROM dron";
        ArrayList<HashMap<String,String>> listaDeHashMaps = new ArrayList<HashMap<String,String>>();
        try {
            ResultSet rs = stmtGlobal.executeQuery(sql);
            while(rs.next()){
                HashMap<String, String> mapaTemporal = new HashMap<String, String>();
                mapaTemporal.put("id", Integer.toString(rs.getInt("id")));
                mapaTemporal.put("idUsuario", Integer.toString(rs.getInt("idUsuario")));
                mapaTemporal.put("coordenadasX", Integer.toString(rs.getInt("coordenadasX")));
                mapaTemporal.put("coordenadasY", Integer.toString(rs.getInt("coordenadasY")));
                mapaTemporal.put("horaSalida", Integer.toString(rs.getInt("horaSalida")));
                mapaTemporal.put("ciudadSalida", rs.getString("ciudadSalida"));
                mapaTemporal.put("ciudadLlgada", rs.getString("ciudadLlegada"));
                mapaTemporal.put("cargaDescripcion", rs.getString("cargaDescripcion"));
                listaDeHashMaps.add(mapaTemporal);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        if (listaDeHashMaps != null) {
            return listaDeHashMaps;
        } else {
            return null;
        }

La lectura hace return de un arraylist de todos los HM. ASi siendo facil la lectura.

Aitor Ruiz

  • Escritura de BD
    public void guardarBD(HashMap<String, String> DatosEntrada) {
        String sql = "INSERT INTO dron(idUsuario, coordenadasX, coordenadasY, horaSalida, horaLlegada, ciudadSalida, ciudadLlegada, cargaDescripcion) VALUES(?,?,?,?,?,?,?,?)";
        try {
            PreparedStatement pstmt = connGlobal.prepareStatement(sql);
            pstmt.setInt(1, Integer.valueOf(DatosEntrada.get("idUsuario")));
            pstmt.setInt(2, Integer.valueOf(DatosEntrada.get("coordenadasX")));
            pstmt.setInt(3, Integer.valueOf(DatosEntrada.get("coordenadasY")));
            pstmt.setInt(4, Integer.valueOf(DatosEntrada.get("horaSalida")));
            pstmt.setInt(5, Integer.valueOf(DatosEntrada.get("horaLlegada")));
            pstmt.setString(6, DatosEntrada.get("ciudadSalida"));
            pstmt.setString(7, DatosEntrada.get("ciudadLlegada"));
            pstmt.setString(8, DatosEntrada.get("cargaDescripcion"));
            pstmt.executeUpdate();
            pstmt.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
  • Modificar de BD
public void UpdateCoordenadasX(int coordenadasX, int id){
        String sql = "UPDATE dron SET coordenadasX = ? WHERE id = ?";
        try {
            PreparedStatement psmt = connGlobal.prepareStatement(sql);
            psmt.setInt(1, coordenadasX);
            psmt.setInt(2, id);
            psmt.executeUpdate();
            psmt.close();

        } catch (Exception e) {
            //TODO: handle exception
            e.printStackTrace();
        }
    }
    public void UpdateCoordenadasY(int coordenadasY, int id){
        String sql = "UPDATE dron SET coordenadasY = ? WHERE id = ?";
        try {
            PreparedStatement psmt = connGlobal.prepareStatement(sql);
            psmt.setInt(1, coordenadasY);
            psmt.setInt(2, id);
            psmt.executeUpdate();
            psmt.close();

        } catch (Exception e) {
            //TODO: handle exception
            e.printStackTrace();
        }
    }
    public void UpdateDatos(int id, int idUsuario, int coordenadasX, int coordenadasY, int horaSalida, int horaLlegada, String ciudadSalida, String ciudadLlegada, String cargaDescripcion){
        String sql = "UPDATE dron SET idUsuario = ?, coordenadasX = ?, coordenadasY = ?, horaSalida = ?, horaLlegada = ?, ciudadSalida = ?, ciudadLlegada = ?, cargaDescripcion = ? WHERE id = ?";
        try {
            PreparedStatement psmt = connGlobal.prepareStatement(sql);
            psmt.setInt(1, idUsuario);
            psmt.setInt(2, coordenadasX);
            psmt.setInt(3, coordenadasY);
            psmt.setInt(4, horaSalida);
            psmt.setInt(5, horaLlegada);
            psmt.setString(6, ciudadSalida);
            psmt.setString(7, ciudadLlegada);
            psmt.setString(8, cargaDescripcion);
            psmt.setInt(9, id);
            psmt.executeUpdate();
            psmt.close();

        } catch (Exception e) {
            //TODO: handle exception
        }
    }

Se han creado metodos para hacer la actualizacion de coordenadas rapidamente

  • Eliminar Datos de BD
public void eliminarDatos(int id){
        String sql = "DELETE FROM dron WHERE id = ?";
        try {
            PreparedStatement psmt = connGlobal.prepareStatement(sql);
            psmt.setInt(1, id);
            psmt.executeQuery();
            psmt.close();
        } catch (Exception e) {
            //TODO: handle exception
        }
    }

Ventana de login

Jon Ibarreche

  • Investigación

Jon Ibarreche & Aitor Ruiz

Aitor Ruiz

  • Creacion de metodo de criptografia para acceso a pantalla
public static byte[] getSHA(String input) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("SHA-256");  
        return md.digest(input.getBytes(StandardCharsets.UTF_8));  
    }
    public static String toHexString(byte[] hash) {  
        BigInteger number = new BigInteger(1, hash);
        StringBuilder hexString = new StringBuilder(number.toString(16));  
        while (hexString.length() < 32){  
            hexString.insert(0, '0');  
        }  
        return hexString.toString();  
    }
    public String StringToCrypto(String strToCrypt){
        try {
            return toHexString(getSHA(strToCrypt));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }
  • Ejemplo para lectura de datos rapida
        userDB u = new userDB();
        crypto c = new crypto();
        ArrayList<HashMap<String, String>> listaUsuarios = u.leerBD();
        for(int i = 0; i < listaUsuarios.size();i++){
            HashMap<String, String> temp = listaUsuarios.get(i);
            if (temp.get("user").equals(usuario)){
                if(temp.get("password").equals(c.StringToCrypto(paswd))){
                    temp.get("idUsuario");
                }
            }
        }

Ventana para administrar

Jon Ibarreche

  • Investigación

Jon Ibarreche & Aitor Ruiz

Ventana de mapa

Sergio Salgado

  • Investigación

Javadoc

JavaDoc

Muestra del javadoc

Build // Ejecutar

Windows

EXE

Puedes simplemente descargar el exe

JAR

Tambien puedes descargar el jar directamente y ejecutarlo con

java -jar drones-*.*.jar

Maven

Si estas interesado puedes crear el jar desde el proyecto.

git clone https://github.com/aitorru/Administracion-de-Drones-Proyecto-universidad.git

Ahora hay que navegar a Administracion-de-Drones-Proyecto-universidad/drones

cd Administracion-de-Drones-Proyecto-universidad/drones

Y falta con ejecutar lo siguiente

mvn package

Los Jar resultantes estan en Administracion-de-Drones-Proyecto-universidad/drones/target

cd target

LINUX & MAC

JAR

Actualmente solo esta disponible en windows de instalador, por lo cual hay que usar el Jar

Ejecutalo con

java -jar drones-*.*-SNAPSHOT-jar-with-dependencies.jar

Maven

Si estas interesado puedes crear el jar desde el proyecto.

git clone https://github.com/aitorru/Administracion-de-Drones-Proyecto-universidad.git

Ahora hay que navegar a Administracion-de-Drones-Proyecto-universidad/drones

cd Administracion-de-Drones-Proyecto-universidad/drones

Y falta con ejecutar lo siguiente

mvn package

Los Jar resultantes estan en Administracion-de-Drones-Proyecto-universidad/drones/target

cd target

Autores

  • Aitor Ruiz - Trabajo inicial, bases de datos, criptografia y coordinacion - Aitor Ruiz
  • Sergio Salgado - Creacion de mapa 2D - Sergio Salgado
  • Jon Ibarreche - Creacion de Login y apartado de usuario - Jon ibarreche

Creado con // Dependencies

Jython

<dependencies>
    <dependency>
      <groupId>org.python</groupId>
      <artifactId>jython</artifactId>
      <version>2.7.0</version>
    </dependency>

SQLite

    <dependency>
      <groupId>org.xerial</groupId>
      <artifactId>sqlite-jdbc</artifactId>
      <version>3.28.0</version>
    </dependency>

JSON

    <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20190722</version>
    </dependency>

JUnit

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
</dependencies>