Como usar um armazenamento de dados externo

Esta seção apresenta CsvDataSourceServlet. CsvDataSourceServlet é um exemplo de implementação que usa um arquivo CSV como um armazenamento de dados externo. Nesta seção, também fornecemos instruções detalhadas sobre como executar e testar CsvDataSourceServlet.

Observação: conclua a seção Primeiros passos com as fontes de dados antes de iniciar esta seção.

Apresentação do CsvDataSourceServlet

A classe CsvDataSourceServlet está localizada no pacote examples. Essa classe apresenta um exemplo de implementação que usa um arquivo CSV como um armazenamento de dados externo. CsvDataSourceServlet herda de DataSourceServlet, implementa generateDataTable() e precisa ser executado em um contêiner de servlet.

Veja abaixo um snippet de CsvDataSourceServlet. A função generateDataTable expõe dados à biblioteca. Essa função cria uma descrição da tabela de dados, define as colunas da tabela de dados e preenche a tabela com dados obtidos de um arquivo CSV. O arquivo CSV é lido de um URL especificado em uma consulta de visualização solicitante. A biblioteca processa todas as outras ações necessárias para retornar a tabela de dados para a visualização de consulta.

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

Como executar e testar CsvDataSourceServlet

Esta seção fornece instruções sobre como executar e testar o CsvDataSourceServlet.

Para executar e testar CsvDataSourceServlet, crie um arquivo CSV, atualize seu aplicativo da Web e configure uma visualização que consulte a fonte de dados, conforme descrito nas seções a seguir:

Como criar um arquivo CSV

O arquivo csv_example.csv é fornecido no diretório <data_source_library_install>/examples/src/html. Ela contém os seguintes valores:

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

Copie esse arquivo para o diretório <tomcat_home>/webapps/myWebApp criado na seção Primeiros passos.

Como atualizar seu aplicativo da Web no Apache Tomcat

Siga ou adapte as instruções abaixo para atualizar seu aplicativo da Web no Apache Tomcat. Estas instruções são específicas para o Apache Tomcat em um sistema Windows:

  1. O arquivo web.xml que você copiou anteriormente para o diretório WEB-INF já contém a definição e o mapeamento necessários para este exemplo. As linhas que definem isso são:
    <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. Inicie o Tomcat ou reinicie o Tomcat se ele já estiver em execução.
     
  3. Clique no link a seguir: http://localhost:8080/myWebApp/csv?url=http://localhost:8080/myWebApp/csv_example.csv

    A tela mostra de 6 a 7 linhas de texto, dependendo da largura da tela.
    O texto começa com google.visualization.Query.setResponse
    e termina com {c:[{v:'Bob'},{v:'Jane'}]}]}});

    Esta é a resposta que a fonte de dados CSV de exemplo envia para uma visualização.

Como usar uma visualização para visualizar os dados

O arquivo all_examples.html no diretório <data_source_library_install>/examples/src/html pode ser usado para visualizar os dados.

Ao visualizar a origem do arquivo all_examples.html, você verá três visualizações incluídas no arquivo. Os snippets a seguir reproduzem a especificação dessas visualizações.

  • A linha a seguir especifica o exemplo de csv abordado nesta seção:
    query = new google.visualization.Query('csv?url=http://localhost:8080/myWebApp/csv_example.csv');
    A linha a seguir especifica uma visualização do gráfico da organização:
    var chart = new google.visualization.OrgChart(document.getElementById('csv_div'));
  • A linha a seguir especifica o simpleexample coberto na seção Vamos começar:
    var query = new google.visualization.Query('simpleexample?tq=select name,population');
    A linha a seguir especifica uma visualização do gráfico de pizza:
    var chart = new google.visualization.PieChart(document.getElementById('simple_div'));
  • A linha a seguir especifica o exemplo de advanced abordado na seção Como definir recursos e o fluxo de eventos:
    query = new google.visualization.Query('advanced?tableId=planets&tq=select planet,mass');
    A linha a seguir especifica uma visualização do gráfico de barras:
    var chart = new google.visualization.BarChart(document.getElementById('advanced_div'));

Para mais informações sobre como especificar um gráfico e usar a linguagem de consulta, consulte Introdução ao uso de ferramentas de gráfico e a Referência da linguagem de consulta.

Siga ou adapte as instruções abaixo para visualizar os dados exibidos por CsvDataSourceServlet:

  1. Copie o arquivo all_examples.html do diretório <data_source_library_install>/examples/src/html para o diretório <tomcat_home>/webapps/myWebApp/.
  2. Clique no seguinte link: http://localhost:8080/myWebApp/all_examples.html, você verá a visualização a seguir.


O exemplo da fonte de dados avançada é discutido em Como definir recursos e o fluxo de eventos.

Próximas etapas

O próximo exemplo é descrito na seção Como definir recursos e o fluxo de eventos. Você também pode acessar os seguintes links: