ivanrava / sw-eng-project

Group project realized for the Software Engineering full-year course @ UniBs
2 stars 0 forks source link

Descrizione

Progetto realizzato nell'ambito del corso di Ingegneria del Software dell'Università degli Studi di Brescia, utilizzando

Applicazione che permette a degli utenti di creare un proprio profilo, aggiungere articoli da barattare in categorie predisposte dall'amministratore dell'applicazione e proporre baratti con altri utenti. Ogni utente può aggiungere articoli al proprio profilo, e può proporre e gestire proposte di scambio con altri utenti. Dopo aver confermato uno scambio, gli utenti potranno accordarsi, direttamente tramite l'applicazione, sul luogo e sulla data dell'appuntamento. In qualunque momento un utente può ritirare un proprio articolo (nel caso non lo voglia più scambiare), e questo non sarà più visibile agli altri utenti.

Tecnologie utilizzate

Il progetto è stato realizzato con Java 18 utilizzando le seguenti librerie:

Aggiunta articolo

Prerequisiti:

Dopo aver effettuato l'accesso all'applicazione selezionare "Gestisci gli articoli" e successivamente "Aggiungi un articolo/offerta". Inserire tutti i dati richiesti (la categoria di appartenenza e poi tutti i campi da compilare relativi alla categoria scelta, come ad esempio lo stato di conservazione). Nel caso i campi siano facoltativi, é possibile non scrivere nulla.

L'aggiunta della categoria va fatta identificando prima la "categoria radice" e poi selezionando la "categoria foglia" desiderata all'interno delle categorie individuate dalla categoria radice scelta.

Terminata l'aggiunta dell'articolo sarà possibile visualizzarlo, insieme a tutti gli altri articoli aggiunti in precedenza, nella sezione "Visualizza articoli/offerte dell'utente".

