Revision: 5915
          http://sourceforge.net/p/jump-pilot/code/5915
Author:   michaudm
Date:     2018-08-18 10:03:14 +0000 (Sat, 18 Aug 2018)
Log Message:
-----------
Add GenerateUniqueRandomIdPlugIn

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/GenerateUniqueRandomIdPlugIn.java

Modified: core/trunk/scripts/default-plugins.xml
===================================================================
--- core/trunk/scripts/default-plugins.xml      2018-08-17 14:44:52 UTC (rev 
5914)
+++ core/trunk/scripts/default-plugins.xml      2018-08-18 10:03:14 UTC (rev 
5915)
@@ -831,6 +831,9 @@
         org.openjump.core.ui.plugin.tools.GenerateRandomStringPlugIn
     </plug-in>
     <plug-in>
+        org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn
+    </plug-in>
+    <plug-in>
         
de.fho.jump.pirol.plugins.EditAttributeByFormula.EditAttributeByFormulaPlugIn
     </plug-in>
     <plug-in>

Modified: core/trunk/src/language/jump.properties
===================================================================
--- core/trunk/src/language/jump.properties     2018-08-17 14:44:52 UTC (rev 
5914)
+++ core/trunk/src/language/jump.properties     2018-08-18 10:03:14 UTC (rev 
5915)
@@ -1472,7 +1472,7 @@
 org.openjump.core.ui.plugin.tools.GenerateRandomNumberPlugIn.min-value = Min 
Value
 org.openjump.core.ui.plugin.tools.GenerateRandomNumberPlugIn.max-value = Max 
Value
 
org.openjump.core.ui.plugin.tools.GenerateRandomNumberPlugIn.no-editable-layer-with-numeric-attribute
 = No editable layer with numeric attribute
-org.openjump.core.ui.plugin.tools.GenerateRandomStringPlugIn = #T:Generate 
random string values
+org.openjump.core.ui.plugin.tools.GenerateRandomStringPlugIn = Generate random 
string values
 org.openjump.core.ui.plugin.tools.GenerateRandomStringPlugIn.min-length = Min 
Length
 
org.openjump.core.ui.plugin.tools.GenerateRandomStringPlugIn.min-length-tooltip 
= Min length of the generated string
 org.openjump.core.ui.plugin.tools.GenerateRandomStringPlugIn.max-length = Max 
Length
@@ -1487,6 +1487,7 @@
 
org.openjump.core.ui.plugin.tools.GenerateRandomStringPlugIn.no-editable-layer-with-string-attribute
 = No editable layer with string attribute
 
org.openjump.core.ui.plugin.tools.GenerateRandomStringPlugIn.non-empty-attribute
 = Attribute is not empty
 org.openjump.core.ui.plugin.tools.GenerateRandomStringPlugIn.overwrite-prompt 
= Do you want to overwrite existing values ?
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn = Generate 
unique random identifier
 
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  2018-08-17 14:44:52 UTC (rev 
5914)
+++ core/trunk/src/language/jump_cz.properties  2018-08-18 10:03:14 UTC (rev 
5915)
@@ -2906,4 +2906,5 @@
 ui.GenericNames.uphill=\#T\:uphill speed
 ui.GenericNames.downhill=\#T\:downhill speed
 ui.GenericNames.select-layers=\#T\:Select layers
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=#T:Generate 
unique random identifier
\ No newline at end of file

Modified: core/trunk/src/language/jump_de.properties
===================================================================
--- core/trunk/src/language/jump_de.properties  2018-08-17 14:44:52 UTC (rev 
5914)
+++ core/trunk/src/language/jump_de.properties  2018-08-18 10:03:14 UTC (rev 
5915)
@@ -2898,4 +2898,5 @@
 ui.GenericNames.uphill=\#T\:uphill speed
 ui.GenericNames.downhill=\#T\:downhill speed
 ui.GenericNames.select-layers=\#T\:Select layers
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=#T:Generate 
unique random identifier
\ No newline at end of file

Modified: core/trunk/src/language/jump_es.properties
===================================================================
--- core/trunk/src/language/jump_es.properties  2018-08-17 14:44:52 UTC (rev 
5914)
+++ core/trunk/src/language/jump_es.properties  2018-08-18 10:03:14 UTC (rev 
5915)
@@ -2877,4 +2877,5 @@
 ui.GenericNames.uphill=velocidad de subida
 ui.GenericNames.downhill=velocidad de descenso
 ui.GenericNames.select-layers=Seleccionar las capas
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=Ctrl/Shift
 y click con el rat\xF2n para seleccionar mas capas
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=Ctrl/Shift
 y click con el rat\xF2n para seleccionar mas capas
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=#T:Generate 
unique random identifier
\ No newline at end of file

