استخدام مخزن بيانات خارجي

يقدّم هذا القسم CsvDataSourceServlet. CsvDataSourceServlet هو مثال على التنفيذ الذي يستخدم ملف CSV كمتجر بيانات خارجي. يقدّم هذا القسم أيضًا تعليمات مفصّلة عن كيفية تشغيل CsvDataSourceServlet واختباره.

ملاحظة: عليك إكمال قسم البدء في استخدام مصادر البيانات قبل البدء في هذا القسم.

نقدّم لك CsvDataSourceServlet

توجد الفئة CsvDataSourceServlet في الحزمة examples. تقدّم هذه الفئة مثالاً على التنفيذ يستخدم ملف CSV كمساحة تخزين خارجية للبيانات. CsvDataSourceServlet يكتسَب من DataSourceServlet، وينفّذ generateDataTable()، ويجب أن يتم تشغيله داخل حاوية خادم.

وفي ما يلي مقتطف عن CsvDataSourceServlet. تعرض الدالة generateDataTable البيانات في المكتبة. تنشئ هذه الدالة وصفًا لجدول البيانات، وتحدّد أعمدة جدول البيانات، وتملأ جدول البيانات بالبيانات التي يتم الحصول عليها من ملف CSV. تتم قراءة ملف CSV من عنوان URL محدد في طلب تمثيل بصري' لطلب. وتتعامل المكتبة مع جميع الإجراءات الأخرى المطلوبة لعرض جدول البيانات إلى تمثيل بصري لطلب البحث.

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

قيد التشغيل والاختبار CsvDataSourceServlet

يقدّم هذا القسم تعليمات حول كيفية تشغيل واختبار CsvDataSourceServlet.

لتشغيل CsvDataSourceServlet واختباره، يمكنك إنشاء ملف CSV وتعديل تطبيق الويب وإعداد التمثيل البصري الذي يفحص مصدر البيانات، كما هو موضّح في الأقسام التالية:

إنشاء ملف CSV

يتوفّر الملف csv_example.csv في الدليل <data_source_library_install>/examples/src/html. ويحتوي هذا الدليل على القيم التالية:

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

انسخ هذا الملف إلى دليل <tomcat_home>/webapps/myWebApp الذي أنشأته في قسم البدء.

تحديث تطبيق الويب على Apache Tomcat

اتّبِع التعليمات التالية أو عدِّلها لتحديث تطبيق الويب على Apache Catcat. هذه التعليمات مخصّصة لنظام Apache Tomcat على نظام التشغيل Windows:

  1. ملف web.xml الذي نسخته سابقًا إلى الدليل WEB-INF يحتوي حاليًا على التعريف والربط المطلوبين لهذا المثال. الأسطر التي تحدِّد ما يلي:
    <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. افتح Tomcat، أو أعِد تشغيل Tomcat إذا كان قيد التشغيل.
     
  3. انقر على الرابط التالي: http://localhost:8080/myWebApp/csv?url=http://localhost:8080/myWebApp/csv_example.csv

    تعرض الشاشة من 6 إلى 7 أسطر من النص، وذلك حسب عرض الشاشة.
    يبدأ النص بـ google.visualization.Query.setResponse
    وينتهي بـ {c:[{v:'Bob'},{v:'Jane'}]}]}});

    هذا هو الرد الذي يرسله مثال على مصدر بيانات ملف CSV إلى التمثيل البصري.

استخدام التمثيل البصري لعرض البيانات

يمكن استخدام الملف all_examples.html في الدليل <data_source_library_install>/examples/src/html لعرض تمثيل مرئي للبيانات.

إذا عرضت مصدر الملف all_examples.html، ستلاحظ أنّ هناك ثلاثة تمثيلات بصرية مضمّنة في الملف. تعيد المقتطفات التالية إنتاج مواصفات التمثيل البصري هذه.

  • يحدّد السطر التالي مثال csv الوارد في هذا القسم:
    query = new google.visualization.Query('csv?url=http://localhost:8080/myWebApp/csv_example.csv');
    يحدّد السطر التالي تمثيلاً بصريًا للرسم البياني التنظيمي:
    var chart = new google.visualization.OrgChart(document.getElementById('csv_div'));
  • يحدّد السطر التالي simpleexample الوارد في قسم البدء:
    var query = new google.visualization.Query('simpleexample?tq=select name,population');
    يحدّد السطر التالي تمثيلاً بيانيًا دائريًا:
    var chart = new google.visualization.PieChart(document.getElementById('simple_div'));
  • يحدّد السطر التالي المثال advanced الوارد في قسم تعريف الإمكانيات وتدفق الأحداث:
    query = new google.visualization.Query('advanced?tableId=planets&tq=select planet,mass');
    يحدّد السطر التالي تمثيلاً بصريًا للرسم البياني الشريطي:
    var chart = new google.visualization.BarChart(document.getElementById('advanced_div'));

لمزيد من المعلومات حول كيفية تحديد رسم بياني واستخدام لغة طلب البحث، راجِع مقدمة حول استخدام أدوات الرسم البياني ومرجع لغة طلب البحث.

يمكنك اتّباع التعليمات الواردة أدناه أو تعديلها لعرض تمثيل مرئي للبيانات التي يعرضها CsvDataSourceServlet:

  1. انسخ ملف all_examples.html من الدليل <data_source_library_install>/examples/src/html إلى الدليل <tomcat_home>/webapps/myWebApp/.
  2. انقر على الرابط التالي: http://localhost:8080/myWebApp/all_examples.html، وسيظهر لك التمثيل البصري التالي.


تتم مناقشة مثال مصدر البيانات المتقدم في تحديد الإمكانيات وتدفق الأحداث.

الخطوات التالية

يوضّح المثال التالي في قسم تحديد الإمكانيات وتدفق الأحداث. يمكنك بدلاً من ذلك استكشاف الروابط التالية: