Revision: 4814
          http://sourceforge.net/p/jump-pilot/code/4814
Author:   michaudm
Date:     2016-02-04 22:39:04 +0000 (Thu, 04 Feb 2016)
Log Message:
-----------
Change terminology for new dissolve plugin

Modified Paths:
--------------
    core/trunk/scripts/default-plugins.xml
    core/trunk/src/language/jump.properties
    core/trunk/src/language/jump_cz.properties
    core/trunk/src/language/jump_de.properties
    core/trunk/src/language/jump_es.properties
    core/trunk/src/language/jump_fi.properties
    core/trunk/src/language/jump_fr.properties
    core/trunk/src/language/jump_hu.properties
    core/trunk/src/language/jump_it.properties
    core/trunk/src/language/jump_ja_JP.properties
    core/trunk/src/language/jump_ml.properties
    core/trunk/src/language/jump_pt.properties
    core/trunk/src/language/jump_pt_BR.properties
    core/trunk/src/language/jump_ta_IN.properties
    core/trunk/src/language/jump_te.properties
    core/trunk/src/language/jump_zh_CN.properties
    core/trunk/src/language/jump_zh_HK.properties

Added Paths:
-----------
    core/trunk/src/org/openjump/core/ui/plugin/tools/Dissolve2PlugIn.java

Removed Paths:
-------------
    core/trunk/src/org/openjump/core/ui/plugin/tools/GroupByPlugIn.java

Modified: core/trunk/scripts/default-plugins.xml
===================================================================
--- core/trunk/scripts/default-plugins.xml      2016-02-04 16:08:53 UTC (rev 
4813)
+++ core/trunk/scripts/default-plugins.xml      2016-02-04 22:39:04 UTC (rev 
4814)
@@ -628,7 +628,7 @@
                org.openjump.core.ui.plugin.tools.DissolvePlugIn
        </plug-in>
        <plug-in>
-               org.openjump.core.ui.plugin.tools.GroupByPlugIn
+               org.openjump.core.ui.plugin.tools.Dissolve2PlugIn
        </plug-in>
        <plug-in>
                
com.vividsolutions.jump.workbench.ui.plugin.analysis.GeometryFunctionPlugIn

Modified: core/trunk/src/language/jump.properties
===================================================================
--- core/trunk/src/language/jump.properties     2016-02-04 16:08:53 UTC (rev 
4813)
+++ core/trunk/src/language/jump.properties     2016-02-04 22:39:04 UTC (rev 
4814)
@@ -1354,27 +1354,27 @@
 org.openjump.core.ui.plugin.tools.ExtractPointsPlugIn.Extract-Points = Extract 
Points
 org.openjump.core.ui.plugin.tools.ExtractPointsPlugIn.description = Extracts 
points from polygon or line features and writes them to a new layer. Note, for 
closed geometries start point and end point are the same. If closed geometries 
are to be observed, then the last point is not returned to avoid two overlaying 
points.
 org.openjump.core.ui.plugin.tools.ExtractPointsPlugIn.points = points
-org.openjump.core.ui.plugin.tools.GroupByPlugIn = Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function = Add 
aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute = Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes = Add key 
attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function = Aggregate 
function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions = 
Aggregate functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators = Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes = 
Dataset must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description = Group features 
having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn = Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function = Add 
aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute = Add key 
attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes = Add key 
attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function = 
Aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions = 
Aggregate functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators = Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes 
= Dataset must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description = Group features 
having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required
 = Exactly one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator = Geometry 
aggregator
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null = Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute = Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes = Key Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by
 = No available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name = Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter = Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function = 
Remove aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer = Source Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required
 = Exactly one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator = 
Geometry aggregator
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null = Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute = Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes = Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by
 = No available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name = Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter = Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function = 
Remove aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer = Source Layer
 
org.openjump.core.ui.plugin.tools.JoinAttributesSpatiallyPlugIn.Join-Attributes-Spatially
 = Join Attributes Spatially
 
org.openjump.core.ui.plugin.tools.JoinAttributesSpatiallyPlugIn.Joins-attributes-of-source-layer-according-to-a-spatial-and-a-statistic-criterion
 = Joins attributes of source layer according to a spatial and a statistical 
criterion.
 org.openjump.core.ui.plugin.tools.JoinAttributesSpatiallyPlugIn.buffer-radius 
= buffer radius

Modified: core/trunk/src/language/jump_cz.properties
===================================================================
--- core/trunk/src/language/jump_cz.properties  2016-02-04 16:08:53 UTC (rev 
4813)
+++ core/trunk/src/language/jump_cz.properties  2016-02-04 22:39:04 UTC (rev 
4814)
@@ -2619,24 +2619,24 @@
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=\#T\:Median 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=\#T\:Median 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=\#T\:Majority
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=\#T\:Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=\#T\:Add
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=\#T\:Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=\#T\:Add 
key attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=\#T\:Aggregate
 functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=\#T\:Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=\#T\:Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=\#T\:Add
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=\#T\:Add 
key attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=\#T\:Add 
key attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=\#T\:Aggregate
 functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=\#T\:Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=\#T\:Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=\#T\:Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=\#T\:Key 
Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=\#T\:Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=\#T\:Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=\#T\:Source Layer
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=\#T\:Aggregate
 function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=\#T\:Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=\#T\:Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=\#T\:Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=\#T\:Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=\#T\:Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=\#T\:Source 
Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=\#T\:Aggregate
 function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=\#T\:Geometry
 aggregator

Modified: core/trunk/src/language/jump_de.properties
===================================================================
--- core/trunk/src/language/jump_de.properties  2016-02-04 16:08:53 UTC (rev 
4813)
+++ core/trunk/src/language/jump_de.properties  2016-02-04 22:39:04 UTC (rev 
4814)
@@ -2615,24 +2615,24 @@
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=\#T\:Median 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=\#T\:Median 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=\#T\:Majority
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=\#T\:Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=\#T\:Add
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=\#T\:Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=\#T\:Add 
key attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=\#T\:Aggregate
 functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=\#T\:Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=\#T\:Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=\#T\:Add
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=\#T\:Add 
key attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=\#T\:Add 
key attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=\#T\:Aggregate
 functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=\#T\:Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=\#T\:Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=\#T\:Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=\#T\:Key 
Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=\#T\:Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=\#T\:Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=\#T\:Source Layer
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=\#T\:Aggregate
 function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=\#T\:Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=\#T\:Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=\#T\:Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=\#T\:Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=\#T\:Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=\#T\:Source 
Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=\#T\:Aggregate
 function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=\#T\:Geometry
 aggregator