Modified: core/trunk/src/language/jump_fi.properties
===================================================================
--- core/trunk/src/language/jump_fi.properties  2018-08-17 14:44:52 UTC (rev 
5914)
+++ core/trunk/src/language/jump_fi.properties  2018-08-18 10:03:14 UTC (rev 
5915)
@@ -2875,4 +2875,5 @@
 ui.GenericNames.uphill=\#T\:uphill speed
 ui.GenericNames.downhill=\#T\:downhill speed
 ui.GenericNames.select-layers=\#T\:Select layers
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=#T:Generate 
unique random identifier
\ No newline at end of file

Modified: core/trunk/src/language/jump_fr.properties
===================================================================
--- core/trunk/src/language/jump_fr.properties  2018-08-17 14:44:52 UTC (rev 
5914)
+++ core/trunk/src/language/jump_fr.properties  2018-08-18 10:03:14 UTC (rev 
5915)
@@ -2907,4 +2907,5 @@
 ui.GenericNames.uphill = vitesse \xE0 la mont\xE9e
 ui.GenericNames.downhill = vitesse \xE0 la descente
 ui.GenericNames.select-layers = Choisissez les couches
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers 
= Utilisez les touches Ctrl/Shift avec la souris pour s\xE9lectionner d'autres 
couches
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers 
= Utilisez les touches Ctrl/Shift avec la souris pour s\xE9lectionner d'autres 
couches
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=G\xE9n\xE9rer 
un identifiant al\xE9atoire unique
\ No newline at end of file

Modified: core/trunk/src/language/jump_hu.properties
===================================================================
--- core/trunk/src/language/jump_hu.properties  2018-08-17 14:44:52 UTC (rev 
5914)
+++ core/trunk/src/language/jump_hu.properties  2018-08-18 10:03:14 UTC (rev 
5915)
@@ -2894,4 +2894,5 @@
 ui.GenericNames.uphill=\#T\:uphill speed
 ui.GenericNames.downhill=\#T\:downhill speed
 ui.GenericNames.select-layers=\#T\:Select layers
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=#T:Generate 
unique random identifier
\ No newline at end of file

Modified: core/trunk/src/language/jump_it.properties
===================================================================
--- core/trunk/src/language/jump_it.properties  2018-08-17 14:44:52 UTC (rev 
5914)
+++ core/trunk/src/language/jump_it.properties  2018-08-18 10:03:14 UTC (rev 
5915)
@@ -2879,4 +2879,5 @@
 ui.GenericNames.uphill=velocit\xE0 in salita
 ui.GenericNames.downhill=velocit\xE0 in discesa
 ui.GenericNames.select-layers=Seleziona i livelli
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=Ctrl/Shift
 e click con il mouse per selezionare pi\xF9 livelli
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=Ctrl/Shift
 e click con il mouse per selezionare pi\xF9 livelli
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=#T:Generate 
unique random identifier
\ No newline at end of file

Modified: core/trunk/src/language/jump_ja_JP.properties
===================================================================
--- core/trunk/src/language/jump_ja_JP.properties       2018-08-17 14:44:52 UTC 
(rev 5914)
+++ core/trunk/src/language/jump_ja_JP.properties       2018-08-18 10:03:14 UTC 
(rev 5915)
@@ -2900,4 +2900,5 @@
 ui.GenericNames.uphill=\#T\:uphill speed
 ui.GenericNames.downhill=\#T\:downhill speed
 ui.GenericNames.select-layers=\#T\:Select layers
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=#T:Generate 
unique random identifier
\ No newline at end of file

Modified: core/trunk/src/language/jump_ml.properties
===================================================================
--- core/trunk/src/language/jump_ml.properties  2018-08-17 14:44:52 UTC (rev 
5914)
+++ core/trunk/src/language/jump_ml.properties  2018-08-18 10:03:14 UTC (rev 
5915)
@@ -3675,4 +3675,5 @@
 ui.GenericNames.uphill=\#T\:uphill speed
 ui.GenericNames.downhill=\#T\:downhill speed
 ui.GenericNames.select-layers=\#T\:Select layers
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=#T:Generate 
unique random identifier
\ No newline at end of file

