Refactor/fix potential problems
This commit is contained in:
@@ -155,12 +155,18 @@ MapController.prototype.create = function(req, res, prepareConfigFn) {
|
||||
function addOverviewsInformation(err, requestMapConfig, datasource) {
|
||||
assert.ifError(err);
|
||||
var next = this;
|
||||
self.overviewsAdapter.getMapConfig(req.context.user, requestMapConfig, function(err, mapconfig) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
return next(null, mapconfig, datasource);
|
||||
});
|
||||
self.overviewsAdapter.getLayers(req.context.user, requestMapConfig.layers,
|
||||
function(err, layers) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
|
||||
if (layers) {
|
||||
requestMapConfig.layers = layers;
|
||||
}
|
||||
return next(null, requestMapConfig, datasource);
|
||||
}
|
||||
);
|
||||
},
|
||||
function createLayergroup(err, requestMapConfig, datasource) {
|
||||
assert.ifError(err);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
var queue = require('queue-async');
|
||||
var _ = require('underscore');
|
||||
|
||||
function MapConfigNamedLayersAdapter(overviewsApi) {
|
||||
this.overviewsApi = overviewsApi;
|
||||
@@ -6,32 +7,40 @@ function MapConfigNamedLayersAdapter(overviewsApi) {
|
||||
|
||||
module.exports = MapConfigNamedLayersAdapter;
|
||||
|
||||
MapConfigNamedLayersAdapter.prototype.getMapConfig = function(username, mapconfig, callback) {
|
||||
MapConfigNamedLayersAdapter.prototype.getLayers = function(username, layers, callback) {
|
||||
|
||||
// TODO: we're modifying mapconfig in place and then returning it... not very nice
|
||||
if (!layers) {
|
||||
return callback(null);
|
||||
}
|
||||
|
||||
var layers = mapconfig.getlayers();
|
||||
var augmentLayersQueue = queue(layers.length);
|
||||
|
||||
var parallelism = 2;
|
||||
var q = queue(parallelism);
|
||||
function augmentLayer(layer, done) {
|
||||
this.overviewsApi.getOverviewsMetadata(username, layer.options.sql, function(err, metadata){
|
||||
if ( !_.isEmpty(metadata) ) {
|
||||
layer = _.extend({}, layer, { overviews: metadata });
|
||||
}
|
||||
done(null, layer);
|
||||
});
|
||||
}
|
||||
|
||||
for ( var i=0; i < layers.length; ++i ) {
|
||||
q.defer(function(layer, done){
|
||||
this.overviewsApi.getOverviewsMetadata(username, layer.options.sql, function(err, metadata){
|
||||
// TODO: is it legit to modify layer like this?
|
||||
layer.options.overviews = metadata;
|
||||
done(null);
|
||||
});
|
||||
}, layers[i]);
|
||||
function layersAugmentQueueFinish(err, layers) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
q.awaitAll(function(err){
|
||||
if (err) {
|
||||
return callback(err);
|
||||
} else {
|
||||
return callback(null, mapconfig);
|
||||
}
|
||||
});
|
||||
if (!layers || layers.length === 0) {
|
||||
return callback(new Error('Missing layers array from layergroup config'));
|
||||
}
|
||||
|
||||
return callback(null, layers);
|
||||
}
|
||||
|
||||
layers.forEach(function(layer) {
|
||||
augmentLayersQueue.defer(augmentLayer, layer);
|
||||
});
|
||||
augmentLayersQueue.awaitAll(layersAugmentQueueFinish);
|
||||
|
||||
};
|
||||
|
||||
// TODO: document in https://github.com/CartoDB/Windshaft/blob/master/doc/MapConfig-1.5.0.md
|
||||
|
||||
Reference in New Issue
Block a user