Current File : /home/jvzmxxx/wiki1/extensions/Wikibase/view/resources/wikibase/store/store.ApiEntityStore.js
/**
 * @license GPL-2.0+
 * @author Adrian Heine <adrian.heine@wikimedia.de>
 */
( function( wb, $ ) {
	'use strict';

	var MODULE = wb.store;

	/**
	 * Entity store fetching entities from API.
	 * @constructor
	 * @extends wikibase.store.EntityStore
	 * @since 0.5
	 *
	 * @param {wikibase.api.RepoApi} repoApi
	 * @param {wikibase.serialization.EntityDeserializer} entityDeserializer;
	 * @param {string[]} languages
	 */
	MODULE.ApiEntityStore = util.inherit(
		'WbApiEntityStore',
		MODULE.EntityStore,
		function( repoApi, entityDeserializer, languages ) {
			this._entityDeserializer = entityDeserializer;
			this._languages = languages;
			this._repoApi = repoApi;
		},
	{

		/**
		 * @type {wikibase.serialization.EntityDeserializer}
		 */
		_entityDeserializer: null,

		/**
		 * @type {string[]}
		 */
		_languages: null,

		/**
		 * @type {wikibase.api.RepoApi}
		 */
		_repoApi: null,

		/**
		 * @see wikibase.store.EntityStore.get
		 */
		get: function( entityId ) {
			var deferred = $.Deferred(),
				self = this;

			this._repoApi.getEntities( [ entityId ], null, this._languages )
			.done( function( result ) {
				var entityData = result.entities[ entityId ];
				var entity = null;

				if ( entityData.missing !== '' ) {
					entity = self._entityDeserializer.deserialize( entityData );
				}

				deferred.resolve( entity );
			} )
			// FIXME: Evaluate failing promise
			.fail( function() {
				deferred.reject();
			} );

			return deferred.promise();
		}
	} );
}( wikibase, jQuery ) );