Gli articoli aggiunti saranno automaticamente resi disponibili per gli scambi (l'applicazione li indica come "aperti"). Se l'utente desidera ritirare gli articoli aggiunti può farlo successivamente con l'ausilio dell'applicazione.

Ogni utente che dispone di articoli "aperti" allo scambio può quindi proporre dei baratti agli altri utenti.

Proporre uno scambio

Prerequisiti:

Dopo aver effettuato l'accesso all'applicazione selezionare "Gestisci i baratti" e successivamente "Proponi un baratto". Selezionare l'articolo da proporre, poi selezionare l'articolo desiderato tra tutti gli articoli della stessa categoria caricati dagli altri utenti (non è possibile effettuare scambi con articoli di categorie differenti).

Ora sarà l'altro utente a dover accettare o meno lo scambio.

Accettare / rifiutare uno scambio

Prerequisiti:

Per visualizzare/gestire le offerte di scambio che ci sono state proposte selezionare dal menu principale "Gestisci i baratti" e successivamente "Gestisci i baratti che ti sono stati proposti". Da qui sarà possibile visualizzare tutte le offerte di scambio, e per ognuna sarà possibile accettare o rifiutare l'offerta:

Dopo l'accettazione e la proposta di luogo / data / orario, l'onere della risposta viene rimpallato all'altro utente, che potrà accettare e chiudere lo scambio oppure rifiutare e redigere un'altra proposta spazio-temporale. Il flusso continua sino a che un utente non accetta la proposta della controparte oppure sino a quando la proposta non scade senza ricevere risposta (la scadenza è anch'essa fissata in giorni dal configuratore, ed è visualizzabile nelle "generalità").

Prerequisiti

Prerequisiti:

Installazione

  1. Creare una cartella e inserire al suo interno il file eseguibile (l'app durante l'utilizzo creerà dei file di configurazion ed é necessario che siano nella stessa cartella dell'eseguibile)
  2. Aprire un emulatore di terminale (bash, cmd, Powershell, ecc..) e spostarsi nella cartella.
  3. Dare il comando apposito per eseguire il .jar da linea di comando, che può essere ad esempio:

Windows

java -jar .\sw-eng-project.jar

Linux / MacOS

java -jar ./sw-eng-project.jar

Configurazione / setup iniziale (per configuratore)

Al primo avvio dell'applicazione il configuratore dovrà decidere una password di default che sarà poi utilizzata per creare degli account con permessi di configurazione del sistema. Queste credenziali non possono essere modificate in un secondo momento e conferiscono la possibilità di creare nuovi utenti / credenziali con privilegi amministrativi. Per questi motivi è imperativo che non vengano mai condivise con nessuno e che non siano mai dimenticate. Idealmente dovrebbero essere scelte delle credenziali di non facile deduzione.

Fare l'accesso con le credenziali di default permetterà di creare un account "configuratore", definendone username e password. Gli username sono univoci per tutti gli utenti (che siano "configuratori" o "fruitori").

Prima dell'uso da parte degli utenti finali gli utenti configuratori dovranno creare le categorie, che poi andranno ad identificare gli articoli degli utenti (come ad es. Libro, Videogioco, Abbigliamento, ecc... - ma ne parleremo meglio successivamente), ma anche la "configurazione" dell'applicazione, ovvero i luoghi dove avvengono gli scambi, la città in cui avvengono gli scambi (detta "piazza" e determinabile una sola volta), la scadenza delle offerte e delle proposte, nonché gli orari / giorni di ritrovo in cui effettuare fisicamente gli scambi (usati in fase di definizione delle proposte).

Configurazione categorie

L'applicazione gestisce categorie tramite più gerarchie ad albero, identificate dalla radice degli alberi. Ci sono dei vincoli sulla definizione dei nomi delle gerarchie:

Ogni categoria è identificata, oltre che dal suo nome e da una descrizione testuale, anche da campi testuali, a compilazione obbligatoria o facoltativa, determinati dal configuratore o dall'applicazione. In particolare, l'applicazione associa di default ad ogni categoria radice 2 campi nativi:

Per aggiungere le categorie bisogna aver effettuato l'accesso con un account configuratore e poi andare nel menù di gestione delle categorie. Da lì sarà possibile creare categorie direttamente dall'applicazione inserendo i dati richiesti, oppure è anche possibile importare le categorie tramite un file .json in modalità batch. Dall'applicazione andrà inserito il percorso assoluto del file .json su disco, di cui forniamo un esempio a titolo esemplicativo del suo semplice formato:

[
  {
    "name": "Libro",
    "description": "Opera cartacea",
    "fields": [
      {
        "name": "Titolo",
        "required": true
      },
      {
        "name": "Anno di uscita",
        "required": true
      },
      {
        "name": "Edizione",
        "required": false
      },
      {
        "name": "Autore",
        "required": true
      }
    ],
    "children": [
      {
        "name": "Romanzo",
        "description": "Narrazione scritta in prosa",
        "fields": [],
        "children": [
          {
            "name": "Romanzo straniero",
            "description": "Romanzo in lingua non italiana",
            "fields": [
              {
                "name": "Lingua originale",
                "required": true
              }
            ],
            "children": []
          }
        ]
      }
    ]
  }
]

Setup configurazione

Anche la configurazione può essere importata direttamente da disco, dal menu di gestione della configurazione. Da lì sarà possibile inserire tutti i dati di configurazione (credenziali di default escluse) direttamente dall'applicazione, interattivamente, oppure é possibile importarli tramite un file .json. Dall'applicazione andrà inserito il percorso assoluto del file su disco. Ecco un esempio di file .json (la scadenza deadline è in giorni, i giorni della settimana days sono inseriti come interi da 1 a 7 e gli intervalli temporali timeIntervals sono granulari rispetto alla mezz'ora):

{
  "square": "Brescia",
  "places": [
    "Portici",
    "UniBS - via Branze 38",
    "Fermata metro Vittoria"
  ],
  "deadline": 10,
  "days": [
    6,
    7
  ],
  "timeIntervals": [
    {
      "start": "08:00",
      "stop": "11:30"
    },
    {
      "start": "14:00",
      "stop": "18:30"
    },
    {
      "start": "20:00",
      "stop": "22:00"
    }
  ]
}

Screenshots

Accesso

Cattura

Interfaccia di amministrazione (configuratore)

Cattura2

Gestione categorie (configuratore)

Cattura3

Gestione Configurazione (configuratore)

Cattura4

Interfaccia per l'utente finale

Cattura5

Gestione articoli (utente finale)

Cattura6

Categorie

Cattura7

Articoli

Cattura8