text: // Copyright 2014 The ChromeOS IME Authors. All Rights Reserved.
  // limitations under the License.
  // See the License for the specific language governing permissions and
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // distributed under the License is distributed on an "AS-IS" BASIS,
  // Unless required by applicable law or agreed to in writing, software
  //
  //      http://www.apache.org/licenses/LICENSE-2.0
  //
  // You may obtain a copy of the License at
  // you may not use this file except in compliance with the License.
  // Licensed under the Apache License, Version 2.0 (the "License");
  //
  goog.provide('i18n.input.chrome.DataSource');
  
  goog.require('goog.events');
  goog.require('goog.events.Event');
  goog.require('goog.events.EventTarget');
  goog.require('goog.functions');
  
  
  /**
   * The data source.
   *
   * @param {number} numOfCanddiate The number of canddiate to fetch.
   * @param {function(string, !Array.<!Object>)} callback .
   * @constructor
   * @extends {goog.events.EventTarget}
   */
  i18n.input.chrome.DataSource = function(numOfCanddiate, callback) {
    goog.base(this);
  
    /**
     * The number of candidates to fetch.
     *
     * @type {number}
     */
    this.numOfCandidate = numOfCanddiate;
  
    /** @protected {function(string, !Array.<!Object>)} */
    this.callback = callback;
  };
  goog.inherits(i18n.input.chrome.DataSource, goog.events.EventTarget);
  
  
  /** @type {boolean} */
  i18n.input.chrome.DataSource.prototype.ready = false;
  
  
  /**
   * The correction level.
   *
   * @protected {number}
   */
  i18n.input.chrome.DataSource.prototype.correctionLevel = 0;
  
  
  /**
   * The language code.
   *
   * @type {string}
   * @protected
   */
  i18n.input.chrome.DataSource.prototype.language;
  
  
  /**
   * Sets the langauge code.
   *
   * @param {string} language The language code.
   */
  i18n.input.chrome.DataSource.prototype.setLanguage = function(
      language) {
    this.language = language;
  };
  
  
  /**
   * True if the datasource is ready.
   *
   * @return {boolean} .
   */
  i18n.input.chrome.DataSource.prototype.isReady = function() {
    return this.ready;
  };
  
  
  /**
   * Creates the common payload for completion or prediction request.
   *
   * @return {!Object} The payload.
   * @protected
   */
  i18n.input.chrome.DataSource.prototype.createCommonPayload =
      function() {
    return {
      'itc': this.getInputToolCode(),
      'num': this.numOfCandidate
    };
  };
  
  
  /**
   * Gets the input tool code.
   *
   * @return {string} .
   */
  i18n.input.chrome.DataSource.prototype.getInputToolCode = function() {
    return this.language + '-t-i0-und';
  };
  
  
  /**
   * Sends completion request.
   *
   * @param {string} query The query .
   * @param {string} context The context .
   * @param {!Object=} opt_spatialData .
   */
  i18n.input.chrome.DataSource.prototype.sendCompletionRequest =
      goog.functions.NULL;
  
  
  /**
   * Sends prediciton request.
   *
   * @param {string} context The context.
   */
  i18n.input.chrome.DataSource.prototype.sendPredictionRequest =
      goog.functions.NULL;
  
  
  /**
   * Sets the correction level.
   *
   * @param {number} level .
   */
  i18n.input.chrome.DataSource.prototype.setCorrectionLevel = function(level) {
    this.correctionLevel = level;
  };
  
  
  /**
   * Clears the data source.
   */
  i18n.input.chrome.DataSource.prototype.clear = goog.functions.NULL;
  
  
  /**
   * The event type.
   *
   * @enum {string}
   */
  i18n.input.chrome.DataSource.EventType = {
    CANDIDATES_BACK: goog.events.getUniqueId('cb'),
    READY: goog.events.getUniqueId('r')
  };
  
  
  
  /**
   * The candidates is fetched back.
   *
   * @param {string} source The source.
   * @param {!Array.<!Object>} candidates The candidates.
   * @constructor
   * @extends {goog.events.Event}
   */
  i18n.input.chrome.DataSource.CandidatesBackEvent =
      function(source, candidates) {
    goog.base(this, i18n.input.chrome.DataSource.EventType.CANDIDATES_BACK);
  
    /**
     * The source.
     *
     * @type {string}
     */
    this.source = source;
  
    /**
     * The candidate list.
     *
     * @type {!Array.<!Object>}
     */
    this.candidates = candidates;
  };
  goog.inherits(i18n.input.chrome.DataSource.CandidatesBackEvent,
      goog.events.Event);
  
  