text: var cdb = require('cartodb.js-v3');
  var ImportsCollection = require('../common/background_polling/models/imports_collection');
  var GeocodingsCollection = require('../common/background_polling/models/geocodings_collection');
  var BackgroundPollingModel = require('../common/background_polling/background_polling_model');
  
  
  /**
   *  Background importer model for the editor context.
   *
   */
  
  module.exports = BackgroundPollingModel.extend({
  
    addImportItem: function(mdl) {
      if (!mdl) {
        return false;
      }
  
      if (!this.user.canAddLayerTo(this.vis.map)) {
        mdl.setError({
          error_code: 8005,
          get_error_text: {
            title: "Max layers per map reached",
            what_about: "You can't add more layers to your map. Please upgrade your account."
          }
        });
      }
  
      this.importsCollection.add(mdl);
    },
  
    _onImportsStateChange: function(importsModel) {
      if (importsModel.hasCompleted()) {
        this.trigger('importCompleted', importsModel, this);
        var self = this;
        this.vis.map.addCartodbLayerFromTable(importsModel.imp.get('table_name'), this.user.get('username'), {
          vis: this.vis,
          success: function() {
            // layers need to be saved because the order may changed
            self.vis.map.layers.saveLayers();
            // Don't remove import item if it is Twitter type
            var serviceName = importsModel.get('upload').service_name;
            var twitterImport = serviceName && serviceName === "twitter_search";
            if (!twitterImport) {
              self.importsCollection.remove(importsModel);
            }
          },
          error: function() {
            self.trigger('importLayerFail', 'Failed to add the connected dataset as a layer to this map');
            self.importsCollection.remove(importsModel);
          }
        });
      }
    },
  
    _onGeocodingsStateChange: function(geocodingModel) {
      if (geocodingModel.hasCompleted()) {
        this.trigger('geocodingCompleted', geocodingModel, this);
      }
      if (geocodingModel.hasFailed()) {
        this.trigger('geocodingFailed', geocodingModel, this);
      }
    },
  
    _onAnalysisStateChange: function(mdl, collection) {}
  
  });
  