← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 3616: (GIS) Symbol layer implemented.

 

Merge authors:
  Jan Henrik Øverland (janhenrik-overland)
------------------------------------------------------------
revno: 3616 [merge]
committer: Jan Henrik Overland <janhenrik.overland@xxxxxxxxx>
branch nick: dhis2
timestamp: Fri 2011-05-13 15:22:39 +0200
message:
  (GIS) Symbol layer implemented.
added:
  dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnitGroupSets.vm
  dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/commons/action/GetOrganisationUnitGroupSetsAction.java
  dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/commons/action/GetOrganisationUnitGroupsByGroupSetAction.java
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/geojsonSymbol.vm
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/IconCombo.css
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/IconCombo.js
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-0.png
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-1.png
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-10.png
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-11.png
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-12.png
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-2.png
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-3.png
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-4.png
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-5.png
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-6.png
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-7.png
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-8.png
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-9.png
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/core/GeoStat/Symbol.js
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/widgets/geostat/Symbol.js
renamed:
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/core/GeoStat/Symbol.js => dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/core/GeoStat/Point.js
  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/Point.js
modified:
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java
  dhis-2/dhis-web/dhis-web-commons/src/main/resources/META-INF/dhis/beans.xml
  dhis-2/dhis-web/dhis-web-commons/src/main/resources/dhis-web-commons.xml
  dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/GetGeoJsonAction.java
  dhis-2/dhis-web/dhis-web-mapping/src/main/resources/org/hisp/dhis/mapping/i18n_module.properties
  dhis-2/dhis-web/dhis-web-mapping/src/main/resources/struts.xml
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/geojsonPoint.vm
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/i18n.vm
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/css/style.css
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/index.html
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/global.js
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/index.js
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/MapFish.js
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/core/GeoStat.js
  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/core/GeoStat/Point.js
  dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/widgets/geostat/Point.js


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java	2011-05-05 21:14:56 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java	2011-05-13 10:42:19 +0000
@@ -60,6 +60,7 @@
     public static final String FEATURETYPE_MULTIPOLYGON = "MultiPolygon";
     public static final String FEATURETYPE_POLYGON = "Polygon";
     public static final String FEATURETYPE_POINT = "Point";
+    public static final String RESULTTYPE_SYMBOL = "Symbol";
         
     private static final Comparator<OrganisationUnit> COMPARATOR = new OrganisationUnitNameComparator();
     private static final Pattern JSON_COORDINATE_PATTERN = Pattern.compile( "(\\[{3}.*?\\]{3})" );
@@ -322,6 +323,13 @@
         return null;
     }
     
+    public Integer getGroupIdInGroupSet( OrganisationUnitGroupSet groupSet )
+    {
+        final OrganisationUnitGroup group = getGroupInGroupSet( groupSet );
+        
+        return group != null ? group.getId() : null;
+    }
+    
     public String getGroupNameInGroupSet( OrganisationUnitGroupSet groupSet )
     {
         final OrganisationUnitGroup group = getGroupInGroupSet( groupSet );

=== added file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnitGroupSets.vm'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnitGroupSets.vm	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnitGroupSets.vm	2011-04-28 15:43:17 +0000
@@ -0,0 +1,9 @@
+#set( $size = $organisationUnitGroupSets.size() )
+{ "organisationUnitGroupSets": [
+#foreach( $groupSet in $organisationUnitGroupSets )
+  {
+    "id": "$groupSet.id",
+    "name": "$!encoder.jsonEncode( ${groupSet.name} )"
+  }#if( $velocityCount < $size ),#end    
+#end
+] }

=== added file 'dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/commons/action/GetOrganisationUnitGroupSetsAction.java'
--- dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/commons/action/GetOrganisationUnitGroupSetsAction.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/commons/action/GetOrganisationUnitGroupSetsAction.java	2011-04-28 15:43:17 +0000
@@ -0,0 +1,75 @@
+package org.hisp.dhis.commons.action;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hisp.dhis.organisationunit.OrganisationUnitGroupService;
+import org.hisp.dhis.organisationunit.OrganisationUnitGroupSet;
+
+import com.opensymphony.xwork2.Action;
+
+/*
+ * Copyright (c) 2004-2010, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ *   list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ *   be used to endorse or promote products derived from this software without
+ *   specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/**
+ * @author Jan Henrik Overland
+ */
+public class GetOrganisationUnitGroupSetsAction
+    implements Action
+{
+    // -------------------------------------------------------------------------
+    // Dependencies
+    // -------------------------------------------------------------------------
+
+    private OrganisationUnitGroupService organisationUnitGroupService;
+
+    public void setOrganisationUnitGroupService( OrganisationUnitGroupService organisationUnitGroupService )
+    {
+        this.organisationUnitGroupService = organisationUnitGroupService;
+    }
+
+    // -------------------------------------------------------------------------
+    // Output
+    // -------------------------------------------------------------------------
+
+    private List<OrganisationUnitGroupSet> organisationUnitGroupSets;
+
+    public List<OrganisationUnitGroupSet> getOrganisationUnitGroupSets()
+    {
+        return organisationUnitGroupSets;
+    }
+
+    @Override
+    public String execute()
+        throws Exception
+    {
+        organisationUnitGroupSets = new ArrayList<OrganisationUnitGroupSet>( organisationUnitGroupService
+            .getAllOrganisationUnitGroupSets() );
+
+        return SUCCESS;
+    }
+
+}

=== added file 'dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/commons/action/GetOrganisationUnitGroupsByGroupSetAction.java'
--- dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/commons/action/GetOrganisationUnitGroupsByGroupSetAction.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/commons/action/GetOrganisationUnitGroupsByGroupSetAction.java	2011-04-28 15:43:17 +0000
@@ -0,0 +1,92 @@
+package org.hisp.dhis.commons.action;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hisp.dhis.organisationunit.OrganisationUnitGroup;
+import org.hisp.dhis.organisationunit.OrganisationUnitGroupService;
+
+import com.opensymphony.xwork2.Action;
+
+/*
+ * Copyright (c) 2004-2010, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ *   list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ *   be used to endorse or promote products derived from this software without
+ *   specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/**
+ * @author Jan Henrik Overland
+ */
+public class GetOrganisationUnitGroupsByGroupSetAction
+    implements Action
+{
+    // -------------------------------------------------------------------------
+    // Dependencies
+    // -------------------------------------------------------------------------
+
+    private OrganisationUnitGroupService organisationUnitGroupService;
+
+    public void setOrganisationUnitGroupService( OrganisationUnitGroupService organisationUnitGroupService )
+    {
+        this.organisationUnitGroupService = organisationUnitGroupService;
+    }
+
+    // -------------------------------------------------------------------------
+    // Input
+    // -------------------------------------------------------------------------
+
+    private Integer id;
+
+    public void setId( Integer id )
+    {
+        this.id = id;
+    }
+
+    // -------------------------------------------------------------------------
+    // Output
+    // -------------------------------------------------------------------------
+
+    private List<OrganisationUnitGroup> organisationUnitGroups;
+
+    public List<OrganisationUnitGroup> getOrganisationUnitGroups()
+    {
+        return organisationUnitGroups;
+    }
+
+    // -------------------------------------------------------------------------
+    // Action implementation
+    // -------------------------------------------------------------------------
+
+    @Override
+    public String execute()
+        throws Exception
+    {
+        if ( id != null )
+        {
+            organisationUnitGroups = new ArrayList<OrganisationUnitGroup>( organisationUnitGroupService
+                .getOrganisationUnitGroupSet( id ).getOrganisationUnitGroups() );
+        }
+
+        return SUCCESS;
+    }
+}

=== modified file 'dhis-2/dhis-web/dhis-web-commons/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-web/dhis-web-commons/src/main/resources/META-INF/dhis/beans.xml	2011-05-12 16:16:32 +0000
+++ dhis-2/dhis-web/dhis-web-commons/src/main/resources/META-INF/dhis/beans.xml	2011-05-13 12:34:23 +0000
@@ -421,6 +421,20 @@
 		</property>
 	</bean>
 
+    <bean id="org.hisp.dhis.commons.action.GetOrganisationUnitGroupsByGroupSetAction" class="org.hisp.dhis.commons.action.GetOrganisationUnitGroupsByGroupSetAction"
+        scope="prototype">
+        <property name="organisationUnitGroupService">
+            <ref bean="org.hisp.dhis.organisationunit.OrganisationUnitGroupService" />
+        </property>
+    </bean>
+
+    <bean id="org.hisp.dhis.commons.action.GetOrganisationUnitGroupSetsAction" class="org.hisp.dhis.commons.action.GetOrganisationUnitGroupSetsAction"
+        scope="prototype">
+        <property name="organisationUnitGroupService">
+            <ref bean="org.hisp.dhis.organisationunit.OrganisationUnitGroupService" />
+        </property>
+    </bean>
+
 	<bean id="org.hisp.dhis.commons.action.GetOrganisationUnitLevelsAction" class="org.hisp.dhis.commons.action.GetOrganisationUnitLevelsAction"
 		scope="prototype">
 		<property name="organisationUnitService" ref="org.hisp.dhis.organisationunit.OrganisationUnitService" />

=== modified file 'dhis-2/dhis-web/dhis-web-commons/src/main/resources/dhis-web-commons.xml'
--- dhis-2/dhis-web/dhis-web-commons/src/main/resources/dhis-web-commons.xml	2011-05-06 12:55:00 +0000
+++ dhis-2/dhis-web/dhis-web-commons/src/main/resources/dhis-web-commons.xml	2011-05-10 08:07:40 +0000
@@ -557,6 +557,20 @@
 				/dhis-web-commons/ajax/jsonOrganisationUnitGroups.vm</result>
 			<param name="onExceptionReturn">plainTextError</param>
 		</action>
+
+        <action name="getOrganisationUnitGroupsByGroupSet"
+            class="org.hisp.dhis.commons.action.GetOrganisationUnitGroupsByGroupSetAction">
+            <result name="success" type="velocity-json">
+                /dhis-web-commons/ajax/jsonOrganisationUnitGroups.vm</result>
+            <param name="onExceptionReturn">plainTextError</param>
+        </action>
+
+        <action name="getOrganisationUnitGroupSets"
+            class="org.hisp.dhis.commons.action.GetOrganisationUnitGroupSetsAction">
+            <result name="success" type="velocity-json">
+                /dhis-web-commons/ajax/jsonOrganisationUnitGroupSets.vm</result>
+            <param name="onExceptionReturn">plainTextError</param>
+        </action>
 		
 		<action name="getOrganisationUnitChildren"
 			class="org.hisp.dhis.commons.action.GetOrganisationUnitChildrenAction">

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/GetGeoJsonAction.java'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/GetGeoJsonAction.java	2011-02-02 16:45:37 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/GetGeoJsonAction.java	2011-05-13 10:42:19 +0000
@@ -31,6 +31,7 @@
 
 import org.hisp.dhis.organisationunit.OrganisationUnit;
 import org.hisp.dhis.organisationunit.OrganisationUnitGroupService;
+import org.hisp.dhis.organisationunit.OrganisationUnitGroupSet;
 import org.hisp.dhis.organisationunit.OrganisationUnitGroupSetPopulator;
 import org.hisp.dhis.organisationunit.OrganisationUnitService;
 import org.hisp.dhis.system.filter.OrganisationUnitWithCoordinatesFilter;
@@ -81,6 +82,13 @@
         this.level = level;
     }
 
+    private Boolean symbol;
+
+    public void setSymbol( Boolean symbol )
+    {
+        this.symbol = symbol;
+    }
+
     // -------------------------------------------------------------------------
     // Output
     // -------------------------------------------------------------------------
@@ -107,14 +115,21 @@
 
         FilterUtils.filter( object, new OrganisationUnitWithCoordinatesFilter() );
 
-        for ( OrganisationUnit organisationUnit : object )
+        if ( symbol != null )
         {
-            if ( organisationUnit.getFeatureType() != null
-                && organisationUnit.getFeatureType().equals( OrganisationUnit.FEATURETYPE_POINT ) )
+            OrganisationUnitGroupSet typeGroupSet = organisationUnitGroupService
+                .getOrganisationUnitGroupSetByName( OrganisationUnitGroupSetPopulator.NAME_TYPE );
+            
+            for ( OrganisationUnit organisationUnit : object )
             {
-                organisationUnit.setType( organisationUnit.getGroupNameInGroupSet( organisationUnitGroupService
-                    .getOrganisationUnitGroupSetByName( OrganisationUnitGroupSetPopulator.NAME_TYPE ) ) );
+                if ( organisationUnit.getFeatureType() != null
+                    && organisationUnit.getFeatureType().equals( OrganisationUnit.FEATURETYPE_POINT ) )
+                {
+                    organisationUnit.setType( organisationUnit.getGroupNameInGroupSet( typeGroupSet ) );
+                }
             }
+            
+            return OrganisationUnit.RESULTTYPE_SYMBOL;
         }
 
         return object.size() > 0 ? object.iterator().next().getFeatureType() : NONE;

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/resources/org/hisp/dhis/mapping/i18n_module.properties'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/resources/org/hisp/dhis/mapping/i18n_module.properties	2011-04-06 11:44:07 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/resources/org/hisp/dhis/mapping/i18n_module.properties	2011-04-28 15:43:17 +0000
@@ -33,6 +33,10 @@
 favorites							= Favorites
 legend								= Legend
 legendset							= Legend set
+group								= Group
+groups								= Groups
+groupset							= Group set
+groupsets							= Group sets
 
 indicators							= Indicators
 dataelements						= Data elements

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/resources/struts.xml'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/resources/struts.xml	2011-03-08 15:14:32 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/resources/struts.xml	2011-05-13 10:42:19 +0000
@@ -325,6 +325,7 @@
             <result name="Point" type="velocity-json">/dhis-web-mapping/geojsonPoint.vm</result>
             <result name="Polygon" type="velocity-json">/dhis-web-mapping/geojsonPolygon.vm</result>
             <result name="MultiPolygon" type="velocity-json">/dhis-web-mapping/geojsonPolygon.vm</result>
+            <result name="Symbol" type="velocity-json">/dhis-web-mapping/geojsonSymbol.vm</result>
             <result name="none" type="velocity-json">/dhis-web-mapping/geojsonPolygon.vm</result>
         </action>
 

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/geojsonPoint.vm'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/geojsonPoint.vm	2011-02-02 13:36:42 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/geojsonPoint.vm	2011-04-12 17:22:06 +0000
@@ -1,2 +1,2 @@
 #set( $size = $object.size() )
-{"type":"FeatureCollection","features":[#foreach($unit in $object){"geometry":{"type":"Point","coordinates":$!encoder.jsEncode( $!{unit.validCoordinates} )},"properties":{"id":"$!{unit.id}","name":"$!encoder.jsonEncode( ${unit.name} )","hasChildrenWithCoordinates":$!{unit.hasChildrenWithCoordinates()},"type":"$!encoder.jsonEncode( ${unit.type} )"}}#if( $velocityCount < $size ),#end #end ],"crs":{"type":"EPSG","properties":{"code":"4326"}}}
\ No newline at end of file
+{"type":"FeatureCollection","features":[#foreach($unit in $object){"geometry":{"type":"Point","coordinates":$!encoder.jsEncode( $!{unit.validCoordinates} )},"properties":{"id":"$!{unit.id}","name":"$!encoder.jsonEncode( ${unit.name} )","hasChildrenWithCoordinates":$!{unit.hasChildrenWithCoordinates()}#if ($type),"type":"$!encoder.jsonEncode( ${unit.type} )"#end}}#if( $velocityCount < $size ),#end #end],"crs":{"type":"EPSG","properties":{"code":"4326"}}}
\ No newline at end of file

=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/geojsonSymbol.vm'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/geojsonSymbol.vm	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/geojsonSymbol.vm	2011-05-13 12:34:23 +0000
@@ -0,0 +1,2 @@
+#set($size = $object.size())
+{"type": "FeatureCollection","features":[#foreach($unit in $object){"geometry":{"type":"Point","coordinates": $!encoder.jsEncode($!{unit.validCoordinates})},"properties":{"id":"$!{unit.id}","name":"$!encoder.jsonEncode(${unit.name})","type":"$!encoder.jsonEncode(${unit.type})","code":"$!encoder.jsonEncode(${unit.code})","contactPerson":"$!encoder.jsonEncode(${unit.contactPerson})","address":"$!encoder.jsonEncode(${unit.address})","email":"$!encoder.jsonEncode(${unit.email} )","phoneNumber": "$!encoder.jsonEncode(${unit.phoneNumber})"}}#if($velocityCount<$size),#end#end],"crs":{"type":"EPSG","properties":{"code":"4326"}}}
\ No newline at end of file

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/i18n.vm'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/i18n.vm	2011-04-06 11:44:07 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/i18n.vm	2011-04-28 15:43:17 +0000
@@ -36,6 +36,10 @@
     favorites: '$encoder.jsEscape($i18n.getString( 'favorites' ) , "'")',
     legend: '$encoder.jsEscape($i18n.getString( 'legend' ) , "'")',
     legendset: '$encoder.jsEscape($i18n.getString( 'legendset' ) , "'")',
+    group: '$encoder.jsEscape($i18n.getString( 'group' ) , "'")',
+    groups: '$encoder.jsEscape($i18n.getString( 'groups' ) , "'")',
+    groupset: '$encoder.jsEscape($i18n.getString( 'groupset' ) , "'")',
+    groupsets: '$encoder.jsEscape($i18n.getString( 'groupsets' ) , "'")',
 
     indicators: '$encoder.jsEscape($i18n.getString( 'indicators' ) , "'")',
     dataelements: '$encoder.jsEscape($i18n.getString( 'dataelements' ) , "'")',

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/css/style.css'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/css/style.css	2011-04-06 15:27:43 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/css/style.css	2011-05-13 12:34:23 +0000
@@ -278,38 +278,16 @@
 .window-info {
 	padding:0 0 8px 0;
 	font:bold 11px arial;
-	color:#444;
-}
-.window-info-grey {
-	padding:5px 0px 0px 8px;
-	font:normal 11px lucida sans unicode,arial;
-	color:#333;
-    background-color:#f8f8f8;
+	color:#222;
 }
 .window-p {
     padding:4px 0;
 }
-.window-field-label-first {
-	padding:0 0 3px 3px;
-	font:normal 11px lucida sans unicode,ubuntu,arial;
-	color:#777;
-}
 .window-field-label {
 	padding:6px 0 3px 4px;
 	font:normal 11px lucida sans unicode,ubuntu,arial;
 	color:#777;	
 }
-.window-field-nolabel {
-	padding:14px 0 0 0;
-}
-.window-button {
-	padding:8px 0 0 0;
-}
-.window-orgunit-text {
-	padding:6px 6px 6px 8px;
-	font:normal 11px lucida sans unicode,ubuntu,arial;
-	color:#333;
-}
 #window-favorites-title {
 	padding:0 0 3px 21px;
 	background:url('../../../images/favorite.png') no-repeat 0 0 transparent;

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/index.html'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/index.html	2011-03-30 12:12:38 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/index.html	2011-05-11 14:09:52 +0000
@@ -18,6 +18,7 @@
             <link rel="stylesheet" type="text/css" href="../resources/ext-ux/msg/msg.css"/>
             <link rel="stylesheet" type="text/css" href="../resources/ext-ux/checkbox/checkbox_or.css"/>
             <link rel="stylesheet" type="text/css" href="../resources/ext-ux/multiselecttreepanel/multiselecttreepanel.css"/>
+            <link rel="stylesheet" type="text/css" href="../resources/ext-ux/iconcombo/IconCombo.css"/>
         
 		<!-- DHIS -->
 		<link rel="stylesheet" type="text/css" href="css/style.css"/>
@@ -41,6 +42,8 @@
     <div id="polygonlegend"></div>
     
     <div id="pointlegend"></div>
+    
+    <div id="symbollegend"></div>
 	
     <form id="exportForm" method="post">
         <input type="hidden" id="titleField" name="title"/>
@@ -74,6 +77,7 @@
             <script type="text/javascript" src="../resources/ext-ux/itemselector/DDView.js"></script>
             <script type="text/javascript" src="../resources/ext-ux/multiselect/MultiSelect.js"></script>
             <script type="text/javascript" src="../resources/ext-ux/itemselector/ItemSelector.js"></script>
+            <script type="text/javascript" src="../resources/ext-ux/iconcombo/IconCombo.js"></script>
         
         <!-- OpenLayers -->
         <script type="text/javascript" src="../resources/openlayers-2.10/OpenLayers.js"></script>
@@ -83,19 +87,19 @@
 		
             <!-- UX -->
             <script type="text/javascript" src="../resources/openlayers-ux/newSelectFeature.js"></script>
-			
+        
         <!-- GeoExt -->
         <script type="text/javascript" src="../resources/geoext/script/GeoExt.js"></script>
        
         <!-- MapFish -->
         <script type="text/javascript" src="../resources/mapfish/MapFish.js"></script>
-
-		<!-- DHIS -->    
+        
+        <!-- DHIS -->
         <script type="text/javascript" src="i18n.action"></script>
         <script type="text/javascript">var G_NORMAL_MAP = null, G_HYBRID_MAP = null;</script>
         <script type="text/javascript" src="getMapSystemSettings.action"></script>
         <script type="text/javascript" src="javascript/global.js"></script>
-        <script type="text/javascript" src="javascript/index.js"></script>    
+        <script type="text/javascript" src="javascript/index.js"></script>
 </body>
 
 </html>

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/global.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/global.js	2011-04-06 13:34:20 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/global.js	2011-04-12 17:22:06 +0000
@@ -10,6 +10,8 @@
     
     setup: 'gisSetup',
 	thematicMap: 'gisThematicMap',
+	thematicMap2: 'gisThematicMap2',
+    thematicMap3: 'gisThematicMap3',
     overlayRegistration: 'gisOverlay',
 	administration: 'gisAdministration',
 	favorites: 'gisFavoriteMapView',
@@ -89,7 +91,7 @@
 G.util = {
     
     expandWidget: function(widget) {
-        var collapsed = widget == choropleth ? symbol : choropleth;
+        var collapsed = widget == choropleth ? point : choropleth;
         collapsed.collapse();
         widget.expand();
     },
@@ -406,11 +408,17 @@
         setPoint: function() {
             this.value = G.conf.thematicMap2;
         },
+        setSymbol: function() {
+            this.value = G.conf.thematicMap3;
+        },
         isPolygon: function() {
             return this.value === G.conf.thematicMap;
         },
         isPoint: function() {
             return this.value === G.conf.thematicMap2;
+        },
+        isSymbol: function() {
+            return this.value === G.conf.thematicMap3;
         }
     }
 };

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/index.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/index.js	2011-04-06 13:34:20 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/javascript/index.js	2011-05-13 12:34:23 +0000
@@ -271,6 +271,30 @@
         }
     });
     
+    var groupSetStore = new Ext.data.JsonStore({
+        url: G.conf.path_commons + 'getOrganisationUnitGroupSets' + G.conf.type,
+        root: 'organisationUnitGroupSets',
+        fields: ['id', 'name'],
+        sortInfo: {field: 'name', direction: 'ASC'},
+        autoLoad: false,
+        isLoaded: false,
+        listeners: {
+            'load': G.func.storeLoadListener
+        }
+    });
+    
+    var groupsByGroupSetStore = new Ext.data.JsonStore({
+        url: G.conf.path_commons + 'getOrganisationUnitGroupsByGroupSet' + G.conf.type,
+        root: 'organisationUnitGroups',
+        fields: ['id', 'name'],
+        sortInfo: {field: 'name', direction: 'ASC'},
+        autoLoad: false,
+        isLoaded: false,
+        listeners: {
+            'load': G.func.storeLoadListener
+        }
+    });
+    
     G.stores = {
 		mapView: mapViewStore,
         polygonMapView: polygonMapViewStore,
@@ -289,7 +313,9 @@
         organisationUnitsAtLevel: organisationUnitsAtLevelStore,
         geojsonFiles: geojsonFilesStore,
         wmsCapabilities: wmsCapabilitiesStore,
-        overlay: overlayStore
+        overlay: overlayStore,
+        groupSet: groupSetStore,
+        groupsByGroupSet: groupsByGroupSetStore
     };
 	
 	/* Thematic layers */
@@ -331,6 +357,25 @@
     pointLayer.layerType = G.conf.map_layer_type_thematic;
     G.vars.map.addLayer(pointLayer);
     
+    symbolLayer = new OpenLayers.Layer.Vector('Symbol layer', {
+        'visibility': false,
+        'displayInLayerSwitcher': false,
+        'styleMap': new OpenLayers.StyleMap({
+            'default': new OpenLayers.Style(
+                OpenLayers.Util.applyDefaults(
+                    {'fillOpacity': 1, 'strokeColor': '#222222', 'strokeWidth': 1, 'pointRadius': 5},
+                    OpenLayers.Feature.Vector.style['default']
+                )
+            ),
+            'select': new OpenLayers.Style(
+                {'strokeColor': '#000000', 'strokeWidth': 2, 'cursor': 'pointer'}
+            )
+        })
+    });
+    
+    symbolLayer.layerType = G.conf.map_layer_type_thematic;
+    G.vars.map.addLayer(symbolLayer);
+    
     /* Init base layers */
     if (G_NORMAL_MAP && G_HYBRID_MAP) {
         var gm_normal = new OpenLayers.Layer.Google("Google Normal", {
@@ -422,7 +467,7 @@
                         labelSeparator: G.conf.labelseparator,
                         editable: false
                     },
-                        
+                    
                     {html: '<div class="window-p"></div>'},
                     {html: '<div class="window-info">Delete favorite / Add to dashboard</div>'},
                     {
@@ -469,10 +514,10 @@
                         params = choropleth.formValues.getAllValues.call(choropleth);
                     }
                     else if (G.vars.activePanel.isPoint()) {
-                        if (!symbol.formValidation.validateForm.apply(symbol, [true])) {
+                        if (!point.formValidation.validateForm.apply(point, [true])) {
                             return;
                         }
-                        params = symbol.formValues.getAllValues.call(symbol);
+                        params = point.formValues.getAllValues.call(point);
                     }
                     
                     params.name = vn;
@@ -531,8 +576,8 @@
                                     if (v == choropleth.form.findField('mapview').getValue()) {
                                         choropleth.form.findField('mapview').clearValue();
                                     }
-                                    if (v == symbol.form.findField('mapview').getValue()) {
-                                        symbol.form.findField('mapview').clearValue();
+                                    if (v == point.form.findField('mapview').getValue()) {
+                                        point.form.findField('mapview').clearValue();
                                     }
                                 }
                             });
@@ -665,7 +710,7 @@
                     
                     if (polygonLayer.visibility && pointLayer.visibility) {
                         if (choropleth.formValidation.validateForm.call(choropleth)) {
-                            if (symbol.formValidation.validateForm.call(symbol)) {
+                            if (point.formValidation.validateForm.call(point)) {
                                 document.getElementById('layerField').value = 3;
                                 document.getElementById('imageLegendRowsField').value = choropleth.imageLegend.length;
                                 
@@ -674,10 +719,10 @@
                                 document.getElementById('indicatorField').value = values.mapValueTypeValue;
                                 document.getElementById('legendsField').value = G.util.getLegendsJSON.call(choropleth);
                                 
-                                values = symbol.formValues.getImageExportValues.call(symbol);
+                                values = point.formValues.getImageExportValues.call(point);
                                 document.getElementById('periodField2').value = values.dateValue;
                                 document.getElementById('indicatorField2').value = values.mapValueTypeValue;
-                                document.getElementById('legendsField2').value = G.util.getLegendsJSON.call(symbol);
+                                document.getElementById('legendsField2').value = G.util.getLegendsJSON.call(point);
                                 
                                 var str1 = document.getElementById(polygonLayer.svgId).parentNode.innerHTML;
                                 var str2 = document.getElementById(pointLayer.svgId).parentNode.innerHTML;
@@ -708,12 +753,12 @@
                         }
                     }
                     else if (pointLayer.visibility) {
-                        if (symbol.formValidation.validateForm.call(symbol)) {
-                            values = symbol.formValues.getImageExportValues.call(symbol);
+                        if (point.formValidation.validateForm.call(point)) {
+                            values = point.formValues.getImageExportValues.call(point);
                             document.getElementById('layerField').value = 2;
                             document.getElementById('periodField').value = values.dateValue;  
                             document.getElementById('indicatorField').value = values.mapValueTypeValue;
-                            document.getElementById('legendsField').value = G.util.getLegendsJSON.call(symbol);
+                            document.getElementById('legendsField').value = G.util.getLegendsJSON.call(point);
                             svg = document.getElementById(pointLayer.svgId).parentNode.innerHTML;
                         }
                         else {
@@ -1833,7 +1878,7 @@
                                                 success: function() {
                                                     Ext.message.msg(true, '<span class="x-msg-hl">' + cb.getRawValue() + '</span> '+ G.i18n.saved_as_date_type);
                                                     choropleth.prepareMapViewDateType();
-                                                    symbol.prepareMapViewDateType();
+                                                    point.prepareMapViewDateType();
                                                 }
                                             });
                                         }
@@ -1961,6 +2006,10 @@
                 {
                     nodeType: 'gx_layer',
                     layer: 'Point layer'
+                },
+                {
+                    nodeType: 'gx_layer',
+                    layer: 'Symbol layer'
                 }
             ]
         },
@@ -2359,8 +2408,8 @@
         }
     });
 
-    symbol = new mapfish.widgets.geostat.Symbol({
-        id: 'symbol',
+    point = new mapfish.widgets.geostat.Point({
+        id: 'point',
         map: G.vars.map,
         layer: pointLayer,
 		title: '<span class="panel-title">' + G.i18n.point_layer + '</span>',
@@ -2372,15 +2421,15 @@
                 id: 'refresh',
                 qtip: 'Refresh layer',
                 handler: function() {
-                    symbol.updateValues = true;
-                    symbol.classify();
+                    point.updateValues = true;
+                    point.classify();
                 }
             },
             {
                 id: 'close',
                 qtip: 'Clear layer',
                 handler: function() {
-                    symbol.formValues.clearForm.call(symbol);
+                    point.formValues.clearForm.call(point);
                 }
             }
         ],
@@ -2393,6 +2442,24 @@
             }
         }
     });
+
+    symbol = new mapfish.widgets.geostat.Symbol({
+        id: 'symbol',
+        map: G.vars.map,
+        layer: symbolLayer,
+		title: '<span class="panel-title">Symbol layer</span>',
+        featureSelection: false,
+        legendDiv: 'symbollegend',
+        defaults: {width: 130},
+        listeners: {
+            'expand': function() {
+                G.vars.activePanel.setSymbol();
+            },
+            'afterrender': function() {
+                this.layer.widget = this;
+            }
+        }
+    });
     
 	/* Section: map toolbar */
 	var mapLabel = new Ext.form.Label({
@@ -2429,8 +2496,8 @@
                 }
             }
             else if (G.vars.activePanel.isPoint()) {
-                if (symbol.layer.getDataExtent()) {
-                    G.vars.map.zoomToExtent(symbol.layer.getDataExtent());
+                if (point.layer.getDataExtent()) {
+                    G.vars.map.zoomToExtent(point.layer.getDataExtent());
                 }
             }
         }
@@ -2579,7 +2646,7 @@
 		tooltip: 'Administrator settings',
 		disabled: !G.user.isAdmin,
         style: 'margin-top:1px',
-		handler: function() {
+		handler: function() {                        
             if (!adminWindow.hidden) {
                 adminWindow.hide();
             }
@@ -2689,6 +2756,10 @@
                     {
                         title: '<span class="panel-title">' + G.i18n.map_legend_point + '</span>',
                         contentEl: 'pointlegend'
+                    },
+                    {
+                        title: '<span class="panel-title">Symbol legend</span>',
+                        contentEl: 'symbollegend'
                     }
                 ]
             },
@@ -2710,6 +2781,7 @@
                 },
                 items: [
                     choropleth,
+                    point,
                     symbol
                 ]
             },
@@ -2734,9 +2806,10 @@
                 if (!Ext.isIE) {
                     polygonLayer.svgId = svg[0].id;
                     pointLayer.svgId = svg[1].id;
+                    symbolLayer.svgId = svg[2].id;
                 }
                 
-                for (var i = 0, j = 2; i < G.vars.map.layers.length; i++) {
+                for (var i = 0, j = 3; i < G.vars.map.layers.length; i++) {
                     if (G.vars.map.layers[i].layerType == G.conf.map_layer_type_overlay) {
                         G.vars.map.layers[i].svgId = svg[j++].id;
                     }
@@ -2745,13 +2818,13 @@
                 Ext.getCmp('mapdatetype_cb').setValue(G.system.mapDateType.value);
                 
                 choropleth.prepareMapViewValueType();
-                symbol.prepareMapViewValueType();
+                point.prepareMapViewValueType();
                 
                 choropleth.prepareMapViewDateType();
-                symbol.prepareMapViewDateType();
+                point.prepareMapViewDateType();
                 
                 choropleth.prepareMapViewLegend();
-                symbol.prepareMapViewLegend();
+                point.prepareMapViewLegend();
                 
                 G.vars.map.events.register('addlayer', null, function(e) {
                     var svg = document.getElementsByTagName('svg');

=== added directory 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo'
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/IconCombo.css'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/IconCombo.css	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/IconCombo.css	2011-05-12 15:07:02 +0000
@@ -0,0 +1,140 @@
+.ux-ic-icon-0 {
+    background-image:url(ux-ic-icon-0.png) ! important;
+}
+.ux-ic-icon-0-title {
+    background:url(ux-ic-icon-0.png) no-repeat 0 0 transparent;
+    padding:0 0 3px 21px;
+	font:bold 11px arial;
+	color:#111;
+}
+.ux-ic-icon-1 {
+    background-image:url(ux-ic-icon-1.png) ! important;
+}
+.ux-ic-icon-1-title {
+    background:url(ux-ic-icon-1.png) no-repeat 0 0 transparent;
+    padding:0 0 3px 21px;
+	font:bold 11px arial;
+	color:#111;
+}
+.ux-ic-icon-2 {
+    background-image:url(ux-ic-icon-2.png) ! important;
+}
+.ux-ic-icon-2-title {
+    background:url(ux-ic-icon-2.png) no-repeat 0 0 transparent;
+    padding:0 0 3px 21px;
+	font:bold 11px arial;
+	color:#111;
+}
+.ux-ic-icon-3 {
+    background-image:url(ux-ic-icon-3.png) ! important;
+}
+.ux-ic-icon-3-title {
+    background:url(ux-ic-icon-3.png) no-repeat 0 0 transparent;
+    padding:0 0 3px 21px;
+	font:bold 11px arial;
+	color:#111;
+}
+.ux-ic-icon-4 {
+    background-image:url(ux-ic-icon-4.png) ! important;
+}
+.ux-ic-icon-4-title {
+    background:url(ux-ic-icon-4.png) no-repeat 0 0 transparent;
+    padding:0 0 3px 21px;
+	font:bold 11px arial;
+	color:#111;
+}
+.ux-ic-icon-5 {
+    background-image:url(ux-ic-icon-5.png) ! important;
+}
+.ux-ic-icon-5-title {
+    background:url(ux-ic-icon-5.png) no-repeat 0 0 transparent;
+    padding:0 0 3px 21px;
+	font:bold 11px arial;
+	color:#111;
+}
+.ux-ic-icon-6 {
+    background-image:url(ux-ic-icon-6.png) ! important;
+}
+.ux-ic-icon-6-title {
+    background:url(ux-ic-icon-6.png) no-repeat 0 0 transparent;
+    padding:0 0 3px 21px;
+	font:bold 11px arial;
+	color:#111;
+}
+.ux-ic-icon-7 {
+    background-image:url(ux-ic-icon-7.png) ! important;
+}
+.ux-ic-icon-7-title {
+    background:url(ux-ic-icon-7.png) no-repeat 0 0 transparent;
+    padding:0 0 3px 21px;
+	font:bold 11px arial;
+	color:#111;
+}
+.ux-ic-icon-8 {
+    background-image:url(ux-ic-icon-8.png) ! important;
+}
+.ux-ic-icon-8-title {
+    background:url(ux-ic-icon-8.png) no-repeat 0 0 transparent;
+    padding:0 0 3px 21px;
+	font:bold 11px arial;
+	color:#111;
+}
+.ux-ic-icon-9 {
+    background-image:url(ux-ic-icon-9.png) ! important;
+}
+.ux-ic-icon-9-title {
+    background:url(ux-ic-icon-9.png) no-repeat 0 0 transparent;
+    padding:0 0 3px 21px;
+	font:bold 11px arial;
+	color:#111;
+}
+.ux-ic-icon-10 {
+    background-image:url(ux-ic-icon-10.png) ! important;
+}
+.ux-ic-icon-10-title {
+    background:url(ux-ic-icon-10.png) no-repeat 0 0 transparent;
+    padding:0 0 3px 21px;
+	font:bold 11px arial;
+	color:#111;
+}
+.ux-ic-icon-11 {
+    background-image:url(ux-ic-icon-11.png) ! important;
+}
+.ux-ic-icon-11-title {
+    background:url(ux-ic-icon-11.png) no-repeat 0 0 transparent;
+    padding:0 0 3px 21px;
+	font:bold 11px arial;
+	color:#111;
+}
+.ux-ic-icon-12 {
+    background-image:url(ux-ic-icon-12.png) ! important;
+}
+.ux-ic-icon-12-title {
+    background:url(ux-ic-icon-12.png) no-repeat 0 0 transparent;
+    padding:0 0 3px 21px;
+	font:bold 11px arial;
+	color:#111;
+}
+.ux-icon-combo-icon {
+    background-repeat: no-repeat;
+    background-position: 5px 50%;
+    width: 22px;
+    height: 16px;
+}
+.ux-icon-combo-input {
+    color: #ffffff;
+    z-index: -1;
+    padding-left: 8px;
+}
+
+.x-form-field-wrap .ux-icon-combo-icon {
+    top: 3px;
+    left: 5px;
+}
+.ux-icon-combo-item {
+    background-repeat: no-repeat ! important;
+    background-position: 5px 50% ! important;
+    color: #f6f6f6;
+    height: 16px;
+    padding-left: 50px;
+}

=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/IconCombo.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/IconCombo.js	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/IconCombo.js	2011-05-12 12:36:10 +0000
@@ -0,0 +1,38 @@
+/* @author  Ing. Jozef Sakalos */
+Ext.namespace('Ext.ux.plugins');
+
+Ext.ux.plugins.IconCombo = function(config) {
+    Ext.apply(this, config);
+};
+ 
+Ext.extend(Ext.ux.plugins.IconCombo, Ext.util.Observable, {
+    init: function(combo) {
+        Ext.apply(combo, {
+            tpl:  '<tpl for=".">'
+                + '<div class="x-combo-list-item ux-icon-combo-item '
+                + '{' + combo.iconClsField + '}">'
+                + '{' + combo.displayField + '}'
+                + '</div></tpl>',
+ 
+            onRender: combo.onRender.createSequence(function(ct, position) {
+                this.wrap.applyStyles({position:'relative'});
+                this.el.addClass('ux-icon-combo-input');
+ 
+                this.icon = Ext.DomHelper.append(this.el.up('div.x-form-field-wrap'), {
+                    tag: 'div', style:'position:absolute'
+                });
+            }),
+ 
+            setIconCls: function() {
+                var rec = this.store.query(this.valueField, this.getValue()).itemAt(0);
+                if (rec) {
+                    this.icon.className = 'ux-icon-combo-icon ' + rec.get(this.iconClsField);
+                }
+            },
+             
+            setValue: combo.setValue.createSequence(function(value) {
+                this.setIconCls();
+            })
+        });
+    }
+});

=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-0.png'
Binary files dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-0.png	1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-0.png	2011-05-12 13:23:03 +0000 differ
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-1.png'
Binary files dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-1.png	1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-1.png	2011-05-12 12:36:10 +0000 differ
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-10.png'
Binary files dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-10.png	1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-10.png	2011-05-12 14:09:31 +0000 differ
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-11.png'
Binary files dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-11.png	1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-11.png	2011-05-12 14:09:31 +0000 differ
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-12.png'
Binary files dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-12.png	1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-12.png	2011-05-12 14:09:31 +0000 differ
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-2.png'
Binary files dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-2.png	1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-2.png	2011-05-12 12:36:10 +0000 differ
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-3.png'
Binary files dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-3.png	1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-3.png	2011-05-11 14:09:52 +0000 differ
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-4.png'
Binary files dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-4.png	1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-4.png	2011-05-12 12:36:10 +0000 differ
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-5.png'
Binary files dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-5.png	1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-5.png	2011-05-12 13:23:03 +0000 differ
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-6.png'
Binary files dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-6.png	1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-6.png	2011-05-12 12:36:10 +0000 differ
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-7.png'
Binary files dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-7.png	1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-7.png	2011-05-12 12:36:10 +0000 differ
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-8.png'
Binary files dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-8.png	1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-8.png	2011-05-12 14:09:31 +0000 differ
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-9.png'
Binary files dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-9.png	1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/ext-ux/iconcombo/ux-ic-icon-9.png	2011-05-12 14:09:31 +0000 differ
=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/MapFish.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/MapFish.js	2010-12-21 12:12:23 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/MapFish.js	2011-04-12 17:22:06 +0000
@@ -96,7 +96,7 @@
             "core/Color.js",
             "core/GeoStat.js",
             "core/GeoStat/Choropleth.js",
-            //"core/GeoStat/ProportionalSymbol.js",
+            "core/GeoStat/Point.js",
             "core/GeoStat/Symbol.js",
             //"core/Routing.js",
             "core/Util.js",
@@ -119,9 +119,9 @@
             //"widgets/data/LayerStoreMediator.js",
             //"widgets/data/GridRowFeatureMediator.js",
             "widgets/geostat/Choropleth.js",
+            "widgets/geostat/Point.js",
             "widgets/geostat/Symbol.js"
-            //"widgets/geostat/Mapping.js"
-            //"widgets/geostat/ProportionalSymbol.js"
+            //"widgets/geostat/Mapping.js",
             //"widgets/tree/LayerTree.js",
             //"widgets/tree/LayerTreeExtra.js",
             //"widgets/toolbar/Toolbar.js",

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/core/GeoStat.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/core/GeoStat.js	2011-03-28 12:02:08 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/core/GeoStat.js	2011-04-12 17:22:06 +0000
@@ -101,6 +101,12 @@
             choropleth.classify(false);
         }
         else if (G.vars.activePanel.isPoint()) {
+            if (!point.formValidation.validateForm.call(point)) {
+                G.vars.mask.hide();
+            }
+            point.classify(false);
+        }
+        else if (G.vars.activePanel.isSymbol()) {
             if (!symbol.formValidation.validateForm.call(symbol)) {
                 G.vars.mask.hide();
             }
@@ -234,7 +240,7 @@
             choropleth.imageLegend = imageLegend;
         }
         else if (G.vars.activePanel.isPoint()) {
-            symbol.imageLegend = imageLegend;
+            point.imageLegend = imageLegend;
         }
         
         return new mapfish.GeoStat.Classification(bins);
@@ -281,11 +287,11 @@
     classify: function(method, nbBins, bounds) {
         var mlt = G.vars.activePanel.isPolygon() ?
             choropleth.legend.value : G.vars.activePanel.isPoint() ?
-                symbol.legend.value : G.conf.map_legend_type_automatic;
+                point.legend.value : G.conf.map_legend_type_automatic;
     
 		if (mlt == G.conf.map_legend_type_automatic) {
 			if (method == mapfish.GeoStat.Distribution.CLASSIFY_WITH_BOUNDS) {
-				var str = G.vars.activePanel.isPolygon() ? choropleth.form.findField('bounds').getValue() : symbol.form.findField('bounds').getValue();
+				var str = G.vars.activePanel.isPolygon() ? choropleth.form.findField('bounds').getValue() : point.form.findField('bounds').getValue();
 				
 				for (var i = 0; i < str.length; i++) {
 					str = str.replace(' ','');
@@ -311,7 +317,7 @@
                     choropleth.form.findField('bounds').setValue(newInput);
                 }
                 else {
-                    symbol.form.findField('bounds').setValue(newInput);
+                    point.form.findField('bounds').setValue(newInput);
                 }
 				
 				for (var k = 0; k < bounds.length; k++) {
@@ -326,7 +332,7 @@
 			}
 		}
 		else if (mlt == G.conf.map_legend_type_predefined) {
-			bounds = G.vars.activePanel.isPolygon() ? choropleth.bounds : symbol.bounds;
+			bounds = G.vars.activePanel.isPolygon() ? choropleth.bounds : point.bounds;
 
 			if (bounds[0] > this.minVal) {
 				bounds.unshift(this.minVal);
@@ -334,7 +340,7 @@
                     choropleth.colorInterpolation.unshift(new mapfish.ColorRgb(240,240,240));
                 }
                 else {
-                    symbol.colorInterpolation.unshift(new mapfish.ColorRgb(240,240,240));
+                    point.colorInterpolation.unshift(new mapfish.ColorRgb(240,240,240));
                 }
 			}
 
@@ -344,7 +350,7 @@
                     choropleth.colorInterpolation.push(new mapfish.ColorRgb(240,240,240));
                 }
                 else {
-                    symbol.colorInterpolation.push(new mapfish.ColorRgb(240,240,240));
+                    point.colorInterpolation.push(new mapfish.ColorRgb(240,240,240));
                 }
 			}
 			

=== renamed file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/core/GeoStat/Symbol.js' => 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/core/GeoStat/Point.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/core/GeoStat/Symbol.js	2011-03-16 11:49:41 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/core/GeoStat/Point.js	2011-04-11 10:29:58 +0000
@@ -21,7 +21,7 @@
  * @requires core/GeoStat.js
  */
 
-mapfish.GeoStat.Symbol = OpenLayers.Class(mapfish.GeoStat, {
+mapfish.GeoStat.Point = OpenLayers.Class(mapfish.GeoStat, {
 
     colors: [
         new mapfish.ColorRgb(255, 255, 0),
@@ -61,18 +61,18 @@
     createColorInterpolation: function() {
         var initialColors = this.colors;
         var numColors = this.classification.bins.length;
-		var mapLegendType = symbol.form.findField('maplegendtype').getValue();
+		var mapLegendType = point.form.findField('maplegendtype').getValue();
 		
 		if (mapLegendType == G.conf.map_legend_type_automatic) {
 			this.colorInterpolation = mapfish.ColorRgb.getColorsArrayByRgbInterpolation(initialColors[0], initialColors[1], numColors);
-			for (var i = 0; i < symbol.imageLegend.length && i < this.colorInterpolation.length; i++) {
-				symbol.imageLegend[i].color = this.colorInterpolation[i].toHexString();
+			for (var i = 0; i < point.imageLegend.length && i < this.colorInterpolation.length; i++) {
+				point.imageLegend[i].color = this.colorInterpolation[i].toHexString();
 			}
 		}
 		else if (mapLegendType == G.conf.map_legend_type_predefined) {
-			this.colorInterpolation = symbol.colorInterpolation;
-			for (var j = 0; j < symbol.imageLegend.length && j < this.colorInterpolation.length; j++) {
-				symbol.imageLegend[j].color = this.colorInterpolation[j].toHexString();
+			this.colorInterpolation = point.colorInterpolation;
+			for (var j = 0; j < point.imageLegend.length && j < this.colorInterpolation.length; j++) {
+				point.imageLegend[j].color = this.colorInterpolation[j].toHexString();
 			}
 		}
     },
@@ -157,5 +157,5 @@
         }
     },
 
-    CLASS_NAME: "mapfish.GeoStat.Symbol"
+    CLASS_NAME: "mapfish.GeoStat.Point"
 });

=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/core/GeoStat/Symbol.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/core/GeoStat/Symbol.js	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/core/GeoStat/Symbol.js	2011-05-12 15:07:02 +0000
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2007  Camptocamp
+ *
+ * This file is part of MapFish Client
+ *
+ * MapFish Client is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MapFish Client is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with MapFish Client.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @requires core/GeoStat.js
+ */
+
+mapfish.GeoStat.Symbol = OpenLayers.Class(mapfish.GeoStat, {
+
+    classification: null,
+
+    initialize: function(map, options) {
+        mapfish.GeoStat.prototype.initialize.apply(this, arguments);
+    },
+
+    updateOptions: function(newOptions) {
+        this.addOptions(newOptions);
+    },
+
+    applyClassification: function(form) {
+        var panel = Ext.getCmp('groups_p');
+        G.stores.groupsByGroupSet.img = [];
+        for (var i = 0, items = panel.items.items; i < items.length; i++) {
+            G.stores.groupsByGroupSet.img.push(items[i].getRawValue());
+        }
+        
+        var boundsArray = G.stores.groupsByGroupSet.data.items;
+        var rules = new Array(boundsArray.length);
+        for (var i = 0; i < boundsArray.length; i++) {
+            var rule = new OpenLayers.Rule({                
+                symbolizer: {
+                    'pointRadius': 8,
+                    'externalGraphic': '../resources/ext-ux/iconcombo/' + G.stores.groupsByGroupSet.img[i] + '.png'
+                },                
+                filter: new OpenLayers.Filter.Comparison({
+                    type: OpenLayers.Filter.Comparison.EQUAL_TO,
+                    property: this.indicator,
+                    value: G.stores.groupsByGroupSet.data.items[i].data.name
+                })
+            });
+            rules[i] = rule;
+        }
+        
+        this.extendStyle(rules);
+        mapfish.GeoStat.prototype.applyClassification.apply(this, arguments);
+    },
+
+    updateLegend: function() {
+        if (!this.legendDiv) {
+            return;
+        }
+
+        this.legendDiv.update("");
+
+        for (var i = 0; i < G.stores.groupsByGroupSet.data.items.length; i++) {
+            var element = document.createElement("div");
+            element.style.backgroundImage = 'url(../resources/ext-ux/iconcombo/' + G.stores.groupsByGroupSet.img[i] + '.png)';
+            element.style.backgroundRepeat = 'no-repeat';
+            element.style.width = "25px";
+            element.style.height = "18px";
+            element.style.cssFloat = "left";
+            element.style.marginLeft = "3px";
+            this.legendDiv.appendChild(element);
+
+            element = document.createElement("div");
+            element.innerHTML = G.stores.groupsByGroupSet.data.items[i].data.name;
+            this.legendDiv.appendChild(element);
+
+            element = document.createElement("div");
+            element.style.clear = "left";
+            this.legendDiv.appendChild(element);
+        }
+    },
+
+    CLASS_NAME: "mapfish.GeoStat.Symbol"
+});

=== 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	2011-03-30 10:34:03 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/widgets/geostat/Choropleth.js	2011-05-12 12:36:10 +0000
@@ -217,6 +217,12 @@
     },
     
     createItems: function() {
+        
+        this.defaults = {
+			labelSeparator: G.conf.labelseparator,
+            emptyText: G.conf.emptytext
+        };
+        
         this.items = [
         {
             xtype: 'combo',
@@ -231,7 +237,6 @@
             triggerAction: 'all',
             emptyText: G.i18n.optional,
             selectOnFocus: true,
-			labelSeparator: G.conf.labelseparator,
             width: G.conf.combo_width,
             store: G.stores.polygonMapView,
             listeners: {
@@ -263,7 +268,6 @@
             xtype: 'combo',
             name: 'mapvaluetype',
             fieldLabel: G.i18n.mapvaluetype,
-			labelSeparator: G.conf.labelseparator,
             editable: false,
             valueField: 'id',
             displayField: 'name',
@@ -301,8 +305,6 @@
             mode: 'remote',
             forceSelection: true,
             triggerAction: 'all',
-            emptyText: G.conf.emptytext,
-			labelSeparator: G.conf.labelseparator,
             selectOnFocus: true,
             width: G.conf.combo_width,
             store: G.stores.indicatorGroup,
@@ -329,8 +331,6 @@
             mode: 'remote',
             forceSelection: true,
             triggerAction: 'all',
-            emptyText: G.conf.emptytext,
-			labelSeparator: G.conf.labelseparator,
             selectOnFocus: true,
             width: G.conf.combo_width,
             store: G.stores.indicatorsByGroup,
@@ -394,8 +394,6 @@
             mode: 'remote',
             forceSelection: true,
             triggerAction: 'all',
-            emptyText: G.conf.emptytext,
-			labelSeparator: G.conf.labelseparator,
             selectOnFocus: true,
             width: G.conf.combo_width,
             store: G.stores.dataElementGroup,
@@ -422,8 +420,6 @@
             mode: 'remote',
             forceSelection: true,
             triggerAction: 'all',
-            emptyText: G.conf.emptytext,
-			labelSeparator: G.conf.labelseparator,
             selectOnFocus: true,
             width: G.conf.combo_width,
             store: G.stores.dataElementsByGroup,
@@ -486,8 +482,6 @@
             mode: 'remote',
             forceSelection: true,
             triggerAction: 'all',
-            emptyText: G.conf.emptytext,
-			labelSeparator: G.conf.labelseparator,
             selectOnFocus: true,
             width: G.conf.combo_width,
             store: G.stores.periodType,
@@ -514,8 +508,6 @@
             mode: 'remote',
             forceSelection: true,
             triggerAction: 'all',
-            emptyText: G.conf.emptytext,
-			labelSeparator: G.conf.labelseparator,
             selectOnFocus: true,
             width: G.conf.combo_width,
             store: G.stores.periodsByTypeStore,
@@ -542,8 +534,6 @@
             fieldLabel: G.i18n.start_date,
             format: 'Y-m-d',
             hidden: true,
-            emptyText: G.conf.emptytext,
-			labelSeparator: G.conf.labelseparator,
             width: G.conf.combo_width,
             listeners: {
                 'select': {
@@ -564,8 +554,6 @@
             fieldLabel: G.i18n.end_date,
             format: 'Y-m-d',
             hidden: true,
-            emptyText: G.conf.emptytext,
-			labelSeparator: G.conf.labelseparator,
             width: G.conf.combo_width,
             listeners: {
                 'select': {
@@ -586,8 +574,6 @@
             xtype: 'textfield',
             name: 'boundary',
             fieldLabel: G.i18n.boundary,
-            emptyText: G.conf.emptytext,
-			labelSeparator: G.conf.labelseparator,
             width: G.conf.combo_width,
             style: 'cursor:pointer',
             node: {attributes: {hasChildrenWithCoordinates: false}},
@@ -613,8 +599,6 @@
             xtype: 'textfield',
             name: 'level',
             fieldLabel: G.i18n.level,
-            emptyText: G.conf.emptytext,
-			labelSeparator: G.conf.labelseparator,
             width: G.conf.combo_width,
             style: 'cursor:pointer',
             levelComboBox: null,
@@ -643,8 +627,6 @@
             displayField: 'text',
             mode: 'local',
             fieldLabel: G.i18n.legend_type,
-            emptyText: G.conf.emptytext,
-			labelSeparator: G.conf.labelseparator,
             value: this.legend.value,
             triggerAction: 'all',
             width: G.conf.combo_width,
@@ -685,8 +667,6 @@
             displayField: 'name',
             mode: 'remote',
             fieldLabel: G.i18n.legendset,
-            emptyText: G.conf.emptytext,
-			labelSeparator: G.conf.labelseparator,
             triggerAction: 'all',
             width: G.conf.combo_width,
 			hidden: true,
@@ -710,8 +690,6 @@
             valueField: 'value',
             displayField: 'text',
             mode: 'local',
-            emptyText: G.conf.emptytext,
-			labelSeparator: G.conf.labelseparator,
             value: this.legend.method,
             triggerAction: 'all',
             width: G.conf.combo_width,
@@ -746,8 +724,6 @@
             xtype: 'textfield',
             name: 'bounds',
             fieldLabel: G.i18n.bounds,
-			labelSeparator: G.conf.labelseparator,
-            emptyText: G.i18n.comma_separated_values,
             width: G.conf.combo_width,
             hidden: true,
             listeners: {
@@ -764,7 +740,6 @@
             xtype: 'combo',
             name: 'classes',
             fieldLabel: G.i18n.classes,
-			labelSeparator: G.conf.labelseparator,
             editable: false,
             valueField: 'value',
             displayField: 'value',
@@ -795,7 +770,6 @@
             xtype: 'colorfield',
             name: 'startcolor',
             fieldLabel: G.i18n.low_color,
-			labelSeparator: G.conf.labelseparator,
             allowBlank: false,
             width: G.conf.combo_width,
             value: "#FF0000",
@@ -813,7 +787,6 @@
             xtype: 'colorfield',
             name: 'endcolor',
             fieldLabel: G.i18n.high_color,
-			labelSeparator: G.conf.labelseparator,
             allowBlank: false,
             width: G.conf.combo_width,
             value: "#FFFF00",
@@ -912,8 +885,6 @@
 										forceSelection: true,
 										triggerAction: 'all',
 										selectOnFocus: true,
-										emptyText: G.conf.emptytext,
-										labelSeparator: G.conf.labelseparator,
 										fieldLabel: 'Level',
 										width: G.conf.combo_width_fieldset,
 										minListWidth: G.conf.combo_width_fieldset,
@@ -1518,7 +1489,7 @@
         Ext.getCmp('viewhistory_b').addItem(this);
         
 		var options = {
-            indicator: 'value',
+            indicator: 'id',
             method: this.form.findField('method').getValue(),
             numClasses: this.form.findField('classes').getValue(),
             colors: this.getColors()

=== renamed 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/Point.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/widgets/geostat/Symbol.js	2011-03-30 10:34:03 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/widgets/geostat/Point.js	2011-04-12 17:22:06 +0000
@@ -18,13 +18,13 @@
  */
 
 /**
- * @requires core/GeoStat/Symbol.js
+ * @requires core/GeoStat/Point.js
  * @requires core/Color.js
  */
 
 Ext.namespace('mapfish.widgets', 'mapfish.widgets.geostat');
 
-mapfish.widgets.geostat.Symbol = Ext.extend(Ext.FormPanel, {
+mapfish.widgets.geostat.Point = Ext.extend(Ext.FormPanel, {
 
     layer: null,
 
@@ -116,7 +116,7 @@
 			}
         }
         
-		mapfish.widgets.geostat.Symbol.superclass.initComponent.apply(this);
+		mapfish.widgets.geostat.Point.superclass.initComponent.apply(this);
     },
     
     setUrl: function(url) {
@@ -831,7 +831,7 @@
         {
             xtype: 'numberfield',
             name: 'radiuslow',
-            fieldLabel: 'Low radius',
+            fieldLabel: 'Low point size',
 			labelSeparator: G.conf.labelseparator,
             width: G.conf.combo_number_width_small,
             allowDecimals: false,
@@ -851,7 +851,7 @@
         {
             xtype: 'numberfield',
             name: 'radiushigh',
-            fieldLabel: 'High radius',
+            fieldLabel: 'High point size',
 			labelSeparator: G.conf.labelseparator,
             width: G.conf.combo_number_width_small,
             allowDecimals: false,
@@ -1071,8 +1071,8 @@
         this.selectFeatures = new OpenLayers.Control.newSelectFeature(
             this.layer, {
                 onHoverSelect: onHoverSelect,
-                onHoverUnselect: onHoverUnselect
-                //onClickSelect: onClickSelect
+                onHoverUnselect: onHoverUnselect,
+                onClickSelect: onClickSelect
             }
         );
         
@@ -1492,7 +1492,8 @@
         
         this.setUrl(G.conf.path_mapping + 'getGeoJson.action?' +
             'parentId=' + this.organisationUnitSelection.parent.id +
-            '&level=' + this.organisationUnitSelection.level.level
+            '&level=' + this.organisationUnitSelection.level.level +
+            '&type=true'
         );
     },
 
@@ -1580,7 +1581,7 @@
             maxSize: parseInt(this.form.findField('radiushigh').getValue())
 		};
 
-		this.coreComp.updateOptions(options);       
+		this.coreComp.updateOptions(options);
         this.coreComp.applyClassification();
         this.classificationApplied = true;
         
@@ -1588,7 +1589,7 @@
     },
     
     onRender: function(ct, position) {
-        mapfish.widgets.geostat.Symbol.superclass.onRender.apply(this, arguments);
+        mapfish.widgets.geostat.Point.superclass.onRender.apply(this, arguments);
         if (this.loadMask) {
             this.loadMask = new Ext.LoadMask(this.bwrap, this.loadMask);
             this.loadMask.show();
@@ -1606,7 +1607,7 @@
             'labelGenerator': this.labelGenerator
         };
 
-        this.coreComp = new mapfish.GeoStat.Symbol(this.map, coreOptions);
+        this.coreComp = new mapfish.GeoStat.Point(this.map, coreOptions);
         
         if (G.vars.parameter.id) {
             G.util.expandWidget(this);
@@ -1615,4 +1616,4 @@
     }
 });
 
-Ext.reg('symbol', mapfish.widgets.geostat.Symbol);
+Ext.reg('point', mapfish.widgets.geostat.Point);

=== added 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	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/resources/mapfish/widgets/geostat/Symbol.js	2011-05-13 13:11:41 +0000
@@ -0,0 +1,686 @@
+/*
+ * Copyright (C) 2007-2008  Camptocamp|
+ *
+ * This file is part of MapFish Client
+ *
+ * MapFish Client is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MapFish Client is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with MapFish Client.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @requires core/GeoStat/Symbol.js
+ * @requires core/Color.js
+ */
+
+Ext.namespace('mapfish.widgets', 'mapfish.widgets.geostat');
+
+mapfish.widgets.geostat.Symbol = Ext.extend(Ext.FormPanel, {
+
+    layer: null,
+
+    format: null,
+
+    url: null,
+
+    featureSelection: true,
+
+    nameAttribute: null,
+
+    indicator: null,
+
+    indicatorText: null,
+
+    coreComp: null,
+
+    classificationApplied: false,
+
+    ready: false,
+
+    border: false,
+
+    loadMask: false,
+
+    labelGenerator: null,
+
+    colorInterpolation: false,
+
+    newUrl: false,
+
+    legend: false,
+
+	imageLegend: false,
+
+	bounds: false,
+
+    mapView: false,
+
+    mapData: false,
+    
+    labels: false,
+    
+    valueType: false,
+    
+    selectFeatures: false,
+    
+    organisationUnitSelection: false,
+    
+    iconCombos: [],
+    
+    iconStore: new Ext.data.ArrayStore({
+        fields: ['name', 'css'],
+        data: [
+            ['0','ux-ic-icon-0'],
+            ['1','ux-ic-icon-1'],
+            ['2','ux-ic-icon-2'],
+            ['3','ux-ic-icon-3'],
+            ['4','ux-ic-icon-4'],
+            ['5','ux-ic-icon-5'],
+            ['6','ux-ic-icon-6'],
+            ['7','ux-ic-icon-7'],
+            ['8','ux-ic-icon-8'],
+            ['9','ux-ic-icon-9'],
+            ['10','ux-ic-icon-10'],
+            ['11','ux-ic-icon-11'],
+            ['12','ux-ic-icon-12']
+        ]
+    }),
+    
+    initComponent: function() {
+        
+        this.initProperties();
+        
+        this.createItems();
+        
+        this.createSelectFeatures();
+        
+		mapfish.widgets.geostat.Symbol.superclass.initComponent.apply(this);
+    },
+    
+    setUrl: function(url) {
+        this.url = url;
+        this.coreComp.setUrl(this.url);
+    },
+
+    requestSuccess: function(request) {
+        this.ready = true;
+
+        if (this.loadMask && this.rendered) {
+            this.loadMask.hide();
+        }
+    },
+
+    requestFailure: function(request) {
+        OpenLayers.Console.error(G.i18n.ajax_request_failed);
+    },
+    
+    getColors: function() {
+        var startColor = new mapfish.ColorRgb();
+        startColor.setFromHex(this.form.findField('startcolor').getValue());
+        var endColor = new mapfish.ColorRgb();
+        endColor.setFromHex(this.form.findField('endcolor').getValue());
+        return [startColor, endColor];
+    },
+    
+    initProperties: function() {
+        this.legend = {
+            value: G.conf.map_legend_type_automatic,
+            method: G.conf.classify_by_equal_intervals,
+            classes: 5,
+            reset: function() {
+                this.value = G.conf.map_legend_type_automatic;
+                this.method = G.conf.classify_by_equal_intervals;
+                this.classes = 5;
+            }
+        };
+        
+        this.organisationUnitSelection = {
+            parent: {
+                id: null,
+                name: null,
+                level: null
+            },
+            level: {
+                level: null,
+                name: null
+            },
+            setValues: function(pid, pn, pl, ll, ln) {
+                this.parent.id = pid || this.parent.id;
+                this.parent.name = pn || this.parent.name;
+                this.parent.level = pl || this.parent.level;
+                this.level.level = ll || this.level.level;
+                this.level.name = ln || this.level.name;
+            },
+            getValues: function() {
+                return {
+                    parent: {
+                        id: this.parent.id,
+                        name: this.parent.name,
+                        level: this.parent.level
+                    },
+                    level: {
+                        level: this.level.level,
+                        name: this.level.name
+                    }                    
+                };
+            },
+            setValuesOnDrillDown: function(pid, pn) {
+                this.parent.id = pid;
+                this.parent.name = pn;
+                this.parent.level = this.level.level;
+                this.level.level++;
+                this.level.name = G.stores.organisationUnitLevel.getAt(
+                    G.stores.organisationUnitLevel.find('level', this.level.level)).data.name;
+                
+                return [this.parent.name, this.level.name];
+            }                
+        };
+        
+        this.valueType = {
+            value: G.conf.map_value_type_indicator,
+            setIndicator: function() {
+                this.value = G.conf.map_value_type_indicator;
+            },
+            setDatElement: function() {
+                this.value = G.conf.map_value_type_dataelement;
+            },
+            isIndicator: function() {
+                return this.value == G.conf.map_value_type_indicator;
+            },
+            isDataElement: function() {
+                return this.value == G.conf.map_value_type_dataelement;
+            }
+        };
+    },
+    
+    createItems: function() {
+        this.items = [
+            {
+                xtype: 'textfield',
+                name: 'boundary',
+                fieldLabel: G.i18n.boundary,
+                emptyText: G.conf.emptytext,
+                labelSeparator: G.conf.labelseparator,
+                width: G.conf.combo_width,
+                style: 'cursor:pointer',
+                node: {attributes: {hasChildrenWithCoordinates: false}},
+                selectedNode: null,
+                treeWindow: null,
+                treePanel: null,
+                listeners: {
+                    'focus': {
+                        scope: this,
+                        fn: function(tf) {
+                            if (tf.treeWindow) {
+                                tf.treeWindow.show();
+                            }
+                            else {
+                                this.createSingletonCmp.treeWindow.call(this);
+                            }
+                        }
+                    }
+                }
+            },
+            
+            {
+                xtype: 'textfield',
+                name: 'level',
+                fieldLabel: G.i18n.level,
+                emptyText: G.conf.emptytext,
+                labelSeparator: G.conf.labelseparator,
+                width: G.conf.combo_width,
+                style: 'cursor:pointer',
+                levelComboBox: null,
+                listeners: {
+                    'focus': {
+                        scope: this,
+                        fn: function() {
+                            if (this.form.findField('boundary').treeWindow) {
+                                this.form.findField('boundary').treeWindow.show();
+                            }
+                            else {
+                                this.createSingletonCmp.treeWindow.call(this);
+                            }
+                        }
+                    }
+                }
+            },
+            
+            {
+                xtype: 'combo',
+                name: 'groupset',
+                fieldLabel: G.i18n.groupset,
+                typeAhead: true,
+                editable: false,
+                valueField: 'id',
+                displayField: 'name',
+                mode: 'remote',
+                forceSelection: true,
+                triggerAction: 'all',
+                emptyText: G.conf.emptytext,
+                labelSeparator: G.conf.labelseparator,
+                selectOnFocus: true,
+                width: G.conf.combo_width,
+                currentValue: false,
+                store: G.stores.groupSet,
+                listeners: {
+                    'select': {
+                        scope: this,
+                        fn: function(cb) {
+                            var panel = Ext.getCmp('groups_p');
+                            if (cb.currentValue != cb.getValue() && cb.getRawValue() == 'Type') {
+                                cb.currentValue = cb.getValue();
+                                G.stores.groupsByGroupSet.setBaseParam('id', cb.getValue());
+                                G.stores.groupsByGroupSet.load({scope: this, callback: function() {
+                                    panel.removeAll();
+                                    
+                                    for (var i = 0; i < G.stores.groupsByGroupSet.getTotalCount(); i++) {
+                                        var combo = {
+                                            fieldLabel: G.stores.groupsByGroupSet.getAt(i).data.name,
+                                            value: i
+                                        };
+                                        panel.add(combo);
+                                        panel.doLayout();
+                                    }
+                                    
+                                    this.classify(false, true);
+                                }});
+                            }
+                            else if (cb.getRawValue() != 'Type') {
+                                cb.currentValue = cb.getValue();
+                                panel.removeAll();
+                                panel.doLayout();
+                            }
+                        }
+                    }
+                }
+            },
+            
+            {
+                xtype: 'panel',
+                id: 'groups_p',
+                layout: 'form',
+                bodyStyle: 'margin:0px; padding:8px 0px 8px 5px;',
+                width: '100%',
+                labelWidth: 195,
+                defaults: {
+                    xtype: 'combo',
+                    plugins: new Ext.ux.plugins.IconCombo(),
+                    valueField: 'name',
+                    displayField: 'css',
+                    iconClsField: 'css',
+                    editable: false,
+                    triggerAction: 'all',
+                    mode: 'local',
+                    labelStyle: 'color:#000',
+                    labelSeparator: G.conf.labelseparator,
+                    width: 50,
+                    listWidth: 50,
+                    store: this.iconStore,
+                    listeners: {
+                        'select': {
+                            scope: this,
+                            fn: function() {
+                                this.classify(false, true);
+                            }
+                        }
+                    }
+                }
+            }
+        ];
+    },
+    
+    createSingletonCmp: {
+		treeWindow: function() {
+			Ext.Ajax.request({
+				url: G.conf.path_commons + 'getOrganisationUnits' + G.conf.type,
+				params: {level: 1},
+				method: 'POST',
+				scope: this,
+				success: function(r) {
+					var rootNode = Ext.util.JSON.decode(r.responseText).organisationUnits[0];
+                    var rootUnit = {
+						id: rootNode.id,
+						name: rootNode.name,
+                        level: 1,
+						hasChildrenWithCoordinates: rootNode.hasChildrenWithCoordinates
+					};
+					
+					var w = new Ext.Window({
+						title: 'Boundary and level',
+						closeAction: 'hide',
+						autoScroll: true,
+						height: 'auto',
+						autoHeight: true,
+						width: G.conf.window_width,
+						items: [
+							{
+								xtype: 'panel',
+								bodyStyle: 'padding:8px; background-color:#ffffff',
+								items: [
+									{html: '<div class="window-info">Select outer boundary</div>'},
+									{
+										xtype: 'treepanel',
+										bodyStyle: 'background-color:#ffffff',
+										height: screen.height / 3,
+										autoScroll: true,
+										lines: false,
+										loader: new Ext.tree.TreeLoader({
+											dataUrl: G.conf.path_mapping + 'getOrganisationUnitChildren' + G.conf.type
+										}),
+										root: {
+											id: rootUnit.id,
+											text: rootUnit.name,
+                                            level: rootUnit.level,
+											hasChildrenWithCoordinates: rootUnit.hasChildrenWithCoordinates,
+											nodeType: 'async',
+											draggable: false,
+											expanded: true
+										},
+										clickedNode: null,
+										listeners: {
+											'click': {
+												scope: this,
+												fn: function(n) {
+													this.form.findField('boundary').selectedNode = n;
+												}
+											},
+                                            'afterrender': {
+                                                scope: this,
+                                                fn: function(tp) {
+                                                    this.form.findField('boundary').treePanel = tp;
+                                                }
+                                            }
+										}
+									}
+								]
+							},
+							{
+								xtype: 'panel',
+								layout: 'form',
+								bodyStyle: 'padding:8px; background-color:#ffffff',
+                                labelWidth: G.conf.label_width,
+								items: [
+									{html: '<div class="window-info">Select organisation unit level</div>'},
+									{
+										xtype: 'combo',
+										fieldLabel: G.i18n.level,
+										editable: false,
+										valueField: 'level',
+										displayField: 'name',
+										mode: 'remote',
+										forceSelection: true,
+										triggerAction: 'all',
+										selectOnFocus: true,
+										emptyText: G.conf.emptytext,
+										labelSeparator: G.conf.labelseparator,
+										fieldLabel: 'Level',
+										width: G.conf.combo_width_fieldset,
+										minListWidth: G.conf.combo_width_fieldset,
+										store: G.stores.organisationUnitLevel,
+										listeners: {
+											'afterrender': {
+												scope: this,
+												fn: function(cb) {
+													this.form.findField('level').levelComboBox = cb;
+												}
+											}
+										}
+									}
+								]
+							}
+						],
+						bbar: [
+							'->',
+							{
+								xtype: 'button',
+								text: G.i18n.apply,
+								iconCls: 'icon-assign',
+								scope: this,
+								handler: function() {
+									var node = this.form.findField('boundary').selectedNode;
+									if (!node || !this.form.findField('level').levelComboBox.getValue()) {
+										return;
+									}
+									if (node.attributes.level > this.form.findField('level').levelComboBox.getValue()) {
+										Ext.message.msg(false, 'Level is higher than boundary level');
+										return;
+									}
+
+									if (Ext.getCmp('locatefeature_w')) {
+										Ext.getCmp('locatefeature_w').destroy();
+									}
+									
+                                    this.organisationUnitSelection.setValues(node.attributes.id, node.attributes.text, node.attributes.level,
+										this.form.findField('level').levelComboBox.getValue(), this.form.findField('level').levelComboBox.getRawValue());
+										
+									this.form.findField('boundary').setValue(node.attributes.text);
+									this.form.findField('level').setValue(this.form.findField('level').levelComboBox.getRawValue());
+									
+									this.form.findField('boundary').treeWindow.hide();									
+									this.loadGeoJson();
+								}
+							}
+						]
+					});
+					
+					var x = Ext.getCmp('center').x + G.conf.window_position_x;
+					var y = Ext.getCmp('center').y + G.conf.window_position_y;
+					w.setPosition(x,y);
+					w.show();
+					this.form.findField('boundary').treeWindow = w;
+				}
+			});
+		}
+	},
+    
+    createSelectFeatures: function() {
+        var scope = this;
+        
+        var onHoverSelect = function onHoverSelect(feature) {
+            if (feature.attributes.name) {
+                document.getElementById('featuredatatext').innerHTML = '<div style="color:black">' + feature.attributes.name + '</div><div style="color:#555">' + feature.attributes.type + '</div>';
+            }
+            else {
+                document.getElementById('featuredatatext').innerHTML = '';
+            }
+        };
+        
+        var onHoverUnselect = function onHoverUnselect(feature) {
+            if (feature.attributes.name) {
+                document.getElementById('featuredatatext').innerHTML = '<div style="color:#666">' + G.i18n.no_feature_selected + '</div>';
+            }
+            else {
+                document.getElementById('featuredatatext').innerHTML = '';
+            }
+        };
+        
+        var onClickSelect = function onClickSelect(feature) {
+            var featureInfoWindow = scope.form.findField('groupset').featureInfoWindow;
+            if (featureInfoWindow) {
+                featureInfoWindow.destroy();
+            }
+            
+            var cssCls = G.stores.groupsByGroupSet.img[G.stores.groupsByGroupSet.find('name', feature.attributes.type)] + '-title';            
+            featureInfoWindow = new Ext.Window({
+                title: '<span class="' + cssCls + '">' + feature.attributes.name + '</span>',
+                layout: 'fit',
+                width: 200,
+                height: 225,
+                items: [
+                    {
+                        xtype: 'panel',
+                        layout: 'anchor',
+                        bodyStyle: 'padding:8px',
+                        items: [
+                            {html: '<div class="window-info">Type:<p style="font-weight:normal">' + feature.attributes.type + '</p></div>'},
+                            {html: '<div class="window-info">Address:<p style="font-weight:normal">' + feature.attributes.address + '</p></div>'},
+                            {html: '<div class="window-info">Contact person:<p style="font-weight:normal">' + feature.attributes.contactPerson + '</p></div>'},
+                            {html: '<div class="window-info">Email:<p style="font-weight:normal">' + feature.attributes.email + '</p></div>'},
+                            {html: '<div class="window-info">Phone number:<p style="font-weight:normal">' + feature.attributes.phoneNumber + '</p></div>'}
+                        ]
+                    }
+                ]
+            });
+            
+            featureInfoWindow.setPagePosition(Ext.getCmp('east').x - (G.conf.window_width + 15 + 5 - 51), Ext.getCmp('center').y + 41);
+            scope.form.findField('groupset').featureInfoWindow = featureInfoWindow;
+            featureInfoWindow.show();
+        };
+        
+        this.selectFeatures = new OpenLayers.Control.newSelectFeature(
+            this.layer, {
+                onHoverSelect: onHoverSelect,
+                onHoverUnselect: onHoverUnselect,
+                onClickSelect: onClickSelect
+            }
+        );
+        
+        G.vars.map.addControl(this.selectFeatures);
+        this.selectFeatures.activate();
+    },
+    
+    formValidation: {
+        validateForm: function(exception) {
+            if (!this.form.findField('boundary').getValue() || !this.form.findField('level').getValue()) {
+                if (exception) {
+                    Ext.message.msg(false, G.i18n.form_is_not_complete);
+                }
+                return false;
+            }
+            
+            if (!this.form.findField('groupset').getValue()) {
+                if (exception) {
+                    Ext.message.msg(false, G.i18n.form_is_not_complete);
+                }
+                return false;
+            }                
+            
+            return true;
+        }
+    },
+    
+    formValues: {
+		getAllValues: function() {
+			return {
+				featureType: G.conf.map_feature_type_point,
+				mapValueType: this.form.findField('mapvaluetype').getValue(),
+                indicatorGroupId: this.valueType.isIndicator() ? this.form.findField('indicatorgroup').getValue() : null,
+                indicatorId: this.valueType.isIndicator() ? this.form.findField('indicator').getValue() : null,
+				indicatorName: this.valueType.isIndicator() ? this.form.findField('indicator').getRawValue() : null,
+                dataElementGroupId: this.valueType.isDataElement() ? this.form.findField('dataelementgroup').getValue() : null,
+                dataElementId: this.valueType.isDataElement() ? this.form.findField('dataelement').getValue() : null,
+				dataElementName: this.valueType.isDataElement() ? this.form.findField('dataelement').getRawValue() : null,
+                mapDateType: G.system.mapDateType.value,
+                periodTypeId: G.system.mapDateType.isFixed() ? this.form.findField('periodtype').getValue() : null,
+                periodId: G.system.mapDateType.isFixed() ? this.form.findField('period').getValue() : null,
+                periodName: G.system.mapDateType.isFixed() ? this.form.findField('period').getRawValue() : null,
+                startDate: G.system.mapDateType.isStartEnd() ? this.form.findField('startdate').getRawValue() : null,
+                endDate: G.system.mapDateType.isStartEnd() ? this.form.findField('enddate').getRawValue() : null,
+				parentOrganisationUnitId: this.organisationUnitSelection.parent.id,
+                parentOrganisationUnitLevel: this.organisationUnitSelection.parent.level,
+                parentOrganisationUnitName: this.organisationUnitSelection.parent.name,
+				organisationUnitLevel: this.organisationUnitSelection.level.level,
+                organisationUnitLevelName: this.organisationUnitSelection.level.name,
+				mapLegendType: this.form.findField('maplegendtype').getValue(),
+				method: this.legend.value == G.conf.map_legend_type_automatic ? this.form.findField('method').getValue() : null,
+				classes: this.legend.value == G.conf.map_legend_type_automatic ? this.form.findField('classes').getValue() : null,
+				bounds: this.legend.value == G.conf.map_legend_type_automatic && this.legend.method == G.conf.classify_with_bounds ? this.form.findField('bounds').getValue() : null,
+				colorLow: this.legend.value == G.conf.map_legend_type_automatic ? this.form.findField('startcolor').getValue() : null,
+				colorHigh: this.legend.value == G.conf.map_legend_type_automatic ? this.form.findField('endcolor').getValue() : null,
+                mapLegendSetId: this.legend.value == G.conf.map_legend_type_predefined ? this.form.findField('maplegendset').getValue() : null,
+				radiusLow: this.form.findField('radiuslow').getValue(),
+				radiusHigh: this.form.findField('radiushigh').getValue(),
+				longitude: G.vars.map.getCenter().lon,
+				latitude: G.vars.map.getCenter().lat,
+				zoom: parseFloat(G.vars.map.getZoom())
+			};
+		},
+        
+        clearForm: function() {
+            var boundary = this.form.findField('boundary')
+            var level = this.form.findField('level');
+            boundary.reset();
+            level.reset();
+            if (boundary.treePanel && level.levelComboBox) {
+                boundary.treePanel.selectPath(boundary.treePanel.getRootNode().getPath());
+                level.levelComboBox.clearValue();
+            }
+            
+            this.layer.destroyFeatures();
+            this.layer.setVisibility(false);
+        }
+	},
+    
+    loadGeoJson: function() {
+        G.vars.mask.msg = G.i18n.loading_geojson;
+        G.vars.mask.show();
+        
+        this.setUrl(G.conf.path_mapping + 'getGeoJson.action?' +
+            'parentId=' + this.organisationUnitSelection.parent.id +
+            '&level=' + this.organisationUnitSelection.level.level +
+            '&symbol=true'
+        );
+    },
+
+    classify: function(exception, position) {
+        if (this.formValidation.validateForm.apply(this, [exception])) {            
+            if (!position && this.layer.features.length) {
+                G.vars.map.zoomToExtent(this.layer.getDataExtent());
+            }
+            
+            for (var i = 0; i < this.layer.features.length; i++) {
+                this.layer.features[i].attributes.labelString = this.layer.features[i].attributes.name;
+            }
+             
+            this.applyValues();
+        }
+    },
+
+    applyValues: function() {
+		var options = {indicator: this.form.findField('groupset').getRawValue().toLowerCase()};
+		this.coreComp.updateOptions(options);
+        this.coreComp.applyClassification(this.form);
+        this.classificationApplied = true;
+        
+        G.vars.mask.hide();
+    },
+    
+    onRender: function(ct, position) {
+        mapfish.widgets.geostat.Symbol.superclass.onRender.apply(this, arguments);
+        if (this.loadMask) {
+            this.loadMask = new Ext.LoadMask(this.bwrap, this.loadMask);
+            this.loadMask.show();
+        }
+
+        var coreOptions = {
+            'layer': this.layer,
+            'format': this.format,
+            'url': this.url,
+            'requestSuccess': this.requestSuccess.createDelegate(this),
+            'requestFailure': this.requestFailure.createDelegate(this),
+            'featureSelection': this.featureSelection,
+            'nameAttribute': this.nameAttribute,
+            'legendDiv': this.legendDiv,
+            'labelGenerator': this.labelGenerator
+        };
+
+        this.coreComp = new mapfish.GeoStat.Symbol(this.map, coreOptions);
+        
+        if (G.vars.parameter.id) {
+            G.util.expandWidget(this);
+			G.vars.parameter = false;
+		}
+    }
+});
+
+Ext.reg('symbol', mapfish.widgets.geostat.Symbol);


Follow ups