← Back to team overview

dhis2-devs team mailing list archive

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

 

FYI there is now a new symbol layer in GIS. Facilities appear as icons
representing their organisation unit group in the *type* group set. Please
see the attached image.

On Fri, May 13, 2011 at 15:25, <noreply@xxxxxxxxxxxxx> wrote:

> 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);
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dhis2-devs
> Post to     : dhis2-devs@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dhis2-devs
> More help   : https://help.launchpad.net/ListHelp
>
>

Attachment: symbol_layer.png
Description: PNG image


References