Utilizzo di un datastore esterno

Questa sezione presenta CsvDataSourceServlet. CsvDataSourceServlet è un'implementazione di esempio che utilizza un file CSV come un datastore esterno. In questa sezione vengono fornite anche istruzioni dettagliate su come eseguire e testare CsvDataSourceServlet.

Nota: devi completare la sezione Guida introduttiva alle origini dati prima di iniziare questa sezione.

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 dati, definisce le colonne della tabella dati e completa la tabella dati con i dati ottenuti da un file CSV. Il file CSV viene letto da un URL specificato in una query di visualizzazione richiesta. La libreria gestisce tutte le altre azioni richieste per restituire la tabella dati alla visualizzazione di 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 di CsvDataSourceServlet

Questa sezione fornisce istruzioni su come eseguire e testare CsvDataSourceServlet.

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

Creare un file CSV

Il file csv_example.csv è disponibile 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.

Aggiornamento dell'applicazione web su Apache Tomcat

Segui o segui le istruzioni riportate di seguito per aggiornare l'applicazione web su Apache Tomcat. Queste istruzioni sono specifiche per Apache Tomcat su un sistema Windows:

  1. Il file web.xml che hai precedentemente copiato nella directory WEB-INF contiene già la definizione e la mappatura richieste per questo esempio. Le righe che lo definiscono 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

    Lo schermo mostra 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

Il file all_examples.html nella directory <data_source_library_install>/examples/src/html può essere utilizzato per visualizzare una visualizzazione dei dati.

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

  • La riga seguente specifica l'esempio csv trattato in questa sezione:
    query = new google.visualization.Query('csv?url=http://localhost:8080/myWebApp/csv_example.csv');
    La seguente riga specifica la visualizzazione di un grafico dell'organizzazione:
    var chart = new google.visualization.OrgChart(document.getElementById('csv_div'));
  • La riga seguente specifica il campo simpleexample interessato nella sezione Per iniziare:
    var query = new google.visualization.Query('simpleexample?tq=select name,population');
    La seguente riga specifica una visualizzazione 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 nel flusso di eventi:
    query = new google.visualization.Query('advanced?tableId=planets&tq=select planet,mass');
    La riga seguente specifica la visualizzazione di un 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'uso degli strumenti del grafico e la documentazione sul linguaggio di query.

Segui o segui le istruzioni riportate di seguito per visualizzare una visualizzazione dei dati pubblicati da CsvDataSourceServlet:

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


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

Passaggi successivi

L'esempio successivo è descritto nella sezione Definire le funzionalità e il flusso degli eventi. In alternativa, esamina i seguenti link: