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); + } } }