Modified: core/trunk/src/language/jump_pt.properties
===================================================================
--- core/trunk/src/language/jump_pt.properties  2018-08-17 14:44:52 UTC (rev 
5914)
+++ core/trunk/src/language/jump_pt.properties  2018-08-18 10:03:14 UTC (rev 
5915)
@@ -2899,4 +2899,5 @@
 ui.GenericNames.uphill=\#T\:uphill speed
 ui.GenericNames.downhill=\#T\:downhill speed
 ui.GenericNames.select-layers=\#T\:Select layers
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=#T:Generate 
unique random identifier
\ No newline at end of file

Modified: core/trunk/src/language/jump_pt_BR.properties
===================================================================
--- core/trunk/src/language/jump_pt_BR.properties       2018-08-17 14:44:52 UTC 
(rev 5914)
+++ core/trunk/src/language/jump_pt_BR.properties       2018-08-18 10:03:14 UTC 
(rev 5915)
@@ -2899,4 +2899,5 @@
 ui.GenericNames.uphill=\#T\:uphill speed
 ui.GenericNames.downhill=\#T\:downhill speed
 ui.GenericNames.select-layers=\#T\:Select layers
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=#T:Generate 
unique random identifier
\ No newline at end of file

Modified: core/trunk/src/language/jump_ta_IN.properties
===================================================================
--- core/trunk/src/language/jump_ta_IN.properties       2018-08-17 14:44:52 UTC 
(rev 5914)
+++ core/trunk/src/language/jump_ta_IN.properties       2018-08-18 10:03:14 UTC 
(rev 5915)
@@ -2898,4 +2898,5 @@
 ui.GenericNames.uphill=\#T\:uphill speed
 ui.GenericNames.downhill=\#T\:downhill speed
 ui.GenericNames.select-layers=\#T\:Select layers
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=#T:Generate 
unique random identifier
\ No newline at end of file

Modified: core/trunk/src/language/jump_te.properties
===================================================================
--- core/trunk/src/language/jump_te.properties  2018-08-17 14:44:52 UTC (rev 
5914)
+++ core/trunk/src/language/jump_te.properties  2018-08-18 10:03:14 UTC (rev 
5915)
@@ -3405,4 +3405,5 @@
 ui.GenericNames.uphill=\#T\:uphill speed
 ui.GenericNames.downhill=\#T\:downhill speed
 ui.GenericNames.select-layers=\#T\:Select layers
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=#T:Generate 
unique random identifier
\ No newline at end of file

Modified: core/trunk/src/language/jump_zh_CN.properties
===================================================================
--- core/trunk/src/language/jump_zh_CN.properties       2018-08-17 14:44:52 UTC 
(rev 5914)
+++ core/trunk/src/language/jump_zh_CN.properties       2018-08-18 10:03:14 UTC 
(rev 5915)
@@ -3062,4 +3062,5 @@
 ui.GenericNames.uphill=\#T\:uphill speed
 ui.GenericNames.downhill=\#T\:downhill speed
 ui.GenericNames.select-layers=\#T\:Select layers
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=#T:Generate 
unique random identifier
\ No newline at end of file

Modified: core/trunk/src/language/jump_zh_HK.properties
===================================================================
--- core/trunk/src/language/jump_zh_HK.properties       2018-08-17 14:44:52 UTC 
(rev 5914)
+++ core/trunk/src/language/jump_zh_HK.properties       2018-08-18 10:03:14 UTC 
(rev 5915)
@@ -3061,4 +3061,5 @@
 ui.GenericNames.uphill=\#T\:uphill speed
 ui.GenericNames.downhill=\#T\:downhill speed
 ui.GenericNames.select-layers=\#T\:Select layers
-org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
\ No newline at end of file
+org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.select-multiple-layers=\#T\:Ctrl/Shift
 and mouse click to select more layers
+org.openjump.core.ui.plugin.tools.GenerateUniqueRandomIdPlugIn=#T:Generate 
unique random identifier
\ No newline at end of file

Added: 
core/trunk/src/org/openjump/core/ui/plugin/tools/GenerateUniqueRandomIdPlugIn.java
===================================================================
--- 
core/trunk/src/org/openjump/core/ui/plugin/tools/GenerateUniqueRandomIdPlugIn.java
                          (rev 0)
+++ 
core/trunk/src/org/openjump/core/ui/plugin/tools/GenerateUniqueRandomIdPlugIn.java
  2018-08-18 10:03:14 UTC (rev 5915)
