Author: aadamchik
Date: Mon Mar 21 11:59:55 2011
New Revision: 1083748

URL: http://svn.apache.org/viewvc?rev=1083748&view=rev
Log:
CAY-1526 Preferences: java.lang.IllegalArgumentException: Key too long

a patch by Dzmitry Kazimirchyk

Modified:
    cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
    
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
    
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/ClasspathPreferences.java

Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=1083748&r1=1083747&r2=1083748&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Mon Mar 21 
11:59:55 2011
@@ -19,6 +19,7 @@ CAY-1549 Migrate BatchQueryBuilderFactor
 
 Bug Fixes Since 3.1M2:
 
+CAY-1526 Preferences: java.lang.IllegalArgumentException: Key too long
 CAY-1546 cayenne-lifecycle: UuidBatchFault concurrency issues
 
 ----------------------------------

Modified: 
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java?rev=1083748&r1=1083747&r2=1083748&view=diff
==============================================================================
--- 
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
 (original)
+++ 
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
 Mon Mar 21 11:59:55 2011
@@ -261,16 +261,20 @@ public class Application {
 
         Collection details = new ArrayList<String>();
         String[] keys = null;
+        ArrayList<String> values = new ArrayList<String>();
 
         try {
             keys = classLoaderPreference.keys();
+            for (String cpKey : keys) {
+               values.add(classLoaderPreference.get(cpKey, ""));
+            }
         }
         catch (BackingStoreException e) {
             // do nothing
         }
 
-        for (int i = 0; i < keys.length; i++) {
-            details.add(keys[i]);
+        for (int i = 0; i < values.size(); i++) {
+            details.add(values.get(i));
         }
 
         if (details.size() > 0) {

Modified: 
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/ClasspathPreferences.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/ClasspathPreferences.java?rev=1083748&r1=1083747&r2=1083748&view=diff
==============================================================================
--- 
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/ClasspathPreferences.java
 (original)
+++ 
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/ClasspathPreferences.java
 Mon Mar 21 11:59:55 2011
@@ -23,6 +23,7 @@ import java.awt.Component;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.io.File;
+import java.util.Arrays;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -47,6 +48,8 @@ public class ClasspathPreferences extend
     protected List<String> classPathEntries;
     protected ClasspathTableModel tableModel;
     protected CayennePreferenceEditor editor;
+    protected List<String> classPathKeys;
+    private int counter;
 
     public ClasspathPreferences(PreferenceDialog parentController) {
         super(parentController);
@@ -58,16 +61,35 @@ public class ClasspathPreferences extend
             this.editor = (CayennePreferenceEditor) editor;
         }
 
-        String[] arr = null;
+        ArrayList<String> cpEntries = new ArrayList<String>();
+        ArrayList<String> cpEntryKeys = new ArrayList<String>();
+        this.counter = 0;
         try {
-            arr = getClassLoader().keys();
+               String[] cpKeys = getClassLoader().keys();
+               for (String cpKey : cpKeys) {
+                       
+                       try {
+                               int c = Integer.parseInt(cpKey);
+                               if (c > this.counter) {
+                                       this.counter = c;
+                               }
+                               String tempValue = getClassLoader().get(cpKey, 
"");
+                       if (!"".equals(tempValue)) {
+                               cpEntries.add(tempValue);
+                               cpEntryKeys.add(cpKey);
+                       }
+                       } catch (NumberFormatException e) {
+                               
+                               //remove wrong entry (key must be number)
+                               addRemovedPreferences(cpKey);
+                       }
+                       
+               }
         }
         catch (BackingStoreException e) {
         }
-        this.classPathEntries = new ArrayList<String>();
-        for (int i = 0; i < arr.length; i++) {
-            classPathEntries.add(arr[i]);
-        }
+        this.classPathEntries = cpEntries;
+        this.classPathKeys = cpEntryKeys;
 
         this.tableModel = new ClasspathTableModel();
 
@@ -126,9 +148,11 @@ public class ClasspathPreferences extend
         if (selected < 0) {
             return;
         }
-
-        addRemovedPreferences((String) classPathEntries.get(selected));
+  
+        addRemovedPreferences(classPathKeys.get(selected));
         classPathEntries.remove(selected);
+        classPathKeys.remove(selected);
+        
         tableModel.fireTableRowsDeleted(selected, selected);
     }
 
@@ -153,14 +177,20 @@ public class ClasspathPreferences extend
         }
 
         if (selected != null) {
-            // store last dir in preferences
-            getLastDirectory().updateFromChooser(chooser);
-
-            int len = classPathEntries.size();
-            String key = selected.getAbsolutePath();
-            addChangedPreferences(key, "");
-            classPathEntries.add(key);
-            tableModel.fireTableRowsInserted(len, len);
+               if (!classPathEntries.contains(selected.getAbsolutePath())) {
+                       // store last dir in preferences
+                       getLastDirectory().updateFromChooser(chooser);
+
+                       int len = classPathEntries.size();
+                       int key = ++counter;
+                       
+                       String value = selected.getAbsolutePath();
+                       addChangedPreferences(Integer.toString(key), value);
+                       classPathEntries.add(value);
+                       classPathKeys.add(Integer.toString(key));
+                       
+                       tableModel.fireTableRowsInserted(len, len);
+               }
         }
     }
 


Reply via email to