Modified: core/trunk/src/language/jump_es.properties
===================================================================
--- core/trunk/src/language/jump_es.properties  2016-02-04 16:08:53 UTC (rev 
4813)
+++ core/trunk/src/language/jump_es.properties  2016-02-04 22:39:04 UTC (rev 
4814)
@@ -2596,24 +2596,24 @@
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=\#T\:Median 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=\#T\:Median 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=\#T\:Majority
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=\#T\:Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=\#T\:Add
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=\#T\:Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=\#T\:Add 
key attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=\#T\:Aggregate
 functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=\#T\:Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=\#T\:Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=\#T\:Add
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=\#T\:Add 
key attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=\#T\:Add 
key attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=\#T\:Aggregate
 functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=\#T\:Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=\#T\:Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=\#T\:Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=\#T\:Key 
Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=\#T\:Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=\#T\:Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=\#T\:Source Layer
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=\#T\:Aggregate
 function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=\#T\:Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=\#T\:Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=\#T\:Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=\#T\:Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=\#T\:Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=\#T\:Source 
Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=\#T\:Aggregate
 function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=\#T\:Geometry
 aggregator

Modified: core/trunk/src/language/jump_fi.properties
===================================================================
--- core/trunk/src/language/jump_fi.properties  2016-02-04 16:08:53 UTC (rev 
4813)
+++ core/trunk/src/language/jump_fi.properties  2016-02-04 22:39:04 UTC (rev 
4814)
@@ -2592,24 +2592,24 @@
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=\#T\:Median 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=\#T\:Median 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=\#T\:Majority
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=\#T\:Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=\#T\:Add
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=\#T\:Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=\#T\:Add 
key attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=\#T\:Aggregate
 functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=\#T\:Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=\#T\:Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=\#T\:Add
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=\#T\:Add 
key attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=\#T\:Add 
key attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=\#T\:Aggregate
 functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=\#T\:Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=\#T\:Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=\#T\:Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=\#T\:Key 
Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=\#T\:Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=\#T\:Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=\#T\:Source Layer
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=\#T\:Aggregate
 function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=\#T\:Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=\#T\:Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=\#T\:Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=\#T\:Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=\#T\:Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=\#T\:Source 
Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=\#T\:Aggregate
 function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=\#T\:Geometry
 aggregator

Modified: core/trunk/src/language/jump_fr.properties
===================================================================
--- core/trunk/src/language/jump_fr.properties  2016-02-04 16:08:53 UTC (rev 
4813)
+++ core/trunk/src/language/jump_fr.properties  2016-02-04 22:39:04 UTC (rev 
4814)
@@ -2622,24 +2622,24 @@
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=M\xE9diane 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=M\xE9diane 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=Majorit\xE9
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=Regroupement
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=Ajouter 
une fonction d'agr\xE9gation
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=Ajouter un 
attribut-cl\xE9
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=D\xE9finir 
les attributs formant la cl\xE9
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=Fonctions 
d'agr\xE9gation
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=Agr\xE9gateurs
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=Le
 jeu de donn\xE9es doit avoir des attributs
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=Regroupe les 
objets ayant les m\xEAmes valeurs pour les attributs-cl\xE9.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=Fusion/Agr\xE9gation
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=Ajouter
 une fonction d'agr\xE9gation
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=Ajouter un 
attribut-cl\xE9
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=D\xE9finir
 les attributs formant la cl\xE9
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=Fonctions
 d'agr\xE9gation
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=Agr\xE9gateurs
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=Le
 jeu de donn\xE9es doit avoir des attributs
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=Regroupe les 
objets ayant les m\xEAmes valeurs pour les attributs-cl\xE9.\n\
   Les attributs-cl\xE9 sont automatiquement inclus dans le schema de sortie.\n\
   Les autres attributs peuvent \xEAtre agr\xE9g\xE9s en utilisant les 
fonctions d\xE9finies dans le panneau 'agr\xE9gateurs'.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=Un
 seul attribut g\xE9om\xE9trique est requis pour le sch\xE9ma de sortie
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=Ignorer les <null>
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=Attribut en 
entr\xE9e
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=Attributs-cl\xE9
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=Aucun
 attribut \xE0 regrouper
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=Nom en sortie
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=Param\xE8tre
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=Supprimer
 la fonction d'agr\xE9gation
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=Couche source
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=Fonction 
d'agr\xE9gation
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=Agr\xE9gateur
 g\xE9om\xE9trique
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=Un
 seul attribut g\xE9om\xE9trique est requis pour le sch\xE9ma de sortie
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=Ignorer les 
<null>
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=Attribut en 
entr\xE9e
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=Attributs-cl\xE9
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=Aucun
 attribut \xE0 regrouper
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=Nom en sortie
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=Param\xE8tre
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=Supprimer
 la fonction d'agr\xE9gation
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=Couche source
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=Fonction 
d'agr\xE9gation
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=Agr\xE9gateur
 g\xE9om\xE9trique

Modified: core/trunk/src/language/jump_hu.properties
===================================================================
--- core/trunk/src/language/jump_hu.properties  2016-02-04 16:08:53 UTC (rev 
4813)
+++ core/trunk/src/language/jump_hu.properties  2016-02-04 22:39:04 UTC (rev 
4814)
@@ -2615,24 +2615,24 @@
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=\#T\:Median 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=\#T\:Median 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=\#T\:Majority
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=\#T\:Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=\#T\:Add
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=\#T\:Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=\#T\:Add 
key attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=\#T\:Aggregate
 functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=\#T\:Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=\#T\:Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=\#T\:Add
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=\#T\:Add 
key attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=\#T\:Add 
key attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=\#T\:Aggregate
 functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=\#T\:Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=\#T\:Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=\#T\:Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=\#T\:Key 
Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=\#T\:Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=\#T\:Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=\#T\:Source Layer
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=\#T\:Aggregate
 function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=\#T\:Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=\#T\:Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=\#T\:Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=\#T\:Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=\#T\:Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=\#T\:Source 
Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=\#T\:Aggregate
 function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=\#T\:Geometry
 aggregator

Modified: core/trunk/src/language/jump_it.properties
===================================================================
--- core/trunk/src/language/jump_it.properties  2016-02-04 16:08:53 UTC (rev 
4813)
+++ core/trunk/src/language/jump_it.properties  2016-02-04 22:39:04 UTC (rev 
4814)
@@ -2596,24 +2596,24 @@
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=\#T\:Median 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=\#T\:Median 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=\#T\:Majority
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=\#T\:Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=\#T\:Add
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=\#T\:Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=\#T\:Add 
key attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=\#T\:Aggregate
 functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=\#T\:Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=\#T\:Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=\#T\:Add
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=\#T\:Add 
key attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=\#T\:Add 
key attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=\#T\:Aggregate
 functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=\#T\:Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=\#T\:Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=\#T\:Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=\#T\:Key 
Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=\#T\:Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=\#T\:Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=\#T\:Source Layer
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=\#T\:Aggregate
 function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=\#T\:Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=\#T\:Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=\#T\:Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=\#T\:Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=\#T\:Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=\#T\:Source 
Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=\#T\:Aggregate
 function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=\#T\:Geometry
 aggregator