@@ -0,0 +1,190 @@
+package org.openjump.core.ui.plugin.tools;
+
+import com.vividsolutions.jump.I18N;
+import com.vividsolutions.jump.feature.AttributeType;
+import com.vividsolutions.jump.feature.Feature;
+import com.vividsolutions.jump.feature.FeatureSchema;
+import com.vividsolutions.jump.workbench.WorkbenchContext;
+import com.vividsolutions.jump.workbench.model.FeatureEventType;
+import com.vividsolutions.jump.workbench.model.Layer;
+import com.vividsolutions.jump.workbench.model.UndoableCommand;
+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 com.vividsolutions.jump.workbench.ui.plugin.FeatureInstaller;
+import org.openjump.core.ui.plugin.AbstractUiPlugIn;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.*;
+import java.util.concurrent.ThreadLocalRandom;
+
+public class GenerateUniqueRandomIdPlugIn extends AbstractUiPlugIn {
+
+  private static String LAYER        = 
I18N.get("ui.GenericNames.select-layer");
+  private static String ATTRIBUTE    = 
I18N.get("ui.GenericNames.select-attribute");
+  private static String RANDOM       = 
I18N.get("org.openjump.core.ui.plugin.tools.GenerateRandom");
+
+  private static String NO_CANDIDATE = 
I18N.get("org.openjump.core.ui.plugin.tools.GenerateRandomNumberPlugIn.no-editable-layer-with-numeric-attribute");
+  private static String NON_EMPTY_ATT = 
I18N.get("org.openjump.core.ui.plugin.tools.GenerateRandomStringPlugIn.non-empty-attribute");
+  private static String OVERWRITE_PROMPT = 
I18N.get("org.openjump.core.ui.plugin.tools.GenerateRandomStringPlugIn.overwrite-prompt");
+
+  private Layer layer;
+  private String attribute;
+
+  public void initialize(PlugInContext context) throws Exception {
+
+    FeatureInstaller featureInstaller = new 
FeatureInstaller(context.getWorkbenchContext());
+    featureInstaller.addMainMenuPlugin(
+            this,
+            new String[] {MenuNames.TOOLS, MenuNames.TOOLS_EDIT_ATTRIBUTES, 
RANDOM},
+            getName() + "...", false, null,
+            createEnableCheck(context.getWorkbenchContext()));
+  }
+
+  public static MultiEnableCheck createEnableCheck(final WorkbenchContext 
workbenchContext) {
+    EnableCheckFactory checkFactory = new EnableCheckFactory(workbenchContext);
+    return new MultiEnableCheck()
+            .add(checkFactory.createAtLeastNLayersMustExistCheck(1))
+            .add(checkFactory.createAtLeastNLayersMustBeEditableCheck(1))
+            .add(new EnableCheck() {
+              @Override
+              public String check(JComponent component) {
+                if (AttributeTypeFilter.NUMSTRING_FILTER.filter(
+                        
workbenchContext.getLayerManager().getEditableLayers()).size() == 0) {
+                  return NO_CANDIDATE;
+                }
+                return null;
+              }
+            });
+  }
+
+  public boolean execute(PlugInContext context) throws Exception{
+    this.reportNothingToUndoYet(context);
+
+    MultiInputDialog dialog = new MultiInputDialog(
+            context.getWorkbenchFrame(), getName(), true);
+    setDialogValues(dialog, context);
+    GUIUtil.centreOnWindow(dialog);
+    dialog.setVisible(true);
+    if (! dialog.wasOKPressed()) { return false; }
+    getDialogValues(dialog);
+    boolean empty = checkAttributeEmpty();
+    if (!empty) {
+      JLabel label = new JLabel();
+      label.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+      label.setText("<html><body>" + NON_EMPTY_ATT + "<br/>" + 
OVERWRITE_PROMPT + "</body></html>");
+      OKCancelDialog okCancelDialog = new OKCancelDialog(dialog, 
NON_EMPTY_ATT, true,
+              label,
+              new OKCancelDialog.Validator() {
+                @Override
+                public String validateInput(Component component) {
+                  return null;
+                }
+              });
+      okCancelDialog.setVisible(true);
+      if (!okCancelDialog.wasOKPressed()) {
+        return false;
+      }
+    }
+    computeRandomUniqueValues(context);
+    return true;
+  }
+
+  private boolean checkAttributeEmpty() {
+    for (Feature f : layer.getFeatureCollectionWrapper().getFeatures()) {
+      if (f.getAttribute(attribute) != null) return false;
+    }
+    return true;
+  }
+
+  private void computeRandomUniqueValues(PlugInContext context) {
+    FeatureSchema schema = 
layer.getFeatureCollectionWrapper().getFeatureSchema();
+    AttributeType type = schema.getAttributeType(attribute);
+    final Collection<Feature> oldFeatures = new ArrayList<>();
+    final Collection<Feature> newFeatures = new ArrayList<>();
+    reportNothingToUndoYet(context);
+    int fcSize = layer.getFeatureCollectionWrapper().getFeatures().size();
+    Number[] numbers = new Number[fcSize];
+    for (int i = 1 ; i <= numbers.length ; i++) {
+      numbers[i-1] = i;
+    }
+    numbers = shuffle(numbers);
+    int index = 0;
+    String format = "%0" + ((int)Math.log10(fcSize)+1) + "d";
+    for (Feature f : layer.getFeatureCollectionWrapper().getFeatures()) {
+      oldFeatures.add(f.clone(true, true));
+      f = f.clone(true, true);
+      Number value = numbers[index++];
+      if (type == AttributeType.DOUBLE) {
+        f.setAttribute(attribute, value.doubleValue());
+      } else if (type == AttributeType.INTEGER) {
+        f.setAttribute(attribute, value.intValue());
+      } else if (type == AttributeType.LONG) {
+        f.setAttribute(attribute, value.longValue());
+      } else if (type == AttributeType.STRING) {
+        f.setAttribute(attribute, String.format(format, value));
+      }
+      newFeatures.add(f);
+    }
+    context.getLayerManager().getUndoableEditReceiver().startReceiving();
+    try {
+      UndoableCommand command =
+              new 
UndoableCommand(I18N.get(AutoAssignAttributePlugIn.class.getName())) {
+
+                public void execute() {
+                  Iterator<Feature> newFeatIterator = newFeatures.iterator();
+                  for (Feature f : 
layer.getFeatureCollectionWrapper().getFeatures()) {
+                    f.setAttribute(attribute, 
newFeatIterator.next().getAttribute(attribute));
+                  }
+                  layer.getLayerManager().fireFeaturesAttChanged(newFeatures,
+                          FeatureEventType.ATTRIBUTES_MODIFIED, layer, 
oldFeatures);
+                }
+
+                public void unexecute() {
+                  Iterator<Feature> oldFeatIterator = oldFeatures.iterator();
+                  for (Feature f : 
layer.getFeatureCollectionWrapper().getFeatures()) {
+                    f.setAttribute(attribute, 
oldFeatIterator.next().getAttribute(attribute));
+                  }
+                  layer.getLayerManager().fireFeaturesAttChanged(
+                          layer.getFeatureCollectionWrapper().getFeatures(),
+                          FeatureEventType.ATTRIBUTES_MODIFIED, layer, 
newFeatures);
+                }
+              };
+      command.execute();
+      
layer.getLayerManager().getUndoableEditReceiver().receive(command.toUndoableEdit());
+    } finally {
+      layer.getLayerManager().getUndoableEditReceiver().stopReceiving();
+    }
+  }
+
+  // Implementing Fisher-Yates shuffle as described in
+  // https://stackoverflow.com/questions/1519736/random-shuffling-of-an-array
+  private Number[] shuffle(Number[] array) {
+    // If running on Java 6 or older, use `new Random()` on RHS here
+    Random rnd = ThreadLocalRandom.current();
+    for (int i = array.length - 1; i > 0; i--)
+    {
+      int index = rnd.nextInt(i + 1);
+      // Simple swap
+      Number a = array[index];
+      array[index] = array[i];
+      array[i] = a;
+    }
+    return array;
+  }
+
+  private void setDialogValues(MultiInputDialog dialog, PlugInContext context) 
{
+    layer = context.getLayerableNamePanel().chooseEditableLayer();
+    dialog.addLayerComboBox(LAYER, layer, null,
+            
AttributeTypeFilter.NUMSTRING_FILTER.filter(context.getLayerManager().getEditableLayers()));
+    dialog.addAttributeComboBox(ATTRIBUTE, LAYER, 
AttributeTypeFilter.NUMSTRING_FILTER, null);
+  }
+
+  private void getDialogValues(MultiInputDialog dialog) {
+    layer = dialog.getLayer(LAYER);
+    attribute = dialog.getText(ATTRIBUTE);
+  }
+}


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to