Package it.rol

Class Data

java.lang.Object
javax.servlet.GenericServlet
javax.servlet.http.HttpServlet
it.rol.Data
All Implemented Interfaces:
Constants, Serializable, javax.servlet.Servlet, javax.servlet.ServletConfig

public class Data extends javax.servlet.http.HttpServlet implements Constants

Data è la servlet della web-application ROL che può essere utilizzata in piú contesti:

  1. su una richiesta sincrona: per produrre output con contentType differenti da 'text/html'
  2. su una richiesta asincrona: per ottenere tuple da mostrare asincronamente nelle pagine

  • Nel primo caso, questa servlet fa a meno, legittimamente, del design (View), in quanto l'output prodotto consiste in pure tuple prive di presentazione (potenzialmente: fileset CSV, formati XML, dati con o senza metadati, serialization formats, JSON, and so on), oppure in output già autoformattati (p.es. testo formattato Rich Text Format).
  • Nel secondo caso, la servlet specifica una pagina di output, contenente la formattazione, che però verrà invocata asincronamente.

Questa servlet estrae l'azione dall'URL, ne verifica la correttezza, quindi in base al valore del parametro 'entToken' ricevuto, richiama le varie Command che devono eseguire i comandi specifici. Infine, recupera l'output dai metodi delle Command stesse richiamati e li restituisce a sua volta al cliente sotto forma non necessariamente di outputstream 'text/html' (come nel funzionamento standard delle applicazioni web), quanto sotto forma di file nel formato richiesto (.csv, .xml, ecc.), oppure passando il nome di una risorsa da richiamare in modo asincrono per mostrare le tuple estratte, e passate in Request.
In caso di richieste di output non di tipo text/html, elabora anche un nome univoco per ogni file generato, basandosi sul timestamp dell'estrazione/richiesta.

La classe che realizza l'azione deve implementare l'interfaccia Command e, dopo aver eseguito le azioni necessarie, restituire un set di risultati che dovrà essere utilizzato per visualizzare i dati all'interno dei files serviti, ai quali sarĂ  fatto un forward.

Altre modalità di generazione di output differenti da 'text/html' (chiamate a pagine .jsp che incorporano la logica di preparazione del CSV, chiamate a pagine .jsp che si occupano di presentare il metadato...) sono deprecate da tempo e vanno assolutamente evitate in favore dell'uso di questa servlet.

Author:
Giovanroberto Torre
See Also:
  • Constructor Details

    • Data

      public Data()
  • Method Details

    • init

      public void init(javax.servlet.ServletConfig config) throws javax.servlet.ServletException
      Inizializza (staticamente) le variabili globali e i parametri di inizializzazione.
      Specified by:
      init in interface javax.servlet.Servlet
      Overrides:
      init in class javax.servlet.GenericServlet
      Parameters:
      config - la configurazione usata dal servlet container per passare informazioni alla servlet durante l'inizializzazione
      Throws:
      javax.servlet.ServletException - una eccezione che puo' essere sollevata quando la servlet incontra difficolta'
    • service

      protected void service(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res) throws javax.servlet.ServletException, IOException
      Overrides:
      service in class javax.servlet.http.HttpServlet
      Throws:
      javax.servlet.ServletException
      IOException
    • getAllowedCSVCommand

      public static LinkedList<String> getAllowedCSVCommand()
      Getter su variabile di classe
      Returns:
      LinkedList<String> - Elenco delle Command abilitate a generare output CSV
    • getHighlight

      public static String getHighlight(String riskLevel)

      Calcola il colore di highlight in Rich Text Format.

      Purtroppo, questo formato, sviluppato da Microsoft, non implementa in modo efficace tutti gli attributi di formattazione ed è molto dipendente dall'editor utilizzato per la visualizzazione e dal sistema operativo che lo ospita, per cui le codifiche degli highlight, che, almeno sulla carta, dovevano essere ben definite (v. p.es.), non si comportano come atteso (oppure, l'implementazione richiederebbe maggiore approfondimento).
      In ogni caso, questo formato, che pure sembrava un ottimo compromesso fra human readibility, formattazione ricca (appunto) e ampia fruibilitè e portabilità, si rivela in realtà rigido, tutt'altro che "ricco", ormai obsoleto e poco profittevole in termini di investimento di tempo di sviluppo.
      Preferibile, pertanto, puntare oggi direttamente su un formato estremamente preciso, come PDF, oppure direttamente su librerie per la generazione in formati piú attuali, proprietari (e.g. .docx) o aperti (e.g. ODF).

      Parameters:
      riskLevel - livello di rischio da evidenziare
      Returns:
      valore di highlight da stampare nel documento
    • getStructureJsonNode

      public static String getStructureJsonNode(String tipo, String codice, String codicePadre, String nome, String descr, String lbl1, String txt1, String lbl2, String txt2, String bgColor, String icona, int livello)

      Genera il nodo JSON

      Parameters:
      tipo - valore che serve a differenziare tra tipi diversi di nodi per poter applicare formattazioni o attributi diversi
      codice - codice del nodo corrente
      codicePadre - codice del nodo padre del nodo corrente
      nome - etichetta del nodo
      descr - descrizione del nodo
      lbl1 - label aggiuntiva
      txt1 - testo relativo alla label
      lbl2 - label aggiuntiva
      txt2 - testo relativo alla label
      bgColor - parametro opzionale specificante il colore dei box/nodi in formato esadecimale
      icona - parametro opzionale specificante il nome del file da mostrare come stereotipo
      livello - livello gerarchico del nodo
      Returns:
      String - il nodo in formato String
    • makeDescrJsonNode

      public static String makeDescrJsonNode(ArrayList<?> list, int livello) throws AttributoNonValorizzatoException

      Genera la descrizione del nodo JSON

      Parameters:
      list - struttura vettoriale contenente informazioni
      livello - livello gerarchico del nodo
      Returns:
      String - il nodo in formato String
      Throws:
      AttributoNonValorizzatoException - eccezione che viene propagata se si tenta di accedere a un dato obbligatorio non valorizzato del bean