Modified: core/trunk/src/language/jump_ja_JP.properties
===================================================================
--- core/trunk/src/language/jump_ja_JP.properties       2016-02-04 16:08:53 UTC 
(rev 4813)
+++ core/trunk/src/language/jump_ja_JP.properties       2016-02-04 22:39:04 UTC 
(rev 4814)
@@ -2617,24 +2617,24 @@
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=\#T\:Median 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=\#T\:Median 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=\#T\:Majority
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=\#T\:Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=\#T\:Add
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=\#T\:Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=\#T\:Add 
key attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=\#T\:Aggregate
 functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=\#T\:Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=\#T\:Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=\#T\:Add
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=\#T\:Add 
key attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=\#T\:Add 
key attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=\#T\:Aggregate
 functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=\#T\:Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=\#T\:Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=\#T\:Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=\#T\:Key 
Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=\#T\:Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=\#T\:Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=\#T\:Source Layer
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=\#T\:Aggregate
 function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=\#T\:Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=\#T\:Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=\#T\:Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=\#T\:Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=\#T\:Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=\#T\:Source 
Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=\#T\:Aggregate
 function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file

Modified: core/trunk/src/language/jump_ml.properties
===================================================================
--- core/trunk/src/language/jump_ml.properties  2016-02-04 16:08:53 UTC (rev 
4813)
+++ core/trunk/src/language/jump_ml.properties  2016-02-04 22:39:04 UTC (rev 
4814)
@@ -3888,24 +3888,24 @@
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=\#T\:Median 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=\#T\:Median 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=\#T\:Majority
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=\#T\:Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=\#T\:Add
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=\#T\:Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=\#T\:Add 
key attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=\#T\:Aggregate
 functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=\#T\:Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=\#T\:Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=\#T\:Add
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=\#T\:Add 
key attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=\#T\:Add 
key attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=\#T\:Aggregate
 functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=\#T\:Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=\#T\:Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=\#T\:Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=\#T\:Key 
Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=\#T\:Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=\#T\:Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=\#T\:Source Layer
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=\#T\:Aggregate
 function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=\#T\:Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=\#T\:Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=\#T\:Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=\#T\:Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=\#T\:Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=\#T\:Source 
Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=\#T\:Aggregate
 function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file

Modified: core/trunk/src/language/jump_pt.properties
===================================================================
--- core/trunk/src/language/jump_pt.properties  2016-02-04 16:08:53 UTC (rev 
4813)
+++ core/trunk/src/language/jump_pt.properties  2016-02-04 22:39:04 UTC (rev 
4814)
@@ -2613,24 +2613,24 @@
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=\#T\:Median 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=\#T\:Median 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=\#T\:Majority
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=\#T\:Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=\#T\:Add
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=\#T\:Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=\#T\:Add 
key attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=\#T\:Aggregate
 functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=\#T\:Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=\#T\:Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=\#T\:Add
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=\#T\:Add 
key attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=\#T\:Add 
key attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=\#T\:Aggregate
 functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=\#T\:Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=\#T\:Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=\#T\:Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=\#T\:Key 
Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=\#T\:Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=\#T\:Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=\#T\:Source Layer
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=\#T\:Aggregate
 function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=\#T\:Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=\#T\:Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=\#T\:Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=\#T\:Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=\#T\:Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=\#T\:Source 
Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=\#T\:Aggregate
 function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file

Modified: core/trunk/src/language/jump_pt_BR.properties
===================================================================
--- core/trunk/src/language/jump_pt_BR.properties       2016-02-04 16:08:53 UTC 
(rev 4813)
+++ core/trunk/src/language/jump_pt_BR.properties       2016-02-04 22:39:04 UTC 
(rev 4814)
@@ -2614,24 +2614,24 @@
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=\#T\:Median 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=\#T\:Median 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=\#T\:Majority
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=\#T\:Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=\#T\:Add
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=\#T\:Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=\#T\:Add 
key attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=\#T\:Aggregate
 functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=\#T\:Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=\#T\:Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=\#T\:Add
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=\#T\:Add 
key attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=\#T\:Add 
key attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=\#T\:Aggregate
 functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=\#T\:Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=\#T\:Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=\#T\:Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=\#T\:Key 
Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=\#T\:Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=\#T\:Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=\#T\:Source Layer
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=\#T\:Aggregate
 function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=\#T\:Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=\#T\:Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=\#T\:Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=\#T\:Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=\#T\:Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=\#T\:Source 
Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=\#T\:Aggregate
 function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file

Modified: core/trunk/src/language/jump_ta_IN.properties
===================================================================
--- core/trunk/src/language/jump_ta_IN.properties       2016-02-04 16:08:53 UTC 
(rev 4813)
+++ core/trunk/src/language/jump_ta_IN.properties       2016-02-04 22:39:04 UTC 
(rev 4814)
@@ -2616,24 +2616,24 @@
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=\#T\:Median 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=\#T\:Median 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=\#T\:Majority
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=\#T\:Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=\#T\:Add
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=\#T\:Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=\#T\:Add 
key attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=\#T\:Aggregate
 functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=\#T\:Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=\#T\:Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=\#T\:Add
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=\#T\:Add 
key attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=\#T\:Add 
key attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=\#T\:Aggregate
 functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=\#T\:Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=\#T\:Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=\#T\:Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=\#T\:Key 
Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=\#T\:Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=\#T\:Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=\#T\:Source Layer
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=\#T\:Aggregate
 function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=\#T\:Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=\#T\:Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=\#T\:Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=\#T\:Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=\#T\:Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=\#T\:Source 
Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=\#T\:Aggregate
 function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file

Modified: core/trunk/src/language/jump_te.properties
===================================================================
--- core/trunk/src/language/jump_te.properties  2016-02-04 16:08:53 UTC (rev 
4813)
+++ core/trunk/src/language/jump_te.properties  2016-02-04 22:39:04 UTC (rev 
4814)
@@ -3122,24 +3122,24 @@
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=\#T\:Median 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=\#T\:Median 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=\#T\:Majority
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=\#T\:Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=\#T\:Add
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=\#T\:Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=\#T\:Add 
key attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=\#T\:Aggregate
 functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=\#T\:Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=\#T\:Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=\#T\:Add
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=\#T\:Add 
key attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=\#T\:Add 
key attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=\#T\:Aggregate
 functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=\#T\:Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=\#T\:Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=\#T\:Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=\#T\:Key 
Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=\#T\:Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=\#T\:Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=\#T\:Source Layer
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=\#T\:Aggregate
 function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=\#T\:Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=\#T\:Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=\#T\:Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=\#T\:Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=\#T\:Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=\#T\:Source 
Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=\#T\:Aggregate
 function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file

