=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/mapping/MappingService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/mapping/MappingService.java 2010-11-30 13:04:58 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/mapping/MappingService.java 2010-12-09 15:11:24 +0000 @@ -60,6 +60,10 @@ final String ORGANISATION_UNIT_SELECTION_TYPE_PARENT = "parent"; final String ORGANISATION_UNIT_SELECTION_TYPE_LEVEL = "level"; + + final String MAP_LAYER_TYPE_BASELAYER = "baselayer"; + + final String MAP_LAYER_TYPE_OVERLAY = "overlay"; // ------------------------------------------------------------------------- // IndicatorMapValue === modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/InitializeAction.java' --- dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/InitializeAction.java 2010-11-26 17:56:40 +0000 +++ dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/InitializeAction.java 2010-12-09 15:11:24 +0000 @@ -30,10 +30,16 @@ import static org.hisp.dhis.mapping.MappingService.KEY_MAP_DATE_TYPE; import static org.hisp.dhis.mapping.MappingService.MAP_DATE_TYPE_FIXED; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.hisp.dhis.mapping.MapLayer; import org.hisp.dhis.mapping.MapView; import org.hisp.dhis.mapping.MappingService; +import org.hisp.dhis.mapping.comparator.MapLayerNameComparator; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitLevel; import org.hisp.dhis.organisationunit.OrganisationUnitService; @@ -95,6 +101,20 @@ return mapDateType; } + private List baseLayers; + + public List getBaseLayers() + { + return baseLayers; + } + + private List overlays; + + public List getOverlays() + { + return overlays; + } + // ------------------------------------------------------------------------- // Action implementation // ------------------------------------------------------------------------- @@ -113,6 +133,14 @@ mapDateType = mapView.getMapDateType(); } + + baseLayers = new ArrayList( mappingService.getMapLayersByType( MappingService.MAP_LAYER_TYPE_BASELAYER ) ); + + Collections.sort( baseLayers, new MapLayerNameComparator() ); + + overlays = new ArrayList( mappingService.getMapLayersByType( MappingService.MAP_LAYER_TYPE_OVERLAY ) ); + + Collections.sort( overlays, new MapLayerNameComparator() ); return SUCCESS; } === modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/jsonInitialize.vm' --- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/jsonInitialize.vm 2010-11-30 13:04:58 +0000 +++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/jsonInitialize.vm 2010-12-09 15:11:24 +0000 @@ -1,3 +1,5 @@ +#set( $baseLaysersSize = $baseLayers.size() ) +#set( $overlaysSize = $overlays.size() ) { "mapView": { "id": "$!{mapView.id}", @@ -33,5 +35,39 @@ }, "userSettings": { "mapDateType": "$!encoder.jsonEncode( ${mapDateType} )" - } + }, + "baseLayers": [ +#foreach( $baseLayer in $baseLayers ) + { + "data": { + "id": "$!{baseLayer.id}", + "name": "$!encoder.jsonEncode( ${baseLayer.name} )", + "type": "$!encoder.jsonEncode( ${baseLayer.type} )", + "mapSource": "$!encoder.jsonEncode( ${baseLayer.mapSource} )", + "layer": "$!encoder.jsonEncode( ${baseLayer.layer} )", + "fillColor": "$!encoder.jsonEncode( ${baseLayer.fillColor} )", + "fillOpacity": "$!{baseLayer.fillOpacity}", + "strokeColor": "$!encoder.jsonEncode( ${baseLayer.strokeColor} )", + "strokeWidth": "$!{baseLayer.strokeWidth}" + } + }#if( $velocityCount < $baseLaysersSize ),#end +#end + ], + "overlays": [ +#foreach( $overlay in $overlays ) + { + "data": { + "id": "$!{overlay.id}", + "name": "$!encoder.jsonEncode( ${overlay.name} )", + "type": "$!encoder.jsonEncode( ${overlay.type} )", + "mapSource": "$!encoder.jsonEncode( ${overlay.mapSource} )", + "layer": "$!encoder.jsonEncode( ${overlay.layer} )", + "fillColor": "$!encoder.jsonEncode( ${overlay.fillColor} )", + "fillOpacity": "$!{overlay.fillOpacity}", + "strokeColor": "$!encoder.jsonEncode( ${overlay.strokeColor} )", + "strokeWidth": "$!{overlay.strokeWidth}" + } + }#if( $velocityCount < $overlaysSize ),#end +#end + ] } \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/script/globals.js' --- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/script/globals.js 2010-12-08 21:53:31 +0000 +++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/script/globals.js 2010-12-09 15:11:24 +0000 @@ -284,6 +284,8 @@ GLOBAL.vars = { map: null, + parameter: null, + mapSourceType: { value: null, setDatabase: function() { @@ -322,8 +324,6 @@ } }, - parameter: null, - activePanel: { value: GLOBAL.conf.thematicMap, setPolygon: function() { === modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/script/index.js' --- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/script/index.js 2010-12-08 21:53:31 +0000 +++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/script/index.js 2010-12-09 15:11:24 +0000 @@ -6,7 +6,7 @@ GLOBAL.vars.map = new OpenLayers.Map({controls:[new OpenLayers.Control.Navigation(),new OpenLayers.Control.ArgParser(),new OpenLayers.Control.Attribution()]}); GLOBAL.vars.mask = new Ext.LoadMask(Ext.getBody(),{msg:i18n_loading,msgCls:'x-mask-loading2'}); - GLOBAL.vars.parameter = GLOBAL.util.getUrlParam('view') ? {id: GLOBAL.util.getUrlParam('view')} : false; + GLOBAL.vars.parameter = GLOBAL.util.getUrlParam('view') ? {id: GLOBAL.util.getUrlParam('view')} : {id: null}; Ext.Ajax.request({ url: GLOBAL.conf.path_mapping + 'initialize' + GLOBAL.conf.type, @@ -14,10 +14,10 @@ params: {id: GLOBAL.vars.parameter.id || null}, success: function(r) { var init = Ext.util.JSON.decode(r.responseText); - if (GLOBAL.vars.parameter) { - GLOBAL.vars.parameter.mapView = init.mapView; - } - GLOBAL.vars.mapDateType.value = init.userSettings.mapDateType; + GLOBAL.vars.parameter.mapView = init.mapView; + GLOBAL.vars.parameter.baseLayers = init.baseLayers; + GLOBAL.vars.parameter.overlays = init.overlays; + GLOBAL.vars.mapDateType.value = init.userSettings.mapDateType; /* Section: stores */ var mapViewStore = new Ext.data.JsonStore({ @@ -371,24 +371,35 @@ }; /* Add base layers */ - function addBaseLayersToMap() { + function addBaseLayersToMap(init) { GLOBAL.vars.map.addLayers([new OpenLayers.Layer.WMS('World', 'http://labs.metacarta.com/wms/vmap0', {layers: 'basic'})]); GLOBAL.vars.map.layers[0].setVisibility(false); - - GLOBAL.stores.baseLayer.load({callback: function(r) { - if (r.length) { - for (var i = 0; i < r.length; i++) { - GLOBAL.vars.map.addLayers([new OpenLayers.Layer.WMS(r[i].data.name, r[i].data.mapSource, {layers: r[i].data.layer})]); + + if (init) { + var layers = GLOBAL.vars.parameter.baseLayers || []; + if (layers.length) { + for (var i = 0; i < layers.length; i++) { + GLOBAL.vars.map.addLayers([new OpenLayers.Layer.WMS(layers[i].data.name, layers[i].data.mapSource, {layers: layers[i].data.layer})]); GLOBAL.vars.map.layers[GLOBAL.vars.map.layers.length-1].setVisibility(false); } } - }}); - } - addBaseLayersToMap(); + } + else { + GLOBAL.stores.baseLayer.load({callback: function(r) { + if (r.length) { + for (var i = 0; i < r.length; i++) { + GLOBAL.vars.map.addLayers([new OpenLayers.Layer.WMS(r[i].data.name, r[i].data.mapSource, {layers: r[i].data.layer})]); + GLOBAL.vars.map.layers[GLOBAL.vars.map.layers.length-1].setVisibility(false); + } + } + }}); + } + } + addBaseLayersToMap(true); - function addOverlaysToMap() { - GLOBAL.stores.overlay.load({callback: function(r) { - if (r.length) { + function addOverlaysToMap(init) { + function add(r) { + if (r.length) { var loadStart = function() { GLOBAL.vars.mask.msg = i18n_loading; GLOBAL.vars.mask.show(); @@ -397,39 +408,46 @@ GLOBAL.vars.mask.hide(); }; - for (var i = 0; i < r.length; i++) { - var url = GLOBAL.vars.mapSourceType.isShapefile() ? GLOBAL.conf.path_geoserver + GLOBAL.conf.wfs + r[i].data.mapSource + GLOBAL.conf.output : GLOBAL.conf.path_mapping + 'getGeoJsonFromFile.action?name=' + r[i].data.mapSource; - var fillColor = r[i].data.fillColor; - var fillOpacity = parseFloat(r[i].data.fillOpacity); - var strokeColor = r[i].data.strokeColor; - var strokeWidth = parseFloat(r[i].data.strokeWidth); - - var overlay = new OpenLayers.Layer.Vector(r[i].data.name, { - 'visibility': false, - 'styleMap': new OpenLayers.StyleMap({ - 'default': new OpenLayers.Style( - OpenLayers.Util.applyDefaults( - {'fillColor': fillColor, 'fillOpacity': fillOpacity, 'strokeColor': strokeColor, 'strokeWidth': strokeWidth}, - OpenLayers.Feature.Vector.style['default'] - ) - ) - }), - 'strategies': [new OpenLayers.Strategy.Fixed()], - 'protocol': new OpenLayers.Protocol.HTTP({ - 'url': url, - 'format': new OpenLayers.Format.GeoJSON() - }) - }); - - overlay.events.register('loadstart', null, loadStart); - overlay.events.register('loadend', null, loadEnd); + for (var i = 0; i < r.length; i++) { + var overlay = new OpenLayers.Layer.Vector(r[i].data.name, { + 'visibility': false, + 'styleMap': new OpenLayers.StyleMap({ + 'default': new OpenLayers.Style( + OpenLayers.Util.applyDefaults({ + 'fillColor': r[i].data.fillColor, + 'fillOpacity': parseFloat(r[i].data.fillOpacity), + 'strokeColor': r[i].data.strokeColor, + 'strokeWidth': parseFloat(r[i].data.strokeWidth) + }, + OpenLayers.Feature.Vector.style['default'] + ) + ) + }), + 'strategies': [new OpenLayers.Strategy.Fixed()], + 'protocol': new OpenLayers.Protocol.HTTP({ + 'url': GLOBAL.conf.path_mapping + 'getGeoJsonFromFile.action?name=' + r[i].data.mapSource, + 'format': new OpenLayers.Format.GeoJSON() + }) + }); + + overlay.events.register('loadstart', null, loadStart); + overlay.events.register('loadend', null, loadEnd); overlay.isOverlay = true; - GLOBAL.vars.map.addLayer(overlay); - } - } - }}); + GLOBAL.vars.map.addLayer(overlay); + } + } + } + + if (init) { + add(GLOBAL.vars.parameter.overlays); + } + else { + GLOBAL.stores.overlay.load({callback: function(r) { + add(r); + }}); + } } - addOverlaysToMap(); + addOverlaysToMap(true); /* Section: mapview */ var viewNameTextField=new Ext.form.TextField({id:'viewname_tf',emptytext:'',width:GLOBAL.conf.combo_width,hideLabel:true,autoCreate:{tag:'input',type:'text',size:'20',autocomplete:'off', maxlength:'35'}}); @@ -887,18 +905,16 @@ indicatorOrDataElement = Ext.getCmp('mapvaluetype_cb').getValue() == GLOBAL.conf.map_value_type_indicator ? Ext.getCmp('indicator_cb').getValue() : Ext.getCmp('dataelement_cb').getValue(); period = Ext.getCmp('period_cb').getValue(); - mapOrOrganisationUnit = GLOBAL.vars.mapSourceType.isDatabase() ? - Ext.getCmp('boundary_tf').getValue() : Ext.getCmp('map_cb').getValue(); + organisationUnit = Ext.getCmp('boundary_tf').getValue(); } else if (GLOBAL.vars.activePanel.isPoint()) { indicatorOrDataElement = Ext.getCmp('mapvaluetype_cb2').getValue() == GLOBAL.conf.map_value_type_indicator ? Ext.getCmp('indicator_cb2').getValue() : Ext.getCmp('dataelement_cb2').getValue(); period = Ext.getCmp('period_cb2').getValue(); - mapOrOrganisationUnit = GLOBAL.vars.mapSourceType.isDatabase() ? - Ext.getCmp('map_tf2').getValue() : Ext.getCmp('map_cb2').getValue(); + organisationUnit = Ext.getCmp('map_tf2').getValue(); } - if (indicatorOrDataElement && period && mapOrOrganisationUnit) { + if (indicatorOrDataElement && period && organisationUnit) { var title = Ext.getCmp('exportexceltitle_ft').getValue(); var svg = document.getElementById('OpenLayers.Layer.Vector_17').innerHTML; var includeLegend = Ext.getCmp('exportexcelincludelegend_chb').getValue(); === modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/widgets/geostat/Choropleth.js' --- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/widgets/geostat/Choropleth.js 2010-12-08 21:53:31 +0000 +++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/widgets/geostat/Choropleth.js 2010-12-09 15:11:24 +0000 @@ -86,7 +86,7 @@ this.createSelectFeatures(); - if (GLOBAL.vars.parameter) { + if (GLOBAL.vars.parameter.id) { if (GLOBAL.vars.parameter.mapView.featureType == GLOBAL.conf.map_feature_type_multipolygon) { this.mapView = GLOBAL.vars.parameter.mapView; this.updateValues = true; === modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/widgets/geostat/Symbol.js' --- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/widgets/geostat/Symbol.js 2010-12-08 21:53:31 +0000 +++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/widgets/geostat/Symbol.js 2010-12-09 15:11:24 +0000 @@ -85,8 +85,8 @@ this.createItems(); this.createSelectFeatures(); - - if (GLOBAL.vars.parameter) { + + if (GLOBAL.vars.parameter.id) { if (GLOBAL.vars.parameter.mapView.featureType == GLOBAL.conf.map_feature_type_point) { this.mapView = GLOBAL.vars.parameter.mapView; this.updateValues = true; @@ -998,8 +998,8 @@ this.selectFeatures = new OpenLayers.Control.newSelectFeature( this.layer, { onHoverSelect: onHoverSelect, - onHoverUnselect: onHoverUnselect, - onClickSelect: onClickSelect + onHoverUnselect: onHoverUnselect + //onClickSelect: onClickSelect } ); @@ -1513,7 +1513,7 @@ this.coreComp = new mapfish.GeoStat.Symbol(this.map, coreOptions); - if (GLOBAL.vars.parameter) { + if (GLOBAL.vars.parameter.id) { choropleth.collapse(); this.expand(); GLOBAL.vars.parameter = false;