Author: simoneg
Date: Fri Dec 11 15:30:08 2009
New Revision: 889658

URL: http://svn.apache.org/viewvc?rev=889658&view=rev
Log:
LABS-235 : Database now uses bean converter if the entity is not persisted

Modified:
    
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/DatabaseConverter.java
    
labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/LogicallyNamedBean.java

Modified: 
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/DatabaseConverter.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/DatabaseConverter.java?rev=889658&r1=889657&r2=889658&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/DatabaseConverter.java
 (original)
+++ 
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/DatabaseConverter.java
 Fri Dec 11 15:30:08 2009
@@ -17,8 +17,10 @@
 package org.apache.magma.database;
 
 import org.apache.magma.beans.BeanData;
+import org.apache.magma.beans.MagmaBeanSupport;
 import org.apache.magma.conversion.Converter;
 import org.apache.magma.conversion.GenericConverter;
+import org.apache.magma.conversion.string.MagmaBeanConverter;
 import org.apache.magma.basics.MagmaException;
 
 public class DatabaseConverter implements Converter<DatabasePersisted> {
@@ -36,6 +38,7 @@
                DatabasePersisted ret = null;
                Exception retexc = null;
                Database db = new Database();
+               // Try if the string is a valid primary key
                try {
                        DatabaseIdentity id = 
BeanData.getFor(myclass).getDatabaseIdentity();
                        Object key = id.getSubconverter().from(value);
@@ -43,18 +46,25 @@
                } catch (Exception e) {
                        retexc = e;
                }
-               if (ret == null && 
LogicallyNamed.class.isAssignableFrom(myclass)) {
-                       try {
-                               ret = (DatabasePersisted) db.named((Class<? 
extends LogicallyNamed>)myclass, value);
-                       } catch (Exception e) {
-                               if (retexc == null) {
-                                       throw new MagmaException(e, "Error 
retriving {0} using logical name \"{1}\"", myclass, value);
-                               } else {
+               // Try if it is a logical name
+               try {
+                       if (ret == null && 
LogicallyNamed.class.isAssignableFrom(myclass)) {
+                               try {
+                                       ret = (DatabasePersisted) 
db.named((Class<? extends LogicallyNamed>)myclass, value);
+                               } catch (Exception e) {
                                        throw new MagmaException(e, "Error 
retriving {0} using logical name \"{1}\"", myclass, value);
                                }
+                       } else if (retexc != null) {
+                               throw new MagmaException(retexc, "Error 
retrieving {0} using primary key \"{1}\"", myclass, value);
+                       }
+               } catch (MagmaException e) {
+                       // Last try, if it is an unpersisted bean
+                       try {
+                               MagmaBeanConverter mbc = (MagmaBeanConverter) 
new MagmaBeanConverter().build(myclass);
+                               ret = (DatabasePersisted) mbc.from(value);
+                       } catch (Exception mbe) {
+                               throw e;
                        }
-               } else if (retexc != null) {
-                       throw new MagmaException(retexc, "Error retrieving {0} 
using primary key \"{1}\"", myclass, value);
                }
                return ret;
        }
@@ -62,13 +72,20 @@
        @SuppressWarnings("unchecked")
        public String to(DatabasePersisted value) {
                if (value == null) return "";
+               Object primaryKey = value.getPrimaryKey();
+               // TODO assumption that 0 is not a valid primary key, which in 
fact it is, is there a better way?
+               if (primaryKey == null || (primaryKey instanceof Number && 
((Number)primaryKey).intValue() == 0)) {
+                       // Entity not persisted yet, use a magma bean converter
+                       MagmaBeanConverter mbc = (MagmaBeanConverter) new 
MagmaBeanConverter().build(myclass);
+                       return mbc.to(value);
+               }
                String ret = null;
                if (value instanceof LogicallyNamed) {
                        ret = ((LogicallyNamed)value).getLogicalName();
                }
                if (ret == null || ret.length() == 0) {
                        DatabaseIdentity id = 
BeanData.getFor(myclass).getDatabaseIdentity();
-                       ret = id.getSubconverter().to(value.getPrimaryKey());
+                       ret = id.getSubconverter().to(primaryKey);
                }
                return ret;
        }

Modified: 
labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/LogicallyNamedBean.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/LogicallyNamedBean.java?rev=889658&r1=889657&r2=889658&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/LogicallyNamedBean.java
 (original)
+++ 
labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/LogicallyNamedBean.java
 Fri Dec 11 15:30:08 2009
@@ -11,7 +11,6 @@
 @Entity
 public class LogicallyNamedBean implements LogicallyNamed {
        private String name;
-       private long id;
        
        public String getName() {
                return name;
@@ -19,13 +18,6 @@
        public void setName(String name) {
                this.name = name;
        }
-       public long getId() {
-               return id;
-       }
-       public void setId(long id) {
-               this.id = id;
-       }
-       
        public String computeLogicalName() {
                return this.getName();
        }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to