Modified: core/trunk/src/language/jump_zh_CN.properties
===================================================================
--- core/trunk/src/language/jump_zh_CN.properties       2016-02-04 16:08:53 UTC 
(rev 4813)
+++ core/trunk/src/language/jump_zh_CN.properties       2016-02-04 22:39:04 UTC 
(rev 4814)
@@ -2777,24 +2777,24 @@
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=\#T\:Median 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=\#T\:Median 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=\#T\:Majority
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=\#T\:Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=\#T\:Add
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=\#T\:Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=\#T\:Add 
key attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=\#T\:Aggregate
 functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=\#T\:Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=\#T\:Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=\#T\:Add
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=\#T\:Add 
key attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=\#T\:Add 
key attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=\#T\:Aggregate
 functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=\#T\:Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=\#T\:Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=\#T\:Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=\#T\:Key 
Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=\#T\:Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=\#T\:Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=\#T\:Source Layer
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=\#T\:Aggregate
 function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=\#T\:Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=\#T\:Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=\#T\:Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=\#T\:Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=\#T\:Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=\#T\:Source 
Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=\#T\:Aggregate
 function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file

Modified: core/trunk/src/language/jump_zh_HK.properties
===================================================================
--- core/trunk/src/language/jump_zh_HK.properties       2016-02-04 16:08:53 UTC 
(rev 4813)
+++ core/trunk/src/language/jump_zh_HK.properties       2016-02-04 22:39:04 UTC 
(rev 4814)
@@ -2776,24 +2776,24 @@
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DoubleMedian=\#T\:Median 
(double)
 org.openjump.core.ui.plugin.tools.aggregate.Aggregator.DateMedian=\#T\:Median 
(date)
 
org.openjump.core.ui.plugin.tools.aggregate.Aggregator.StringMajority=\#T\:Majority
 (string)
-org.openjump.core.ui.plugin.tools.GroupByPlugIn=\#T\:Group By
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-aggregate-function=\#T\:Add
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attribute=\#T\:Add key 
attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.add-key-attributes=\#T\:Add 
key attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-functions=\#T\:Aggregate
 functions
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregators=\#T\:Aggregators
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn=\#T\:Dissolve (new)
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-aggregate-function=\#T\:Add
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attribute=\#T\:Add 
key attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.add-key-attributes=\#T\:Add 
key attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-functions=\#T\:Aggregate
 functions
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregators=\#T\:Aggregators
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.dataset-must-have-attributes=\#T\:Dataset
 must have attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.description=\#T\:Group 
features having the same key attribute(s) value.\n\
   Key atributes are automatically included in the output schema.\n\
   Non-key attribute values can be aggregated using functions defined in the 
'Aggregators' panel.
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.ignore-null=\#T\:Ignore Null
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.input-attribute=\#T\:Input 
Attribute
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.key-attributes=\#T\:Key 
Attributes
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.output-name=\#T\:Output Name
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.parameter=\#T\:Parameter
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.source-layer=\#T\:Source Layer
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.aggregate-function=\#T\:Aggregate
 function
-org.openjump.core.ui.plugin.tools.GroupByPlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.exactly-one-geometry-attribute-is-required=\#T\:Exactly
 one geometry is required for the output schema
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.ignore-null=\#T\:Ignore Null
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.input-attribute=\#T\:Input 
Attribute
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.key-attributes=\#T\:Key 
Attributes
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.no-available-attribute-to-group-by=\#T\:No
 available attribute to group by
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.output-name=\#T\:Output Name
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.parameter=\#T\:Parameter
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.remove-aggregate-function=\#T\:Remove
 aggregate function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.source-layer=\#T\:Source 
Layer
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.aggregate-function=\#T\:Aggregate
 function
+org.openjump.core.ui.plugin.tools.Dissolve2PlugIn.geometry-aggregator=\#T\:Geometry
 aggregator
\ No newline at end of file

Copied: core/trunk/src/org/openjump/core/ui/plugin/tools/Dissolve2PlugIn.java 
(from rev 4813, 
core/trunk/src/org/openjump/core/ui/plugin/tools/GroupByPlugIn.java)
===================================================================
--- core/trunk/src/org/openjump/core/ui/plugin/tools/Dissolve2PlugIn.java       
                        (rev 0)
