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
- Mettre à jour votre application Web sur Apache Tomcat
- Utiliser une visualisation pour consulter les données
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:
- Le fichier
web.xml
que vous avez précédemment copié dans le répertoireWEB-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>
- Lancez Tomcat, ou redémarrez-le s'il est déjà en cours d'exécution.
- 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 pargoogle.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
:
- Copiez le fichier
all_examples.html
du répertoire<data_source_library_install>/examples/src/html
dans le répertoire<tomcat_home>/webapps/myWebApp/
. - 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:
- Pour une présentation des classes les plus couramment utilisées de la bibliothèque, consultez la page Classes clés.
- Au lieu que la source de données hérite de
DataSourceServlet
, vous pouvez la faire hériter d'une autre classe. Pour en savoir plus, consultez la page Utiliser votre propre jeton. - Pour savoir comment transmettre des paramètres d'une application à une source de données, consultez la section Transmettre des paramètres à
DataTableGenerator.generateDataTable
.