You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2010/02/18 20:11:37 UTC

svn commit: r911530 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/ openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/meta/strats/ openjpa-kernel/src/main/java/org/apache/openjpa/util/ openjpa-lib/src/main/jav...

Author: ppoddar
Date: Thu Feb 18 19:11:36 2010
New Revision: 911530

URL: http://svn.apache.org/viewvc?rev=911530&view=rev
Log:
Throw informative error messages on bad enum field

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EnumValueHandler.java
    openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/meta/strats/localizer.properties
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Exceptions.java
    openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Localizer.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EnumValueHandler.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EnumValueHandler.java?rev=911530&r1=911529&r2=911530&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EnumValueHandler.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EnumValueHandler.java Thu Feb 18 19:11:36 2010
@@ -26,7 +26,9 @@
 import org.apache.openjpa.jdbc.schema.Column;
 import org.apache.openjpa.jdbc.schema.ColumnIO;
 import org.apache.openjpa.jdbc.sql.DBDictionary;
+import org.apache.openjpa.lib.util.Localizer;
 import org.apache.openjpa.meta.JavaTypes;
+import org.apache.openjpa.util.Exceptions;
 import org.apache.openjpa.util.MetaDataException;
 
 /**
@@ -34,11 +36,13 @@
  *
  * @nojavadoc
  */
+@SuppressWarnings("serial")
 public class EnumValueHandler
     extends AbstractValueHandler {
 
-    private Enum[] _vals = null;
+    private Enum<?>[] _vals = null;
     private boolean _ordinal = false;
+    private static final Localizer _loc = Localizer.forPackage(EnumValueHandler.class);
 
     /**
      * Whether to store the enum value as its ordinal.
@@ -72,7 +76,9 @@
             Method m = vm.getType().getMethod("values", (Class[]) null);
             _vals = (Enum[]) m.invoke(null, (Object[]) null);
         } catch (Exception e) {
-            throw new MetaDataException().setCause(e);
+            
+            throw new MetaDataException(_loc.get("not-enum-field", 
+                    vm.getFieldMapping().getFullName(true), Exceptions.toClassName(vm.getType()))).setCause(e);
         }
 
         Column col = new Column();
@@ -96,8 +102,7 @@
         return true;
     }
 
-    public Object toDataStoreValue(ValueMapping vm, Object val,
-        JDBCStore store) {
+    public Object toDataStoreValue(ValueMapping vm, Object val, JDBCStore store) {
         if (val == null)
             return null;
         if (_ordinal)

Modified: openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/meta/strats/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/meta/strats/localizer.properties?rev=911530&r1=911529&r2=911530&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/meta/strats/localizer.properties (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/meta/strats/localizer.properties Thu Feb 18 19:11:36 2010
@@ -137,3 +137,4 @@
 multi-column-version-unsupported:You have specified more than one column for \
 	version data, but the "{1}" version strategy does not support multi-column \
 	versioning.
+not-enum-field: Field "{0}" is expected to be a enum but actually is of type "{1}".
\ No newline at end of file

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Exceptions.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Exceptions.java?rev=911530&r1=911529&r2=911530&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Exceptions.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Exceptions.java Thu Feb 18 19:11:36 2010
@@ -265,4 +265,11 @@
         else
             return pc.pcFetchObjectId();
 	}
+    
+    public static String toClassName(Class<?> cls) {
+        if (cls == null) return "";
+        if (cls.isArray())
+            return toClassName(cls.getComponentType())+"[]";
+        return cls.getName();
+    }
 }

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Localizer.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Localizer.java?rev=911530&r1=911529&r2=911530&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Localizer.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Localizer.java Thu Feb 18 19:11:36 2010
@@ -48,11 +48,12 @@
 public class Localizer {
 
     // static cache of package+loc name to localizer mappings
-    private static final Map _localizers = new ConcurrentHashMap();
+    private static final Map<String,Localizer> _localizers = new ConcurrentHashMap<String,Localizer>();
 
     // list of resource providers to delegate to when locating resources
-    private static final Collection _providers = new CopyOnWriteArraySet
-        (Arrays.asList(new Object[]{
+    private static final Collection<ResourceBundleProvider> _providers = 
+        new CopyOnWriteArraySet<ResourceBundleProvider>
+        (Arrays.asList(new ResourceBundleProvider[]{
             new SimpleResourceBundleProvider(),
             new StreamResourceBundleProvider(),
             new ZipResourceBundleProvider(), }));
@@ -63,7 +64,7 @@
      *
      * @see #forPackage(Class,Locale)
      */
-    public static Localizer forPackage(Class cls) {
+    public static Localizer forPackage(Class<?> cls) {
         return forPackage(cls, null);
     }
 
@@ -77,7 +78,7 @@
      * @param locale the locale to which strings should be localized; if
      * null, the system default will be assumed
      */
-    public static Localizer forPackage(Class cls, Locale locale) {
+    public static Localizer forPackage(Class<?> cls, Locale locale) {
         if (locale == null)
             locale = Locale.getDefault();
 
@@ -138,10 +139,9 @@
         // no locking; it's ok to create multiple bundles
         if (_bundle == null) {
             // find resource bundle
-            for (Iterator itr = _providers.iterator();
+            for (Iterator<ResourceBundleProvider> itr = _providers.iterator();
                 itr.hasNext() && _bundle == null; ) {
-                _bundle = ((ResourceBundleProvider) itr.next())
-                    .findResource(_file, _locale, _loader);
+                _bundle = itr.next().findResource(_file, _locale, _loader);
             }
         }
         return _bundle;