+++ core/trunk/src/org/openjump/core/ui/plugin/tools/Dissolve2PlugIn.java       
2016-02-04 22:39:04 UTC (rev 4814)
@@ -0,0 +1,509 @@
+package org.openjump.core.ui.plugin.tools;
+
+import com.vividsolutions.jump.I18N;
+import com.vividsolutions.jump.feature.*;
+import com.vividsolutions.jump.task.TaskMonitor;
+import com.vividsolutions.jump.workbench.WorkbenchContext;
+import com.vividsolutions.jump.workbench.model.Layer;
+import com.vividsolutions.jump.workbench.model.StandardCategoryNames;
+import com.vividsolutions.jump.workbench.plugin.EnableCheck;
+import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
+import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
+import com.vividsolutions.jump.workbench.plugin.PlugInContext;
+import com.vividsolutions.jump.workbench.ui.*;
+import org.openjump.core.ui.images.IconLoader;
+import org.openjump.core.ui.plugin.AbstractThreadedUiPlugIn;
+import org.openjump.core.ui.plugin.tools.aggregate.*;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.*;
+import java.util.List;
+
+/**
+ * Plugin to mimic a SQL GROUP BY operation.
+ */
+public class Dissolve2PlugIn extends AbstractThreadedUiPlugIn {
+
+    private final static String KEY = Dissolve2PlugIn.class.getName();
+
+    private final static Dimension LARGE = new Dimension(110,22);
+    private final static Dimension MEDIUM = new Dimension(22,22);
+    private final static Dimension NARROW = new Dimension(22,22);
+
+    private final static String SOURCE_LAYER              = I18N.get(KEY + 
".source-layer");
+    private final static String DESCRIPTION               = I18N.get(KEY + 
".description");
+    private final static String KEY_ATTRIBUTES            = I18N.get(KEY + 
".key-attributes");
+    private final static String ADD_KEY_ATTRIBUTE         = I18N.get(KEY + 
".add-key-attribute");
+    private final static String AGGREGATORS               = I18N.get(KEY + 
".aggregators");
+    private final static String AGGREGATE_FUNCTION        = I18N.get(KEY + 
".aggregate-function");
+    private final static String AGGREGATE_FUNCTIONS       = I18N.get(KEY + 
".aggregate-functions");
+    private final static String ADD_AGGREGATE_FUNCTION    = I18N.get(KEY + 
".add-aggregate-function");
+    private final static String REMOVE_AGGREGATE_FUNCTION = I18N.get(KEY + 
".remove-aggregate-function");
+    private final static String IGNORE_NULL               = I18N.get(KEY + 
".ignore-null");
+    private final static String PARAMETER                 = I18N.get(KEY + 
".parameter");
+    private final static String OUTPUT_NAME               = I18N.get(KEY + 
".output-name");
+    private final static String INPUT_ATTRIBUTE           = I18N.get(KEY + 
".input-attribute");
+    private final static String GEOMETRY_AGGREGATOR       = I18N.get(KEY + 
".geometry-aggregator");
+
+
+    private Layer layer;
+    FeatureCollectionAggregator fca;
+
+    public Dissolve2PlugIn() {
+    }
+
+    public String getName() {
+        return I18N.get(KEY);
+    }
+
+    @Override
+    public void initialize(PlugInContext context) throws Exception {
+        context.getFeatureInstaller().addMainMenuPlugin(
+                this,
+                new String[]{MenuNames.TOOLS, MenuNames.TOOLS_ANALYSIS},
+                getName() + "...", false, IconLoader.icon("groupby.png"),
+                createEnableCheck(context.getWorkbenchContext()), -1);
+    }
+
+    public static MultiEnableCheck createEnableCheck(final WorkbenchContext 
workbenchContext) {
+        EnableCheckFactory checkFactory = new 
EnableCheckFactory(workbenchContext);
+        return new MultiEnableCheck()
+                .add(checkFactory.createTaskWindowMustBeActiveCheck())
+                .add(checkFactory.createAtLeastNLayersMustBeSelectedCheck(1))
+                .add(new EnableCheck() {
+                    public String check(JComponent component) {
+                        return workbenchContext
+                                .getLayerNamePanel()
+                                .getSelectedLayers()[0]
+                                .getFeatureCollectionWrapper()
+                                .getFeatureSchema()
+                                .getAttributeCount() > 1 ? null : I18N.get(KEY 
+ ".dataset-must-have-attributes");
+                    }
+                });
+    }
+
+
+    @Override
+    public boolean execute(PlugInContext context) throws Exception {
+        final MultiTabInputDialog dialog = new MultiTabInputDialog(
+                context.getWorkbenchFrame(), getName(), KEY_ATTRIBUTES, true);
+        final KeyOptionPanel keyOptionPanel = new KeyOptionPanel();
+        final AggregateOptionPanel aggregateOptionPanel = new 
AggregateOptionPanel();
+        initDialog(dialog, context, keyOptionPanel, aggregateOptionPanel);
+        dialog.setVisible(true);
+        if (!dialog.wasOKPressed()) {
+            return false;
+        }
+        getDialogValues(dialog, keyOptionPanel, aggregateOptionPanel);
+        return true;
+    }
+
+    private void initDialog(final MultiTabInputDialog dialog, PlugInContext 
context,
+                            final KeyOptionPanel keyOptionPanel,
+                            final AggregateOptionPanel aggregateOptionPanel) 
throws Exception {
+
+        //dialog.setSideBarImage(IconLoader.icon("dissolve_layer_icon.gif"));
+        dialog.setSideBarDescription(DESCRIPTION);
+
+        dialog.addSeparator();
+
+        // Filter out layers without attribute
+        final JComboBox layerComboBox = dialog.addLayerComboBox(SOURCE_LAYER, 
"", context.getLayerManager(), AttributeTypeFilter.NO_GEOMETRY_FILTER);
+        if 
(context.getCandidateLayer(0).getFeatureCollectionWrapper().getFeatureSchema().getAttributeCount()
 > 1) {
+            layerComboBox.setSelectedItem(context.getCandidateLayer(0));
+        }
+
+        dialog.addSeparator();
+
+        
keyOptionPanel.setSchema(dialog.getLayer(SOURCE_LAYER).getFeatureCollectionWrapper().getFeatureSchema());
+        dialog.addRow(KEY_ATTRIBUTES, new JLabel(KEY_ATTRIBUTES), 
keyOptionPanel, null, "",
+                MultiInputDialog.LEFT_LABEL, MultiInputDialog.HORIZONTAL);
+
+        dialog.addSeparator();
+
+        Aggregator union = new Aggregators.Union();
+        Aggregator collect = new Aggregators.Collect();
+        dialog.addComboBox(GEOMETRY_AGGREGATOR, union, Arrays.asList(union, 
collect), "");
+
+        dialog.addSeparator();
+
+        // Aggregators definition
+        final JPanel aggregationOptionsTab = 
dialog.addPane(I18N.get(AGGREGATORS));
+        aggregationOptionsTab.setLayout(new BorderLayout());
+        
aggregateOptionPanel.setSchema(dialog.getLayer(SOURCE_LAYER).getFeatureCollectionWrapper().getFeatureSchema());
+        aggregationOptionsTab.add(aggregateOptionPanel, BorderLayout.NORTH);
+
+        dialog.pack();
+
+        layerComboBox.addItemListener(new ItemListener() {
+            public void itemStateChanged(ItemEvent itemEvent) {
+                if (itemEvent.getStateChange() == ItemEvent.SELECTED) {
+                    layer = (Layer)layerComboBox.getSelectedItem();
+                    FeatureSchema schema = 
layer.getFeatureCollectionWrapper().getFeatureSchema();
+                    try {
+                        keyOptionPanel.setSchema(schema);
+                        aggregateOptionPanel.setSchema(schema);
+                        updateControls(dialog, keyOptionPanel, 
aggregateOptionPanel);
+                    } catch(Exception ex) {
+                        throw new RuntimeException(ex);
+                    }
+                }
+            }
+        });
+
+        GUIUtil.centreOnWindow(dialog);
+    }
+
+    private void getDialogValues(MultiInputDialog dialog,
+                                 KeyOptionPanel keyOptionPanel,
+                                 AggregateOptionPanel aggregateOptionPanel) {
+        layer = dialog.getLayer(SOURCE_LAYER);
+        FeatureSchema schema = 
layer.getFeatureCollectionWrapper().getFeatureSchema();
+        List<String> keyAttributes = new 
ArrayList<String>(keyOptionPanel.getKeyAttributes());
+        List<AttributeAggregator> aggregators = new 
ArrayList<AttributeAggregator>();
+        aggregators.add(new AttributeAggregator(
+                schema.getAttributeName(schema.getGeometryIndex()),
+                
(Aggregator)dialog.getComboBox(GEOMETRY_AGGREGATOR).getSelectedItem(),
+                schema.getAttributeName(schema.getGeometryIndex())));
+        aggregators.addAll(aggregateOptionPanel.getAttributeAggregators());
+        int geometryTypeCount = 0;
+        for (AttributeAggregator agg : aggregators) {
+            if (agg.getAggregator().getOutputAttributeType() == 
AttributeType.GEOMETRY) {
+                geometryTypeCount++;
+            }
+        }
+        try {
+            if (geometryTypeCount != 1) {
+                throw new Exception(I18N.get(KEY + 
".exactly-one-geometry-attribute-is-required"));
+            }
+            fca = new 
FeatureCollectionAggregator(layer.getFeatureCollectionWrapper(), keyAttributes, 
aggregators);
+        } catch(Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private void updateControls(MultiInputDialog dialog,
+                                KeyOptionPanel keyAttributeOptionPanel,
+                                AggregateOptionPanel aggregateOptionPanel) 
throws Exception {
+        getDialogValues(dialog, keyAttributeOptionPanel, aggregateOptionPanel);
+        FeatureSchema schema = 
layer.getFeatureCollectionWrapper().getFeatureSchema();
+        keyAttributeOptionPanel.setSchema(schema);
+        aggregateOptionPanel.setSchema(schema);
+        dialog.pack();
+    }
+
+    public void run(TaskMonitor monitor, PlugInContext context) throws 
Exception {
+
+        monitor.allowCancellationRequests();
+        monitor.report(getName());
+        FeatureCollection resultfc = fca.getAggregatedFeatureCollection();
+        context.getLayerManager().addCategory(StandardCategoryNames.RESULT);
+        String newLayerName = layer.getName() + "-grouped";
+        context.addLayer(StandardCategoryNames.RESULT, newLayerName, resultfc);
+    }
+
+    class KeyOptionPanel extends JPanel {
+
+        final JPanel northPanel;
+        final JPanel keyAttributesPanel;
+
+        FeatureSchema schema;
+
+        KeyOptionPanel() {
+            super();
+            setLayout(new BorderLayout());
+            northPanel = new JPanel(new BorderLayout());
+
+            JPanel titleLine = new JPanel();
+
+            JLabel jlInputName = new JLabel(ADD_KEY_ATTRIBUTE);
+            jlInputName.setPreferredSize(LARGE);
+            titleLine.add(jlInputName);
+
+            JButton jbPlus = new JButton(IconLoader.icon("plus.gif"));
+            jbPlus.setToolTipText(ADD_KEY_ATTRIBUTE);
+            jbPlus.setPreferredSize(NARROW);
+            titleLine.add(jbPlus);
+            northPanel.add(titleLine, BorderLayout.CENTER);
+
+            keyAttributesPanel = new JPanel();
+            keyAttributesPanel.setLayout(new BoxLayout(keyAttributesPanel, 
BoxLayout.Y_AXIS));
+
+            jbPlus.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    try {
+                        keyAttributesPanel.add(new 
KeyAttributePanel(KeyOptionPanel.this, schema));
+                        
SwingUtilities.getWindowAncestor(keyAttributesPanel).pack();
+                    } catch(Exception ex) {
+                        throw new RuntimeException(ex);
+                    }
+                }
+            });
+
+            JPanel westPanel = new JPanel(new BorderLayout());
+            add(westPanel, BorderLayout.WEST);
+            westPanel.add(northPanel, BorderLayout.NORTH);
+            westPanel.add(keyAttributesPanel, BorderLayout.CENTER);
+        }
+
+        public void setSchema(final FeatureSchema schema) throws Exception {
+            this.schema = schema;
+            if (schema.getAttributeCount()<2) {
+                throw new Exception(I18N.get(KEY + 
".no-available-attribute-to-group-by"));
+            }
+            keyAttributesPanel.removeAll();
+            keyAttributesPanel.add(new KeyAttributePanel(this, schema));
+        }
+
+        public JPanel getKeyAttributesPanel() {
+            return keyAttributesPanel;
+        }
+
+        public Set<String> getKeyAttributes() {
+            Set<String> keyAttributeSet = new LinkedHashSet<String>();
+            if (keyAttributesPanel != null) {
+                Component[] components = keyAttributesPanel.getComponents();
+                for (Component component : components) {
+                    if (component instanceof KeyAttributePanel) {
+                        KeyAttributePanel kap = (KeyAttributePanel) component;
+                        keyAttributeSet.add(kap.getAttribute());
+                    }
+                }
+            }
+            return keyAttributeSet;
+        }
+    }
+
+    class KeyAttributePanel extends JPanel {
+        final KeyOptionPanel keyOptionPanel;
+        final FeatureSchema schema;
+        final JComboBox jcbInputAttributeName;
+        final JButton jbRemove;
+
+        KeyAttributePanel(final KeyOptionPanel keyOptionPanel,
+                                final FeatureSchema schema) throws Exception {
+            super();
+            setLayout(new FlowLayout());
+            this.keyOptionPanel = keyOptionPanel;
+            this.schema = schema;
+            jcbInputAttributeName = new JComboBox();
+            for (int i = 0 ; i < schema.getAttributeCount() ; i++) {
+                jcbInputAttributeName.addItem(schema.getAttributeName(i));
+            }
+            jcbInputAttributeName.setSelectedItem(pickKeyAttribute(schema, 
keyOptionPanel.getKeyAttributes()));
+            jcbInputAttributeName.setPreferredSize(LARGE);
+            jbRemove = new JButton();
+            jbRemove.setIcon(IconLoader.icon("remove.gif"));
+            jbRemove.setPreferredSize(NARROW);
+            jbRemove.setToolTipText(REMOVE_AGGREGATE_FUNCTION);
+
+            jbRemove.addActionListener(new ActionListener() {
+                    @Override
+                    public void actionPerformed(ActionEvent e) {
+                        if (keyOptionPanel.getKeyAttributes().size() > 1) {
+                            
keyOptionPanel.getKeyAttributesPanel().remove(KeyAttributePanel.this);
+                            
SwingUtilities.getWindowAncestor(keyOptionPanel).pack();
+                        } else {
+                            //TODO throw message
+                        }
+                    }
+            });
+
+            add(jcbInputAttributeName);
+            add(jbRemove);
+        }
+
+        public String getAttribute() {
+            return jcbInputAttributeName.getSelectedItem().toString();
+        }
+
+        private String pickKeyAttribute(FeatureSchema schema, Set<String> set) 
throws Exception {
+            for (int i = 0 ; i < schema.getAttributeCount() ; i++) {
+                if (schema.getGeometryIndex() == i) continue;
+                if (schema.getExternalPrimaryKeyIndex() == i) continue;
+                if (set.contains(schema.getAttributeName(i))) continue;
+                return schema.getAttributeName(i);
+            }
+            throw new Exception(I18N.get(KEY + 
".no-more-candidate-attribute"));
+        }
+    }
+
+    class AggregateOptionPanel extends JPanel {
+        final JPanel northPanel;
+        final JPanel aggregatorsPanel;
+        FeatureSchema schema;
+
+        AggregateOptionPanel() {
+            super();
+            northPanel = new JPanel(new BorderLayout());
+            northPanel.add(new JLabel("<html><b>" + AGGREGATE_FUNCTIONS + 
"</b></html>"), BorderLayout.NORTH);
+
+            JPanel titleLine = new JPanel();
+            JLabel jlOutputName = new JLabel(OUTPUT_NAME);
+            jlOutputName.setPreferredSize(LARGE);
+            titleLine.add(jlOutputName);
+
+            JLabel jlInputName = new JLabel(INPUT_ATTRIBUTE);
+            jlInputName.setPreferredSize(LARGE);
+            titleLine.add(jlInputName);
+
+            JLabel jlFunction = new JLabel(AGGREGATE_FUNCTION);
+            jlFunction.setPreferredSize(LARGE);
+            titleLine.add(jlFunction);
+
+            JLabel jlIgnoreNull = new JLabel(IGNORE_NULL);
+            jlIgnoreNull.setPreferredSize(MEDIUM);
+            jlIgnoreNull.setToolTipText(IGNORE_NULL);
+            titleLine.add(jlIgnoreNull);
+
+            JLabel jlFunctionParameter = new JLabel(PARAMETER);
+            jlFunctionParameter.setPreferredSize(NARROW);
+            jlFunctionParameter.setToolTipText(PARAMETER);
+            titleLine.add(jlFunctionParameter);
+
+            JButton jbPlus = new 
JButton(org.openjump.core.ui.images.IconLoader.icon("plus.gif"));
+            jbPlus.setToolTipText(ADD_AGGREGATE_FUNCTION);
+            jbPlus.setPreferredSize(NARROW);
+            titleLine.add(jbPlus);
+            northPanel.add(titleLine, BorderLayout.CENTER);
+
+            aggregatorsPanel = new JPanel();
+            aggregatorsPanel.setLayout(new BoxLayout(aggregatorsPanel, 
BoxLayout.Y_AXIS));
+
+            jbPlus.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    aggregatorsPanel.add(new AttributeAggregatePanel(
+                            AggregateOptionPanel.this,
+                            schema));
+                    SwingUtilities.getWindowAncestor(aggregatorsPanel).pack();
+                }
+            });
+            setLayout(new BorderLayout());
+            add(northPanel, BorderLayout.NORTH);
+            add(aggregatorsPanel, BorderLayout.CENTER);
+        }
+
+        public void setSchema(final FeatureSchema schema) {
+            this.schema = schema;
+            aggregatorsPanel.removeAll();
+        }
+
+        public JPanel getAggregatorsPanel() {
+            return aggregatorsPanel;
+        }
+
+        public List<AttributeAggregator> getAttributeAggregators() {
+            List<AttributeAggregator> aggregators = new 
ArrayList<AttributeAggregator>();
+            if (aggregatorsPanel != null) {
+                Component[] components = aggregatorsPanel.getComponents();
+                for (Component component : components) {
+                    if (component instanceof AttributeAggregatePanel) {
+                        AttributeAggregatePanel aap = 
(AttributeAggregatePanel) component;
+                        String inputName = 
aap.jcbInputAttributeName.getSelectedItem().toString();
+                        String outputName = 
aap.jtfOutputAttributeName.getText();
+                        Aggregator agg = ((Aggregator) 
aap.jcbAggregators.getSelectedItem()).clone();
+                        agg.setIgnoreNull(aap.jcbIgnoreNull.isSelected());
+                        if (aap.jtfParameter.isEnabled() && 
agg.getParameters().size() > 0) {
+                            
agg.setParameter(agg.getParameters().iterator().next().toString(), 
aap.jtfParameter.getText());
+                        }
+                        AttributeAggregator aggregator = new 
AttributeAggregator(inputName, agg, outputName);
+                        aggregators.add(aggregator);
+                    }
+                }
+            }
+            return aggregators;
+        }
+    }
+
+    class AttributeAggregatePanel extends JPanel {
+
+        final AggregateOptionPanel aggregatePanel;
+        final FeatureSchema schema;
+
+        JTextField jtfOutputAttributeName;
+        JComboBox jcbInputAttributeName;
+        JComboBox jcbAggregators;
+        JCheckBox jcbIgnoreNull;
+        JTextField jtfParameter;
+        JButton jbRemove;
+
+
+        AttributeAggregatePanel(final AggregateOptionPanel aggregatePanel,
+                                final FeatureSchema schema) {
+            this.aggregatePanel = aggregatePanel;
+            this.schema = schema;
+
+            jtfOutputAttributeName = new JTextField();
+            jtfOutputAttributeName.setPreferredSize(LARGE);
+
+            jcbInputAttributeName = new JComboBox();
+            for (int i = 0 ; i < schema.getAttributeCount() ; i++) {
+                if (i == schema.getGeometryIndex()) continue;
+                jcbInputAttributeName.addItem(schema.getAttributeName(i));
+            }
+            String defaultAttribute = 
jcbInputAttributeName.getSelectedItem().toString();
+            jtfOutputAttributeName.setText(defaultAttribute);
+            jcbInputAttributeName.setPreferredSize(LARGE);
+
+            jcbAggregators = new 
JComboBox(Aggregators.getAggregators(schema.getAttributeType(defaultAttribute)).values().toArray());
+            jcbAggregators.setPreferredSize(LARGE);
+
+            Aggregator aggregator = 
(Aggregator)jcbAggregators.getSelectedItem();
+            jcbIgnoreNull = new JCheckBox();
+            jcbIgnoreNull.setPreferredSize(MEDIUM);
+            jcbIgnoreNull.setSelected(aggregator.ignoreNull());
+            jtfParameter = new JTextField(",");
+            jtfParameter.setEditable(aggregator.getParameters().size() > 0);
+            jtfParameter.setPreferredSize(NARROW);
+            jbRemove = new JButton();
+            jbRemove.setIcon(IconLoader.icon("remove.gif"));
+            jbRemove.setToolTipText(REMOVE_AGGREGATE_FUNCTION);
+            jbRemove.setPreferredSize(NARROW);
+
+            jcbInputAttributeName.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    AttributeType type = 
schema.getAttributeType(jcbInputAttributeName.getSelectedItem().toString());
+                    jcbAggregators.setModel(new 
DefaultComboBoxModel(Aggregators.getAggregators(type).values().toArray()));
+                    Aggregator agg = 
(Aggregator)jcbAggregators.getSelectedItem();
+                    jcbIgnoreNull.setSelected(agg.ignoreNull());
+                    jtfParameter.setEditable(agg.getParameters().size() > 0);
+                    
jtfOutputAttributeName.setText(jcbInputAttributeName.getSelectedItem().toString());
+                }
+            });
+
+            jcbAggregators.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    Aggregator agg = 
(Aggregator)jcbAggregators.getSelectedItem();
+                    jcbIgnoreNull.setSelected(agg.ignoreNull());
+                    jtfParameter.setEditable(agg.getParameters().size() > 0);
+                }
+            });
+
+            jbRemove.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    
aggregatePanel.getAggregatorsPanel().remove(AttributeAggregatePanel.this);
+                    SwingUtilities.getWindowAncestor(aggregatePanel).pack();
+                }
+            });
+
+            add(jtfOutputAttributeName);
+            add(jcbInputAttributeName);
+            add(jcbAggregators);
+            add(jcbIgnoreNull);
+            add(jtfParameter);
+            add(jbRemove);
+        }
+
+    }
+
+}

Deleted: core/trunk/src/org/openjump/core/ui/plugin/tools/GroupByPlugIn.java
===================================================================
--- core/trunk/src/org/openjump/core/ui/plugin/tools/GroupByPlugIn.java 
2016-02-04 16:08:53 UTC (rev 4813)
+++ core/trunk/src/org/openjump/core/ui/plugin/tools/GroupByPlugIn.java 
2016-02-04 22:39:04 UTC (rev 4814)
@@ -1,509 +0,0 @@
-package org.openjump.core.ui.plugin.tools;
-
-import com.vividsolutions.jump.I18N;
-import com.vividsolutions.jump.feature.*;
-import com.vividsolutions.jump.task.TaskMonitor;
-import com.vividsolutions.jump.workbench.WorkbenchContext;
-import com.vividsolutions.jump.workbench.model.Layer;
-import com.vividsolutions.jump.workbench.model.StandardCategoryNames;
-import com.vividsolutions.jump.workbench.plugin.EnableCheck;
-import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
-import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
-import com.vividsolutions.jump.workbench.plugin.PlugInContext;
-import com.vividsolutions.jump.workbench.ui.*;
-import org.openjump.core.ui.images.IconLoader;
-import org.openjump.core.ui.plugin.AbstractThreadedUiPlugIn;
-import org.openjump.core.ui.plugin.tools.aggregate.*;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.util.*;
-import java.util.List;
-
-/**
- * Plugin to mimic a SQL GROUP BY operation.
- */
-public class GroupByPlugIn extends AbstractThreadedUiPlugIn {
-
-    private final static String KEY = GroupByPlugIn.class.getName();
-
-    private final static Dimension LARGE = new Dimension(110,22);
-    private final static Dimension MEDIUM = new Dimension(22,22);
-    private final static Dimension NARROW = new Dimension(22,22);
-
-    private final static String SOURCE_LAYER              = I18N.get(KEY + 
".source-layer");
-    private final static String DESCRIPTION               = I18N.get(KEY + 
".description");
-    private final static String KEY_ATTRIBUTES            = I18N.get(KEY + 
".key-attributes");
-    private final static String ADD_KEY_ATTRIBUTE         = I18N.get(KEY + 
".add-key-attribute");
-    private final static String AGGREGATORS               = I18N.get(KEY + 
".aggregators");
-    private final static String AGGREGATE_FUNCTION        = I18N.get(KEY + 
".aggregate-function");
-    private final static String AGGREGATE_FUNCTIONS       = I18N.get(KEY + 
".aggregate-functions");
-    private final static String ADD_AGGREGATE_FUNCTION    = I18N.get(KEY + 
".add-aggregate-function");
-    private final static String REMOVE_AGGREGATE_FUNCTION = I18N.get(KEY + 
".remove-aggregate-function");
-    private final static String IGNORE_NULL               = I18N.get(KEY + 
".ignore-null");
-    private final static String PARAMETER                 = I18N.get(KEY + 
".parameter");
-    private final static String OUTPUT_NAME               = I18N.get(KEY + 
".output-name");
-    private final static String INPUT_ATTRIBUTE           = I18N.get(KEY + 
".input-attribute");
-    private final static String GEOMETRY_AGGREGATOR       = I18N.get(KEY + 
".geometry-aggregator");
-
-
-    private Layer layer;
-    FeatureCollectionAggregator fca;
-
-    public GroupByPlugIn() {
-    }
-
-    public String getName() {
-        return I18N.get(KEY);
-    }
-
-    @Override
-    public void initialize(PlugInContext context) throws Exception {
-        context.getFeatureInstaller().addMainMenuPlugin(
-                this,
-                new String[]{MenuNames.TOOLS, MenuNames.TOOLS_ANALYSIS},
-                getName() + "...", false, IconLoader.icon("groupby.png"),
-                createEnableCheck(context.getWorkbenchContext()), -1);
-    }
-
-    public static MultiEnableCheck createEnableCheck(final WorkbenchContext 
workbenchContext) {
-        EnableCheckFactory checkFactory = new 
EnableCheckFactory(workbenchContext);
-        return new MultiEnableCheck()
-                .add(checkFactory.createTaskWindowMustBeActiveCheck())
-                .add(checkFactory.createAtLeastNLayersMustBeSelectedCheck(1))
-                .add(new EnableCheck() {
-                    public String check(JComponent component) {
-                        return workbenchContext
-                                .getLayerNamePanel()
-                                .getSelectedLayers()[0]
-                                .getFeatureCollectionWrapper()
-                                .getFeatureSchema()
-                                .getAttributeCount() > 1 ? null : I18N.get(KEY 
+ ".dataset-must-have-attributes");
-                    }
-                });
-    }
-
-
-    @Override
-    public boolean execute(PlugInContext context) throws Exception {
-        final MultiTabInputDialog dialog = new MultiTabInputDialog(
-                context.getWorkbenchFrame(), getName(), KEY_ATTRIBUTES, true);
-        final KeyOptionPanel keyOptionPanel = new KeyOptionPanel();
-        final AggregateOptionPanel aggregateOptionPanel = new 
AggregateOptionPanel();
-        initDialog(dialog, context, keyOptionPanel, aggregateOptionPanel);
-        dialog.setVisible(true);
-        if (!dialog.wasOKPressed()) {
-            return false;
-        }
-        getDialogValues(dialog, keyOptionPanel, aggregateOptionPanel);
-        return true;
-    }
-
-    private void initDialog(final MultiTabInputDialog dialog, PlugInContext 
context,
-                            final KeyOptionPanel keyOptionPanel,

@@ Diff output truncated at 100000 characters. @@

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Jump-pilot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to