Utiliser un datastore externe

Cette section présente CsvDataSourceServlet. CsvDataSourceServlet est un exemple d'implémentation qui utilise un fichier CSV comme datastore externe. Cette section fournit également des instructions détaillées sur l'exécution et le test de CsvDataSourceServlet.

Remarque: Vous devez terminer la section Premiers pas avec les sources de données avant de commencer.

Découvrez CsvDataSourceServlet

La classe CsvDataSourceServlet se trouve dans le package examples. Cette classe fournit un exemple d'implémentation qui utilise un fichier CSV en tant que datastore externe. CsvDataSourceServlet hérite de DataSourceServlet, implémente generateDataTable() et doit être exécuté dans un conteneur de webhook.

Un extrait de CsvDataSourceServlet est fourni ci-dessous. La fonction generateDataTable expose les données à la bibliothèque. Cette fonction crée une description de la table de données, définit les colonnes de la table de données et renseigne la table avec les données obtenues à partir d'un fichier CSV. Le fichier CSV est lu à partir d'une URL spécifiée dans une requête de visualisation. La bibliothèque gère toutes les autres actions requises pour renvoyer la table de données dans la visualisation des requêtes.

/**
 * 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;
  }
}

Exécuter et tester CsvDataSourceServlet

Cette section explique comment exécuter et tester CsvDataSourceServlet.

Pour exécuter et tester CsvDataSourceServlet, créez un fichier CSV, mettez à jour votre application Web et configurez une visualisation qui interroge la source de données, comme décrit dans les sections suivantes:

Créer un fichier CSV

Le fichier csv_example.csv est fourni dans le répertoire <data_source_library_install>/examples/src/html. Il contient les valeurs suivantes:

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

Copiez ce fichier dans le répertoire <tomcat_home>/webapps/myWebApp que vous avez créé dans la section Premiers pas.

Mettre à jour votre application Web sur Apache Tomcat

Suivez ou adaptez les instructions ci-dessous pour mettre à jour votre application Web sur Apache Tomcat. Ces instructions sont spécifiques à Apache Tomcat sur un système Windows:

  1. Le fichier web.xml que vous avez précédemment copié dans le répertoire WEB-INF contient déjà la définition et le mappage requis pour cet exemple. Les lignes suivantes définissent ce paramètre :
    <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. Lancez Tomcat, ou redémarrez-le s'il est déjà en cours d'exécution.
     
  3. Cliquez sur le lien suivant : http://localhost:8080/myWebApp/csv?url=http://localhost:8080/myWebApp/csv_example.csv

    L'écran affiche entre 6 et 7 lignes de texte, en fonction de la largeur de l'écran.
    Le texte commence par google.visualization.Query.setResponse
    et se termine par {c:[{v:'Bob'},{v:'Jane'}]}]}});

    Il s'agit de la réponse que l'exemple de source de données CSV envoie à une visualisation.

Utiliser une visualisation pour consulter les données

Le fichier all_examples.html du répertoire <data_source_library_install>/examples/src/html permet d'afficher une visualisation des données.

Si vous affichez la source du fichier all_examples.html, trois visualisations sont incluses dans le fichier. Les extraits de code suivants reproduisent la spécification de ces visualisations.

  • La ligne suivante spécifie l'exemple csv traité dans cette section :
    query = new google.visualization.Query('csv?url=http://localhost:8080/myWebApp/csv_example.csv');
    La ligne suivante spécifie une visualisation de graphique d'organisation :
    var chart = new google.visualization.OrgChart(document.getElementById('csv_div'));
  • La ligne suivante spécifie le simpleexample abordé dans la section Premiers pas :
    var query = new google.visualization.Query('simpleexample?tq=select name,population');
    La ligne suivante spécifie une visualisation sous forme de graphique à secteurs :
    var chart = new google.visualization.PieChart(document.getElementById('simple_div'));
  • La ligne suivante spécifie l'exemple advanced abordé dans la section Définir les fonctionnalités et le flux d'événements :
    query = new google.visualization.Query('advanced?tableId=planets&tq=select planet,mass');
    La ligne suivante spécifie une visualisation sous forme de graphique à barres :
    var chart = new google.visualization.BarChart(document.getElementById('advanced_div'));

Pour savoir comment spécifier un graphique et utiliser le langage de requête, consultez les pages Présentation de l'utilisation des outils de graphique et Documentation de référence sur le langage de requête.

Suivez ou adaptez les instructions ci-dessous pour afficher une visualisation des données diffusées par CsvDataSourceServlet :

  1. Copiez le fichier all_examples.html du répertoire <data_source_library_install>/examples/src/html dans le répertoire <tomcat_home>/webapps/myWebApp/.
  2. Cliquez sur le lien suivant: http://localhost:8080/myWebApp/all_examples.html. La visualisation suivante doit s'afficher.


L'exemple de source de données avancée est abordé dans la section Définir les capacités et le flux d'événements.

Next Steps

L'exemple suivant est décrit dans la section Définir les capacités et le flux d'événements. Vous pouvez également consulter les liens suivants: