Utilizzo di un datastore esterno

Questa sezione introduce CsvDataSourceServlet. CsvDataSourceServlet è un'implementazione di esempio che utilizza un file CSV come datastore esterno. Questa sezione fornisce anche istruzioni passo passo su come eseguire e testare CsvDataSourceServlet.

Nota: prima di iniziare, devi completare la sezione Introduzione alle origini dati.

Introduzione a CsvDataSourceServlet

La classe CsvDataSourceServlet si trova nel pacchetto examples. Questa classe fornisce un'implementazione di esempio che utilizza un file CSV come datastore esterno. CsvDataSourceServlet eredita da DataSourceServlet, implementa generateDataTable() e deve essere eseguito all'interno di un container servlet.

Di seguito è riportato uno snippet di CsvDataSourceServlet. La funzione generateDataTable espone i dati alla libreria. Questa funzione crea una descrizione della tabella di dati, definisce le colonne della tabella di dati e compila la tabella con i dati ottenuti da un file CSV. Il file CSV viene letto da un URL specificato nella query di una visualizzazione che richiede. La libreria gestisce tutte le altre azioni necessarie per restituire la tabella di dati alla visualizzazione con query.

/**
 * A demo servlet for serving a simple, constant data table.
 * This servlet extends DataSourceServlet, but does not override the default
 * empty implementation of method getCapabilities(). This servlet therefore ignores the
 * user query (as passed in the 'tq' url parameter), leaving the
 * query engine to apply it to the data table created here.
 *
 * @author Nimrod T.
 */
public class CsvDataSourceServlet extends DataSourceServlet {

  /**
   * Log.
   */
  private static final Log log = LogFactory.getLog(CsvDataSourceServlet.class.getName());

  /**
   * The name of the parameter that contains the url of the CSV to load.
   */
  private static final String URL_PARAM_NAME = "url";

  /**
   * Generates the data table.
   * This servlet assumes a special parameter that contains the CSV URL from which to load
   * the data.
   */
  @Override
  public DataTable generateDataTable(Query query, HttpServletRequest request)
      throws DataSourceException {
    String url = request.getParameter(URL_PARAM_NAME);
    if (StringUtils.isEmpty(url)) {
      log.error("url parameter not provided.");
      throw new DataSourceException(ReasonType.INVALID_REQUEST, "url parameter not provided");
    }

    Reader reader;
    try {
      reader = new BufferedReader(new InputStreamReader(new URL(url).openStream()));
    } catch (MalformedURLException e) {
      log.error("url is malformed: " + url);
      throw new DataSourceException(ReasonType.INVALID_REQUEST, "url is malformed: " + url);
    } catch (IOException e) {
      log.error("Couldn't read from url: " + url, e);
      throw new DataSourceException(ReasonType.INVALID_REQUEST, "Couldn't read from url: " + url);
    }
    DataTable dataTable = null;
    ULocale requestLocale = DataSourceHelper.getLocaleFromRequest(request);
    try {
      // Note: We assume that all the columns in the CSV file are text columns. In cases where the
      // column types are known in advance, this behavior can be overridden by passing a list of
      // ColumnDescription objects specifying the column types. See CsvDataSourceHelper.read() for
      // more details.
      dataTable = CsvDataSourceHelper.read(reader, null, true, requestLocale);
    } catch (IOException e) {
      log.error("Couldn't read from url: " + url, e);
      throw new DataSourceException(ReasonType.INVALID_REQUEST, "Couldn't read from url: " + url);
    }
    return dataTable;
  }
}

Esecuzione e test CsvDataSourceServlet

Questa sezione fornisce istruzioni su come eseguire e testare CsvDataSourceServlet.

Per eseguire e testare CsvDataSourceServlet, crea un file CSV, aggiorna l'applicazione web e imposta una visualizzazione che esegua una query sull'origine dati, come descritto nelle seguenti sezioni:

Creare un file CSV

Il file csv_example.csv è fornito nella directory <data_source_library_install>/examples/src/html. Contiene i seguenti valori:

Employee,Manager
Roger,John
Robert,John
Jane,Roger
Jack,Jane
Bob,Jane

Copia questo file nella directory <tomcat_home>/webapps/myWebApp che hai creato nella sezione Per iniziare.

Aggiornare l'applicazione web su Apache Tomcat

Segui o adatta le istruzioni riportate di seguito per aggiornare la tua applicazione web su Apache Tomcat. Queste istruzioni sono specifiche per Apache Tomcat su un sistema Windows:

  1. Il file web.xml che hai copiato in precedenza nella directory WEB-INF contiene già la definizione e la mappatura necessarie per questo esempio. Le righe che definiscono questo aspetto sono:
    <servlet>
      <servlet-name>CSV Example</servlet-name>
      <description>
      CsvDataSourceServlet
      </description>
      <servlet-class>CsvDataSourceServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
      <servlet-name>CSV Example</servlet-name>
      <url-pattern>/csv</url-pattern>
    </servlet-mapping>
    
  2. Avvia Tomcat o riavvia Tomcat se è già in esecuzione.
     
  3. Fai clic sul seguente link: http://localhost:8080/myWebApp/csv?url=http://localhost:8080/myWebApp/csv_example.csv

    Sullo schermo vengono visualizzate 6-7 righe di testo, a seconda della larghezza dello schermo.
    Il testo inizia con google.visualization.Query.setResponse
    e termina con {c:[{v:'Bob'},{v:'Jane'}]}]}});

    Questa è la risposta che l'origine dati CSV di esempio invia a una visualizzazione.

Utilizzare una visualizzazione per visualizzare i dati

Puoi utilizzare il file all_examples.html nella directory <data_source_library_install>/examples/src/html per visualizzare una visualizzazione dei dati.

Se visualizzi l'origine del file all_examples.html, vedrai tre visualizzazioni incluse. I seguenti snippet riproducono la specifica di queste visualizzazioni.

  • La seguente riga specifica l'esempio csv di cui si parla in questa sezione:
    query = new google.visualization.Query('csv?url=http://localhost:8080/myWebApp/csv_example.csv');
    La seguente riga specifica una visualizzazione dell'organigramma:
    var chart = new google.visualization.OrgChart(document.getElementById('csv_div'));
  • La seguente riga specifica il simpleexample trattato nella sezione Per iniziare:
    var query = new google.visualization.Query('simpleexample?tq=select name,population');
    La seguente riga specifica una visualizzazione di grafico a torta:
    var chart = new google.visualization.PieChart(document.getElementById('simple_div'));
  • La riga seguente specifica l'esempio advanced trattato nella sezione Definizione delle funzionalità e flusso di eventi:
    query = new google.visualization.Query('advanced?tableId=planets&tq=select planet,mass');
    La seguente riga specifica una visualizzazione di grafico a barre:
    var chart = new google.visualization.BarChart(document.getElementById('advanced_div'));

Per ulteriori informazioni su come specificare un grafico e utilizzare il linguaggio di query, consulta Introduzione all'utilizzo degli strumenti dei grafici e Riferimento per il linguaggio di query.

Segui o adatta le istruzioni riportate di seguito per vedere una visualizzazione dei dati forniti da CsvDataSourceServlet:

  1. Copia il file all_examples.html dalla directory <data_source_library_install>/examples/src/html alla directory <tomcat_home>/webapps/myWebApp/.
  2. Fai clic sul link http://localhost:8080/myWebApp/all_examples.html, dovresti vedere la seguente visualizzazione.


L'esempio dell'origine dati avanzata viene discusso in Definizione delle funzionalità e del flusso di eventi.

Passaggi successivi

Il prossimo esempio è descritto nella sezione Definizione delle funzionalità e flusso di eventi . In alternativa, esplora i seguenti link: